DO NOT MERGE - Skip PPRL.190305.001 into master

Bug: 127812889
Change-Id: I104fececfee343f5fc1a2e33a59cf82bb6407ef9
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..d38d0cf
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,42 @@
+# Binary data types
+*.aif binary
+*.aifc binary
+*.aiff binary
+*.au binary
+*.bmp binary
+*.db binary
+*.exe binary
+*.icns binary
+*.gif binary
+*.ico binary
+*.jpg binary
+*.pck binary
+*.png binary
+*.tar binary
+*.wav binary
+*.whl binary
+*.zip binary
+
+# Specific binary files
+Lib/test/sndhdrdata/sndhdr.* binary
+
+# Text files that should not be subject to eol conversion
+Lib/test/cjkencodings/* -text
+Lib/test/decimaltestdata/*.decTest -text
+Lib/email/test/data/*.txt -text
+Lib/test/xmltestdata/* -text
+
+# Special files in third party code
+Modules/zlib/zlib.map -text
+
+# CRLF files
+*.bat text eol=crlf
+*.ps1 text eol=crlf
+*.sln text eol=crlf
+*.vcxproj* text eol=crlf
+*.vcproj text eol=crlf
+*.vsprops text eol=crlf
+*.props text eol=crlf
+*.proj text eol=crlf
+PCbuild/readme.txt text eol=crlf
+PC/readme.txt text eol=crlf
diff --git a/.github/appveyor.yml b/.github/appveyor.yml
new file mode 100644
index 0000000..3830666
--- /dev/null
+++ b/.github/appveyor.yml
@@ -0,0 +1,36 @@
+version: 2.7build{build}
+clone_depth: 5
+branches:
+  only:
+    - master
+    - /\d\.\d/
+    - buildbot-custom
+cache:
+  - externals -> PCbuild\*
+before_build:
+  - ps: |+
+      if ($env:APPVEYOR_RE_BUILD) {
+        echo 'Doing full build due to re-build request.'
+      } elseif (!$env:APPVEYOR_PULL_REQUEST_HEAD_COMMIT) {
+        echo 'Not a PR, doing full build.'
+      } else {
+        git fetch -q origin +refs/heads/$env:APPVEYOR_REPO_BRANCH
+        $mergebase = git merge-base HEAD FETCH_HEAD
+        $changes = git diff --name-only HEAD $mergebase | grep -vE '(\.rst$)|(^Doc)|(^Misc)'
+        If (!$changes) {
+          echo 'Only docs were updated, stopping build process.'
+          Exit-AppveyorBuild
+        } else {
+          echo 'Doing full build due to non-doc changes in these files:'
+          echo $changes
+        }
+      }
+
+
+build_script:
+  - cmd: PCbuild\build.bat -e
+  - cmd: PCbuild\python.exe -m test.pythoninfo
+test_script:
+  - cmd: PCbuild\rt.bat -q -uall -u-cpu -u-largefile -rwW --slowest -j2
+environment:
+  HOST_PYTHON: C:\Python36\python.exe
diff --git a/.gitignore b/.gitignore
index a821f10..b12f901 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,7 @@
+# Two-trick pony for OSX and other case insensitive file systems:
+# Ignore ./python binary on Unix but still look into ./Python/ directory.
+/python
+!/Python/
 *.cover
 *.o
 *.orig
@@ -5,6 +9,7 @@
 *.pyd
 *.pyo
 *.rej
+*.swp
 *~
 *.gc??
 *.profclang?
@@ -16,12 +21,31 @@
 Doc/tools/pygments/
 Doc/tools/sphinx/
 Lib/lib2to3/*.pickle
+Makefile
 Makefile.pre
 Misc/python.pc
 Modules/Setup
 Modules/Setup.config
 Modules/Setup.local
 Modules/ld_so_aix
+PC/python_nt*.h
+PC/pythonnt_rc*.h
+PC/*/*.exe
+PC/*/*.exp
+PC/*/*.lib
+PC/*/*.bsc
+PC/*/*.dll
+PC/*/*.pdb
+PC/*/*.user
+PC/*/*.ncb
+PC/*/*.suo
+PC/*/Win32-temp-*
+PC/*/x64-temp-*
+PC/*/amd64
+PCbuild/*.ilk
+PCbuild/*.user
+PCbuild/*.suo
+PCbuild/*.*sdf
 PCbuild/*.bsc
 PCbuild/*.dll
 PCbuild/*.exe
@@ -31,18 +55,32 @@
 PCbuild/*.o
 PCbuild/*.pdb
 PCbuild/Win32-temp-*
+PCbuild/*.VC.db
+PCbuild/*.VC.opendb
+PCbuild/amd64/
+PCbuild/obj/
+PCbuild/win32/
 Parser/pgen
 Parser/pgen.stamp
 autom4te.cache
 build/
+config.cache
 config.log
 config.status
 libpython*.a
 libpython*.so*
+libpython*.dylib
+libpython*.dll
+platform
+pybuilddir.txt
 python$
-python-gdb.py
+python.bat
+python.exe
+python*-gdb.py
 tags
+TAGS
 .coverage
 coverage/
 externals/
 htmlcov/
+gmon.out
diff --git a/.hgeol b/.hgeol
deleted file mode 100644
index 08be828..0000000
--- a/.hgeol
+++ /dev/null
@@ -1,52 +0,0 @@
-[patterns]
-
-# Non human-editable files are binary
-
-**.dsp  = BIN
-**.dsw  = BIN
-**.mk   = BIN
-**.sln  = BIN
-**.vcproj  = BIN
-**.vsprops = BIN
-
-**.aif  = BIN
-**.aifc = BIN
-**.aiff = BIN
-**.au   = BIN
-**.bmp  = BIN
-**.blob = BIN
-**.db   = BIN
-**.exe  = BIN
-**.icns = BIN
-**.gif  = BIN
-**.ico  = BIN
-**.info = BIN
-**.jpg  = BIN
-**.pck  = BIN
-**.png  = BIN
-**.psd  = BIN
-**.tar  = BIN
-**.wav  = BIN
-**.whl  = BIN
-**.xar  = BIN
-**.zip  = BIN
-
-Lib/email/test/data/msg_26.txt = BIN
-Lib/test/cjkencodings/* = BIN
-Lib/test/decimaltestdata/*.decTest = BIN
-Lib/test/sndhdrdata/sndhdr.* = BIN
-
-# Windows batch files work best with CRLF, there can be subtle problems with LF
-**.bat = CRLF
-
-# The Windows readme is likely to be read in Notepad, so make it readable
-PCbuild/readme.txt = CRLF
-PC/VS9.0/readme.txt = CRLF
-
-# All other files (which presumably are human-editable) are "native".
-# This must be the last rule!
-
-** = native
-
-[repository]
-native = LF
diff --git a/.hgignore b/.hgignore
deleted file mode 100644
index 16662a0..0000000
--- a/.hgignore
+++ /dev/null
@@ -1,92 +0,0 @@
-.gdb_history
-.purify
-.svn/
-^.idea/
-.DS_Store
-Makefile$
-Makefile.pre$
-TAGS$
-autom4te.cache$
-build/
-buildno$
-config.cache
-config.log
-config.status
-config.status.lineno
-db_home
-platform$
-pyconfig.h$
-python$
-python.bat$
-python.exe$
-reflog.txt$
-tags$
-Lib/plat-mac/errors.rsrc.df.rsrc
-Misc/python.pc
-Modules/Setup$
-Modules/Setup.config
-Modules/Setup.local
-Modules/config.c
-Modules/ld_so_aix$
-Parser/pgen$
-Parser/pgen.stamp$
-^lcov-report/
-^core
-^python-gdb.py
-^pybuilddir.txt
-
-syntax: glob
-python.exe-gdb.py
-libpython*.a
-libpython*.so*
-*.swp
-*.o
-*.pyc
-*.pyo
-*.pyd
-*.cover
-*~
-*.gc??
-*.profclang?
-*.profraw
-*.dyn
-Lib/distutils/command/*.pdb
-Lib/lib2to3/*.pickle
-Lib/test/data/*
-Misc/*.wpu
-PC/python_nt*.h
-PC/pythonnt_rc*.h
-PC/*/*.exe
-PC/*/*.exp
-PC/*/*.lib
-PC/*/*.bsc
-PC/*/*.dll
-PC/*/*.pdb
-PC/*/*.user
-PC/*/*.ncb
-PC/*/*.suo
-PC/*/Win32-temp-*
-PC/*/x64-temp-*
-PC/*/amd64
-PCbuild/*.user
-PCbuild/*.suo
-PCbuild/*.*sdf
-PCbuild/*-pgi
-PCbuild/*-pgo
-PCbuild/.vs
-PCbuild/*.dll
-PCbuild/*.exp
-PCbuild/*.exe
-PCbuild/*.ilk
-PCbuild/*.lib
-PCbuild/*.pdb
-PCbuild/amd64
-PCbuild/obj
-*.gcda
-*.gcno
-*.gcov
-coverage.info
-.coverage
-coverage/
-externals/
-htmlcov/
diff --git a/.hgtags b/.hgtags
deleted file mode 100644
index 0fb642e..0000000
--- a/.hgtags
+++ /dev/null
@@ -1,177 +0,0 @@
-64cc5439e10a6fdf984effaf0141e94fa4cc1004 v0.9.8
-78a7ed6953025e7ecdde9585099b01a6ae40b76a v0.9.9
-b15b8cc9b8d10e0352a0b8b7e8d51fa309db6df3 v1.0.1
-0326b5d61445ee3a8d3de28119f9652cb72d2e3f v1.0.2
-832615ec07646e310c85316b8ba6bc9b17ad3547 v1.1
-9895475d18c7b5f32adaf78f71886ae041e4d10c v1.1.1
-16eb4c51ee97169046340998e850a63c65225b0a v1.2b1
-b45c688756d04fb84d4a0d518fc3d7e3cb25fa8d v1.2b2
-9e82daf7605bad7976a9abc997cb5e0abe434078 v1.2b3
-065e31cf5862e27521cf5725b003aed211f091b2 v1.2b4
-e72257e655454d569468da8b1189e0ec336f3536 v1.2
-e63d83f8275853aaaa3d1972cb86564505e65583 v1.3b1
-7d743c865a9aa6bde8b603e32e0542031bba3c33 v1.3
-4fc85c82cc222554ae6b9c0b87776ed5f2b70c6e v1.4b1
-129f1299d4e97e884bbbbdd00baf101d178973e6 v1.4b2
-44a82ac654a4175569deed8e8a94b0cc8edee08d v1.4b3
-db49494c93dc73de06d5721c74eab533a947a92c v1.4
-062aed8a4ce2c91c81b80e29f02faff1cf5a761b v1.5a1
-c9498ac988372575cf7028b86395b900c9b0a840 v1.5a2
-dc5c968ec992aab3d40a7189df0c443d1c7a1a68 v1.5a3
-746654a0af680c7d9b814b210a026eb91bec9533 v1.5a4
-8ff58b5730f06be08fbbdc2bf592226f7a736201 v1.5b1
-eb78658d819fb0af09a8e6f9bedcb670805ed5f6 v1.5b2
-84461011a1a0ab402e352f06748f29fb5b5559e5 v1.5
-44aba4d26b01fbae0403efe654f9fd0347606732 v1.5.1
-fed63ccbe6dc3ac663bfe97a2f7006b1b28568f9 v1.5.2a1
-21d71f2e27248a0f4e393d0fc321ecf9b89321d2 v1.5.2a2
-f08c7a2a56f80741f5f192fd0ebe0b0967a203cf v1.5.2b1
-8fe7ec4b4fc1518fcac89e6bf674fbbce16150a9 v1.5.2b2
-39fb0dcc83dc375c1565ba65dbce0ed59b1359c9 v1.5.2c1
-61c91c7f101bab3149adfcd5646ae40e048de712 v1.5.2
-605eb9326ffe1fd1e43f40e2338d6652ab449fdf v1.6a1
-011bee8fd9f7f4da457ec71596484fb0882c0614 v1.6a2
-35c4fc1414a59888614b9be784a25f233ba67984 v2.0b1
-55bba197d4870cdae62aeca00e20240a756b84f8 v2.0b2
-e276329cce036a5f9e9d3451256dca5984e543dc v2.0c1
-2fa4e35083e02342ca014bf5bfba46aecb816c31 v2.0
-83459cc191c1c9c8cc6b08ada99c02f0af6ad54f v2.0.1c1
-73de94a722d206a45c0b49d3011c629ead4d62b1 v2.0.1
-b60831eeab5a06dd3c5e8297a99e39297aa8794b v2.1a1
-b382f1f07ec6b2c95551658b30c6139eeb32077a v2.1a2
-d0c830db5e68edd4aaa3401216e610c9ff145826 v2.1b1
-b59a536ae1ef3774fd85c17f623e8926b7b6c095 v2.1b2
-d611276e9ad53b5d32d1e8065e1d811c32f7d96f v2.1c1
-ff065e674af6c9ab895bd9eff7d9e9039a376c7d v2.1c2
-020e95d8180d7943fe54701e1db0a7d7d87e2b1e v2.1
-22bed2dd1b286564dea4d9a67d4ed80dc3225193 v2.1.1c1
-572533a3038d1832c8a200fb8718112dd83758e9 v2.1.1
-f76a425b14e4ee8ade5e9239598538534b3a90a4 v2.1.2c1
-cf31b10e45b48615094cae90e3c5bd072587d8e6 v2.1.2
-7d1504c80fa072b4ba86edda13a13b0a05ae8eab v2.1.3
-08796a137f1ada2462f7a3177306df5f67a767e1 v2.2a3
-765434e7aa019c1bb82f9813b8025830867cbdc0 v2.2.1c1
-11c952c7d4be6638040764910be80bd9c3c17de6 v2.2.1c2
-4045e6e92fafabad42f6c9989b67076fbad452ca v2.2
-394790316aa380d22e4d670bc69a639e725f0300 v2.2.1
-0128313c2855d71753f00fccc60bb39ed92a0c54 v2.2.2b1
-61d531533a86224a1c26917c18013d91f592fbfb v2.2.2
-ac77b91342534d09b1e432e1dc3b70dbbec3a919 v2.2.3c1
-f4f134ad46abd0bc973d3f6094ea56e62ac5c492 v2.2.3
-d054c29647f90bccb8345bd779bca1eecf2dd7f2 v2.3c1
-fce5c9e9abc722394cb2e909b7e2a39080d4448e v2.3c2
-fa65f6527fe134aa97e03e1b2af365d443b67dc7 v2.3.1
-7d7362a71253bff4fc1b0c825c14569778db8c36 v2.3.2c1
-be2533fb10a587c8da89b18c5f381f478d720593 v2.3.2
-d21d4ba2f973467d30794a3d2ac493658180e503 v2.3.3c1
-a8f1286f217129cdb53e320ee125d2c2c80e1377 v2.3.3
-3639861d02646af1da3123c25560c4db3d7edbce v2.3.4c1
-a74f9081c6970878cabe151f969617587915400c v2.3.4
-2639b10daa985b20b3cabec45169d523cac29d68 v2.3.5c1
-d228509424172f977edad4f7860a9c747cd655c8 v2.3.5
-b21427ff26475f9c7f4a701da324e951c2b162fe v2.3.6c1
-3b6fb5439c1061a941401245076c315beafcc787 v2.3.6
-893c7bd4a92bd889a85e691f49188c37b0a72357 v2.3.7c1
-2022943ad450c41d64708fb5caca2d2672b5b8f8 v2.3.7
-92ca658fd420095b6284c9ce6e9082a80285ec9c v2.4a1
-055fc6955f3c6522bfeb7ed4c671c97d5baaaac2 v2.4a2
-186b72550e53533ef6175f6411f932c1298193d7 v2.4a3
-53cff04283855adf88ed0c0fd3698827ca843637 v2.4b1
-7e387a9dcc79954a77695adef8b593da35be1214 v2.4b2
-ff80d8bbef6e13426c8a85d7f9d837b8f8f89834 v2.4c1
-f31e18d313c7a4fc66914b2d27e130a0f72c0b69 v2.4
-1195f9ba3439097cc5b5a367e3ae1b43f157b264 v2.4.1c1
-333cf303543b680ec5e3fdf7e8c9661f9488a50e v2.4.1c2
-f9054d235870029afa33ef945bca7ece99616c10 v2.4.1
-d02d387554e200befceec999b788f4593b434b49 v2.4.2c1
-8d37276fdf077d6d23d963d3f7f95381d00f1926 v2.4.2
-7c5be7c0fdfdbbc0ac1d91c07038bc81412da412 v2.4.3c1
-8cca2492626ce408cd567110811c0692fd1d37dd v2.4.3
-baaeea722b1c97ca03179e5a02a4717e7017ba2a v2.4.4c1
-592ac93532efdfa9a40f47b96b1c1231d2eae0e5 v2.4.4
-1f7d628c70a9aefe762c2c32210876faf8d64c78 v2.4.5c1
-d8df4aa06261de5e4c0aa051e448697d4791e437 v2.4.5
-a6c3c715e2b70740c4b6b4f7dc6f47b16a7e5905 v2.4.6c1
-f3f1f1462c82536bb23796e70c85522144ee24db v2.4.6
-67192da3e69c985bb1272da932d7de6073033fad v2.5a0
-896f9fead17e720ec4a21de3ac214518da84845f v2.5a1
-26d0770f2b7ee289a39a3b55dcec1c1ee65849c5 v2.5a2
-d49b198f545cd82fbf735a22979c332b8a97eecb v2.5b1
-03b6fe57cd6df5bb34ca19f4b760b943186cc806 v2.5b2
-c0abb18299b442e1160d2f958bce18f66850caa9 v2.5b3
-2dc64d570e8d7a4498ab850108c85709c276df93 v2.5c1
-cc3cb3a8237ea545db917d84c49d8a0a5e175cc1 v2.5c2
-c10a71cf16e471425e6d7564e3f7a648f14b702e v2.5
-4777c4007b5b194423953d41b1e5e6adaaba6c5d v2.5.1c1
-490d8c09abcb814950be7bb7a25c3ff2047c7eb5 v2.5.1
-0a8aae575cdddbf3d133fcb4eed91080e3fe41f3 v2.5.2c1
-1d508bbbdb49a2b11629ee186a63928291b08694 v2.5.2
-9530d334d2624219e7ee1aecaf33532e910266bc v2.5.3c1
-3cc056d21c2f4435a534d23345bad9c0a9d9b3cb v2.5.3
-a0a6d9909312ad9c1d844af66e9c91931b93852a v2.5.4
-657f16582943739b906f66f7efad4014492c8b1c v2.5.5c1
-1dc91e9dd5c13a4bc2d3bb7d4b5896ab264f2325 v2.5.5c2
-7098a46f0b75e5aacfaf81d65d72e3613b023532 v2.5.5
-a87c7b96672b69dffef64c59b56fba5bb2059b99 v2.5.6c1
-de34c7b097e8d66b1140c211dbd61d48b31ba483 v2.5.6
-2d0bd095c420b0711000d9be66848f6cfd972b3b v2.6a1
-eec144917a189be11ed5efa35c6604d03bc62bcc v2.6a2
-48e9fb0a721799877f26edaef01ac6e6029b6812 v2.6a3
-2f2f32af8c4ee8f6598f632dc83701a20726d10a v2.6b1
-81ec8263bd6e25c9a8855cd0ce9ae881732972be v2.6b2
-c62862d73f9ec64d655494cf1f61443446f2dea2 v2.6b3
-1ebb2a8cc06c94471d72b5476c2050c4d115a1aa v2.6rc1
-525792097c6308a78a76b7b5f56bbd8a24c26acf v2.6rc2
-95fff5a6a276520b2e7e0f75fe303f49376567a5 v2.6
-cabf303e787aa5cd7209b40e3b2caba3ee75c5a5 v2.6.1
-01f1ae83631ae82bd8598a11c17e3f9b3f56c38a v2.6.2c1
-4feba09a826ba99e5b482707b3d9643eba34156f v2.6.2
-1873542c00000c4b7ce2c7992d1f2d87f866232a v2.6.3rc1
-00c3396d7a8c4ab4c2c841d61013a073ae921d0f v2.6.3
-25aa90a6865b63133962dd64626c53c7b6fd47d5 v2.6.4rc1
-ea1fdafbe4fe2458ac17287e0d6c709ed00fce5c v2.6.4rc2
-8803c3d61da275c71cabe9e9d0274dac9902e2c0 v2.6.4
-c9f68e42ab796a3bab4f8cf3cc69ce10503cb990 v2.6.5rc1
-fa4630916699046357a5ac16884f3fc47bd0eaa6 v2.6.5rc2
-99af4b44e7e490390817a597a542546d749e698e v2.6.5
-c1dc9e7986a2a8e1070ec7bee748520febef382e v2.6.6rc1
-e189dc8fd66154ef46d9cd22584d56669b544ca3 v2.6.6rc2
-9f8771e0905277f8b3c2799113a062fda4164995 v2.6.6
-caab08cd2b3eb5a6f78479b2513b65d36c754f41 v2.6.8rc1
-1d1b7b9fad48bd0dc60dc8a06cca4459ef273127 v2.6.8rc2
-c9910fd022fc842e5578e1bf5a30ba55a37239fc v2.6.8
-b4107eb00b4271fb73a9e1b736d4f23460950778 v2.7a1
-adc85ebc7271cc22e24e816782bb2b8d7fa3a6b3 v2.7a2
-4180557b7a9bb9dd5341a18af199f843f199e46e v2.7a3
-d2e1027edde84a02853fcf9790f311f10f46cf0a v2.7a4
-61550a1302b07a731436a84b2d86eb2bab3b2fb0 v2.7b1
-6bb9891d4275bd42a69b3d903d13b687543c915d v2.7b2
-381c5eeb511038d091d8e0808c4b85087ed2f684 v2.7rc1
-13e5b0b2071a2a42067fb03facc931409fa6ba50 v2.7rc2
-2145593d108de62ebf770987a4ac2a57d268c9d1 v2.7
-63d9f00fea0730c1c437a50f64a42b7792bdcbfb v2.7.1rc1
-5395f96588d4f0199d329cb79eb109648dc4ef5e v2.7.1
-f48756685406e8d0fa9d23d841fceb07e36a5656 v2.7.2rc1
-8527427914a29d895bcb30be76a465143993a793 v2.7.2
-b2c6aff96e1251a4f03cf866e7e75fb8232869f2 v2.7.3rc1
-d46c1973d3c407ecaa6a8ee16d3fad3ef506b51f v2.7.3rc2
-70274d53c1ddc60c5f9a2b8a422a49884021447c v2.7.3
-a8d18780bc2bccf16bf580587e1e3c934a98f6a7 v2.7.4rc1
-026ee0057e2d3305f90a9da41daf7c3f9eb1e814 v2.7.4
-ab05e7dd27889b93f20d97bae86170aabfe45ace v2.7.5
-a0025037f11a73df5a7dd03e5a4027adad4cb94e v2.6.9rc1
-fcb3ec2842f99454322492dd0ec2cf01322df093 v2.6.9
-4913d0e9be30666218cc4d713937e81c0e7f346a v2.7.6rc1
-3a1db0d2747ec2d47a8693ed5650f3567161a200 v2.7.6
-e32e3a9f390212463c22509d0f9aead8051cee63 v2.7.7rc1
-f89216059edf77660ef1eb2a98e88352551da1d6 v2.7.7
-ee879c0ffa11caaa34bf01537e1c4411dd948552 v2.7.8
-40eada278702349a2b2f334aa9d91fa7090ea1e3 v2.7.9rc1
-648dcafa7e5f40da31079bc7a7f0c445f1ea4ab9 v2.7.9
-80ccce248ba2657ed5da3ccf7999f35b78827f5e v2.7.10rc1
-15c95b7d81dcf821daade360741e00714667653f v2.7.10
-82dd9545bd93d6e7a9821e1dabc7b25508d0fa3a v2.7.11rc1
-6d1b6a68f775fada9877d295e62958bafa1ca11e v2.7.11
-13912cd1e7e8fc6986f42822f5439ae1f2bc0d7d v2.7.12rc1
-d33e0cf91556723fb8cebefdad1f3bce43b2244d v2.7.12
-4d6fd49eeb14bb47f700325eb90d7989fc9e4020 v2.7.13rc1
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..7e1c2ef
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,111 @@
+language: c
+dist: trusty
+sudo: false
+group: beta
+
+# To cache doc-building dependencies and C compiler output.
+cache:
+  - pip
+  - ccache
+
+env:
+  global:
+    # Use -O3 because we don't use debugger on Travis-CI
+    - CFLAGS="-O3"
+
+branches:
+  only:
+    - master
+    - /^\d\.\d$/
+    - buildbot-custom
+
+matrix:
+  fast_finish: true
+  allow_failures:
+    - env: OPTIONAL=true
+  include:
+    - os: linux
+      language: c
+      compiler: clang
+      # gcc also works, but to keep the # of concurrent builds down, we use one C
+      # compiler here and the other to run the coverage build. Clang is preferred
+      # in this instance for its better error messages.
+      env: TESTING=cpython
+      addons:
+        apt:
+          packages:
+            - xvfb
+    - os: linux
+      language: python
+      python: 2.7
+      env: TESTING=docs
+      before_script:
+        - cd Doc
+        # Sphinx is pinned so that new versions that introduce new warnings won't suddenly cause build failures.
+        # (Updating the version is fine as long as no warnings are raised by doing so.)
+        - python -m pip install sphinx~=1.6.1
+      script:
+        - make check suspicious html SPHINXOPTS="-q -W -j4"
+
+
+before_install:
+  - set -e
+  - |
+      # Check short-circuit conditions
+      if [ "${TESTING}" != "docs" ]
+      then
+        if [ "$TRAVIS_PULL_REQUEST" = "false" ]
+        then
+          echo "Not a PR, doing full build."
+        else
+          # Pull requests are slightly complicated because $TRAVIS_COMMIT_RANGE
+          # may include more changes than desired if the history is convoluted.
+          # Instead, explicitly fetch the base branch and compare against the
+          # merge-base commit.
+          git fetch -q origin +refs/heads/$TRAVIS_BRANCH
+          changes=$(git diff --name-only HEAD $(git merge-base HEAD FETCH_HEAD))
+          echo "Files changed:"
+          echo "$changes"
+          if ! echo "$changes" | grep -qvE '(\.rst$)|(^Doc)|(^Misc)'
+          then
+            echo "Only docs were updated, stopping build process."
+            exit
+          fi
+        fi
+      fi
+
+
+# Travis provides only 2 cores, so don't overdo the parallelism and waste memory.
+before_script:
+  - ./configure --with-pydebug
+  - make -j4 regen-all
+  - changes=`git status --porcelain`
+  - |
+      # Check for changes in regenerated files
+      if ! test -z "$changes"
+      then
+        echo "Generated files not up to date"
+        echo "$changes"
+        exit 1
+      fi
+  - make -j4
+  - make pythoninfo
+
+script:
+  # Check that all symbols exported by libpython start with "Py" or "_Py"
+  - make smelly
+  # `-r -w` implicitly provided through `make buildbottest`.
+  - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then XVFB_RUN=xvfb-run; fi; $XVFB_RUN make buildbottest TESTOPTS="-j4 -uall,-cpu"
+
+notifications:
+  email: false
+  irc:
+    channels:
+      # This is set to a secure variable to prevent forks from notifying the
+      # IRC channel whenever they fail a build. This can be removed when travis
+      # implements https://github.com/travis-ci/travis-ci/issues/1094.
+      # The actual value here is: irc.freenode.net#python-dev
+      - secure: "s7kAkpcom2yUJ8XqyjFI0obJmhAGrn1xmoivdaPdgBIA++X47TBp1x4pgDsbEsoalef7bEwa4l07KdT4qa+DOd/c4QxaWom7fbN3BuLVsZuVfODnl79+gYq/TAbGfyH+yDs18DXrUfPgwD7C5aW32ugsqAOd4iWzfGJQ5OrOZzqzGjYdYQUEkJFXgxDEIb4aHvxNDWGO3Po9uKISrhb5saQ0l776yLo1Ur7M4oxl8RTbCdgX0vf5TzPg52BgvZpOgt3DHOUYPeiJLKNjAE6ibg0U95sEvMfHX77nz4aFY4/3UI6FFaRla34rZ+mYKrn0TdxOhera1QOgPmM6HzdO4K44FpfK1DS0Xxk9U9/uApq+cG0bU3W+cVUHDBe5+90lpRBAXHeHCgT7TI8gec614aiT8lEr3+yH8OBRYGzkjNK8E2LJZ/SxnVxDe7aLF6AWcoWLfS6/ziAIBFQ5Nc4U72CT8fGVSkl8ywPiRlvixKdvTODMSZo0jMqlfZSNaAPTsNRx4wu5Uis4qekwe32Fz4aB6KGpsuuVjBi+H6v0RKxNJNGY3JKDiEH2TK0UE2auJ5GvLW48aUVFcQMB7euCWYXlSWVRHh3WLU8QXF29Dw4JduRZqUpOdRgMHU79UHRq+mkE0jAS/nBcS6CvsmxCpTSrfVYuMOu32yt18QQoTyU="
+    on_success: change
+    on_failure: always
+    skip_join: true
diff --git a/Android.bp b/Android.bp
index 8f973fa..82d293e 100644
--- a/Android.bp
+++ b/Android.bp
@@ -25,10 +25,11 @@
         "-Wstrict-prototypes",
         "-DPy_BUILD_CORE",
         "-Werror",
-        "-Wno-error=invalid-source-encoding",
-        "-Wno-error=macro-redefined",
+        "-Wno-invalid-source-encoding",
         "-Wno-int-conversion",
         "-Wno-missing-field-initializers",
+        "-Wno-null-pointer-arithmetic",
+        "-Wno-register",
         "-Wno-shift-count-overflow",
         "-Wno-sign-compare",
         "-Wno-tautological-compare",
@@ -47,13 +48,15 @@
         android_x86: {
             local_include_dirs: ["android_x86/pyconfig"],
         },
+        linux_bionic: {
+            // NB linux_bionic is a 'host' architecture but it uses the bionic libc like 'android'
+            // targets so use the android pyconfig.
+            local_include_dirs: ["android_x86_64/pyconfig"],
+        },
         android_x86_64: {
             local_include_dirs: ["android_x86_64/pyconfig"],
         },
         // Regenerate include dirs with android_regen.sh
-        darwin_x86: {
-            enabled: false,
-        },
         darwin_x86_64: {
             local_include_dirs: ["darwin_x86_64/pyconfig"],
             cflags: [
@@ -213,21 +216,53 @@
     ],
 }
 
-cc_binary {
-    name: "py2-launcher",
+cc_defaults {
+    name: "py2-launcher-defaults",
     defaults: ["py2-interp-defaults"],
     cflags: [
         "-DVERSION=\"2.7\"",
         "-DVPATH=\"\"",
         "-DPREFIX=\"\"",
         "-DEXEC_PREFIX=\"\"",
-        "-DPYTHONPATH=\"\"",
-        "-DDATE=\"xx/xx/xx\"",
-        "-DTIME=\"xx:xx:xx\"",
+        "-DPYTHONPATH=\"..:\"",
+        "-DANDROID_SKIP_ZIP_PATH",
+        "-DANDROID_SKIP_EXEC_PREFIX_PATH",
+        "-DANDROID_LIB_PYTHON_PATH=\"internal/stdlib\"",
+        "-DDATE=\"Dec 31 1969\"",
+        "-DTIME=\"23:59:59\"",
     ],
+    static_libs: [
+        "libbase",
+        "libcrypto",
+        "libexpat",
+        "libssl",
+        "libz",
+    ],
+    target: {
+        linux_glibc_x86_64: {
+            host_ldlibs: ["-lutil"],
+        },
+        darwin: {
+            host_ldlibs: [
+                "-framework SystemConfiguration",
+                "-framework CoreFoundation",
+            ],
+        },
+        host: {
+            static_libs: ["libsqlite"],
+        },
+        // Use shared libsqlite for device side, otherwise
+        // the executable size will be really huge.
+        android: {
+            shared_libs: ["libsqlite"],
+        },
+    },
+}
+
+cc_library_static {
+    name: "py2-launcher-lib",
+    defaults: ["py2-launcher-defaults"],
     srcs: [
-        "Launcher/launcher_main.cpp",
-        "Launcher/launcher_internal.cpp",
         "Modules/gcmodule.c",
         "Modules/getpath.c",
         "Modules/config.c",
@@ -243,13 +278,10 @@
         "Modules/_weakref.c",
         "Modules/zipimport.c",
         "Modules/symtablemodule.c",
-    ],
-    local_include_dirs: [
-        "Launcher",
+        "Modules/main.c",
     ],
     // NOTE: Please update Modules/config.c if new lib get added in the static_libs.
-    static_libs: [
-        "libbase",
+    whole_static_libs: [
         // Be careful the order of these three static libraries below due to
         // missing symbols issues.
         "py2-interp-object",
@@ -278,6 +310,7 @@
         "py2-c-module-_csv",
         "py2-c-module-_socket",
         "py2-c-module-termios",
+        "py2-c-module-_ssl",
         "py2-c-module-_md5",
         "py2-c-module-_sha",
         "py2-c-module-_sha256",
@@ -308,27 +341,39 @@
         "py2-c-module-_sqlite3",
         "py2-c-module-_ctypes_test",
         "py2-c-module-_ctypes",
-        "libz",
-        "libexpat",
     ],
     target: {
-        linux_glibc_x86_64: {
-            host_ldlibs: ["-lutil"],
-            static_libs: [
-                "libsqlite",
-            ],
+        darwin: {
+            whole_static_libs: ["py2-c-module-_scproxy"],
         },
-        darwin_x86_64: {
-            static_libs: [
-                "libsqlite",
-            ],
+    },
+}
+
+cc_binary {
+    name: "py2-launcher",
+    defaults: ["py2-launcher-defaults"],
+    srcs: ["Launcher/launcher_main.cpp"],
+    static_libs: ["py2-launcher-lib"],
+}
+
+cc_binary {
+    name: "py2-launcher-autorun",
+    defaults: ["py2-launcher-defaults"],
+    srcs: ["Launcher/launcher_main.cpp"],
+    static_libs: ["py2-launcher-lib"],
+    cflags: ["-DANDROID_AUTORUN"],
+}
+
+python_binary_host {
+    name: "py2-cmd",
+    autorun: false,
+    version: {
+        py2: {
+            enabled: true,
+            embedded_launcher: true,
         },
-        // Use shared libsqlite for device side, otherwise
-        // the executable size will be really huge.
-        android: {
-            shared_libs: [
-                "libsqlite",
-            ],
+        py3: {
+            enabled: false,
         },
     },
 }
@@ -532,6 +577,17 @@
 }
 
 cc_library_static {
+    name: "py2-c-module-_ssl",
+    defaults: ["py2-interp-defaults"],
+    srcs: ["Modules/_ssl.c"],
+    cflags: ["-Wno-incompatible-pointer-types-discards-qualifiers"],
+    static_libs: [
+        "libssl",
+        "libcrypto",
+    ],
+}
+
+cc_library_static {
     name: "py2-c-module-_md5",
     defaults: ["py2-interp-defaults"],
     srcs: [
@@ -783,12 +839,7 @@
         "Modules/_sqlite/util.c",
     ],
     target: {
-        linux_glibc_x86_64: {
-            static_libs: [
-                "libsqlite",
-            ],
-        },
-        darwin_x86_64: {
+        host: {
             static_libs: [
                 "libsqlite",
             ],
@@ -796,7 +847,7 @@
         android: {
             shared_libs: [
                 "libsqlite",
-            ]
+            ],
         },
     },
 }
@@ -853,7 +904,7 @@
                 "Modules/_ctypes/libffi/src/arm/ffi.c",
                 "Modules/_ctypes/libffi/src/arm/sysv.S",
                 "Modules/_ctypes/libffi/src/arm/trampoline.S",
-            ]
+            ],
         },
         arm64: {
             // arithmetic on a pointer in _ctypes/libffi/src/aarch64/ffi.c
@@ -865,7 +916,7 @@
             srcs: [
                 "Modules/_ctypes/libffi/src/aarch64/ffi.c",
                 "Modules/_ctypes/libffi/src/aarch64/sysv.S",
-            ]
+            ],
         },
     },
     target: {
@@ -877,6 +928,12 @@
                 "Modules/_ctypes/libffi/src/x86/darwin64.S",
             ],
         },
+        linux_bionic: {
+            local_include_dirs: ["linux_x86_64/libffi"],
+            srcs: [
+                "Modules/_ctypes/libffi/src/x86/unix64.S",
+            ],
+        },
         linux_glibc_x86_64: {
             local_include_dirs: ["linux_x86_64/libffi"],
             srcs: [
@@ -897,3 +954,14 @@
         },
     },
 }
+
+cc_library_host_static {
+    name: "py2-c-module-_scproxy",
+    defaults: ["py2-interp-defaults"],
+    srcs: ["Mac/Modules/_scproxy.c"],
+    target: {
+        linux: {
+            enabled: false,
+        },
+    },
+}
diff --git a/Demo/turtle/tdemo_two_canvases.py b/Demo/turtle/tdemo_two_canvases.py
old mode 100644
new mode 100755
diff --git a/Doc/Makefile b/Doc/Makefile
index c3f1b37..ebabc02 100644
--- a/Doc/Makefile
+++ b/Doc/Makefile
@@ -10,7 +10,7 @@
 SOURCES      =
 DISTVERSION  = $(shell $(PYTHON) tools/extensions/patchlevel.py)
 
-ALLSPHINXOPTS = -b $(BUILDER) -d build/doctrees -D latex_paper_size=$(PAPER) \
+ALLSPHINXOPTS = -b $(BUILDER) -d build/doctrees -D latex_elements.papersize=$(PAPER) \
                 $(SPHINXOPTS) . build/$(BUILDER) $(SOURCES)
 
 .PHONY: help build html htmlhelp latex text changes linkcheck \
@@ -157,12 +157,12 @@
 
 # for development releases: always build
 autobuild-dev:
-	make dist SPHINXOPTS='$(SPHINXOPTS) -A daily=1 -A versionswitcher=1'
+	make dist SPHINXOPTS='$(SPHINXOPTS) -A daily=1 -A switchers=1'
 	-make suspicious
 
 # for quick rebuilds (HTML only)
 autobuild-dev-html:
-	make html SPHINXOPTS='$(SPHINXOPTS) -A daily=1 -A versionswitcher=1'
+	make html SPHINXOPTS='$(SPHINXOPTS) -A daily=1 -A switchers=1'
 
 # for stable releases: only build if not in pre-release stage (alpha, beta)
 # release candidate downloads are okay, since the stable tree can be in that stage
diff --git a/Doc/README.txt b/Doc/README.txt
index 4f8e9f8..a362ecc 100644
--- a/Doc/README.txt
+++ b/Doc/README.txt
@@ -15,7 +15,7 @@
 
 You need to have Sphinx <http://sphinx-doc.org/> installed; it is the toolset
 used to build the docs.  It is not included in this tree, but maintained
-separately and available from PyPI <https://pypi.python.org/pypi/Sphinx>.
+separately and available from PyPI <https://pypi.org/project/Sphinx>.
 
 
 Using make
diff --git a/Doc/c-api/buffer.rst b/Doc/c-api/buffer.rst
index 050db55..4e5a043 100644
--- a/Doc/c-api/buffer.rst
+++ b/Doc/c-api/buffer.rst
@@ -278,7 +278,7 @@
    (*fortran* is ``'A'``).  Return ``0`` otherwise.
 
 
-.. c:function:: void PyBuffer_FillContiguousStrides(int ndim, Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t itemsize, char fortran)
+.. c:function:: void PyBuffer_FillContiguousStrides(int ndims, Py_ssize_t *shape, Py_ssize_t *strides, int itemsize, char fortran)
 
    Fill the *strides* array with byte-strides of a contiguous (C-style if
    *fortran* is ``'C'`` or Fortran-style if *fortran* is ``'F'``) array of the
diff --git a/Doc/c-api/capsule.rst b/Doc/c-api/capsule.rst
index b8642d0..fd4279c 100644
--- a/Doc/c-api/capsule.rst
+++ b/Doc/c-api/capsule.rst
@@ -9,6 +9,8 @@
 
 Refer to :ref:`using-capsules` for more information on using these objects.
 
+.. versionadded:: 2.7
+
 
 .. c:type:: PyCapsule
 
@@ -19,6 +21,7 @@
    regular import mechanism can be used to access C APIs defined in dynamically
    loaded modules.
 
+
 .. c:type:: PyCapsule_Destructor
 
    The type of a destructor callback for a capsule.  Defined as::
@@ -104,8 +107,8 @@
    import the module conventionally (using :c:func:`PyImport_ImportModule`).
 
    Return the capsule's internal *pointer* on success.  On failure, set an
-   exception and return *NULL*.  However, if :c:func:`PyCapsule_Import` failed to
-   import the module, and *no_block* was true, no exception is set.
+   exception and return *NULL*.
+
 
 .. c:function:: int PyCapsule_IsValid(PyObject *capsule, const char *name)
 
@@ -122,18 +125,21 @@
    Return a nonzero value if the object is valid and matches the name passed in.
    Return ``0`` otherwise.  This function will not fail.
 
+
 .. c:function:: int PyCapsule_SetContext(PyObject *capsule, void *context)
 
    Set the context pointer inside *capsule* to *context*.
 
    Return ``0`` on success.  Return nonzero and set an exception on failure.
 
+
 .. c:function:: int PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor)
 
    Set the destructor inside *capsule* to *destructor*.
 
    Return ``0`` on success.  Return nonzero and set an exception on failure.
 
+
 .. c:function:: int PyCapsule_SetName(PyObject *capsule, const char *name)
 
    Set the name inside *capsule* to *name*.  If non-*NULL*, the name must
@@ -142,6 +148,7 @@
 
    Return ``0`` on success.  Return nonzero and set an exception on failure.
 
+
 .. c:function:: int PyCapsule_SetPointer(PyObject *capsule, void *pointer)
 
    Set the void pointer inside *capsule* to *pointer*.  The pointer may not be
diff --git a/Doc/c-api/exceptions.rst b/Doc/c-api/exceptions.rst
index 10e2c4c..db302d8 100644
--- a/Doc/c-api/exceptions.rst
+++ b/Doc/c-api/exceptions.rst
@@ -286,16 +286,11 @@
    exception handling (for example, :c:func:`Py_DECREF` owned references and return
    an error value).
 
-   Warning categories must be subclasses of :c:data:`Warning`; the default warning
-   category is :c:data:`RuntimeWarning`.  The standard Python warning categories are
-   available as global variables whose names are ``PyExc_`` followed by the Python
-   exception name. These have the type :c:type:`PyObject\*`; they are all class
-   objects. Their names are :c:data:`PyExc_Warning`, :c:data:`PyExc_UserWarning`,
-   :c:data:`PyExc_UnicodeWarning`, :c:data:`PyExc_DeprecationWarning`,
-   :c:data:`PyExc_SyntaxWarning`, :c:data:`PyExc_RuntimeWarning`, and
-   :c:data:`PyExc_FutureWarning`.  :c:data:`PyExc_Warning` is a subclass of
-   :c:data:`PyExc_Exception`; the other warning categories are subclasses of
-   :c:data:`PyExc_Warning`.
+   Warning categories must be subclasses of :c:data:`PyExc_Warning`;
+   :c:data:`PyExc_Warning` is a subclass of :c:data:`PyExc_Exception`;
+   the default warning category is :c:data:`PyExc_RuntimeWarning`. The standard
+   Python warning categories are available as global variables whose names are
+   enumerated at :ref:`standardwarningcategories`.
 
    For information about warning control, see the documentation for the
    :mod:`warnings` module and the :option:`-W` option in the command line
@@ -525,84 +520,25 @@
 :c:type:`PyObject\*`; they are all class objects.  For completeness, here are all
 the variables:
 
-+-------------------------------------+----------------------------+----------+
-| C Name                              | Python Name                | Notes    |
-+=====================================+============================+==========+
-| :c:data:`PyExc_BaseException`       | :exc:`BaseException`       | (1), (4) |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_Exception`           | :exc:`Exception`           | \(1)     |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_StandardError`       | :exc:`StandardError`       | \(1)     |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_ArithmeticError`     | :exc:`ArithmeticError`     | \(1)     |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_LookupError`         | :exc:`LookupError`         | \(1)     |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_AssertionError`      | :exc:`AssertionError`      |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_AttributeError`      | :exc:`AttributeError`      |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_EOFError`            | :exc:`EOFError`            |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_EnvironmentError`    | :exc:`EnvironmentError`    | \(1)     |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_FloatingPointError`  | :exc:`FloatingPointError`  |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_IOError`             | :exc:`IOError`             |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_ImportError`         | :exc:`ImportError`         |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_IndexError`          | :exc:`IndexError`          |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_KeyError`            | :exc:`KeyError`            |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_KeyboardInterrupt`   | :exc:`KeyboardInterrupt`   |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_MemoryError`         | :exc:`MemoryError`         |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_NameError`           | :exc:`NameError`           |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_NotImplementedError` | :exc:`NotImplementedError` |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_OSError`             | :exc:`OSError`             |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_OverflowError`       | :exc:`OverflowError`       |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_ReferenceError`      | :exc:`ReferenceError`      | \(2)     |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_RuntimeError`        | :exc:`RuntimeError`        |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_SyntaxError`         | :exc:`SyntaxError`         |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_SystemError`         | :exc:`SystemError`         |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_SystemExit`          | :exc:`SystemExit`          |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_TypeError`           | :exc:`TypeError`           |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_ValueError`          | :exc:`ValueError`          |          |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_WindowsError`        | :exc:`WindowsError`        | \(3)     |
-+-------------------------------------+----------------------------+----------+
-| :c:data:`PyExc_ZeroDivisionError`   | :exc:`ZeroDivisionError`   |          |
-+-------------------------------------+----------------------------+----------+
-
 .. index::
    single: PyExc_BaseException
    single: PyExc_Exception
    single: PyExc_StandardError
    single: PyExc_ArithmeticError
-   single: PyExc_LookupError
    single: PyExc_AssertionError
    single: PyExc_AttributeError
-   single: PyExc_EOFError
+   single: PyExc_BufferError
    single: PyExc_EnvironmentError
+   single: PyExc_EOFError
    single: PyExc_FloatingPointError
-   single: PyExc_IOError
+   single: PyExc_GeneratorExit
    single: PyExc_ImportError
+   single: PyExc_IndentationError
    single: PyExc_IndexError
+   single: PyExc_IOError
    single: PyExc_KeyError
    single: PyExc_KeyboardInterrupt
+   single: PyExc_LookupError
    single: PyExc_MemoryError
    single: PyExc_NameError
    single: PyExc_NotImplementedError
@@ -610,14 +546,106 @@
    single: PyExc_OverflowError
    single: PyExc_ReferenceError
    single: PyExc_RuntimeError
+   single: PyExc_StopIteration
    single: PyExc_SyntaxError
    single: PyExc_SystemError
    single: PyExc_SystemExit
+   single: PyExc_TabError
    single: PyExc_TypeError
+   single: PyExc_UnboundLocalError
+   single: PyExc_UnicodeDecodeError
+   single: PyExc_UnicodeEncodeError
+   single: PyExc_UnicodeError
+   single: PyExc_UnicodeTranslateError
+   single: PyExc_VMSError
    single: PyExc_ValueError
    single: PyExc_WindowsError
    single: PyExc_ZeroDivisionError
 
++-----------------------------------------+---------------------------------+----------+
+| C Name                                  | Python Name                     | Notes    |
++=========================================+=================================+==========+
+| :c:data:`PyExc_BaseException`           | :exc:`BaseException`            | (1), (4) |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_Exception`               | :exc:`Exception`                | \(1)     |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_StandardError`           | :exc:`StandardError`            | \(1)     |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_ArithmeticError`         | :exc:`ArithmeticError`          | \(1)     |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_AssertionError`          | :exc:`AssertionError`           |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_AttributeError`          | :exc:`AttributeError`           |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_BufferError`             | :exc:`BufferError`              |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_EnvironmentError`        | :exc:`EnvironmentError`         | \(1)     |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_EOFError`                | :exc:`EOFError`                 |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_FloatingPointError`      | :exc:`FloatingPointError`       |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_GeneratorExit`           | :exc:`GeneratorExit`            |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_ImportError`             | :exc:`ImportError`              |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_IndentationError`        | :exc:`IndentationError`         |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_IndexError`              | :exc:`IndexError`               |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_IOError`                 | :exc:`IOError`                  |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_KeyError`                | :exc:`KeyError`                 |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_KeyboardInterrupt`       | :exc:`KeyboardInterrupt`        |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_LookupError`             | :exc:`LookupError`              | \(1)     |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_MemoryError`             | :exc:`MemoryError`              |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_NameError`               | :exc:`NameError`                |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_NotImplementedError`     | :exc:`NotImplementedError`      |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_OSError`                 | :exc:`OSError`                  |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_OverflowError`           | :exc:`OverflowError`            |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_ReferenceError`          | :exc:`ReferenceError`           | \(2)     |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_RuntimeError`            | :exc:`RuntimeError`             |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_StopIteration`           | :exc:`StopIteration`            |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_SyntaxError`             | :exc:`SyntaxError`              |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_SystemError`             | :exc:`SystemError`              |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_SystemExit`              | :exc:`SystemExit`               |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_TabError`                | :exc:`TabError`                 |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_TypeError`               | :exc:`TypeError`                |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_UnboundLocalError`       | :exc:`UnboundLocalError`        |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_UnicodeDecodeError`      | :exc:`UnicodeDecodeError`       |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_UnicodeEncodeError`      | :exc:`UnicodeEncodeError`       |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_UnicodeError`            | :exc:`UnicodeError`             |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_UnicodeTranslateError`   | :exc:`UnicodeTranslateError`    |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_VMSError`                | :exc:`VMSError`                 | \(5)     |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_ValueError`              | :exc:`ValueError`               |          |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_WindowsError`            | :exc:`WindowsError`             | \(3)     |
++-----------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_ZeroDivisionError`       | :exc:`ZeroDivisionError`        |          |
++-----------------------------------------+---------------------------------+----------+
+
 Notes:
 
 (1)
@@ -633,6 +661,60 @@
 (4)
    .. versionadded:: 2.5
 
+(5)
+   Only defined on VMS; protect code that uses this by testing that the
+   preprocessor macro ``__VMS`` is defined.
+
+.. _standardwarningcategories:
+
+Standard Warning Categories
+===========================
+
+All standard Python warning categories are available as global variables whose
+names are ``PyExc_`` followed by the Python exception name. These have the type
+:c:type:`PyObject\*`; they are all class objects. For completeness, here are all
+the variables:
+
+.. index::
+   single: PyExc_Warning
+   single: PyExc_BytesWarning
+   single: PyExc_DeprecationWarning
+   single: PyExc_FutureWarning
+   single: PyExc_ImportWarning
+   single: PyExc_PendingDeprecationWarning
+   single: PyExc_RuntimeWarning
+   single: PyExc_SyntaxWarning
+   single: PyExc_UnicodeWarning
+   single: PyExc_UserWarning
+
++------------------------------------------+---------------------------------+----------+
+| C Name                                   | Python Name                     | Notes    |
++==========================================+=================================+==========+
+| :c:data:`PyExc_Warning`                  | :exc:`Warning`                  | \(1)     |
++------------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_BytesWarning`             | :exc:`BytesWarning`             |          |
++------------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_DeprecationWarning`       | :exc:`DeprecationWarning`       |          |
++------------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_FutureWarning`            | :exc:`FutureWarning`            |          |
++------------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_ImportWarning`            | :exc:`ImportWarning`            |          |
++------------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_PendingDeprecationWarning`| :exc:`PendingDeprecationWarning`|          |
++------------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_RuntimeWarning`           | :exc:`RuntimeWarning`           |          |
++------------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_SyntaxWarning`            | :exc:`SyntaxWarning`            |          |
++------------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_UnicodeWarning`           | :exc:`UnicodeWarning`           |          |
++------------------------------------------+---------------------------------+----------+
+| :c:data:`PyExc_UserWarning`              | :exc:`UserWarning`              |          |
++------------------------------------------+---------------------------------+----------+
+
+Notes:
+
+(1)
+   This is a base class for other standard warning categories.
 
 String Exceptions
 =================
@@ -640,4 +722,3 @@
 .. versionchanged:: 2.6
    All exceptions to be raised or caught must be derived from :exc:`BaseException`.
    Trying to raise a string exception now raises :exc:`TypeError`.
-
diff --git a/Doc/c-api/gcsupport.rst b/Doc/c-api/gcsupport.rst
index 9438fea..18ecd07 100644
--- a/Doc/c-api/gcsupport.rst
+++ b/Doc/c-api/gcsupport.rst
@@ -56,7 +56,7 @@
 .. c:function:: TYPE* PyObject_GC_Resize(TYPE, PyVarObject *op, Py_ssize_t newsize)
 
    Resize an object allocated by :c:func:`PyObject_NewVar`.  Returns the
-   resized object or *NULL* on failure.
+   resized object or *NULL* on failure.  *op* must not be tracked by the collector yet.
 
    .. versionchanged:: 2.5
       This function used an :c:type:`int` type for *newsize*. This might
diff --git a/Doc/c-api/init.rst b/Doc/c-api/init.rst
index 7643a37..229cae5 100644
--- a/Doc/c-api/init.rst
+++ b/Doc/c-api/init.rst
@@ -983,12 +983,12 @@
    +------------------------------+--------------------------------------+
    | Value of *what*              | Meaning of *arg*                     |
    +==============================+======================================+
-   | :const:`PyTrace_CALL`        | Always *NULL*.                       |
+   | :const:`PyTrace_CALL`        | Always :c:data:`Py_None`.            |
    +------------------------------+--------------------------------------+
    | :const:`PyTrace_EXCEPTION`   | Exception information as returned by |
    |                              | :func:`sys.exc_info`.                |
    +------------------------------+--------------------------------------+
-   | :const:`PyTrace_LINE`        | Always *NULL*.                       |
+   | :const:`PyTrace_LINE`        | Always :c:data:`Py_None`.            |
    +------------------------------+--------------------------------------+
    | :const:`PyTrace_RETURN`      | Value being returned to the caller,  |
    |                              | or *NULL* if caused by an exception. |
@@ -1030,7 +1030,7 @@
 .. c:var:: int PyTrace_RETURN
 
    The value for the *what* parameter to :c:type:`Py_tracefunc` functions when a
-   call is returning without propagating an exception.
+   call is about to return.
 
 
 .. c:var:: int PyTrace_C_CALL
@@ -1057,15 +1057,19 @@
    function as its first parameter, and may be any Python object, or *NULL*.  If
    the profile function needs to maintain state, using a different value for *obj*
    for each thread provides a convenient and thread-safe place to store it.  The
-   profile function is called for all monitored events except the line-number
-   events.
+   profile function is called for all monitored events except :const:`PyTrace_LINE`
+   and :const:`PyTrace_EXCEPTION`.
 
 
 .. c:function:: void PyEval_SetTrace(Py_tracefunc func, PyObject *obj)
 
    Set the tracing function to *func*.  This is similar to
    :c:func:`PyEval_SetProfile`, except the tracing function does receive line-number
-   events.
+   events and does not receive any event related to C function objects being called. Any
+   trace function registered using :c:func:`PyEval_SetTrace` will not receive
+   :const:`PyTrace_C_CALL`, :const:`PyTrace_C_EXCEPTION` or :const:`PyTrace_C_RETURN`
+   as a value for the *what* parameter.
+
 
 .. c:function:: PyObject* PyEval_GetCallStats(PyObject *self)
 
diff --git a/Doc/c-api/memory.rst b/Doc/c-api/memory.rst
index 5465571..2b9fb73 100644
--- a/Doc/c-api/memory.rst
+++ b/Doc/c-api/memory.rst
@@ -35,7 +35,7 @@
 
 It is important to understand that the management of the Python heap is
 performed by the interpreter itself and that the user has no control over it,
-even if she regularly manipulates object pointers to memory blocks inside that
+even if they regularly manipulate object pointers to memory blocks inside that
 heap.  The allocation of heap space for Python objects and other internal
 buffers is performed on demand by the Python memory manager through the Python/C
 API functions listed in this document.
@@ -155,6 +155,88 @@
 :c:func:`PyMem_NEW`, :c:func:`PyMem_RESIZE`, :c:func:`PyMem_DEL`.
 
 
+Object allocators
+=================
+
+The following function sets, modeled after the ANSI C standard, but specifying
+behavior when requesting zero bytes, are available for allocating and releasing
+memory from the Python heap.
+
+By default, these functions use :ref:`pymalloc memory allocator <pymalloc>`.
+
+.. warning::
+
+   The :term:`GIL <global interpreter lock>` must be held when using these
+   functions.
+
+.. c:function:: void* PyObject_Malloc(size_t n)
+
+   Allocates *n* bytes and returns a pointer of type :c:type:`void\*` to the
+   allocated memory, or *NULL* if the request fails.
+
+   Requesting zero bytes returns a distinct non-*NULL* pointer if possible, as
+   if ``PyObject_Malloc(1)`` had been called instead. The memory will not have
+   been initialized in any way.
+
+
+.. c:function:: void* PyObject_Realloc(void *p, size_t n)
+
+   Resizes the memory block pointed to by *p* to *n* bytes. The contents will be
+   unchanged to the minimum of the old and the new sizes.
+
+   If *p* is *NULL*, the call is equivalent to ``PyObject_Malloc(n)``; else if *n*
+   is equal to zero, the memory block is resized but is not freed, and the
+   returned pointer is non-*NULL*.
+
+   Unless *p* is *NULL*, it must have been returned by a previous call to
+   :c:func:`PyObject_Malloc`, :c:func:`PyObject_Realloc` or :c:func:`PyObject_Calloc`.
+
+   If the request fails, :c:func:`PyObject_Realloc` returns *NULL* and *p* remains
+   a valid pointer to the previous memory area.
+
+
+.. c:function:: void PyObject_Free(void *p)
+
+   Frees the memory block pointed to by *p*, which must have been returned by a
+   previous call to :c:func:`PyObject_Malloc`, :c:func:`PyObject_Realloc` or
+   :c:func:`PyObject_Calloc`.  Otherwise, or if ``PyObject_Free(p)`` has been called
+   before, undefined behavior occurs.
+
+   If *p* is *NULL*, no operation is performed.
+
+
+In addition, the following macro sets are provided:
+
+* :c:func:`PyObject_MALLOC`: alias to :c:func:`PyObject_Malloc`
+* :c:func:`PyObject_REALLOC`: alias to :c:func:`PyObject_Realloc`
+* :c:func:`PyObject_FREE`: alias to :c:func:`PyObject_Free`
+* :c:func:`PyObject_Del`: alias to :c:func:`PyObject_Free`
+* :c:func:`PyObject_DEL`: alias to :c:func:`PyObject_FREE` (so finally an alias
+  to :c:func:`PyObject_Free`)
+
+
+.. _pymalloc:
+
+The pymalloc allocator
+======================
+
+Python has a *pymalloc* allocator optimized for small objects (smaller or equal
+to 512 bytes) with a short lifetime. It uses memory mappings called "arenas"
+with a fixed size of 256 KiB. It falls back to :c:func:`malloc` and
+:c:func:`realloc` for allocations larger than 512 bytes.
+
+*pymalloc* is the default allocator of :c:func:`PyObject_Malloc`.
+
+The arena allocator uses the following functions:
+
+* :c:func:`mmap` and :c:func:`munmap` if available,
+* :c:func:`malloc` and :c:func:`free` otherwise.
+
+.. versionchanged:: 2.7.7
+   The threshold changed from 256 to 512 bytes. The arena allocator now
+   uses :c:func:`mmap` if available.
+
+
 .. _memoryexamples:
 
 Examples
diff --git a/Doc/c-api/sequence.rst b/Doc/c-api/sequence.rst
index d82a7b0..d95ef23 100644
--- a/Doc/c-api/sequence.rst
+++ b/Doc/c-api/sequence.rst
@@ -17,9 +17,8 @@
 
    .. index:: builtin: len
 
-   Returns the number of objects in sequence *o* on success, and ``-1`` on failure.
-   For objects that do not provide sequence protocol, this is equivalent to the
-   Python expression ``len(o)``.
+   Returns the number of objects in sequence *o* on success, and ``-1`` on
+   failure.  This is equivalent to the Python expression ``len(o)``.
 
    .. versionchanged:: 2.5
       These functions returned an :c:type:`int` type. This might require
diff --git a/Doc/c-api/slice.rst b/Doc/c-api/slice.rst
index 0de950a..08d5b94 100644
--- a/Doc/c-api/slice.rst
+++ b/Doc/c-api/slice.rst
@@ -66,3 +66,14 @@
       :c:type:`int *` type for *start*, *stop*, *step*, and *slicelength*. This
       might require changes in your code for properly supporting 64-bit
       systems.
+
+
+Ellipsis Object
+---------------
+
+
+.. c:var:: PyObject *Py_Ellipsis
+
+   The Python ``Ellipsis`` object.  This object has no methods.  It needs to be
+   treated just like any other object with respect to reference counts.  Like
+   :c:data:`Py_None` it is a singleton object.
diff --git a/Doc/c-api/structures.rst b/Doc/c-api/structures.rst
index fdee5f9..af6a8c3 100644
--- a/Doc/c-api/structures.rst
+++ b/Doc/c-api/structures.rst
@@ -265,7 +265,7 @@
    +==================+=============+===============================+
    | :attr:`name`     | char \*     | name of the member            |
    +------------------+-------------+-------------------------------+
-   | :attr:`type`     | int         | the type of the member in the |
+   | :attr:`!type`    | int         | the type of the member in the |
    |                  |             | C struct                      |
    +------------------+-------------+-------------------------------+
    | :attr:`offset`   | Py_ssize_t  | the offset in bytes that the  |
@@ -280,7 +280,7 @@
    |                  |             | docstring                     |
    +------------------+-------------+-------------------------------+
 
-   :attr:`type` can be one of many ``T_`` macros corresponding to various C
+   :attr:`!type` can be one of many ``T_`` macros corresponding to various C
    types.  When the member is accessed in Python, it will be converted to the
    equivalent Python type.
 
@@ -320,6 +320,46 @@
    members can be deleted.  (They are set to *NULL*).
 
 
+.. c:type:: PyGetSetDef
+
+   Structure to define property-like access for a type. See also description of
+   the :c:member:`PyTypeObject.tp_getset` slot.
+
+   +-------------+------------------+-----------------------------------+
+   | Field       | C Type           | Meaning                           |
+   +=============+==================+===================================+
+   | name        | char \*          | attribute name                    |
+   +-------------+------------------+-----------------------------------+
+   | get         | getter           | C Function to get the attribute   |
+   +-------------+------------------+-----------------------------------+
+   | set         | setter           | optional C function to set or     |
+   |             |                  | delete the attribute, if omitted  |
+   |             |                  | the attribute is readonly         |
+   +-------------+------------------+-----------------------------------+
+   | doc         | char \*          | optional docstring                |
+   +-------------+------------------+-----------------------------------+
+   | closure     | void \*          | optional function pointer,        |
+   |             |                  | providing additional data for     |
+   |             |                  | getter and setter                 |
+   +-------------+------------------+-----------------------------------+
+
+   The ``get`` function takes one :c:type:`PyObject\*` parameter (the
+   instance) and a function pointer (the associated ``closure``)::
+
+      typedef PyObject *(*getter)(PyObject *, void *);
+
+   It should return a new reference on success or *NULL* with a set exception
+   on failure.
+
+   ``set`` functions take two :c:type:`PyObject\*` parameters (the instance and
+   the value to be set) and a function pointer (the associated ``closure``)::
+
+      typedef int (*setter)(PyObject *, PyObject *, void *);
+
+   In case the attribute should be deleted the second parameter is *NULL*.
+   Should return ``0`` on success or ``-1`` with a set exception on failure.
+
+
 .. c:function:: PyObject* Py_FindMethod(PyMethodDef table[], PyObject *ob, char *name)
 
    Return a bound method object for an extension type implemented in C.  This
diff --git a/Doc/c-api/typeobj.rst b/Doc/c-api/typeobj.rst
index 9233278..f0ccf2e 100644
--- a/Doc/c-api/typeobj.rst
+++ b/Doc/c-api/typeobj.rst
@@ -825,21 +825,6 @@
    This field is not inherited by subtypes (computed attributes are inherited
    through a different mechanism).
 
-   .. XXX belongs elsewhere
-
-   Docs for PyGetSetDef::
-
-      typedef PyObject *(*getter)(PyObject *, void *);
-      typedef int (*setter)(PyObject *, PyObject *, void *);
-
-      typedef struct PyGetSetDef {
-          char *name;    /* attribute name */
-          getter get;    /* C function to get the attribute */
-          setter set;    /* C function to set or delete the attribute */
-          char *doc;     /* optional doc string */
-          void *closure; /* optional additional data for getter and setter */
-      } PyGetSetDef;
-
 
 .. c:member:: PyTypeObject* PyTypeObject.tp_base
 
@@ -1116,7 +1101,7 @@
 The remaining fields are only defined if the feature test macro
 :const:`COUNT_ALLOCS` is defined, and are for internal use only. They are
 documented here for completeness.  None of these fields are inherited by
-subtypes.
+subtypes. See the :envvar:`PYTHONSHOWALLOCCOUNT` environment variable.
 
 
 .. c:member:: Py_ssize_t PyTypeObject.tp_allocs
@@ -1377,23 +1362,23 @@
    Structure used to hold the function pointers which define an implementation of
    the buffer protocol.
 
-   The first slot is :attr:`bf_getreadbuffer`, of type :c:type:`getreadbufferproc`.
+   The first slot is :attr:`bf_getreadbuffer`, of type :c:type:`readbufferproc`.
    If this slot is *NULL*, then the object does not support reading from the
    internal data.  This is non-sensical, so implementors should fill this in, but
    callers should test that the slot contains a non-*NULL* value.
 
    The next slot is :attr:`bf_getwritebuffer` having type
-   :c:type:`getwritebufferproc`.  This slot may be *NULL* if the object does not
+   :c:type:`writebufferproc`.  This slot may be *NULL* if the object does not
    allow writing into its returned buffers.
 
-   The third slot is :attr:`bf_getsegcount`, with type :c:type:`getsegcountproc`.
+   The third slot is :attr:`bf_getsegcount`, with type :c:type:`segcountproc`.
    This slot must not be *NULL* and is used to inform the caller how many segments
    the object contains.  Simple objects such as :c:type:`PyString_Type` and
    :c:type:`PyBuffer_Type` objects contain a single segment.
 
    .. index:: single: PyType_HasFeature()
 
-   The last slot is :attr:`bf_getcharbuffer`, of type :c:type:`getcharbufferproc`.
+   The last slot is :attr:`bf_getcharbuffer`, of type :c:type:`charbufferproc`.
    This slot will only be present if the :const:`Py_TPFLAGS_HAVE_GETCHARBUFFER`
    flag is present in the :c:member:`~PyTypeObject.tp_flags` field of the object's
    :c:type:`PyTypeObject`. Before using this slot, the caller should test whether it
diff --git a/Doc/conf.py b/Doc/conf.py
index 2c271e8..557fe1e 100644
--- a/Doc/conf.py
+++ b/Doc/conf.py
@@ -82,11 +82,28 @@
 # Options for LaTeX output
 # ------------------------
 
+# Get LaTeX to handle Unicode correctly
+latex_elements = {
+    'inputenc': r'\usepackage[utf8x]{inputenc}',
+    'utf8extra': '',
+    'fontenc': r'\usepackage[T1,T2A]{fontenc}',
+}
+
+# Additional stuff for the LaTeX preamble.
+latex_elements['preamble'] = r'''
+\authoraddress{
+  \sphinxstrong{Python Software Foundation}\\
+  Email: \sphinxemail{docs@python.org}
+}
+\let\Verbatim=\OriginalVerbatim
+\let\endVerbatim=\endOriginalVerbatim
+'''
+
 # The paper size ('letter' or 'a4').
-latex_paper_size = 'a4'
+latex_elements['papersize'] = 'a4'
 
 # The font size ('10pt', '11pt' or '12pt').
-latex_font_size = '10pt'
+latex_elements['pointsize'] = '10pt'
 
 # Grouping the document tree into LaTeX files. List of tuples
 # (source start file, target name, title, author, document class [howto/manual]).
@@ -119,30 +136,15 @@
                        for fn in os.listdir('howto')
                        if fn.endswith('.rst') and fn != 'index.rst')
 
-# Additional stuff for the LaTeX preamble.
-latex_preamble = r'''
-\authoraddress{
-  \strong{Python Software Foundation}\\
-  Email: \email{docs@python.org}
-}
-\let\Verbatim=\OriginalVerbatim
-\let\endVerbatim=\endOriginalVerbatim
-'''
-
 # Documents to append as an appendix to all manuals.
 latex_appendices = ['glossary', 'about', 'license', 'copyright']
 
-# Get LaTeX to handle Unicode correctly
-latex_elements = {'inputenc': r'\usepackage[utf8x]{inputenc}', 'utf8extra': ''}
-
-
 # Options for Epub output
 # -----------------------
 
 epub_author = 'Python Documentation Authors'
 epub_publisher = 'Python Software Foundation'
 
-
 # Options for the coverage checker
 # --------------------------------
 
diff --git a/Doc/copyright.rst b/Doc/copyright.rst
index 22d7705..540ff5e 100644
--- a/Doc/copyright.rst
+++ b/Doc/copyright.rst
@@ -4,7 +4,7 @@
 
 Python and this documentation is:
 
-Copyright © 2001-2016 Python Software Foundation. All rights reserved.
+Copyright © 2001-2018 Python Software Foundation. All rights reserved.
 
 Copyright © 2000 BeOpen.com. All rights reserved.
 
diff --git a/Doc/distributing/index.rst b/Doc/distributing/index.rst
index 82ecd2c..b0dccb3 100644
--- a/Doc/distributing/index.rst
+++ b/Doc/distributing/index.rst
@@ -31,7 +31,7 @@
 Key terms
 =========
 
-* the `Python Packaging Index <https://pypi.python.org/pypi>`__ is a public
+* the `Python Packaging Index <https://pypi.org>`__ is a public
   repository of open source licensed packages made available for use by
   other Python users
 * the `Python Packaging Authority
diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst
index 18844dd..34a3cb3 100644
--- a/Doc/distutils/apiref.rst
+++ b/Doc/distutils/apiref.rst
@@ -78,7 +78,7 @@
    |                    | be built                       | :class:`distutils.core.Extension`                           |
    +--------------------+--------------------------------+-------------------------------------------------------------+
    | *classifiers*      | A list of categories for the   | a list of strings; valid classifiers are listed on `PyPI    |
-   |                    | package                        | <https://pypi.python.org/pypi?:action=list_classifiers>`_.  |
+   |                    | package                        | <https://pypi.org/classifiers>`_.                           |
    +--------------------+--------------------------------+-------------------------------------------------------------+
    | *distclass*        | the :class:`Distribution`      | a subclass of                                               |
    |                    | class to use                   | :class:`distutils.core.Distribution`                        |
diff --git a/Doc/distutils/builtdist.rst b/Doc/distutils/builtdist.rst
index 15ab3b3..acd499a 100644
--- a/Doc/distutils/builtdist.rst
+++ b/Doc/distutils/builtdist.rst
@@ -21,7 +21,7 @@
 intermediary species called *packagers* springs up to turn source distributions
 into built distributions for as many platforms as there are packagers.
 
-Of course, the module developer could be his own packager; or the packager could
+Of course, the module developer could be their own packager; or the packager could
 be a volunteer "out there" somewhere who has access to a platform which the
 original developer does not; or it could be software periodically grabbing new
 source distributions and turning them into built distributions for as many
diff --git a/Doc/distutils/introduction.rst b/Doc/distutils/introduction.rst
index fc6184f..488619e 100644
--- a/Doc/distutils/introduction.rst
+++ b/Doc/distutils/introduction.rst
@@ -94,7 +94,7 @@
 The archive file will be named :file:`foo-1.0.tar.gz` (or :file:`.zip`), and
 will unpack into a directory :file:`foo-1.0`.
 
-If an end-user wishes to install your :mod:`foo` module, all she has to do is
+If an end-user wishes to install your :mod:`foo` module, all they have to do is
 download :file:`foo-1.0.tar.gz` (or :file:`.zip`), unpack it, and---from the
 :file:`foo-1.0` directory---run ::
 
@@ -193,8 +193,8 @@
 module distribution
    a collection of Python modules distributed together as a single downloadable
    resource and meant to be installed *en masse*.  Examples of some well-known
-   module distributions are Numeric Python, PyXML, PIL (the Python Imaging
-   Library), or mxBase.  (This would be called a *package*, except that term is
+   module distributions are Numeric Python, PyXML, Pillow,
+   or mxBase.  (This would be called a *package*, except that term is
    already taken in the Python context: a single module distribution may contain
    zero, one, or many Python packages.)
 
diff --git a/Doc/distutils/packageindex.rst b/Doc/distutils/packageindex.rst
index 8087584..cd11f20 100644
--- a/Doc/distutils/packageindex.rst
+++ b/Doc/distutils/packageindex.rst
@@ -248,4 +248,4 @@
 successfully.
 
 
-.. _Python Package Index (PyPI): https://pypi.python.org/pypi
+.. _Python Package Index (PyPI): https://pypi.org
diff --git a/Doc/distutils/setupscript.rst b/Doc/distutils/setupscript.rst
index 6b82c40..92ab573 100644
--- a/Doc/distutils/setupscript.rst
+++ b/Doc/distutils/setupscript.rst
@@ -606,7 +606,7 @@
 (4)
     These fields should not be used if your package is to be compatible with Python
     versions prior to 2.2.3 or 2.3.  The list is available from the `PyPI website
-    <https://pypi.python.org/pypi>`_.
+    <https://pypi.org>`_.
 
 (5)
     The ``long_description`` field is used by PyPI when you are
diff --git a/Doc/docutils.conf b/Doc/docutils.conf
new file mode 100644
index 0000000..bda4f5d
--- /dev/null
+++ b/Doc/docutils.conf
@@ -0,0 +1,2 @@
+[restructuredtext parser]
+smartquotes-locales: ja: ""''
diff --git a/Doc/extending/extending.rst b/Doc/extending/extending.rst
index 32d3097..991289c 100644
--- a/Doc/extending/extending.rst
+++ b/Doc/extending/extending.rst
@@ -40,7 +40,7 @@
 
 Let's create an extension module called ``spam`` (the favorite food of Monty
 Python fans...) and let's say we want to create a Python interface to the C
-library function :c:func:`system`. [#]_ This function takes a null-terminated
+library function :c:func:`system` [#]_. This function takes a null-terminated
 character string as argument and returns an integer.  We want this function to
 be callable from Python as follows::
 
@@ -890,7 +890,7 @@
 borrower of a reference should not call :c:func:`Py_DECREF`.  The borrower must
 not hold on to the object longer than the owner from which it was borrowed.
 Using a borrowed reference after the owner has disposed of it risks using freed
-memory and should be avoided completely. [#]_
+memory and should be avoided completely [#]_.
 
 The advantage of borrowing over owning a reference is that you don't need to
 take care of disposing of the reference on all possible paths through the code
@@ -1061,7 +1061,7 @@
 
 The C function calling mechanism guarantees that the argument list passed to C
 functions (``args`` in the examples) is never *NULL* --- in fact it guarantees
-that it is always a tuple. [#]_
+that it is always a tuple [#]_.
 
 It is a severe error to ever let a *NULL* pointer "escape" to the Python user.
 
diff --git a/Doc/extending/newtypes.rst b/Doc/extending/newtypes.rst
index 6e275e5..a60c024 100644
--- a/Doc/extending/newtypes.rst
+++ b/Doc/extending/newtypes.rst
@@ -79,27 +79,26 @@
 Moving on, we come to the crunch --- the type object. ::
 
    static PyTypeObject noddy_NoddyType = {
-       PyObject_HEAD_INIT(NULL)
-       0,                         /*ob_size*/
-       "noddy.Noddy",             /*tp_name*/
-       sizeof(noddy_NoddyObject), /*tp_basicsize*/
-       0,                         /*tp_itemsize*/
-       0,                         /*tp_dealloc*/
-       0,                         /*tp_print*/
-       0,                         /*tp_getattr*/
-       0,                         /*tp_setattr*/
-       0,                         /*tp_compare*/
-       0,                         /*tp_repr*/
-       0,                         /*tp_as_number*/
-       0,                         /*tp_as_sequence*/
-       0,                         /*tp_as_mapping*/
-       0,                         /*tp_hash */
-       0,                         /*tp_call*/
-       0,                         /*tp_str*/
-       0,                         /*tp_getattro*/
-       0,                         /*tp_setattro*/
-       0,                         /*tp_as_buffer*/
-       Py_TPFLAGS_DEFAULT,        /*tp_flags*/
+       PyVarObject_HEAD_INIT(NULL, 0)
+       "noddy.Noddy",             /* tp_name */
+       sizeof(noddy_NoddyObject), /* tp_basicsize */
+       0,                         /* tp_itemsize */
+       0,                         /* tp_dealloc */
+       0,                         /* tp_print */
+       0,                         /* tp_getattr */
+       0,                         /* tp_setattr */
+       0,                         /* tp_compare */
+       0,                         /* tp_repr */
+       0,                         /* tp_as_number */
+       0,                         /* tp_as_sequence */
+       0,                         /* tp_as_mapping */
+       0,                         /* tp_hash */
+       0,                         /* tp_call */
+       0,                         /* tp_str */
+       0,                         /* tp_getattro */
+       0,                         /* tp_setattro */
+       0,                         /* tp_as_buffer */
+       Py_TPFLAGS_DEFAULT,        /* tp_flags */
        "Noddy objects",           /* tp_doc */
    };
 
@@ -111,23 +110,16 @@
 This is so important that we're going to pick the top of it apart still
 further::
 
-   PyObject_HEAD_INIT(NULL)
+   PyVarObject_HEAD_INIT(NULL, 0)
 
 This line is a bit of a wart; what we'd like to write is::
 
-   PyObject_HEAD_INIT(&PyType_Type)
+   PyVarObject_HEAD_INIT(&PyType_Type, 0)
 
 as the type of a type object is "type", but this isn't strictly conforming C and
 some compilers complain.  Fortunately, this member will be filled in for us by
 :c:func:`PyType_Ready`. ::
 
-   0,                          /* ob_size */
-
-The :attr:`ob_size` field of the header is not used; its presence in the type
-structure is a historical artifact that is maintained for binary compatibility
-with extension modules compiled for older versions of Python.  Always set this
-field to zero. ::
-
    "noddy.Noddy",              /* tp_name */
 
 The name of our type.  This will appear in the default textual representation of
@@ -135,7 +127,7 @@
 
    >>> "" + noddy.new_noddy()
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    TypeError: cannot add type "noddy.Noddy" to string
 
 Note that the name is a dotted name that includes both the module name and the
@@ -171,7 +163,7 @@
 Skipping a number of type methods that we don't provide, we set the class flags
 to :const:`Py_TPFLAGS_DEFAULT`. ::
 
-   Py_TPFLAGS_DEFAULT,        /*tp_flags*/
+   Py_TPFLAGS_DEFAULT,        /* tp_flags */
 
 All types should include this constant in their flags.  It enables all of the
 members defined by the current version of Python.
@@ -244,7 +236,7 @@
 Adding data and methods to the Basic example
 --------------------------------------------
 
-Let's expend the basic example to add some data and methods.  Let's also make
+Let's extend the basic example to add some data and methods.  Let's also make
 the type usable as a base class. We'll create a new module, :mod:`noddy2` that
 adds these capabilities:
 
@@ -284,7 +276,7 @@
    {
        Py_XDECREF(self->first);
        Py_XDECREF(self->last);
-       self->ob_type->tp_free((PyObject*)self);
+       Py_TYPE(self)->tp_free((PyObject*)self);
    }
 
 which is assigned to the :c:member:`~PyTypeObject.tp_dealloc` member::
@@ -497,7 +489,7 @@
 The method is implemented as a C function that takes a :class:`Noddy` (or
 :class:`Noddy` subclass) instance as the first argument.  Methods always take an
 instance as the first argument. Methods often take positional and keyword
-arguments as well, but in this cased we don't take any and don't need to accept
+arguments as well, but in this case we don't take any and don't need to accept
 a positional argument tuple or keyword argument dictionary. This method is
 equivalent to the Python method::
 
@@ -693,7 +685,7 @@
 the list is garbage and free it.
 
 In the second version of the :class:`Noddy` example, we allowed any kind of
-object to be stored in the :attr:`first` or :attr:`last` attributes. [#]_ This
+object to be stored in the :attr:`first` or :attr:`last` attributes [#]_. This
 means that :class:`Noddy` objects can participate in cycles::
 
    >>> import noddy2
@@ -756,8 +748,9 @@
    uniformity across these boring implementations.
 
 We also need to provide a method for clearing any subobjects that can
-participate in cycles.  We implement the method and reimplement the deallocator
-to use it::
+participate in cycles.
+
+::
 
    static int
    Noddy_clear(Noddy *self)
@@ -775,13 +768,6 @@
        return 0;
    }
 
-   static void
-   Noddy_dealloc(Noddy* self)
-   {
-       Noddy_clear(self);
-       self->ob_type->tp_free((PyObject*)self);
-   }
-
 Notice the use of a temporary variable in :c:func:`Noddy_clear`. We use the
 temporary variable so that we can set each member to *NULL* before decrementing
 its reference count.  We do this because, as was discussed earlier, if the
@@ -804,9 +790,26 @@
        return 0;
    }
 
+Note that :c:func:`Noddy_dealloc` may call arbitrary functions through
+``__del__`` method or weakref callback. It means circular GC can be
+triggered inside the function.  Since GC assumes reference count is not zero,
+we need to untrack the object from GC by calling :c:func:`PyObject_GC_UnTrack`
+before clearing members. Here is reimplemented deallocator which uses
+:c:func:`PyObject_GC_UnTrack` and :c:func:`Noddy_clear`.
+
+::
+
+   static void
+   Noddy_dealloc(Noddy* self)
+   {
+       PyObject_GC_UnTrack(self);
+       Noddy_clear(self);
+       Py_TYPE(self)->tp_free((PyObject*)self);
+   }
+
 Finally, we add the :const:`Py_TPFLAGS_HAVE_GC` flag to the class flags::
 
-   Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+   Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /* tp_flags */
 
 That's pretty much it.  If we had written custom :c:member:`~PyTypeObject.tp_alloc` or
 :c:member:`~PyTypeObject.tp_free` slots, we'd need to modify them for cyclic-garbage collection.
@@ -965,14 +968,15 @@
 
 This function is called when the reference count of the instance of your type is
 reduced to zero and the Python interpreter wants to reclaim it.  If your type
-has memory to free or other clean-up to perform, put it here.  The object itself
-needs to be freed here as well.  Here is an example of this function::
+has memory to free or other clean-up to perform, you can put it here.  The
+object itself needs to be freed here as well.  Here is an example of this
+function::
 
    static void
    newdatatype_dealloc(newdatatypeobject * obj)
    {
        free(obj->obj_UnderlyingDatatypePtr);
-       obj->ob_type->tp_free(obj);
+       Py_TYPE(obj)->tp_free(obj);
    }
 
 .. index::
@@ -1015,7 +1019,7 @@
 
            Py_DECREF(self->my_callback);
        }
-       obj->ob_type->tp_free((PyObject*)self);
+       Py_TYPE(obj)->tp_free((PyObject*)self);
    }
 
 
diff --git a/Doc/faq/design.rst b/Doc/faq/design.rst
index 0a8cfdd..8588daa 100644
--- a/Doc/faq/design.rst
+++ b/Doc/faq/design.rst
@@ -2,6 +2,11 @@
 Design and History FAQ
 ======================
 
+.. only:: html
+
+   .. contents::
+
+
 Why does Python use indentation for grouping of statements?
 -----------------------------------------------------------
 
@@ -221,24 +226,25 @@
 Why does Python use methods for some functionality (e.g. list.index()) but functions for other (e.g. len(list))?
 ----------------------------------------------------------------------------------------------------------------
 
-The major reason is history. Functions were used for those operations that were
-generic for a group of types and which were intended to work even for objects
-that didn't have methods at all (e.g. tuples).  It is also convenient to have a
-function that can readily be applied to an amorphous collection of objects when
-you use the functional features of Python (``map()``, ``zip()`` et al).
+As Guido said:
 
-In fact, implementing ``len()``, ``max()``, ``min()`` as a built-in function is
-actually less code than implementing them as methods for each type.  One can
-quibble about individual cases but it's a part of Python, and it's too late to
-make such fundamental changes now. The functions have to remain to avoid massive
-code breakage.
+    (a) For some operations, prefix notation just reads better than
+    postfix -- prefix (and infix!) operations have a long tradition in
+    mathematics which likes notations where the visuals help the
+    mathematician thinking about a problem. Compare the easy with which we
+    rewrite a formula like x*(a+b) into x*a + x*b to the clumsiness of
+    doing the same thing using a raw OO notation.
 
-.. XXX talk about protocols?
+    (b) When I read code that says len(x) I *know* that it is asking for
+    the length of something. This tells me two things: the result is an
+    integer, and the argument is some kind of container. To the contrary,
+    when I read x.len(), I have to already know that x is some kind of
+    container implementing an interface or inheriting from a class that
+    has a standard len(). Witness the confusion we occasionally have when
+    a class that is not implementing a mapping has a get() or keys()
+    method, or something that isn't a file has a write() method.
 
-.. note::
-
-   For string operations, Python has moved from external functions (the
-   ``string`` module) to methods.  However, ``len()`` is still a function.
+    -- https://mail.python.org/pipermail/python-3000/2006-November/004643.html
 
 
 Why is join() a string method instead of a list or tuple method?
@@ -391,50 +397,11 @@
 Can Python be compiled to machine code, C or some other language?
 -----------------------------------------------------------------
 
-Not easily.  Python's high level data types, dynamic typing of objects and
-run-time invocation of the interpreter (using :func:`eval` or :keyword:`exec`)
-together mean that a "compiled" Python program would probably consist mostly of
-calls into the Python run-time system, even for seemingly simple operations like
-``x+1``.
-
-Several projects described in the Python newsgroup or at past `Python
-conferences <https://www.python.org/community/workshops/>`_ have shown that this
-approach is feasible, although the speedups reached so far are only modest
-(e.g. 2x).  Jython uses the same strategy for compiling to Java bytecode.  (Jim
-Hugunin has demonstrated that in combination with whole-program analysis,
-speedups of 1000x are feasible for small demo programs.  See the proceedings
-from the `1997 Python conference
-<http://legacy.python.org/workshops/1997-10/proceedings/>`_ for more information.)
-
-Internally, Python source code is always translated into a bytecode
-representation, and this bytecode is then executed by the Python virtual
-machine.  In order to avoid the overhead of repeatedly parsing and translating
-modules that rarely change, this byte code is written into a file whose name
-ends in ".pyc" whenever a module is parsed.  When the corresponding .py file is
-changed, it is parsed and translated again and the .pyc file is rewritten.
-
-There is no performance difference once the .pyc file has been loaded, as the
-bytecode read from the .pyc file is exactly the same as the bytecode created by
-direct translation.  The only difference is that loading code from a .pyc file
-is faster than parsing and translating a .py file, so the presence of
-precompiled .pyc files improves the start-up time of Python scripts.  If
-desired, the Lib/compileall.py module can be used to create valid .pyc files for
-a given set of modules.
-
-Note that the main script executed by Python, even if its filename ends in .py,
-is not compiled to a .pyc file.  It is compiled to bytecode, but the bytecode is
-not saved to a file.  Usually main scripts are quite short, so this doesn't cost
-much speed.
-
-.. XXX check which of these projects are still alive
-
-There are also several programs which make it easier to intermingle Python and C
-code in various ways to increase performance.  See, for example, `Cython <http://cython.org/>`_ , `Psyco
-<http://psyco.sourceforge.net/>`_, `Pyrex
-<https://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/>`_, `PyInline
-<http://pyinline.sourceforge.net/>`_, `Py2Cmod
-<http://sourceforge.net/projects/py2cmod/>`_, and
-`Weave <https://docs.scipy.org/doc/scipy-dev/reference/tutorial/weave.html>`_.
+`Cython <http://cython.org/>`_ compiles a modified version of Python with
+optional annotations into C extensions.  `Nuitka <http://www.nuitka.net/>`_ is
+an up-and-coming compiler of Python into C++ code, aiming to support the full
+Python language. For compiling to Java you can consider
+`VOC <https://voc.readthedocs.io>`_.
 
 
 How does Python manage memory?
@@ -537,10 +504,10 @@
 dictionary keys, and hence only tuples and not lists can be used as keys.
 
 
-How are lists implemented?
---------------------------
+How are lists implemented in CPython?
+-------------------------------------
 
-Python's lists are really variable-length arrays, not Lisp-style linked lists.
+CPython's lists are really variable-length arrays, not Lisp-style linked lists.
 The implementation uses a contiguous array of references to other objects, and
 keeps a pointer to this array and the array's length in a list head structure.
 
@@ -553,10 +520,10 @@
 times don't require an actual resize.
 
 
-How are dictionaries implemented?
----------------------------------
+How are dictionaries implemented in CPython?
+--------------------------------------------
 
-Python's dictionaries are implemented as resizable hash tables.  Compared to
+CPython's dictionaries are implemented as resizable hash tables.  Compared to
 B-trees, this gives better performance for lookup (the most common operation by
 far) under most circumstances, and the implementation is simpler.
 
diff --git a/Doc/faq/extending.rst b/Doc/faq/extending.rst
index c380645..4be58d6 100644
--- a/Doc/faq/extending.rst
+++ b/Doc/faq/extending.rst
@@ -56,7 +56,7 @@
 <https://riverbankcomputing.com/software/sip/intro>`__, `CXX
 <http://cxx.sourceforge.net/>`_ `Boost
 <http://www.boost.org/libs/python/doc/index.html>`_, or `Weave
-<https://scipy.github.io/devdocs/tutorial/weave.html>`_ are also
+<https://github.com/scipy/weave>`_ are also
 alternatives for wrapping C++ libraries.
 
 
diff --git a/Doc/faq/general.rst b/Doc/faq/general.rst
index 2de378d..eb1bd16 100644
--- a/Doc/faq/general.rst
+++ b/Doc/faq/general.rst
@@ -117,7 +117,7 @@
 Python code), and operating system interfaces (system calls, filesystems, TCP/IP
 sockets).  Look at the table of contents for :ref:`library-index` to get an idea
 of what's available.  A wide variety of third-party extensions are also
-available.  Consult `the Python Package Index <https://pypi.python.org/pypi>`_ to
+available.  Consult `the Python Package Index <https://pypi.org>`_ to
 find packages of interest to you.
 
 
@@ -159,7 +159,7 @@
 
 The latest Python source distribution is always available from python.org, at
 https://www.python.org/downloads/.  The latest development sources can be obtained
-via anonymous Mercurial access at https://hg.python.org/cpython.
+at https://github.com/python/cpython/.
 
 The source distribution is a gzipped tar file containing the complete C source,
 Sphinx-formatted documentation, Python library modules, example programs, and
@@ -222,8 +222,8 @@
 newsgroups and on the Python home page at https://www.python.org/; an RSS feed of
 news is available.
 
-You can also access the development version of Python through Mercurial.  See
-https://docs.python.org/devguide/faq.html for details.
+You can also access the development version of Python through Git.  See
+`The Python Developer's Guide <https://docs.python.org/devguide/>`_ for details.
 
 
 How do I submit bug reports and patches for Python?
diff --git a/Doc/faq/gui.rst b/Doc/faq/gui.rst
index 832c1e0..9228fdd 100644
--- a/Doc/faq/gui.rst
+++ b/Doc/faq/gui.rst
@@ -70,15 +70,6 @@
 powerful and mature cross-platform windowing system, are available from `the
 PyFLTK project <http://pyfltk.sourceforge.net>`_.
 
-
-FOX
-----
-
-A wrapper for `the FOX toolkit <http://www.fox-toolkit.org/>`_ called `FXpy
-<http://fxpy.sourceforge.net/>`_ is available.  FOX supports both Unix variants
-and Windows.
-
-
 OpenGL
 ------
 
diff --git a/Doc/faq/library.rst b/Doc/faq/library.rst
index d1b3efb..a259465 100644
--- a/Doc/faq/library.rst
+++ b/Doc/faq/library.rst
@@ -19,7 +19,7 @@
 library and will be able to skip this step.)
 
 For third-party packages, search the `Python Package Index
-<https://pypi.python.org/pypi>`_ or try `Google <https://www.google.com>`_ or
+<https://pypi.org>`_ or try `Google <https://www.google.com>`_ or
 another Web search engine.  Searching for "Python" plus a keyword or two for
 your topic of interest will usually find something helpful.
 
@@ -585,7 +585,7 @@
 ("ptys") instead of pipes. Or you can use a Python interface to Don Libes'
 "expect" library.  A Python extension that interfaces to expect is called "expy"
 and available from http://expectpy.sourceforge.net.  A pure Python solution that
-works like expect is `pexpect <https://pypi.python.org/pypi/pexpect/>`_.
+works like expect is `pexpect <https://pypi.org/project/pexpect/>`_.
 
 
 How do I access the serial (RS232) port?
diff --git a/Doc/faq/windows.rst b/Doc/faq/windows.rst
index 25c73b8..f8e23cf 100644
--- a/Doc/faq/windows.rst
+++ b/Doc/faq/windows.rst
@@ -295,7 +295,7 @@
 size" to 4, and select the "Insert spaces" radio button.
 
 If you suspect mixed tabs and spaces are causing problems in leading whitespace,
-run Python with the :option:`-t` switch or run ``Tools/Scripts/tabnanny.py`` to
+run Python with the :option:`-t` switch or run the :mod:`tabnanny` module to
 check a directory tree in batch mode.
 
 
diff --git a/Doc/glossary.rst b/Doc/glossary.rst
index cbd1237..9e6bf23 100644
--- a/Doc/glossary.rst
+++ b/Doc/glossary.rst
@@ -14,8 +14,9 @@
 
    ``...``
       The default Python prompt of the interactive shell when entering code for
-      an indented code block or within a pair of matching left and right
-      delimiters (parentheses, square brackets or curly braces).
+      an indented code block, when within a pair of matching left and right
+      delimiters (parentheses, square brackets, curly braces or triple quotes),
+      or after specifying a decorator.
 
    2to3
       A tool that tries to convert Python 2.x code to Python 3.x code by
@@ -296,7 +297,7 @@
       the :func:`next` function. Each :keyword:`yield` temporarily suspends
       processing, remembering the location execution state (including local
       variables and pending try-statements).  When the generator resumes, it
-      picks-up where it left-off (in contrast to functions which start fresh on
+      picks up where it left off (in contrast to functions which start fresh on
       every invocation).
 
       .. index:: single: generator expression
@@ -457,7 +458,7 @@
    lambda
       An anonymous inline function consisting of a single :term:`expression`
       which is evaluated when the function is called.  The syntax to create
-      a lambda function is ``lambda [arguments]: expression``
+      a lambda function is ``lambda [parameters]: expression``
 
    LBYL
       Look before you leap.  This coding style explicitly tests for
@@ -474,7 +475,7 @@
    list
       A built-in Python :term:`sequence`.  Despite its name it is more akin
       to an array in other languages than to a linked list since access to
-      elements are O(1).
+      elements is O(1).
 
    list comprehension
       A compact way to process all or part of the elements in a sequence and
@@ -625,6 +626,21 @@
       :ref:`the difference between arguments and parameters
       <faq-argument-vs-parameter>`, and the :ref:`function` section.
 
+   PEP
+      Python Enhancement Proposal. A PEP is a design document
+      providing information to the Python community, or describing a new
+      feature for Python or its processes or environment. PEPs should
+      provide a concise technical specification and a rationale for proposed
+      features.
+
+      PEPs are intended to be the primary mechanisms for proposing major new
+      features, for collecting community input on an issue, and for documenting
+      the design decisions that have gone into Python. The PEP author is
+      responsible for building consensus within the community and documenting
+      dissenting opinions.
+
+      See :pep:`1`.
+
    positional argument
       See :term:`argument`.
 
@@ -694,7 +710,7 @@
 
    struct sequence
       A tuple with named elements. Struct sequences expose an interface similiar
-      to :term:`named tuple` in that elements can either be accessed either by
+      to :term:`named tuple` in that elements can be accessed either by
       index or as an attribute. However, they do not have any of the named tuple
       methods like :meth:`~collections.somenamedtuple._make` or
       :meth:`~collections.somenamedtuple._asdict`. Examples of struct sequences
diff --git a/Doc/howto/argparse.rst b/Doc/howto/argparse.rst
index 02bfc70..63b0b28 100644
--- a/Doc/howto/argparse.rst
+++ b/Doc/howto/argparse.rst
@@ -223,7 +223,7 @@
 Introducing Optional arguments
 ==============================
 
-So far we, have been playing with positional arguments. Let us
+So far we have been playing with positional arguments. Let us
 have a look on how to add optional ones::
 
    import argparse
diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst
index 493f6ae..37ba6a8 100644
--- a/Doc/howto/descriptor.rst
+++ b/Doc/howto/descriptor.rst
@@ -258,10 +258,10 @@
 
     class Cell(object):
         . . .
-        def getvalue(self, obj):
-            "Recalculate cell before returning value"
+        def getvalue(self):
+            "Recalculate the cell before returning value"
             self.recalc()
-            return obj._value
+            return self._value
         value = property(getvalue)
 
 
diff --git a/Doc/howto/doanddont.rst b/Doc/howto/doanddont.rst
index 98dbad1..35e1583 100644
--- a/Doc/howto/doanddont.rst
+++ b/Doc/howto/doanddont.rst
@@ -285,7 +285,7 @@
 for some reason: :func:`min` and :func:`max` can find the minimum/maximum of
 any sequence with comparable semantics, for example, yet many people write
 their own :func:`max`/:func:`min`. Another highly useful function is
-:func:`reduce` which can be used to repeatly apply a binary operation to a
+:func:`reduce` which can be used to repeatedly apply a binary operation to a
 sequence, reducing it to a single value.  For example, compute a factorial
 with a series of multiply operations::
 
diff --git a/Doc/howto/functional.rst b/Doc/howto/functional.rst
index ee9a5f6d..a06e29c 100644
--- a/Doc/howto/functional.rst
+++ b/Doc/howto/functional.rst
@@ -207,7 +207,7 @@
     3
     >>> it.next()
     Traceback (most recent call last):
-      File "<stdin>", line 1, in ?
+      File "<stdin>", line 1, in <module>
     StopIteration
     >>>
 
@@ -477,7 +477,7 @@
     2
     >>> gen.next()
     Traceback (most recent call last):
-      File "stdin", line 1, in ?
+      File "stdin", line 1, in <module>
       File "stdin", line 2, in generate_ints
     StopIteration
 
@@ -581,7 +581,7 @@
     9
     >>> print it.next()
     Traceback (most recent call last):
-      File "t.py", line 15, in ?
+      File "t.py", line 15, in <module>
         print it.next()
     StopIteration
 
diff --git a/Doc/howto/logging-cookbook.rst b/Doc/howto/logging-cookbook.rst
index b7f0fa5..50ff76e 100644
--- a/Doc/howto/logging-cookbook.rst
+++ b/Doc/howto/logging-cookbook.rst
@@ -650,7 +650,7 @@
 -------------------
 
 .. sectionauthor:: Doug Hellmann, Vinay Sajip (changes)
-.. (see <http://blog.doughellmann.com/2007/05/pymotw-logging.html>)
+.. (see <https://pymotw.com/3/logging/>)
 
 Sometimes you want to let a log file grow to a certain size, then open a new
 file and log to that. You may want to keep a certain number of these files, and
@@ -814,7 +814,7 @@
 -------------------------------
 
 Although most logging messages are intended for reading by humans, and thus not
-readily machine-parseable, there might be cirumstances where you want to output
+readily machine-parseable, there might be circumstances where you want to output
 messages in a structured format which *is* capable of being parsed by a program
 (without needing complex regular expressions to parse the log message). This is
 straightforward to achieve using the logging package. There are a number of
@@ -1179,8 +1179,8 @@
 -------------------------
 
 There might be situations when it is desirable to have logging messages rendered
-in an audible rather than a visible format. This is easy to do if you have text-
-to-speech (TTS) functionality available in your system, even if it doesn't have
+in an audible rather than a visible format. This is easy to do if you have
+text-to-speech (TTS) functionality available in your system, even if it doesn't have
 a Python binding. Most TTS systems have a command line program you can run, and
 this can be invoked from a handler using :mod:`subprocess`. It's assumed here
 that TTS command line programs won't expect to interact with users or take a
diff --git a/Doc/howto/pyporting.rst b/Doc/howto/pyporting.rst
index 59b283a..88b0177 100644
--- a/Doc/howto/pyporting.rst
+++ b/Doc/howto/pyporting.rst
@@ -17,7 +17,8 @@
    please see :ref:`cporting-howto`.
 
    If you would like to read one core Python developer's take on why Python 3
-   came into existence, you can read Nick Coghlan's `Python 3 Q & A`_.
+   came into existence, you can read Nick Coghlan's `Python 3 Q & A`_ or
+   Brett Cannon's `Why Python 3 exists`_.
 
    For help with porting, you can email the python-porting_ mailing list with
    questions.
@@ -28,24 +29,21 @@
 To make your project be single-source Python 2/3 compatible, the basic steps
 are:
 
-#. Update your code to drop support for Python 2.5 or older (supporting only
-   Python 2.7 is ideal)
+#. Only worry about supporting Python 2.7
 #. Make sure you have good test coverage (coverage.py_ can help;
    ``pip install coverage``)
 #. Learn the differences between Python 2 & 3
-#. Use Modernize_ or Futurize_ to update your code (``pip install modernize`` or
-   ``pip install future``, respectively)
+#. Use Futurize_ (or Modernize_) to update your code (e.g. ``pip install future``)
 #. Use Pylint_ to help make sure you don't regress on your Python 3 support
-   (if only supporting Python 2.7/3.4 or newer; ``pip install pylint``)
+   (``pip install pylint``)
 #. Use caniusepython3_ to find out which of your dependencies are blocking your
    use of Python 3 (``pip install caniusepython3``)
 #. Once your dependencies are no longer blocking you, use continuous integration
    to make sure you stay compatible with Python 2 & 3 (tox_ can help test
    against multiple versions of Python; ``pip install tox``)
-
-If you are dropping support for Python 2 entirely, then after you learn the
-differences between Python 2 & 3 you can run 2to3_ over your code and skip the
-rest of the steps outlined above.
+#. Consider using optional static type checking to make sure your type usage
+   works in both Python 2 & 3 (e.g. use mypy_ to check your typing under both
+   Python 2 & Python 3).
 
 
 Details
@@ -55,7 +53,7 @@
 **today**! Even if your dependencies are not supporting Python 3 yet that does
 not mean you can't modernize your code **now** to support Python 3. Most changes
 required to support Python 3 lead to cleaner code using newer practices even in
-Python 2.
+Python 2 code.
 
 Another key point is that modernizing your Python 2 code to also support
 Python 3 is largely automated for you. While you might have to make some API
@@ -67,26 +65,28 @@
 your code to support Python 2 & 3 simultaneously.
 
 
-Drop support for Python 2.5 and older (at least)
-------------------------------------------------
+Drop support for Python 2.6 and older
+-------------------------------------
 
 While you can make Python 2.5 work with Python 3, it is **much** easier if you
-only have to work with Python 2.6 or newer (and easier still if you only have
-to work with Python 2.7). If dropping Python 2.5 is not an option then the six_
-project can help you support Python 2.5 & 3 simultaneously
+only have to work with Python 2.7. If dropping Python 2.5 is not an
+option then the six_ project can help you support Python 2.5 & 3 simultaneously
 (``pip install six``). Do realize, though, that nearly all the projects listed
 in this HOWTO will not be available to you.
 
-If you are able to only support Python 2.6 or newer, then the required changes
+If you are able to skip Python 2.5 and older, then the required changes
 to your code should continue to look and feel like idiomatic Python code. At
 worst you will have to use a function instead of a method in some instances or
 have to import a function instead of using a built-in one, but otherwise the
 overall transformation should not feel foreign to you.
 
-But please aim for Python 2.7. Bugfixes for that version of Python will continue
-until 2020 while Python 2.6 is no longer supported. There are also some tools
-mentioned in this HOWTO which do not support Python 2.6 (e.g., Pylint_), and
-this will become more commonplace as time goes on.
+But you should aim for only supporting Python 2.7. Python 2.6 is no longer
+freely supported and thus is not receiving bugfixes. This means **you** will have
+to work around any issues you come across with Python 2.6. There are also some
+tools mentioned in this HOWTO which do not support Python 2.6 (e.g., Pylint_),
+and this will become more commonplace as time goes on. It will simply be easier
+for you if you only support the versions of Python that you have to support.
+
 
 Make sure you specify the proper version support in your ``setup.py`` file
 --------------------------------------------------------------------------
@@ -98,6 +98,7 @@
 also specify each major/minor version of Python that you do support, e.g.
 ``Programming Language :: Python :: 2.7``.
 
+
 Have good test coverage
 -----------------------
 
@@ -106,9 +107,10 @@
 thumb is that if you want to be confident enough in your test suite that any
 failures that appear after having tools rewrite your code are actual bugs in the
 tools and not in your code. If you want a number to aim for, try to get over 80%
-coverage (and don't feel bad if you can't easily get past 90%). If you
-don't already have a tool to measure test coverage then coverage.py_ is
-recommended.
+coverage (and don't feel bad if you find it hard to get better than 90%
+coverage). If you don't already have a tool to measure test coverage then
+coverage.py_ is recommended.
+
 
 Learn the differences between Python 2 & 3
 -------------------------------------------
@@ -127,13 +129,15 @@
 
 Once you feel like you know what is different in Python 3 compared to Python 2,
 it's time to update your code! You have a choice between two tools in porting
-your code automatically: Modernize_ and Futurize_. Which tool you choose will
+your code automatically: Futurize_ and Modernize_. Which tool you choose will
 depend on how much like Python 3 you want your code to be. Futurize_ does its
 best to make Python 3 idioms and practices exist in Python 2, e.g. backporting
 the ``bytes`` type from Python 3 so that you have semantic parity between the
 major versions of Python. Modernize_,
 on the other hand, is more conservative and targets a Python 2/3 subset of
-Python, relying on six_ to help provide compatibility.
+Python, directly relying on six_ to help provide compatibility. As Python 3 is
+the future, it might be best to consider Futurize to begin adjusting to any new
+practices that Python 3 introduces which you are not accustomed to yet.
 
 Regardless of which tool you choose, they will update your code to run under
 Python 3 while staying compatible with the version of Python 2 you started with.
@@ -153,6 +157,7 @@
 though, there are only a couple of things to watch out for which can be
 considered large issues that may be hard to debug if not watched for.
 
+
 Division
 ++++++++
 
@@ -169,8 +174,10 @@
    division or continue using ``/`` and expect a float
 
 The reason that ``/`` isn't simply translated to ``//`` automatically is that if
-an object defines its own ``__div__`` method but not ``__floordiv__`` then your
-code would begin to fail.
+an object defines a ``__truediv__`` method but not ``__floordiv__`` then your
+code would begin to fail (e.g. a user-defined class that uses ``/`` to
+signify some operation but not ``//`` for the same thing or at all).
+
 
 Text versus binary data
 +++++++++++++++++++++++
@@ -188,7 +195,7 @@
 pronounced, Python 3 did what most languages created in the age of the internet
 have done and made text and binary data distinct types that cannot blindly be
 mixed together (Python predates widespread access to the internet). For any code
-that only deals with text or only binary data, this separation doesn't pose an
+that deals only with text or only binary data, this separation doesn't pose an
 issue. But for code that has to deal with both, it does mean you might have to
 now care about when you are using text compared to binary data, which is why
 this cannot be entirely automated.
@@ -197,22 +204,21 @@
 (it is **highly** recommended you don't design APIs that can take both due to
 the difficulty of keeping the code working; as stated earlier it is difficult to
 do well). In Python 2 this means making sure the APIs that take text can work
-with ``unicode`` in Python 2 and those that work with binary data work with the
-``bytes`` type from Python 3 and thus a subset of ``str`` in Python 2 (which the
-``bytes`` type in Python 2 is an alias for). Usually the biggest issue is
-realizing which methods exist for which types in Python 2 & 3 simultaneously
+with ``unicode`` and those that work with binary data work with the
+``bytes`` type from Python 3 (which is a subset of ``str`` in Python 2 and acts
+as an alias for ``bytes`` type in Python 2). Usually the biggest issue is
+realizing which methods exist on which types in Python 2 & 3 simultaneously
 (for text that's ``unicode`` in Python 2 and ``str`` in Python 3, for binary
 that's ``str``/``bytes`` in Python 2 and ``bytes`` in Python 3). The following
 table lists the **unique** methods of each data type across Python 2 & 3
 (e.g., the ``decode()`` method is usable on the equivalent binary data type in
-either Python 2 or 3, but it can't be used by the text data type consistently
-between Python 2 and 3 because ``str`` in Python 3 doesn't have the method).
+either Python 2 or 3, but it can't be used by the textual data type consistently
+between Python 2 and 3 because ``str`` in Python 3 doesn't have the method). Do
+note that as of Python 3.5 the ``__mod__`` method was added to the bytes type.
 
 ======================== =====================
 **Text data**            **Binary data**
 ------------------------ ---------------------
-__mod__ (``%`` operator)
------------------------- ---------------------
 \                        decode
 ------------------------ ---------------------
 encode
@@ -232,10 +238,11 @@
 having to keep track of what type of data you are working with.
 
 The next issue is making sure you know whether the string literals in your code
-represent text or binary data. At minimum you should add a ``b`` prefix to any
-literal that presents binary data. For text you should either use the
-``from __future__ import unicode_literals`` statement or add a ``u`` prefix to
-the text literal.
+represent text or binary data. You should add a ``b`` prefix to any
+literal that presents binary data. For text you should add a ``u`` prefix to
+the text literal. (there is a :mod:`__future__` import to force all unspecified
+literals to be Unicode, but usage has shown it isn't as effective as adding a
+``b`` or ``u`` prefix to all literals explicitly)
 
 As part of this dichotomy you also need to be careful about opening files.
 Unless you have been working on Windows, there is a chance you have not always
@@ -243,11 +250,13 @@
 binary reading).  Under Python 3, binary files and text files are clearly
 distinct and mutually incompatible; see the :mod:`io` module for details.
 Therefore, you **must** make a decision of whether a file will be used for
-binary access (allowing binary data to be read and/or written) or text access
+binary access (allowing binary data to be read and/or written) or textual access
 (allowing text data to be read and/or written). You should also use :func:`io.open`
 for opening files instead of the built-in :func:`open` function as the :mod:`io`
 module is consistent from Python 2 to 3 while the built-in :func:`open` function
-is not (in Python 3 it's actually :func:`io.open`).
+is not (in Python 3 it's actually :func:`io.open`). Do not bother with the
+outdated practice of using :func:`codecs.open` as that's only necessary for
+keeping compatibility with Python 2.5.
 
 The constructors of both ``str`` and ``bytes`` have different semantics for the
 same arguments between Python 2 & 3. Passing an integer to ``bytes`` in Python 2
@@ -274,13 +283,58 @@
 #. Make sure that your code that works with text also works with ``unicode`` and
    code for binary data works with ``bytes`` in Python 2 (see the table above
    for what methods you cannot use for each type)
-#. Mark all binary literals with a ``b`` prefix, use a ``u`` prefix or
-   :mod:`__future__` import statement for text literals
+#. Mark all binary literals with a ``b`` prefix, textual literals with a ``u``
+   prefix
 #. Decode binary data to text as soon as possible, encode text as binary data as
    late as possible
 #. Open files using :func:`io.open` and make sure to specify the ``b`` mode when
    appropriate
-#. Be careful when indexing binary data
+#. Be careful when indexing into binary data
+
+
+Use feature detection instead of version detection
+++++++++++++++++++++++++++++++++++++++++++++++++++
+
+Inevitably you will have code that has to choose what to do based on what
+version of Python is running. The best way to do this is with feature detection
+of whether the version of Python you're running under supports what you need.
+If for some reason that doesn't work then you should make the version check be
+against Python 2 and not Python 3. To help explain this, let's look at an
+example.
+
+Let's pretend that you need access to a feature of importlib_ that
+is available in Python's standard library since Python 3.3 and available for
+Python 2 through importlib2_ on PyPI. You might be tempted to write code to
+access e.g. the ``importlib.abc`` module by doing the following::
+
+  import sys
+
+  if sys.version_info[0] == 3:
+      from importlib import abc
+  else:
+      from importlib2 import abc
+
+The problem with this code is what happens when Python 4 comes out? It would
+be better to treat Python 2 as the exceptional case instead of Python 3 and
+assume that future Python versions will be more compatible with Python 3 than
+Python 2::
+
+  import sys
+
+  if sys.version_info[0] > 2:
+      from importlib import abc
+  else:
+      from importlib2 import abc
+
+The best solution, though, is to do no version detection at all and instead rely
+on feature detection. That avoids any potential issues of getting the version
+detection wrong and helps keep you future-compatible::
+
+  try:
+      from importlib import abc
+  except ImportError:
+      from importlib2 import abc
+
 
 Prevent compatibility regressions
 ---------------------------------
@@ -296,14 +350,12 @@
     from __future__ import absolute_import
     from __future__ import division
     from __future__ import print_function
-    from __future__ import unicode_literals
 
 You can also run Python 2 with the ``-3`` flag to be warned about various
 compatibility issues your code triggers during execution. If you turn warnings
 into errors with ``-Werror`` then you can make sure that you don't accidentally
 miss a warning.
 
-
 You can also use the Pylint_ project and its ``--py3k`` flag to lint your code
 to receive warnings when your code begins to deviate from Python 3
 compatibility. This also prevents you from having to run Modernize_ or Futurize_
@@ -320,22 +372,23 @@
 project was created to help you determine which projects
 -- directly or indirectly -- are blocking you from supporting Python 3. There
 is both a command-line tool as well as a web interface at
-https://caniusepython3.com .
+https://caniusepython3.com.
 
 The project also provides code which you can integrate into your test suite so
 that you will have a failing test when you no longer have dependencies blocking
 you from using Python 3. This allows you to avoid having to manually check your
 dependencies and to be notified quickly when you can start running on Python 3.
 
+
 Update your ``setup.py`` file to denote Python 3 compatibility
 --------------------------------------------------------------
 
 Once your code works under Python 3, you should update the classifiers in
 your ``setup.py`` to contain ``Programming Language :: Python :: 3`` and to not
-specify sole Python 2 support. This will tell
-anyone using your code that you support Python 2 **and** 3. Ideally you will
-also want to add classifiers for each major/minor version of Python you now
-support.
+specify sole Python 2 support. This will tell anyone using your code that you
+support Python 2 **and** 3. Ideally you will also want to add classifiers for
+each major/minor version of Python you now support.
+
 
 Use continuous integration to stay compatible
 ---------------------------------------------
@@ -347,10 +400,12 @@
 Python 2 or 3 support.
 
 You may also want to use the ``-bb`` flag with the Python 3 interpreter to
-trigger an exception when you are comparing bytes to strings. Usually it's
-simply ``False``, but if you made a mistake in your separation of text/binary
-data handling you may be accidentally comparing text and binary data. This flag
-will raise an exception when that occurs to help track down such cases.
+trigger an exception when you are comparing bytes to strings or bytes to an int
+(the latter is available starting in Python 3.5). By default type-differing
+comparisons simply return ``False``, but if you made a mistake in your
+separation of text/binary data handling or indexing on bytes you wouldn't easily
+find the mistake. This flag will raise an exception when these kinds of
+comparisons occur, making the mistake much easier to track down.
 
 And that's mostly it! At this point your code base is compatible with both
 Python 2 and 3 simultaneously. Your testing will also be set up so that you
@@ -358,35 +413,40 @@
 you typically run your tests under while developing.
 
 
-Dropping Python 2 support completely
-====================================
+Consider using optional static type checking
+--------------------------------------------
 
-If you are able to fully drop support for Python 2, then the steps required
-to transition to Python 3 simplify greatly.
-
-#. Update your code to only support Python 2.7
-#. Make sure you have good test coverage (coverage.py_ can help)
-#. Learn the differences between Python 2 & 3
-#. Use 2to3_ to rewrite your code to run only under Python 3
-
-After this your code will be fully Python 3 compliant but in a way that is not
-supported by Python 2. You should also update the classifiers in your
-``setup.py`` to contain ``Programming Language :: Python :: 3 :: Only``.
+Another way to help port your code is to use a static type checker like
+mypy_ or pytype_ on your code. These tools can be used to analyze your code as
+if it's being run under Python 2, then you can run the tool a second time as if
+your code is running under Python 3. By running a static type checker twice like
+this you can discover if you're e.g. misusing binary data type in one version
+of Python compared to another. If you add optional type hints to your code you
+can also explicitly state whether your APIs use textual or binary data, helping
+to make sure everything functions as expected in both versions of Python.
 
 
 .. _2to3: https://docs.python.org/3/library/2to3.html
-.. _caniusepython3: https://pypi.python.org/pypi/caniusepython3
+.. _caniusepython3: https://pypi.org/project/caniusepython3
 .. _cheat sheet: http://python-future.org/compatible_idioms.html
-.. _coverage.py: https://pypi.python.org/pypi/coverage
+.. _coverage.py: https://pypi.org/project/coverage
 .. _Futurize: http://python-future.org/automatic_conversion.html
+.. _importlib: https://docs.python.org/3/library/importlib.html#module-importlib
+.. _importlib2: https://pypi.org/project/importlib2
 .. _Modernize: https://python-modernize.readthedocs.org/en/latest/
+.. _mypy: http://mypy-lang.org/
 .. _Porting to Python 3: http://python3porting.com/
-.. _Pylint: https://pypi.python.org/pypi/pylint
+.. _Pylint: https://pypi.org/project/pylint
+
 .. _Python 3 Q & A: https://ncoghlan-devs-python-notes.readthedocs.org/en/latest/python3/questions_and_answers.html
 
+.. _pytype: https://github.com/google/pytype
 .. _python-future: http://python-future.org/
 .. _python-porting: https://mail.python.org/mailman/listinfo/python-porting
-.. _six: https://pypi.python.org/pypi/six
-.. _tox: https://pypi.python.org/pypi/tox
-.. _trove classifier: https://pypi.python.org/pypi?%3Aaction=list_classifiers
+.. _six: https://pypi.org/project/six
+.. _tox: https://pypi.org/project/tox
+.. _trove classifier: https://pypi.org/classifiers
+
 .. _"What's New": https://docs.python.org/3/whatsnew/index.html
+
+.. _Why Python 3 exists: http://www.snarky.ca/why-python-3-exists
diff --git a/Doc/howto/regex.rst b/Doc/howto/regex.rst
index 0d0e9f5..082fc01 100644
--- a/Doc/howto/regex.rst
+++ b/Doc/howto/regex.rst
@@ -840,7 +840,7 @@
 
 For example, the following RE detects doubled words in a string. ::
 
-   >>> p = re.compile(r'(\b\w+)\s+\1')
+   >>> p = re.compile(r'\b(\w+)\s+\1\b')
    >>> p.search('Paris in the the spring').group()
    'the the'
 
@@ -947,9 +947,9 @@
 instead of the number. This is another Python extension: ``(?P=name)`` indicates
 that the contents of the group called *name* should again be matched at the
 current point.  The regular expression for finding doubled words,
-``(\b\w+)\s+\1`` can also be written as ``(?P<word>\b\w+)\s+(?P=word)``::
+``\b(\w+)\s+\1\b`` can also be written as ``\b(?P<word>\w+)\s+(?P=word)\b``::
 
-   >>> p = re.compile(r'(?P<word>\b\w+)\s+(?P=word)')
+   >>> p = re.compile(r'\b(?P<word>\w+)\s+(?P=word)\b')
    >>> p.search('Paris in the the spring').group()
    'the the'
 
diff --git a/Doc/howto/unicode.rst b/Doc/howto/unicode.rst
index bf7ebff..6724039 100644
--- a/Doc/howto/unicode.rst
+++ b/Doc/howto/unicode.rst
@@ -43,9 +43,9 @@
 machines assigned values between 128 and 255 to accented characters.  Different
 machines had different codes, however, which led to problems exchanging files.
 Eventually various commonly used sets of values for the 128--255 range emerged.
-Some were true standards, defined by the International Standards Organization,
-and some were **de facto** conventions that were invented by one company or
-another and managed to catch on.
+Some were true standards, defined by the International Organization for
+Standardization, and some were *de facto* conventions that were invented by one
+company or another and managed to catch on.
 
 255 characters aren't very many.  For example, you can't fit both the accented
 characters used in Western Europe and the Cyrillic alphabet used for Russian
diff --git a/Doc/howto/urllib2.rst b/Doc/howto/urllib2.rst
index f6cba75..ce63948 100644
--- a/Doc/howto/urllib2.rst
+++ b/Doc/howto/urllib2.rst
@@ -34,8 +34,8 @@
 on. These are provided by objects called handlers and openers.
 
 urllib2 supports fetching URLs for many "URL schemes" (identified by the string
-before the ":" in URL - for example "ftp" is the URL scheme of
-"ftp://python.org/") using their associated network protocols (e.g. FTP, HTTP).
+before the ``":"`` in URL - for example ``"ftp"`` is the URL scheme of
+``"ftp://python.org/"``) using their associated network protocols (e.g. FTP, HTTP).
 This tutorial focuses on the most common case, HTTP.
 
 For straightforward situations *urlopen* is very easy to use. But as soon as you
@@ -203,7 +203,7 @@
 
     >>> req = urllib2.Request('http://www.pretend_server.org')
     >>> try: urllib2.urlopen(req)
-    ... except URLError as e:
+    ... except urllib2.URLError as e:
     ...    print e.reason   #doctest: +SKIP
     ...
     (4, 'getaddrinfo failed')
@@ -498,10 +498,10 @@
 
 ``top_level_url`` is in fact *either* a full URL (including the 'http:' scheme
 component and the hostname and optionally the port number)
-e.g. "http://example.com/" *or* an "authority" (i.e. the hostname,
-optionally including the port number) e.g. "example.com" or "example.com:8080"
+e.g. ``"http://example.com/"`` *or* an "authority" (i.e. the hostname,
+optionally including the port number) e.g. ``"example.com"`` or ``"example.com:8080"``
 (the latter example includes a port number).  The authority, if present, must
-NOT contain the "userinfo" component - for example "joe:password@example.com" is
+NOT contain the "userinfo" component - for example ``"joe:password@example.com"`` is
 not correct.
 
 
diff --git a/Doc/howto/webservers.rst b/Doc/howto/webservers.rst
index a555083..5071a8a 100644
--- a/Doc/howto/webservers.rst
+++ b/Doc/howto/webservers.rst
@@ -301,7 +301,7 @@
     WSGIServer(app).run()
 
 This is a simple WSGI application, but you need to install `flup
-<https://pypi.python.org/pypi/flup/1.0>`_ first, as flup handles the low level
+<https://pypi.org/project/flup/1.0>`_ first, as flup handles the low level
 FastCGI access.
 
 .. seealso::
@@ -583,7 +583,7 @@
      helps with choosing a method for saving data
 
    * `SQLAlchemy <http://www.sqlalchemy.org/>`_, the most powerful OR-Mapper
-     for Python, and `Elixir <https://pypi.python.org/pypi/Elixir>`_, which makes
+     for Python, and `Elixir <https://pypi.org/project/Elixir>`_, which makes
      SQLAlchemy easier to use
 
    * `SQLObject <http://www.sqlobject.org/>`_, another popular OR-Mapper
diff --git a/Doc/includes/noddy.c b/Doc/includes/noddy.c
index ec2d669..9d80bbe 100644
--- a/Doc/includes/noddy.c
+++ b/Doc/includes/noddy.c
@@ -6,27 +6,26 @@
 } noddy_NoddyObject;
 
 static PyTypeObject noddy_NoddyType = {
-    PyObject_HEAD_INIT(NULL)
-    0,                         /*ob_size*/
-    "noddy.Noddy",             /*tp_name*/
-    sizeof(noddy_NoddyObject), /*tp_basicsize*/
-    0,                         /*tp_itemsize*/
-    0,                         /*tp_dealloc*/
-    0,                         /*tp_print*/
-    0,                         /*tp_getattr*/
-    0,                         /*tp_setattr*/
-    0,                         /*tp_compare*/
-    0,                         /*tp_repr*/
-    0,                         /*tp_as_number*/
-    0,                         /*tp_as_sequence*/
-    0,                         /*tp_as_mapping*/
-    0,                         /*tp_hash */
-    0,                         /*tp_call*/
-    0,                         /*tp_str*/
-    0,                         /*tp_getattro*/
-    0,                         /*tp_setattro*/
-    0,                         /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT,        /*tp_flags*/
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "noddy.Noddy",             /* tp_name */
+    sizeof(noddy_NoddyObject), /* tp_basicsize */
+    0,                         /* tp_itemsize */
+    0,                         /* tp_dealloc */
+    0,                         /* tp_print */
+    0,                         /* tp_getattr */
+    0,                         /* tp_setattr */
+    0,                         /* tp_compare */
+    0,                         /* tp_repr */
+    0,                         /* tp_as_number */
+    0,                         /* tp_as_sequence */
+    0,                         /* tp_as_mapping */
+    0,                         /* tp_hash */
+    0,                         /* tp_call */
+    0,                         /* tp_str */
+    0,                         /* tp_getattro */
+    0,                         /* tp_setattro */
+    0,                         /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT,        /* tp_flags */
     "Noddy objects",           /* tp_doc */
 };
 
diff --git a/Doc/includes/noddy2.c b/Doc/includes/noddy2.c
index 2caf985..94b92be 100644
--- a/Doc/includes/noddy2.c
+++ b/Doc/includes/noddy2.c
@@ -13,7 +13,7 @@
 {
     Py_XDECREF(self->first);
     Py_XDECREF(self->last);
-    self->ob_type->tp_free((PyObject*)self);
+    Py_TYPE(self)->tp_free((PyObject*)self);
 }
 
 static PyObject *
@@ -24,18 +24,16 @@
     self = (Noddy *)type->tp_alloc(type, 0);
     if (self != NULL) {
         self->first = PyString_FromString("");
-        if (self->first == NULL)
-          {
+        if (self->first == NULL) {
             Py_DECREF(self);
             return NULL;
-          }
-        
+        }
+
         self->last = PyString_FromString("");
-        if (self->last == NULL)
-          {
+        if (self->last == NULL) {
             Py_DECREF(self);
             return NULL;
-          }
+        }
 
         self->number = 0;
     }
@@ -50,10 +48,10 @@
 
     static char *kwlist[] = {"first", "last", "number", NULL};
 
-    if (! PyArg_ParseTupleAndKeywords(args, kwds, "|OOi", kwlist, 
-                                      &first, &last, 
+    if (! PyArg_ParseTupleAndKeywords(args, kwds, "|OOi", kwlist,
+                                      &first, &last,
                                       &self->number))
-        return -1; 
+        return -1;
 
     if (first) {
         tmp = self->first;
@@ -111,7 +109,7 @@
 
     result = PyString_Format(format, args);
     Py_DECREF(args);
-    
+
     return result;
 }
 
@@ -123,34 +121,34 @@
 };
 
 static PyTypeObject NoddyType = {
-    PyObject_HEAD_INIT(NULL)
-    0,                         /*ob_size*/
-    "noddy.Noddy",             /*tp_name*/
-    sizeof(Noddy),             /*tp_basicsize*/
-    0,                         /*tp_itemsize*/
-    (destructor)Noddy_dealloc, /*tp_dealloc*/
-    0,                         /*tp_print*/
-    0,                         /*tp_getattr*/
-    0,                         /*tp_setattr*/
-    0,                         /*tp_compare*/
-    0,                         /*tp_repr*/
-    0,                         /*tp_as_number*/
-    0,                         /*tp_as_sequence*/
-    0,                         /*tp_as_mapping*/
-    0,                         /*tp_hash */
-    0,                         /*tp_call*/
-    0,                         /*tp_str*/
-    0,                         /*tp_getattro*/
-    0,                         /*tp_setattro*/
-    0,                         /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "noddy.Noddy",             /* tp_name */
+    sizeof(Noddy),             /* tp_basicsize */
+    0,                         /* tp_itemsize */
+    (destructor)Noddy_dealloc, /* tp_dealloc */
+    0,                         /* tp_print */
+    0,                         /* tp_getattr */
+    0,                         /* tp_setattr */
+    0,                         /* tp_compare */
+    0,                         /* tp_repr */
+    0,                         /* tp_as_number */
+    0,                         /* tp_as_sequence */
+    0,                         /* tp_as_mapping */
+    0,                         /* tp_hash */
+    0,                         /* tp_call */
+    0,                         /* tp_str */
+    0,                         /* tp_getattro */
+    0,                         /* tp_setattro */
+    0,                         /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT |
+        Py_TPFLAGS_BASETYPE,   /* tp_flags */
     "Noddy objects",           /* tp_doc */
-    0,		               /* tp_traverse */
-    0,		               /* tp_clear */
-    0,		               /* tp_richcompare */
-    0,		               /* tp_weaklistoffset */
-    0,		               /* tp_iter */
-    0,		               /* tp_iternext */
+    0,                         /* tp_traverse */
+    0,                         /* tp_clear */
+    0,                         /* tp_richcompare */
+    0,                         /* tp_weaklistoffset */
+    0,                         /* tp_iter */
+    0,                         /* tp_iternext */
     Noddy_methods,             /* tp_methods */
     Noddy_members,             /* tp_members */
     0,                         /* tp_getset */
@@ -172,7 +170,7 @@
 #define PyMODINIT_FUNC void
 #endif
 PyMODINIT_FUNC
-initnoddy2(void) 
+initnoddy2(void)
 {
     PyObject* m;
 
@@ -183,7 +181,7 @@
                        "Example module that creates an extension type.");
 
     if (m == NULL)
-      return;
+        return;
 
     Py_INCREF(&NoddyType);
     PyModule_AddObject(m, "Noddy", (PyObject *)&NoddyType);
diff --git a/Doc/includes/noddy3.c b/Doc/includes/noddy3.c
index 60260ad..43ec42b 100644
--- a/Doc/includes/noddy3.c
+++ b/Doc/includes/noddy3.c
@@ -13,7 +13,7 @@
 {
     Py_XDECREF(self->first);
     Py_XDECREF(self->last);
-    self->ob_type->tp_free((PyObject*)self);
+    Py_TYPE(self)->tp_free((PyObject*)self);
 }
 
 static PyObject *
@@ -24,18 +24,16 @@
     self = (Noddy *)type->tp_alloc(type, 0);
     if (self != NULL) {
         self->first = PyString_FromString("");
-        if (self->first == NULL)
-          {
+        if (self->first == NULL) {
             Py_DECREF(self);
             return NULL;
-          }
-        
+        }
+
         self->last = PyString_FromString("");
-        if (self->last == NULL)
-          {
+        if (self->last == NULL) {
             Py_DECREF(self);
             return NULL;
-          }
+        }
 
         self->number = 0;
     }
@@ -50,10 +48,10 @@
 
     static char *kwlist[] = {"first", "last", "number", NULL};
 
-    if (! PyArg_ParseTupleAndKeywords(args, kwds, "|SSi", kwlist, 
-                                      &first, &last, 
+    if (! PyArg_ParseTupleAndKeywords(args, kwds, "|SSi", kwlist,
+                                      &first, &last,
                                       &self->number))
-        return -1; 
+        return -1;
 
     if (first) {
         tmp = self->first;
@@ -88,22 +86,22 @@
 static int
 Noddy_setfirst(Noddy *self, PyObject *value, void *closure)
 {
-  if (value == NULL) {
-    PyErr_SetString(PyExc_TypeError, "Cannot delete the first attribute");
-    return -1;
-  }
-  
-  if (! PyString_Check(value)) {
-    PyErr_SetString(PyExc_TypeError, 
-                    "The first attribute value must be a string");
-    return -1;
-  }
-      
-  Py_DECREF(self->first);
-  Py_INCREF(value);
-  self->first = value;    
+    if (value == NULL) {
+        PyErr_SetString(PyExc_TypeError, "Cannot delete the first attribute");
+        return -1;
+    }
 
-  return 0;
+    if (! PyString_Check(value)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "The first attribute value must be a string");
+        return -1;
+    }
+
+    Py_DECREF(self->first);
+    Py_INCREF(value);
+    self->first = value;
+
+    return 0;
 }
 
 static PyObject *
@@ -116,30 +114,30 @@
 static int
 Noddy_setlast(Noddy *self, PyObject *value, void *closure)
 {
-  if (value == NULL) {
-    PyErr_SetString(PyExc_TypeError, "Cannot delete the last attribute");
-    return -1;
-  }
-  
-  if (! PyString_Check(value)) {
-    PyErr_SetString(PyExc_TypeError, 
-                    "The last attribute value must be a string");
-    return -1;
-  }
-      
-  Py_DECREF(self->last);
-  Py_INCREF(value);
-  self->last = value;    
+    if (value == NULL) {
+        PyErr_SetString(PyExc_TypeError, "Cannot delete the last attribute");
+        return -1;
+    }
 
-  return 0;
+    if (! PyString_Check(value)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "The last attribute value must be a string");
+        return -1;
+    }
+
+    Py_DECREF(self->last);
+    Py_INCREF(value);
+    self->last = value;
+
+    return 0;
 }
 
 static PyGetSetDef Noddy_getseters[] = {
-    {"first", 
+    {"first",
      (getter)Noddy_getfirst, (setter)Noddy_setfirst,
      "first name",
      NULL},
-    {"last", 
+    {"last",
      (getter)Noddy_getlast, (setter)Noddy_setlast,
      "last name",
      NULL},
@@ -164,7 +162,7 @@
 
     result = PyString_Format(format, args);
     Py_DECREF(args);
-    
+
     return result;
 }
 
@@ -176,34 +174,34 @@
 };
 
 static PyTypeObject NoddyType = {
-    PyObject_HEAD_INIT(NULL)
-    0,                         /*ob_size*/
-    "noddy.Noddy",             /*tp_name*/
-    sizeof(Noddy),             /*tp_basicsize*/
-    0,                         /*tp_itemsize*/
-    (destructor)Noddy_dealloc, /*tp_dealloc*/
-    0,                         /*tp_print*/
-    0,                         /*tp_getattr*/
-    0,                         /*tp_setattr*/
-    0,                         /*tp_compare*/
-    0,                         /*tp_repr*/
-    0,                         /*tp_as_number*/
-    0,                         /*tp_as_sequence*/
-    0,                         /*tp_as_mapping*/
-    0,                         /*tp_hash */
-    0,                         /*tp_call*/
-    0,                         /*tp_str*/
-    0,                         /*tp_getattro*/
-    0,                         /*tp_setattro*/
-    0,                         /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "noddy.Noddy",             /* tp_name */
+    sizeof(Noddy),             /* tp_basicsize */
+    0,                         /* tp_itemsize */
+    (destructor)Noddy_dealloc, /* tp_dealloc */
+    0,                         /* tp_print */
+    0,                         /* tp_getattr */
+    0,                         /* tp_setattr */
+    0,                         /* tp_compare */
+    0,                         /* tp_repr */
+    0,                         /* tp_as_number */
+    0,                         /* tp_as_sequence */
+    0,                         /* tp_as_mapping */
+    0,                         /* tp_hash */
+    0,                         /* tp_call */
+    0,                         /* tp_str */
+    0,                         /* tp_getattro */
+    0,                         /* tp_setattro */
+    0,                         /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT |
+        Py_TPFLAGS_BASETYPE,   /* tp_flags */
     "Noddy objects",           /* tp_doc */
-    0,		               /* tp_traverse */
-    0,		               /* tp_clear */
-    0,		               /* tp_richcompare */
-    0,		               /* tp_weaklistoffset */
-    0,		               /* tp_iter */
-    0,		               /* tp_iternext */
+    0,                         /* tp_traverse */
+    0,                         /* tp_clear */
+    0,                         /* tp_richcompare */
+    0,                         /* tp_weaklistoffset */
+    0,                         /* tp_iter */
+    0,                         /* tp_iternext */
     Noddy_methods,             /* tp_methods */
     Noddy_members,             /* tp_members */
     Noddy_getseters,           /* tp_getset */
@@ -225,7 +223,7 @@
 #define PyMODINIT_FUNC void
 #endif
 PyMODINIT_FUNC
-initnoddy3(void) 
+initnoddy3(void)
 {
     PyObject* m;
 
@@ -236,7 +234,7 @@
                        "Example module that creates an extension type.");
 
     if (m == NULL)
-      return;
+        return;
 
     Py_INCREF(&NoddyType);
     PyModule_AddObject(m, "Noddy", (PyObject *)&NoddyType);
diff --git a/Doc/includes/noddy4.c b/Doc/includes/noddy4.c
index 878e086..0fd4dc3 100644
--- a/Doc/includes/noddy4.c
+++ b/Doc/includes/noddy4.c
@@ -27,7 +27,7 @@
     return 0;
 }
 
-static int 
+static int
 Noddy_clear(Noddy *self)
 {
     PyObject *tmp;
@@ -46,8 +46,9 @@
 static void
 Noddy_dealloc(Noddy* self)
 {
+    PyObject_GC_UnTrack(self);
     Noddy_clear(self);
-    self->ob_type->tp_free((PyObject*)self);
+    Py_TYPE(self)->tp_free((PyObject*)self);
 }
 
 static PyObject *
@@ -58,18 +59,16 @@
     self = (Noddy *)type->tp_alloc(type, 0);
     if (self != NULL) {
         self->first = PyString_FromString("");
-        if (self->first == NULL)
-          {
+        if (self->first == NULL) {
             Py_DECREF(self);
             return NULL;
-          }
-        
+        }
+
         self->last = PyString_FromString("");
-        if (self->last == NULL)
-          {
+        if (self->last == NULL) {
             Py_DECREF(self);
             return NULL;
-          }
+        }
 
         self->number = 0;
     }
@@ -84,10 +83,10 @@
 
     static char *kwlist[] = {"first", "last", "number", NULL};
 
-    if (! PyArg_ParseTupleAndKeywords(args, kwds, "|OOi", kwlist, 
-                                      &first, &last, 
+    if (! PyArg_ParseTupleAndKeywords(args, kwds, "|OOi", kwlist,
+                                      &first, &last,
                                       &self->number))
-        return -1; 
+        return -1;
 
     if (first) {
         tmp = self->first;
@@ -145,7 +144,7 @@
 
     result = PyString_Format(format, args);
     Py_DECREF(args);
-    
+
     return result;
 }
 
@@ -157,34 +156,35 @@
 };
 
 static PyTypeObject NoddyType = {
-    PyObject_HEAD_INIT(NULL)
-    0,                         /*ob_size*/
-    "noddy.Noddy",             /*tp_name*/
-    sizeof(Noddy),             /*tp_basicsize*/
-    0,                         /*tp_itemsize*/
-    (destructor)Noddy_dealloc, /*tp_dealloc*/
-    0,                         /*tp_print*/
-    0,                         /*tp_getattr*/
-    0,                         /*tp_setattr*/
-    0,                         /*tp_compare*/
-    0,                         /*tp_repr*/
-    0,                         /*tp_as_number*/
-    0,                         /*tp_as_sequence*/
-    0,                         /*tp_as_mapping*/
-    0,                         /*tp_hash */
-    0,                         /*tp_call*/
-    0,                         /*tp_str*/
-    0,                         /*tp_getattro*/
-    0,                         /*tp_setattro*/
-    0,                         /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "noddy.Noddy",             /* tp_name */
+    sizeof(Noddy),             /* tp_basicsize */
+    0,                         /* tp_itemsize */
+    (destructor)Noddy_dealloc, /* tp_dealloc */
+    0,                         /* tp_print */
+    0,                         /* tp_getattr */
+    0,                         /* tp_setattr */
+    0,                         /* tp_compare */
+    0,                         /* tp_repr */
+    0,                         /* tp_as_number */
+    0,                         /* tp_as_sequence */
+    0,                         /* tp_as_mapping */
+    0,                         /* tp_hash */
+    0,                         /* tp_call */
+    0,                         /* tp_str */
+    0,                         /* tp_getattro */
+    0,                         /* tp_setattro */
+    0,                         /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT |
+        Py_TPFLAGS_BASETYPE |
+        Py_TPFLAGS_HAVE_GC,    /* tp_flags */
     "Noddy objects",           /* tp_doc */
     (traverseproc)Noddy_traverse,   /* tp_traverse */
     (inquiry)Noddy_clear,           /* tp_clear */
-    0,		               /* tp_richcompare */
-    0,		               /* tp_weaklistoffset */
-    0,		               /* tp_iter */
-    0,		               /* tp_iternext */
+    0,                         /* tp_richcompare */
+    0,                         /* tp_weaklistoffset */
+    0,                         /* tp_iter */
+    0,                         /* tp_iternext */
     Noddy_methods,             /* tp_methods */
     Noddy_members,             /* tp_members */
     0,                         /* tp_getset */
@@ -206,7 +206,7 @@
 #define PyMODINIT_FUNC void
 #endif
 PyMODINIT_FUNC
-initnoddy4(void) 
+initnoddy4(void)
 {
     PyObject* m;
 
@@ -217,7 +217,7 @@
                        "Example module that creates an extension type.");
 
     if (m == NULL)
-      return;
+        return;
 
     Py_INCREF(&NoddyType);
     PyModule_AddObject(m, "Noddy", (PyObject *)&NoddyType);
diff --git a/Doc/includes/run-func.c b/Doc/includes/run-func.c
index 5a7df0d..8276b01 100644
--- a/Doc/includes/run-func.c
+++ b/Doc/includes/run-func.c
@@ -3,7 +3,7 @@
 int
 main(int argc, char *argv[])
 {
-    PyObject *pName, *pModule, *pDict, *pFunc;
+    PyObject *pName, *pModule, *pFunc;
     PyObject *pArgs, *pValue;
     int i;
 
diff --git a/Doc/includes/setup.py b/Doc/includes/setup.py
index b853d23..a38a39d 100644
--- a/Doc/includes/setup.py
+++ b/Doc/includes/setup.py
@@ -5,4 +5,5 @@
          Extension("noddy2", ["noddy2.c"]),
          Extension("noddy3", ["noddy3.c"]),
          Extension("noddy4", ["noddy4.c"]),
+         Extension("shoddy", ["shoddy.c"]),
          ])
diff --git a/Doc/includes/shoddy.c b/Doc/includes/shoddy.c
index 07a4177..4cb39db 100644
--- a/Doc/includes/shoddy.c
+++ b/Doc/includes/shoddy.c
@@ -31,8 +31,7 @@
 
 
 static PyTypeObject ShoddyType = {
-    PyObject_HEAD_INIT(NULL)
-    0,                       /* ob_size */
+    PyVarObject_HEAD_INIT(NULL, 0)
     "shoddy.Shoddy",         /* tp_name */
     sizeof(Shoddy),          /* tp_basicsize */
     0,                       /* tp_itemsize */
@@ -52,7 +51,7 @@
     0,                       /* tp_setattro */
     0,                       /* tp_as_buffer */
     Py_TPFLAGS_DEFAULT |
-      Py_TPFLAGS_BASETYPE,   /* tp_flags */
+        Py_TPFLAGS_BASETYPE, /* tp_flags */
     0,                       /* tp_doc */
     0,                       /* tp_traverse */
     0,                       /* tp_clear */
diff --git a/Doc/includes/sqlite3/load_extension.py b/Doc/includes/sqlite3/load_extension.py
index 7f893c9..f1a92b3 100644
--- a/Doc/includes/sqlite3/load_extension.py
+++ b/Doc/includes/sqlite3/load_extension.py
@@ -11,7 +11,7 @@
 # alternatively you can load the extension using an API call:
 # con.load_extension("./fts3.so")
 
-# disable extension laoding again
+# disable extension loading again
 con.enable_load_extension(False)
 
 # example from SQLite wiki
diff --git a/Doc/installing/index.rst b/Doc/installing/index.rst
index e5b3165..9b89d08 100644
--- a/Doc/installing/index.rst
+++ b/Doc/installing/index.rst
@@ -39,9 +39,8 @@
   being installed system wide
 * ``virtualenv`` is a third party tools for creating virtual environments, it
   is defaults to installing ``pip`` into all created virtual environments.
-* the `Python Packaging Index <https://pypi.python.org/pypi>`__ is a public
-  repository of open source licensed packages made available for use by
-  other Python users
+* the `Python Packaging Index <https://pypi.org>`__ is a public repository of
+  open source licensed packages made available for use by other Python users
 * the `Python Packaging Authority
   <https://www.pypa.io/en/latest/>`__ are the group of
   developers and documentation authors responsible for the maintenance and
@@ -193,6 +192,17 @@
 per-user installation when installing packages with ``pip``.
 
 
+Pip not installed
+-----------------
+
+It is possible that ``pip`` does not get installed by default. One potential fix is::
+
+    python -m ensurepip --default-pip
+
+There are also additional resources for `installing pip.
+<https://packaging.python.org/tutorials/installing-packages/#install-pip-setuptools-and-wheel>`__
+
+
 Installing binary extensions
 ----------------------------
 
diff --git a/Doc/library/2to3.rst b/Doc/library/2to3.rst
index 0632f3c..b782875 100644
--- a/Doc/library/2to3.rst
+++ b/Doc/library/2to3.rst
@@ -199,13 +199,6 @@
    because the :class:`memoryview` API is similar but not exactly the same as
    that of :class:`buffer`.
 
-.. 2to3fixer:: callable
-
-   Converts ``callable(x)`` to ``isinstance(x, collections.Callable)``, adding
-   an import to :mod:`collections` if needed. Note ``callable(x)`` has returned
-   in Python 3.2, so if you do not intend to support Python 3.1, you can disable
-   this fixer.
-
 .. 2to3fixer:: dict
 
    Fixes dictionary iteration methods.  :meth:`dict.iteritems` is converted to
diff --git a/Doc/library/_winreg.rst b/Doc/library/_winreg.rst
index 3d9042c..a87cb9c 100644
--- a/Doc/library/_winreg.rst
+++ b/Doc/library/_winreg.rst
@@ -1,5 +1,5 @@
-:mod:`_winreg` -- Windows registry access
-=========================================
+:mod:`_winreg` --- Windows registry access
+==========================================
 
 .. module:: _winreg
    :platform: Windows
diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst
index 4ce6835..7993360 100644
--- a/Doc/library/argparse.rst
+++ b/Doc/library/argparse.rst
@@ -173,7 +173,7 @@
    * conflict_handler_ - The strategy for resolving conflicting optionals
      (usually unnecessary)
 
-   * add_help_ - Add a -h/--help option to the parser (default: ``True``)
+   * add_help_ - Add a ``-h/--help`` option to the parser (default: ``True``)
 
 The following sections describe how each of these are used.
 
@@ -204,7 +204,7 @@
     -h, --help  show this help message and exit
     --foo FOO   foo help
    $ cd ..
-   $ python subdir\myprogram.py --help
+   $ python subdir/myprogram.py --help
    usage: myprogram.py [-h] [--foo FOO]
 
    optional arguments:
@@ -419,7 +419,9 @@
     -h, --help  show this help message and exit
 
 :class:`RawTextHelpFormatter` maintains whitespace for all sorts of help text,
-including argument descriptions.
+including argument descriptions. However, multiple new lines are replaced with
+one. If you wish to preserve multiple blank lines, add spaces between the
+newlines.
 
 The other formatter class available, :class:`ArgumentDefaultsHelpFormatter`,
 will add information about the default value of each of the arguments::
@@ -852,6 +854,8 @@
      usage: PROG [-h] foo [foo ...]
      PROG: error: too few arguments
 
+.. _`argparse.REMAINDER`:
+
 * ``argparse.REMAINDER``.  All the remaining command-line arguments are gathered
   into a list.  This is commonly useful for command line utilities that dispatch
   to other command line utilities::
@@ -1273,8 +1277,11 @@
    created and how they are assigned. See the documentation for
    :meth:`add_argument` for details.
 
-   By default, the argument strings are taken from :data:`sys.argv`, and a new empty
-   :class:`Namespace` object is created for the attributes.
+   * args_ - List of strings to parse.  The default is taken from
+     :data:`sys.argv`.
+
+   * namespace_ - An object to take the attributes.  The default is a new empty
+     :class:`Namespace` object.
 
 
 Option value syntax
@@ -1415,6 +1422,7 @@
 
 An error is produced for arguments that could produce more than one options.
 
+.. _args:
 
 Beyond ``sys.argv``
 ^^^^^^^^^^^^^^^^^^^
@@ -1436,6 +1444,7 @@
    >>> parser.parse_args(['1', '2', '3', '4', '--sum'])
    Namespace(accumulate=<built-in function sum>, integers=[1, 2, 3, 4])
 
+.. _namespace:
 
 The Namespace object
 ^^^^^^^^^^^^^^^^^^^^
@@ -1941,7 +1950,12 @@
 * Replace ``(options, args) = parser.parse_args()`` with ``args =
   parser.parse_args()`` and add additional :meth:`ArgumentParser.add_argument`
   calls for the positional arguments. Keep in mind that what was previously
-  called ``options``, now in :mod:`argparse` context is called ``args``.
+  called ``options``, now in the :mod:`argparse` context is called ``args``.
+
+* Replace :meth:`optparse.OptionParser.disable_interspersed_args`
+  by setting ``nargs`` of a positional argument to `argparse.REMAINDER`_, or
+  use :meth:`~ArgumentParser.parse_known_args` to collect unparsed argument
+  strings in a separate list.
 
 * Replace callback actions and the ``callback_*`` keyword arguments with
   ``type`` or ``action`` arguments.
diff --git a/Doc/library/atexit.rst b/Doc/library/atexit.rst
index 0b5e121..06bbf60 100644
--- a/Doc/library/atexit.rst
+++ b/Doc/library/atexit.rst
@@ -37,7 +37,7 @@
 :mod:`atexit` and register the function that had been bound to ``sys.exitfunc``.
 
 
-.. function:: register(func[, *args[, **kargs]])
+.. function:: register(func[, *args[, **kwargs]])
 
    Register *func* as a function to be executed at termination.  Any optional
    arguments that are to be passed to *func* must be passed as arguments to
diff --git a/Doc/library/binascii.rst b/Doc/library/binascii.rst
index 5eb7c4b..38f616a 100644
--- a/Doc/library/binascii.rst
+++ b/Doc/library/binascii.rst
@@ -101,8 +101,10 @@
 
 .. function:: crc_hqx(data, crc)
 
-   Compute the binhex4 crc value of *data*, starting with an initial *crc* and
-   returning the result.
+   Compute a 16-bit CRC value of *data*, starting with an initial *crc* and
+   returning the result.  This uses the CRC-CCITT polynomial
+   *x*:sup:`16` + *x*:sup:`12` + *x*:sup:`5` + 1, often represented as
+   0x1021.  This CRC is used in the binhex4 format.
 
 
 .. function:: crc32(data[, crc])
diff --git a/Doc/library/bz2.rst b/Doc/library/bz2.rst
index 71957ec..e764f39 100644
--- a/Doc/library/bz2.rst
+++ b/Doc/library/bz2.rst
@@ -74,7 +74,7 @@
       input file, only the first stream will be accessible. If you require
       support for multi-stream files, consider using the third-party
       :mod:`bz2file` module (available from
-      `PyPI <https://pypi.python.org/pypi/bz2file>`_). This module provides a
+      `PyPI <https://pypi.org/project/bz2file>`_). This module provides a
       backport of Python 3.3's :class:`BZ2File` class, which does support
       multi-stream files.
 
diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst
index 3c8c05f..9610419 100644
--- a/Doc/library/collections.rst
+++ b/Doc/library/collections.rst
@@ -200,6 +200,7 @@
       adapted for Python 2.5 and an early `Bag recipe
       <https://code.activestate.com/recipes/259174/>`_ for Python 2.4.
 
+    * `Bag class <https://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html>`_
       in Smalltalk.
 
     * Wikipedia entry for `Multisets <https://en.wikipedia.org/wiki/Multiset>`_.
@@ -299,7 +300,7 @@
 
    .. method:: remove(value)
 
-      Removed the first occurrence of *value*.  If not found, raises a
+      Remove the first occurrence of *value*.  If not found, raises a
       :exc:`ValueError`.
 
       .. versionadded:: 2.5
@@ -310,11 +311,14 @@
 
       .. versionadded:: 2.7
 
-   .. method:: rotate(n)
+   .. method:: rotate(n=1)
 
       Rotate the deque *n* steps to the right.  If *n* is negative, rotate to
-      the left.  Rotating one step to the right is equivalent to:
-      ``d.appendleft(d.pop())``.
+      the left.
+
+      When the deque is not empty, rotating one step to the right is equivalent to
+      ``d.appendleft(d.pop())``, and rotating one step to the left is
+      equivalent to ``d.append(d.popleft())``.
 
 
    Deque objects also provide one read-only attribute:
@@ -703,7 +707,7 @@
    .. versionchanged:: 2.7
       Returns an :class:`OrderedDict` instead of a regular :class:`dict`.
 
-.. method:: somenamedtuple._replace(kwargs)
+.. method:: somenamedtuple._replace(**kwargs)
 
    Return a new instance of the named tuple replacing specified fields with new
    values::
diff --git a/Doc/library/configparser.rst b/Doc/library/configparser.rst
index b83397c..5c40f5c 100644
--- a/Doc/library/configparser.rst
+++ b/Doc/library/configparser.rst
@@ -35,8 +35,8 @@
 .. seealso::
 
    Module :mod:`shlex`
-      Support for a creating Unix shell-like mini-languages which can be used
-      as an alternate format for application configuration files.
+      Support for creating Unix shell-like mini-languages which can be used as
+      an alternate format for application configuration files.
 
    Module :mod:`json`
       The json module implements a subset of JavaScript syntax which can also
diff --git a/Doc/library/constants.rst b/Doc/library/constants.rst
index 0db8337..a8b4c7a 100644
--- a/Doc/library/constants.rst
+++ b/Doc/library/constants.rst
@@ -73,9 +73,13 @@
    specified exit code.
 
 .. data:: copyright
-          license
           credits
 
-   Objects that when printed, print a message like "Type license() to see the
-   full license text", and when called, display the corresponding text in a
+   Objects that when printed or called, print the text of copyright or
+   credits, respectively.
+
+.. data:: license
+
+   Object that when printed, prints the message "Type license() to see the
+   full license text", and when called, displays the full license text in a
    pager-like fashion (one screen at a time).
diff --git a/Doc/library/contextlib.rst b/Doc/library/contextlib.rst
index c88dd23..183da70 100644
--- a/Doc/library/contextlib.rst
+++ b/Doc/library/contextlib.rst
@@ -24,22 +24,28 @@
    function for :keyword:`with` statement context managers, without needing to
    create a class or separate :meth:`__enter__` and :meth:`__exit__` methods.
 
-   A simple example (this is not recommended as a real way of generating HTML!)::
+   While many objects natively support use in with statements, sometimes a
+   resource needs to be managed that isn't a context manager in its own right,
+   and doesn't implement a ``close()`` method for use with ``contextlib.closing``
+
+   An abstract example would be the following to ensure correct resource
+   management::
 
       from contextlib import contextmanager
 
       @contextmanager
-      def tag(name):
-          print "<%s>" % name
-          yield
-          print "</%s>" % name
+      def managed_resource(*args, **kwds):
+          # Code to acquire resource, e.g.:
+          resource = acquire_resource(*args, **kwds)
+          try:
+              yield resource
+          finally:
+              # Code to release resource, e.g.:
+              release_resource(resource)
 
-      >>> with tag("h1"):
-      ...    print "foo"
-      ...
-      <h1>
-      foo
-      </h1>
+      >>> with managed_resource(timeout=3600) as resource:
+      ...     # Resource is released at the end of this block,
+      ...     # even if code in the block raises an exception
 
    The function being decorated must return a :term:`generator`-iterator when
    called. This iterator must yield exactly one value, which will be bound to
diff --git a/Doc/library/copy.rst b/Doc/library/copy.rst
index a5378e5..67cf65a 100644
--- a/Doc/library/copy.rst
+++ b/Doc/library/copy.rst
@@ -43,8 +43,8 @@
 * Recursive objects (compound objects that, directly or indirectly, contain a
   reference to themselves) may cause a recursive loop.
 
-* Because deep copy copies *everything* it may copy too much, e.g.,
-  even administrative data structures that should be shared even between copies.
+* Because deep copy copies everything it may copy too much, such as data
+  which is intended to be shared between copies.
 
 The :func:`deepcopy` function avoids these problems by:
 
diff --git a/Doc/library/csv.rst b/Doc/library/csv.rst
index dbef60f..ad6b716 100644
--- a/Doc/library/csv.rst
+++ b/Doc/library/csv.rst
@@ -165,7 +165,7 @@
 The :mod:`csv` module defines the following classes:
 
 
-.. class:: DictReader(csvfile, fieldnames=None, restkey=None, restval=None, \
+.. class:: DictReader(f, fieldnames=None, restkey=None, restval=None, \
                       dialect='excel', *args, **kwds)
 
    Create an object which operates like a regular reader but maps the
@@ -174,7 +174,7 @@
    <collections-abstract-base-classes>` whose elements are associated with the
    fields of the input data in order. These elements become the keys of the
    resulting dictionary.  If the *fieldnames* parameter is omitted, the values
-   in the first row of the *csvfile* will be used as the fieldnames.  If the
+   in the first row of the file *f* will be used as the fieldnames.  If the
    row read has more fields than the fieldnames sequence, the remaining data is
    added as a sequence keyed by the value of *restkey*.  If the row read has
    fewer fields than the fieldnames sequence, the remaining keys take the value
@@ -194,14 +194,14 @@
        Wonderful Spam
 
 
-.. class:: DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', \
+.. class:: DictWriter(f, fieldnames, restval='', extrasaction='raise', \
                       dialect='excel', *args, **kwds)
 
    Create an object which operates like a regular writer but maps dictionaries
    onto output rows.  The *fieldnames* parameter is a :ref:`sequence
    <collections-abstract-base-classes>` of keys that identify the order in
    which values in the dictionary passed to the :meth:`writerow` method are
-   written to the *csvfile*.  The optional *restval* parameter specifies the
+   written to the file *f*.  The optional *restval* parameter specifies the
    value to be written if the dictionary is missing a key in *fieldnames*.  If
    the dictionary passed to the :meth:`writerow` method contains a key not
    found in *fieldnames*, the optional *extrasaction* parameter indicates what
@@ -213,7 +213,7 @@
    Note that unlike the :class:`DictReader` class, the *fieldnames* parameter
    of the :class:`DictWriter` is not optional.  Since Python's :class:`dict`
    objects are not ordered, there is not enough information available to deduce
-   the order in which the row should be written to the *csvfile*.
+   the order in which the row should be written to the file *f*.
 
    A short usage example::
 
@@ -453,8 +453,9 @@
 
 .. method:: csvwriter.writerows(rows)
 
-   Write all the *rows* parameters (a list of *row* objects as described above) to
-   the writer's file object, formatted according to the current dialect.
+   Write all elements in *rows* (an iterable of *row* objects as described
+   above) to the writer's file object, formatted according to the current
+   dialect.
 
 Writer objects have the following public attribute:
 
diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst
index 052cdee..df9ccbf 100644
--- a/Doc/library/ctypes.rst
+++ b/Doc/library/ctypes.rst
@@ -87,7 +87,7 @@
    <_FuncPtr object at 0x...>
    >>> print windll.kernel32.MyOwnFunction     # doctest: +WINDOWS
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
      File "ctypes.py", line 239, in __getattr__
        func = _StdcallFuncPtr(name, self)
    AttributeError: function 'MyOwnFunction' not found
@@ -126,7 +126,7 @@
    <_FuncPtr object at 0x...>
    >>> cdll.kernel32[0]  # doctest: +WINDOWS
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
      File "ctypes.py", line 310, in __getitem__
        func = _StdcallFuncPtr(name, self)
    AttributeError: function ordinal 0 not found
@@ -159,11 +159,11 @@
 
    >>> windll.kernel32.GetModuleHandleA()      # doctest: +WINDOWS
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    ValueError: Procedure probably called with not enough arguments (4 bytes missing)
    >>> windll.kernel32.GetModuleHandleA(0, 0)  # doctest: +WINDOWS
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    ValueError: Procedure probably called with too many arguments (4 bytes in excess)
    >>>
 
@@ -172,13 +172,13 @@
 
    >>> cdll.kernel32.GetModuleHandleA(None)  # doctest: +WINDOWS
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    ValueError: Procedure probably called with not enough arguments (4 bytes missing)
    >>>
 
    >>> windll.msvcrt.printf("spam")  # doctest: +WINDOWS
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    ValueError: Procedure probably called with too many arguments (4 bytes in excess)
    >>>
 
@@ -191,7 +191,7 @@
 
    >>> windll.kernel32.GetModuleHandleA(32)  # doctest: +WINDOWS
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    WindowsError: exception: access violation reading 0x00000020
    >>>
 
@@ -354,7 +354,7 @@
    19
    >>> printf("%f bottles of beer\n", 42.5)
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    ArgumentError: argument 2: exceptions.TypeError: Don't know how to convert parameter 2
    >>>
 
@@ -417,7 +417,7 @@
 
    >>> printf("%d %d %d", 1, 2, 3)
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    ArgumentError: argument 2: exceptions.TypeError: wrong type
    >>> printf("%s %d %f\n", "X", 2, 3)
    X 2 3.000000
@@ -467,7 +467,7 @@
    'def'
    >>> strchr("abcdef", "def")
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    ArgumentError: argument 2: exceptions.TypeError: one character string expected
    >>> print strchr("abcdef", "x")
    None
@@ -493,7 +493,7 @@
    486539264
    >>> GetModuleHandle("something silly")  # doctest: +WINDOWS
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
      File "<stdin>", line 3, in ValidHandle
    WindowsError: [Errno 126] The specified module could not be found.
    >>>
@@ -564,7 +564,7 @@
    0 5
    >>> POINT(1, 2, 3)
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    ValueError: too many initializers
    >>>
 
@@ -767,7 +767,7 @@
    <class 'ctypes.LP_c_long'>
    >>> PI(42)
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    TypeError: expected c_long instead of int
    >>> PI(c_int(42))
    <ctypes.LP_c_long object at 0x...>
@@ -843,7 +843,7 @@
 
    >>> bar.values = (c_byte * 4)()
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    TypeError: incompatible types, c_byte_Array_4 instance instead of LP_c_long instance
    >>>
 
@@ -894,7 +894,7 @@
    ...                 ("next", POINTER(cell))]
    ...
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
      File "<stdin>", line 2, in cell
    NameError: name 'cell' is not defined
    >>>
diff --git a/Doc/library/curses.rst b/Doc/library/curses.rst
index c70afe3..5ea246b 100644
--- a/Doc/library/curses.rst
+++ b/Doc/library/curses.rst
@@ -663,6 +663,12 @@
    character previously painter at that location.  By default, the character
    position and attributes are the current settings for the window object.
 
+   .. note::
+
+      Writing outside the window, subwindow, or pad raises a :exc:`curses.error`.
+      Attempting to write to the lower right corner of a window, subwindow,
+      or pad will cause an exception to be raised after the character is printed.
+
 
 .. method:: window.addnstr(str, n[, attr])
             window.addnstr(y, x, str, n[, attr])
@@ -677,6 +683,12 @@
    Paint the string *str* at ``(y, x)`` with attributes *attr*, overwriting
    anything previously on the display.
 
+   .. note::
+
+      Writing outside the window, subwindow, or pad raises :exc:`curses.error`.
+      Attempting to write to the lower right corner of a window, subwindow,
+      or pad will cause an exception to be raised after the string is printed.
+
 
 .. method:: window.attroff(attr)
 
@@ -765,11 +777,11 @@
             window.chgat(y, x, num, attr)
 
    Set the attributes of *num* characters at the current cursor position, or at
-   position ``(y, x)`` if supplied. If no value of *num* is given or *num* = -1,
-   the attribute will  be set on all the characters to the end of the line.  This
-   function does not move the cursor. The changed line will be touched using the
-   :meth:`touchline` method so that the contents will be redisplayed by the next
-   window refresh.
+   position ``(y, x)`` if supplied. If *num* is not given or is ``-1``,
+   the attribute will be set on all the characters to the end of the line.  This
+   function moves cursor to position ``(y, x)`` if supplied. The changed line
+   will be touched using the :meth:`touchline` method so that the contents will
+   be redisplayed by the next window refresh.
 
 
 .. method:: window.clear()
@@ -1234,27 +1246,63 @@
    A string representing the current version of the module.  Also available as
    :const:`__version__`.
 
-Several constants are available to specify character cell attributes:
+Some constants are available to specify character cell attributes.
+The exact constants available are system dependent.
 
 +------------------+-------------------------------+
 | Attribute        | Meaning                       |
 +==================+===============================+
-| ``A_ALTCHARSET`` | Alternate character set mode. |
+| ``A_ALTCHARSET`` | Alternate character set mode  |
 +------------------+-------------------------------+
-| ``A_BLINK``      | Blink mode.                   |
+| ``A_BLINK``      | Blink mode                    |
 +------------------+-------------------------------+
-| ``A_BOLD``       | Bold mode.                    |
+| ``A_BOLD``       | Bold mode                     |
 +------------------+-------------------------------+
-| ``A_DIM``        | Dim mode.                     |
+| ``A_DIM``        | Dim mode                      |
 +------------------+-------------------------------+
-| ``A_NORMAL``     | Normal attribute.             |
+| ``A_INVIS``      | Invisible or blank mode       |
++------------------+-------------------------------+
+| ``A_NORMAL``     | Normal attribute              |
++------------------+-------------------------------+
+| ``A_PROTECT``    | Protected mode                |
 +------------------+-------------------------------+
 | ``A_REVERSE``    | Reverse background and        |
-|                  | foreground colors.            |
+|                  | foreground colors             |
 +------------------+-------------------------------+
-| ``A_STANDOUT``   | Standout mode.                |
+| ``A_STANDOUT``   | Standout mode                 |
 +------------------+-------------------------------+
-| ``A_UNDERLINE``  | Underline mode.               |
+| ``A_UNDERLINE``  | Underline mode                |
++------------------+-------------------------------+
+| ``A_HORIZONTAL`` | Horizontal highlight          |
++------------------+-------------------------------+
+| ``A_LEFT``       | Left highlight                |
++------------------+-------------------------------+
+| ``A_LOW``        | Low highlight                 |
++------------------+-------------------------------+
+| ``A_RIGHT``      | Right highlight               |
++------------------+-------------------------------+
+| ``A_TOP``        | Top highlight                 |
++------------------+-------------------------------+
+| ``A_VERTICAL``   | Vertical highlight            |
++------------------+-------------------------------+
+| ``A_CHARTEXT``   | Bit-mask to extract a         |
+|                  | character                     |
++------------------+-------------------------------+
+
+Several constants are available to extract corresponding attributes returned
+by some methods.
+
++------------------+-------------------------------+
+| Bit-mask         | Meaning                       |
++==================+===============================+
+| ``A_ATTRIBUTES`` | Bit-mask to extract           |
+|                  | attributes                    |
++------------------+-------------------------------+
+| ``A_CHARTEXT``   | Bit-mask to extract a         |
+|                  | character                     |
++------------------+-------------------------------+
+| ``A_COLOR``      | Bit-mask to extract           |
+|                  | color-pair field information  |
 +------------------+-------------------------------+
 
 Keys are referred to by integer constants with names starting with  ``KEY_``.
@@ -1406,7 +1454,7 @@
 +-------------------+--------------------------------------------+
 | ``KEY_SEOL``      | Shifted Clear line                         |
 +-------------------+--------------------------------------------+
-| ``KEY_SEXIT``     | Shifted Dxit                               |
+| ``KEY_SEXIT``     | Shifted Exit                               |
 +-------------------+--------------------------------------------+
 | ``KEY_SFIND``     | Shifted Find                               |
 +-------------------+--------------------------------------------+
diff --git a/Doc/library/datetime.rst b/Doc/library/datetime.rst
index 5c4ff38..d2c1c56 100644
--- a/Doc/library/datetime.rst
+++ b/Doc/library/datetime.rst
@@ -1323,7 +1323,7 @@
 
 Example:
 
-    >>> from datetime import time, tzinfo
+    >>> from datetime import time, tzinfo, timedelta
     >>> class GMT1(tzinfo):
     ...     def utcoffset(self, dt):
     ...         return timedelta(hours=1)
@@ -1566,7 +1566,7 @@
 
 .. seealso::
 
-   `pytz <https://pypi.python.org/pypi/pytz/>`_
+   `pytz <https://pypi.org/project/pytz/>`_
       The standard library has no :class:`tzinfo` instances, but
       there exists a third-party library which brings the *IANA timezone
       database* (also known as the Olson database) to Python: *pytz*.
diff --git a/Doc/library/difflib.rst b/Doc/library/difflib.rst
index c6bf3ef..01a3bfc 100644
--- a/Doc/library/difflib.rst
+++ b/Doc/library/difflib.rst
@@ -757,8 +757,10 @@
        # we're passing these as arguments to the diff function
        fromdate = time.ctime(os.stat(fromfile).st_mtime)
        todate = time.ctime(os.stat(tofile).st_mtime)
-       fromlines = open(fromfile, 'U').readlines()
-       tolines = open(tofile, 'U').readlines()
+       with open(fromfile, 'U') as f:
+           fromlines = f.readlines()
+       with open(tofile, 'U') as f:
+           tolines = f.readlines()
 
        if options.u:
            diff = difflib.unified_diff(fromlines, tolines, fromfile, tofile,
diff --git a/Doc/library/distribution.rst b/Doc/library/distribution.rst
index b560999..21dd18d 100644
--- a/Doc/library/distribution.rst
+++ b/Doc/library/distribution.rst
@@ -4,7 +4,7 @@
 
 These libraries help you with publishing and installing Python software.
 While these modules are designed to work in conjunction with the
-`Python Package Index <https://pypi.python.org>`__, they can also be used
+`Python Package Index <https://pypi.org>`__, they can also be used
 with a local index server, or without any index server at all.
 
 .. toctree::
diff --git a/Doc/library/doctest.rst b/Doc/library/doctest.rst
index 4506805..cf67b23 100644
--- a/Doc/library/doctest.rst
+++ b/Doc/library/doctest.rst
@@ -425,7 +425,7 @@
 
    >>> [1, 2, 3].remove(42)
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    ValueError: list.remove(x): x not in list
 
 That doctest succeeds if :exc:`ValueError` is raised, with the ``list.remove(x):
@@ -449,7 +449,7 @@
 
    >>> raise ValueError('multi\n    line\ndetail')
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    ValueError: multi
        line
    detail
@@ -530,8 +530,8 @@
 
 A number of option flags control various aspects of doctest's behavior.
 Symbolic names for the flags are supplied as module constants, which can be
-or'ed together and passed to various functions.  The names can also be used in
-:ref:`doctest directives <doctest-directives>`.
+:ref:`bitwise ORed <bitwise>` together and passed to various functions.
+The names can also be used in :ref:`doctest directives <doctest-directives>`.
 
 The first group of options define test semantics, controlling aspects of how
 doctest decides whether actual output matches an example's expected output:
@@ -607,7 +607,7 @@
 
       >>> (1, 2)[3] = 'moo'
       Traceback (most recent call last):
-        File "<stdin>", line 1, in ?
+        File "<stdin>", line 1, in <module>
       TypeError: object doesn't support item assignment
 
    passes under Python 2.3 and later Python versions with the flag specified,
@@ -1161,10 +1161,11 @@
    the option flags specified for the test case when the :class:`DocTestCase`
    instance was constructed.  If no reporting flags were specified (which is the
    typical and expected case), :mod:`doctest`'s :mod:`unittest` reporting flags are
-   or'ed into the option flags, and the option flags so augmented are passed to the
-   :class:`DocTestRunner` instance created to run the doctest.  If any reporting
-   flags were specified when the :class:`DocTestCase` instance was constructed,
-   :mod:`doctest`'s :mod:`unittest` reporting flags are ignored.
+   :ref:`bitwise ORed <bitwise>` into the option flags, and the option flags
+   so augmented are passed to the :class:`DocTestRunner` instance created to
+   run the doctest.  If any reporting flags were specified when the
+   :class:`DocTestCase` instance was constructed, :mod:`doctest`'s
+   :mod:`unittest` reporting flags are ignored.
 
    The value of the :mod:`unittest` reporting flags in effect before the function
    was called is returned by the function.
diff --git a/Doc/library/email.mime.rst b/Doc/library/email.mime.rst
index dcf7b59..5cbb4dd 100644
--- a/Doc/library/email.mime.rst
+++ b/Doc/library/email.mime.rst
@@ -210,7 +210,7 @@
 
    Unless the ``_charset`` parameter is explicitly set to ``None``, the
    MIMEText object created will have both a :mailheader:`Content-Type` header
-   with a ``charset`` parameter, and a :mailheader:`Content-Transfer-Endcoding`
+   with a ``charset`` parameter, and a :mailheader:`Content-Transfer-Encoding`
    header.  This means that a subsequent ``set_payload`` call will not result
    in an encoded payload, even if a charset is passed in the ``set_payload``
    command.  You can "reset" this behavior by deleting the
diff --git a/Doc/library/ensurepip.rst b/Doc/library/ensurepip.rst
index a6358e4..b6f7120 100644
--- a/Doc/library/ensurepip.rst
+++ b/Doc/library/ensurepip.rst
@@ -76,6 +76,9 @@
 * ``--no-default-pip``: if a non-default installation is request, the ``pip``
   script will *not* be installed.
 
+.. versionchanged:: 2.7.15
+   The exit status is non-zero if the command fails.
+
 
 Module API
 ----------
diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst
index fe14656..8757c6c 100644
--- a/Doc/library/exceptions.rst
+++ b/Doc/library/exceptions.rst
@@ -439,7 +439,7 @@
 
 .. exception:: ValueError
 
-   Raised when a built-in operation or function receives an argument that has the
+   Raised when an operation or function receives an argument that has the
    right type but an inappropriate value, and the situation is not described by a
    more precise exception such as :exc:`IndexError`.
 
diff --git a/Doc/library/fnmatch.rst b/Doc/library/fnmatch.rst
index 3dfec2d..42bbf74 100644
--- a/Doc/library/fnmatch.rst
+++ b/Doc/library/fnmatch.rst
@@ -44,9 +44,8 @@
 .. function:: fnmatch(filename, pattern)
 
    Test whether the *filename* string matches the *pattern* string, returning
-   :const:`True` or :const:`False`.  If the operating system is case-insensitive,
-   then both parameters will be normalized to all lower- or upper-case before
-   the comparison is performed.  :func:`fnmatchcase` can be used to perform a
+   :const:`True` or :const:`False`.  Both parameters are case-normalized
+   using :func:`os.path.normcase`. :func:`fnmatchcase` can be used to perform a
    case-sensitive comparison, regardless of whether that's standard for the
    operating system.
 
@@ -64,7 +63,8 @@
 .. function:: fnmatchcase(filename, pattern)
 
    Test whether *filename* matches *pattern*, returning :const:`True` or
-   :const:`False`; the comparison is case-sensitive.
+   :const:`False`; the comparison is case-sensitive and does not apply
+   :func:`os.path.normcase`.
 
 
 .. function:: filter(names, pattern)
diff --git a/Doc/library/fpectl.rst b/Doc/library/fpectl.rst
index 8ca671b..d48b820 100644
--- a/Doc/library/fpectl.rst
+++ b/Doc/library/fpectl.rst
@@ -88,7 +88,7 @@
    >>> import math
    >>> math.exp(1000)
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    FloatingPointError: in math_1
 
 
diff --git a/Doc/library/ftplib.rst b/Doc/library/ftplib.rst
index b155daf..4fe4074 100644
--- a/Doc/library/ftplib.rst
+++ b/Doc/library/ftplib.rst
@@ -243,17 +243,17 @@
    the trailing CRLF stripped.  The default *callback* prints the line to ``sys.stdout``.
 
 
-.. method:: FTP.set_pasv(boolean)
+.. method:: FTP.set_pasv(val)
 
-   Enable "passive" mode if *boolean* is true, other disable passive mode.  (In
+   Enable "passive" mode if *val* is true, otherwise disable passive mode.  (In
    Python 2.0 and before, passive mode was off by default; in Python 2.1 and later,
    it is on by default.)
 
 
-.. method:: FTP.storbinary(command, file[, blocksize, callback, rest])
+.. method:: FTP.storbinary(command, fp[, blocksize, callback, rest])
 
    Store a file in binary transfer mode.  *command* should be an appropriate
-   ``STOR`` command: ``"STOR filename"``. *file* is an open file object which is
+   ``STOR`` command: ``"STOR filename"``. *fp* is an open file object which is
    read until EOF using its :meth:`read` method in blocks of size *blocksize* to
    provide the data to be stored.  The *blocksize* argument defaults to 8192.
    *callback* is an optional single parameter callable that is called
@@ -269,11 +269,11 @@
    .. versionchanged:: 2.7
       *rest* parameter added.
 
-.. method:: FTP.storlines(command, file[, callback])
+.. method:: FTP.storlines(command, fp[, callback])
 
    Store a file in ASCII transfer mode.  *command* should be an appropriate
    ``STOR`` command (see :meth:`storbinary`).  Lines are read until EOF from the
-   open file object *file* using its :meth:`~file.readline` method to provide
+   open file object *fp* using its :meth:`~file.readline` method to provide
    the data to be stored.  *callback* is an optional single parameter callable
    that is called on each line after it is sent.
 
diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst
index f294b6e..4386e60 100644
--- a/Doc/library/functions.rst
+++ b/Doc/library/functions.rst
@@ -16,7 +16,7 @@
 :func:`basestring`   :func:`execfile`   :func:`issubclass`  :func:`print`      :func:`super`
 :func:`bin`          :func:`file`       :func:`iter`        :func:`property`   :func:`tuple`
 :func:`bool`         :func:`filter`     :func:`len`         :func:`range`      :func:`type`
-:func:`bytearray`    :func:`float`      :func:`list`        :func:`raw_input`  :func:`unichr`
+:func:`bytearray`    :func:`float`      |func-list|_        :func:`raw_input`  :func:`unichr`
 :func:`callable`     :func:`format`     :func:`locals`      :func:`reduce`     :func:`unicode`
 :func:`chr`          |func-frozenset|_  :func:`long`        :func:`reload`     :func:`vars`
 :func:`classmethod`  :func:`getattr`    :func:`map`         |func-repr|_       :func:`xrange`
@@ -38,6 +38,7 @@
 
 .. |func-dict| replace:: ``dict()``
 .. |func-frozenset| replace:: ``frozenset()``
+.. |func-list| replace:: ``list()``
 .. |func-memoryview| replace:: ``memoryview()``
 .. |func-repr| replace:: ``repr()``
 .. |func-set| replace:: ``set()``
@@ -617,7 +618,7 @@
       '0x1L'
 
    If x is not a Python :class:`int` or :class:`long` object, it has to
-   define an __index__() method that returns an integer.
+   define a __hex__() method that returns a string.
 
    See also :func:`int` for converting a hexadecimal string to an
    integer using a base of 16.
@@ -740,7 +741,9 @@
    (such as a dictionary, set, or frozen set).
 
 
+.. _func-list:
 .. class:: list([iterable])
+   :noindex:
 
    Return a list whose items are the same and in the same order as *iterable*'s
    items.  *iterable* may be either a sequence, a container that supports
diff --git a/Doc/library/gettext.rst b/Doc/library/gettext.rst
index f885afb..4b4883a 100644
--- a/Doc/library/gettext.rst
+++ b/Doc/library/gettext.rst
@@ -149,7 +149,7 @@
 
 The class-based API of the :mod:`gettext` module gives you more flexibility and
 greater convenience than the GNU :program:`gettext` API.  It is the recommended
-way of localizing your Python applications and modules.  :mod:`gettext` defines
+way of localizing your Python applications and modules.  :mod:`!gettext` defines
 a "translations" class which implements the parsing of GNU :file:`.mo` format
 files, and has methods for returning either standard 8-bit strings or Unicode
 strings. Instances of this "translations" class can also install themselves  in
@@ -239,7 +239,7 @@
 source file message strings to translated message strings. The base class used
 by all translation classes is :class:`NullTranslations`; this provides the basic
 interface you can use to write your own specialized translation classes.  Here
-are the methods of :class:`NullTranslations`:
+are the methods of :class:`!NullTranslations`:
 
 
 .. class:: NullTranslations([fp])
@@ -268,14 +268,14 @@
 
    .. method:: gettext(message)
 
-      If a fallback has been set, forward :meth:`gettext` to the
+      If a fallback has been set, forward :meth:`!gettext` to the
       fallback. Otherwise, return the translated message.  Overridden in derived
       classes.
 
 
    .. method:: lgettext(message)
 
-      If a fallback has been set, forward :meth:`lgettext` to the
+      If a fallback has been set, forward :meth:`!lgettext` to the
       fallback. Otherwise, return the translated message.  Overridden in derived
       classes.
 
@@ -284,14 +284,14 @@
 
    .. method:: ugettext(message)
 
-      If a fallback has been set, forward :meth:`ugettext` to the
+      If a fallback has been set, forward :meth:`!ugettext` to the
       fallback. Otherwise, return the translated message as a Unicode
       string. Overridden in derived classes.
 
 
    .. method:: ngettext(singular, plural, n)
 
-      If a fallback has been set, forward :meth:`ngettext` to the
+      If a fallback has been set, forward :meth:`!ngettext` to the
       fallback. Otherwise, return the translated message.  Overridden in derived
       classes.
 
@@ -300,7 +300,7 @@
 
    .. method:: lngettext(singular, plural, n)
 
-      If a fallback has been set, forward :meth:`lngettext` to the
+      If a fallback has been set, forward :meth:`!lngettext` to the
       fallback. Otherwise, return the translated message.  Overridden in derived
       classes.
 
@@ -309,7 +309,7 @@
 
    .. method:: ungettext(singular, plural, n)
 
-      If a fallback has been set, forward :meth:`ungettext` to the fallback.
+      If a fallback has been set, forward :meth:`!ungettext` to the fallback.
       Otherwise, return the translated message as a Unicode string. Overridden
       in derived classes.
 
diff --git a/Doc/library/httplib.rst b/Doc/library/httplib.rst
index 0a9a6dc..8bc8947 100644
--- a/Doc/library/httplib.rst
+++ b/Doc/library/httplib.rst
@@ -473,7 +473,7 @@
 .. method:: HTTPConnection.set_tunnel(host,port=None, headers=None)
 
    Set the host and the port for HTTP Connect Tunnelling. Normally used when
-   it is required to do HTTPS Conection through a proxy server.
+   it is required to do HTTPS Connection through a proxy server.
 
    The headers argument should be a mapping of extra HTTP headers to send
    with the CONNECT request.
diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst
index 34f9a89..3848231 100644
--- a/Doc/library/idle.rst
+++ b/Doc/library/idle.rst
@@ -240,7 +240,7 @@
    single: stack viewer
 
 Debugger (toggle)
-   When actived, code entered in the Shell or run from an Editor will run
+   When activated, code entered in the Shell or run from an Editor will run
    under the debugger.  In the Editor, breakpoints can be set with the context
    menu.  This feature is still incomplete and somewhat experimental.
 
@@ -368,7 +368,7 @@
 
    * :kbd:`C-l` center window around the insertion point
 
-   * :kbd:`C-b` go backwards one character without deleting (usually you can
+   * :kbd:`C-b` go backward one character without deleting (usually you can
      also use the cursor key for this)
 
    * :kbd:`C-f` go forward one character without deleting (usually you can
@@ -390,7 +390,7 @@
 Python Shell window by one tab).  After certain keywords (break, return etc.)
 the next line is dedented.  In leading indentation, :kbd:`Backspace` deletes up
 to 4 spaces if they are there. :kbd:`Tab` inserts spaces (in the Python
-Shell window one tab), number depends on Indent width. Currently tabs
+Shell window one tab), number depends on Indent width. Currently, tabs
 are restricted to four spaces due to Tcl/Tk limitations.
 
 See also the indent/dedent region commands in the edit menu.
@@ -414,7 +414,7 @@
 :kbd:`C-space` will open a completions window. In an empty
 string, this will contain the files in the current directory. On a
 blank line, it will contain the built-in and user-defined functions and
-classes in the current name spaces, plus any modules imported. If some
+classes in the current namespaces, plus any modules imported. If some
 characters have been entered, the ACW will attempt to be more specific.
 
 If a string of characters is typed, the ACW selection will jump to the
@@ -442,7 +442,7 @@
 Calltips
 ^^^^^^^^
 
-A calltip is shown when one types :kbd:`(` after the name of an *acccessible*
+A calltip is shown when one types :kbd:`(` after the name of an *accessible*
 function.  A name expression may include dots and subscripts.  A calltip
 remains until it is clicked, the cursor is moved out of the argument area,
 or :kbd:`)` is typed.  When the cursor is in the argument part of a definition,
@@ -553,7 +553,7 @@
 
 As much as possible, the result of executing Python code with IDLE is the
 same as executing the same code in a console window.  However, the different
-interface and operation occasionally affects visible results.  For instance,
+interface and operation occasionally affect visible results.  For instance,
 ``sys.modules`` starts with more entries.
 
 IDLE also replaces ``sys.stdin``, ``sys.stdout``, and ``sys.stderr`` with
@@ -579,7 +579,7 @@
 
 If the attempt to make the socket connection fails, Idle will notify you.
 Such failures are sometimes transient, but if persistent, the problem
-may be either a firewall blocking the connecton or misconfiguration of
+may be either a firewall blocking the connection or misconfiguration of
 a particular system.  Until the problem is fixed, one can run Idle with
 the -n command line switch.
 
@@ -615,14 +615,14 @@
 
 The font preferences, highlighting, keys, and general preferences can be
 changed via Configure IDLE on the Option menu.  Keys can be user defined;
-IDLE ships with four built in key sets. In addition a user can create a
+IDLE ships with four built-in key sets. In addition, a user can create a
 custom key set in the Configure IDLE dialog under the keys tab.
 
 
 Extensions
 ^^^^^^^^^^
 
-IDLE contains an extension facility.  Peferences for extensions can be
+IDLE contains an extension facility.  Preferences for extensions can be
 changed with Configure Extensions. See the beginning of config-extensions.def
 in the idlelib directory for further information.  The default extensions
 are currently:
diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst
index c4307b5..f93e945 100644
--- a/Doc/library/importlib.rst
+++ b/Doc/library/importlib.rst
@@ -1,5 +1,5 @@
-:mod:`importlib` -- Convenience wrappers for :func:`__import__`
-===============================================================
+:mod:`importlib` --- Convenience wrappers for :func:`__import__`
+================================================================
 
 .. module:: importlib
    :synopsis: Convenience wrappers for __import__
diff --git a/Doc/library/index.rst b/Doc/library/index.rst
index 97cf3ea..31ca6df 100644
--- a/Doc/library/index.rst
+++ b/Doc/library/index.rst
@@ -30,7 +30,7 @@
 In addition to the standard library, there is a growing collection of
 several thousand components (from individual programs and modules to
 packages and entire application development frameworks), available from
-the `Python Package Index <https://pypi.python.org/pypi>`_.
+the `Python Package Index <https://pypi.org>`_.
 
 
 .. toctree::
diff --git a/Doc/library/io.rst b/Doc/library/io.rst
index b99324c..dcdd01c 100644
--- a/Doc/library/io.rst
+++ b/Doc/library/io.rst
@@ -724,7 +724,7 @@
 
       .. versionadded:: 2.7
 
-   .. method:: read(n)
+   .. method:: read(n=-1)
 
       Read and return at most *n* characters from the stream as a single
       :class:`unicode`.  If *n* is negative or ``None``, reads until EOF.
@@ -809,7 +809,7 @@
      the given string.
 
    If *line_buffering* is ``True``, :meth:`flush` is implied when a call to
-   write contains a newline character.
+   write contains a newline character or a carriage return.
 
    :class:`TextIOWrapper` provides one attribute in addition to those of
    :class:`TextIOBase` and its parents:
diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst
index 57ba4d4..17303dd 100644
--- a/Doc/library/itertools.rst
+++ b/Doc/library/itertools.rst
@@ -411,12 +411,24 @@
           # islice('ABCDEFG', 2, None) --> C D E F G
           # islice('ABCDEFG', 0, None, 2) --> A C E G
           s = slice(*args)
-          it = iter(xrange(s.start or 0, s.stop or sys.maxint, s.step or 1))
-          nexti = next(it)
-          for i, element in enumerate(iterable):
-              if i == nexti:
-                  yield element
-                  nexti = next(it)
+          start, stop, step = s.start or 0, s.stop or sys.maxint, s.step or 1
+          it = iter(xrange(start, stop, step)))
+          try:
+              nexti = next(it)
+          except StopIteration:
+              # Consume *iterable* up to the *start* position.
+              for i, element in izip(xrange(start), iterable):
+                  pass
+              return
+          try:
+              for i, element in enumerate(iterable):
+                  if i == nexti:
+                      yield element
+                      nexti = next(it)
+          except StopIteration:
+              # Consume to *stop*.
+              for i, element in izip(xrange(i + 1, stop), iterable):
+                  pass
 
    If *start* is ``None``, then iteration starts at zero. If *step* is ``None``,
    then the step defaults to one.
@@ -681,8 +693,8 @@
        "Return function(0), function(1), ..."
        return imap(function, count(start))
 
-   def consume(iterator, n):
-       "Advance the iterator n-steps ahead. If n is none, consume entirely."
+   def consume(iterator, n=None):
+       "Advance the iterator n-steps ahead. If n is None, consume entirely."
        # Use functions that consume iterators at C speed.
        if n is None:
            # feed the entire iterator into a zero-length deque
diff --git a/Doc/library/json.rst b/Doc/library/json.rst
index c4d5ee6..87dc054 100644
--- a/Doc/library/json.rst
+++ b/Doc/library/json.rst
@@ -89,7 +89,7 @@
     ...         # Let the base class default method raise the TypeError
     ...         return json.JSONEncoder.default(self, obj)
     ...
-    >>> dumps(2 + 1j, cls=ComplexEncoder)
+    >>> json.dumps(2 + 1j, cls=ComplexEncoder)
     '[2.0, 1.0]'
     >>> ComplexEncoder().encode(2 + 1j)
     '[2.0, 1.0]'
diff --git a/Doc/library/locale.rst b/Doc/library/locale.rst
index 0b02685..e16f131 100644
--- a/Doc/library/locale.rst
+++ b/Doc/library/locale.rst
@@ -552,17 +552,23 @@
 Access to message catalogs
 --------------------------
 
+.. function:: gettext(msg)
+.. function:: dgettext(domain, msg)
+.. function:: dcgettext(domain, msg, category)
+.. function:: textdomain(domain)
+.. function:: bindtextdomain(domain, dir)
+
 The locale module exposes the C library's gettext interface on systems that
-provide this interface.  It consists of the functions :func:`gettext`,
-:func:`dgettext`, :func:`dcgettext`, :func:`textdomain`, :func:`bindtextdomain`,
-and :func:`bind_textdomain_codeset`.  These are similar to the same functions in
+provide this interface.  It consists of the functions :func:`!gettext`,
+:func:`!dgettext`, :func:`!dcgettext`, :func:`!textdomain`, :func:`!bindtextdomain`,
+and :func:`!bind_textdomain_codeset`.  These are similar to the same functions in
 the :mod:`gettext` module, but use the C library's binary format for message
 catalogs, and the C library's search algorithms for locating message catalogs.
 
 Python applications should normally find no need to invoke these functions, and
 should use :mod:`gettext` instead.  A known exception to this rule are
 applications that link with additional C libraries which internally invoke
-:c:func:`gettext` or :func:`dcgettext`.  For these applications, it may be
+:c:func:`gettext` or :c:func:`dcgettext`.  For these applications, it may be
 necessary to bind the text domain, so that the libraries can properly locate
 their message catalogs.
 
diff --git a/Doc/library/logging.config.rst b/Doc/library/logging.config.rst
index 23333ed..b331fbb 100644
--- a/Doc/library/logging.config.rst
+++ b/Doc/library/logging.config.rst
@@ -93,8 +93,8 @@
    :param disable_existing_loggers: If specified as ``False``, loggers which
                                     exist when this call is made are left
                                     enabled. The default is ``True`` because this
-                                    enables old behaviour in a backward-
-                                    compatible way. This behaviour is to
+                                    enables old behaviour in a
+                                    backward-compatible way. This behaviour is to
                                     disable any existing loggers unless they or
                                     their ancestors are explicitly named in the
                                     logging configuration.
diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst
index ba2ab83..09cae18 100644
--- a/Doc/library/logging.rst
+++ b/Doc/library/logging.rst
@@ -95,10 +95,10 @@
       scenario is to attach handlers only to the root logger, and to let
       propagation take care of the rest.
 
-.. method:: Logger.setLevel(lvl)
+.. method:: Logger.setLevel(level)
 
-   Sets the threshold for this logger to *lvl*. Logging messages which are less
-   severe than *lvl* will be ignored. When a logger is created, the level is set to
+   Sets the threshold for this logger to *level*. Logging messages which are less
+   severe than *level* will be ignored. When a logger is created, the level is set to
    :const:`NOTSET` (which causes all messages to be processed when the logger is
    the root logger, or delegation to the parent when the logger is a non-root
    logger). Note that the root logger is created with level :const:`WARNING`.
@@ -232,14 +232,14 @@
    should only be called from an exception handler.
 
 
-.. method:: Logger.addFilter(filt)
+.. method:: Logger.addFilter(filter)
 
-   Adds the specified filter *filt* to this logger.
+   Adds the specified filter *filter* to this logger.
 
 
-.. method:: Logger.removeFilter(filt)
+.. method:: Logger.removeFilter(filter)
 
-   Removes the specified filter *filt* from this logger.
+   Removes the specified filter *filter* from this logger.
 
 
 .. method:: Logger.filter(record)
@@ -349,27 +349,27 @@
    Releases the thread lock acquired with :meth:`acquire`.
 
 
-.. method:: Handler.setLevel(lvl)
+.. method:: Handler.setLevel(level)
 
-   Sets the threshold for this handler to *lvl*. Logging messages which are less
-   severe than *lvl* will be ignored. When a handler is created, the level is set
+   Sets the threshold for this handler to *level*. Logging messages which are less
+   severe than *level* will be ignored. When a handler is created, the level is set
    to :const:`NOTSET` (which causes all messages to be processed).
 
    See :ref:`levels` for a list of levels.
 
-.. method:: Handler.setFormatter(form)
+.. method:: Handler.setFormatter(fmt)
 
-   Sets the :class:`Formatter` for this handler to *form*.
+   Sets the :class:`Formatter` for this handler to *fmt*.
 
 
-.. method:: Handler.addFilter(filt)
+.. method:: Handler.addFilter(filter)
 
-   Adds the specified filter *filt* to this handler.
+   Adds the specified filter *filter* to this handler.
 
 
-.. method:: Handler.removeFilter(filt)
+.. method:: Handler.removeFilter(filter)
 
-   Removes the specified filter *filt* from this handler.
+   Removes the specified filter *filter* from this handler.
 
 
 .. method:: Handler.filter(record)
@@ -949,26 +949,26 @@
    +--------------+---------------------------------------------+
    | Format       | Description                                 |
    +==============+=============================================+
-   | ``filename`` | Specifies that a FileHandler be created,    |
+   | *filename*   | Specifies that a FileHandler be created,    |
    |              | using the specified filename, rather than a |
    |              | StreamHandler.                              |
    +--------------+---------------------------------------------+
-   | ``filemode`` | Specifies the mode to open the file, if     |
-   |              | filename is specified (if filemode is       |
-   |              | unspecified, it defaults to 'a').           |
+   | *filemode*   | If *filename* is specified, open the file   |
+   |              | in this mode. Defaults to ``'a'``.          |
    +--------------+---------------------------------------------+
-   | ``format``   | Use the specified format string for the     |
+   | *format*     | Use the specified format string for the     |
    |              | handler.                                    |
    +--------------+---------------------------------------------+
-   | ``datefmt``  | Use the specified date/time format.         |
+   | *datefmt*    | Use the specified date/time format, as      |
+   |              | accepted by :func:`time.strftime`.          |
    +--------------+---------------------------------------------+
-   | ``level``    | Set the root logger level to the specified  |
-   |              | level.                                      |
+   | *level*      | Set the root logger level to the specified  |
+   |              | :ref:`level <levels>`.                      |
    +--------------+---------------------------------------------+
-   | ``stream``   | Use the specified stream to initialize the  |
+   | *stream*     | Use the specified stream to initialize the  |
    |              | StreamHandler. Note that this argument is   |
-   |              | incompatible with 'filename' - if both are  |
-   |              | present, 'stream' is ignored.               |
+   |              | incompatible with *filename* - if both are  |
+   |              | present, *stream* is ignored.               |
    +--------------+---------------------------------------------+
 
 
diff --git a/Doc/library/mailbox.rst b/Doc/library/mailbox.rst
index 9f894ca..9c9452f 100644
--- a/Doc/library/mailbox.rst
+++ b/Doc/library/mailbox.rst
@@ -474,7 +474,7 @@
    `Configuring Netscape Mail on Unix: Why The Content-Length Format is Bad <https://www.jwz.org/doc/content-length.html>`_
       An argument for using the original mbox format rather than a variation.
 
-   `"mbox" is a family of several mutually incompatible mailbox formats <http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/mail-mbox-formats.html>`_
+   `"mbox" is a family of several mutually incompatible mailbox formats <https://www.loc.gov/preservation/digital/formats/fdd/fdd000383.shtml>`_
       A history of mbox variations.
 
 
diff --git a/Doc/library/mimetypes.rst b/Doc/library/mimetypes.rst
index 43c4ea0..c6e157c 100644
--- a/Doc/library/mimetypes.rst
+++ b/Doc/library/mimetypes.rst
@@ -186,78 +186,78 @@
    loaded "on top" of the default database.
 
 
-.. attribute:: MimeTypes.suffix_map
+   .. attribute:: MimeTypes.suffix_map
 
-   Dictionary mapping suffixes to suffixes.  This is used to allow recognition of
-   encoded files for which the encoding and the type are indicated by the same
-   extension.  For example, the :file:`.tgz` extension is mapped to :file:`.tar.gz`
-   to allow the encoding and type to be recognized separately.  This is initially a
-   copy of the global :data:`suffix_map` defined in the module.
+      Dictionary mapping suffixes to suffixes.  This is used to allow recognition of
+      encoded files for which the encoding and the type are indicated by the same
+      extension.  For example, the :file:`.tgz` extension is mapped to :file:`.tar.gz`
+      to allow the encoding and type to be recognized separately.  This is initially a
+      copy of the global :data:`suffix_map` defined in the module.
 
 
-.. attribute:: MimeTypes.encodings_map
+   .. attribute:: MimeTypes.encodings_map
 
-   Dictionary mapping filename extensions to encoding types.  This is initially a
-   copy of the global :data:`encodings_map` defined in the module.
+      Dictionary mapping filename extensions to encoding types.  This is initially a
+      copy of the global :data:`encodings_map` defined in the module.
 
 
-.. attribute:: MimeTypes.types_map
+   .. attribute:: MimeTypes.types_map
 
-   Tuple containing two dictionaries, mapping filename extensions to MIME types:
-   the first dictionary is for the non-standards types and the second one is for
-   the standard types. They are initialized by :data:`common_types` and
-   :data:`types_map`.
+      Tuple containing two dictionaries, mapping filename extensions to MIME types:
+      the first dictionary is for the non-standards types and the second one is for
+      the standard types. They are initialized by :data:`common_types` and
+      :data:`types_map`.
 
 
-.. attribute:: MimeTypes.types_map_inv
+   .. attribute:: MimeTypes.types_map_inv
 
-   Tuple containing two dictionaries, mapping MIME types to a list of filename
-   extensions: the first dictionary is for the non-standards types and the
-   second one is for the standard types. They are initialized by
-   :data:`common_types` and :data:`types_map`.
+      Tuple containing two dictionaries, mapping MIME types to a list of filename
+      extensions: the first dictionary is for the non-standards types and the
+      second one is for the standard types. They are initialized by
+      :data:`common_types` and :data:`types_map`.
 
 
-.. method:: MimeTypes.guess_extension(type, strict=True)
+   .. method:: MimeTypes.guess_extension(type, strict=True)
 
-   Similar to the :func:`guess_extension` function, using the tables stored as part
-   of the object.
+      Similar to the :func:`guess_extension` function, using the tables stored as part
+      of the object.
 
 
-.. method:: MimeTypes.guess_type(url, strict=True)
+   .. method:: MimeTypes.guess_type(url, strict=True)
 
-   Similar to the :func:`guess_type` function, using the tables stored as part of
-   the object.
+      Similar to the :func:`guess_type` function, using the tables stored as part of
+      the object.
 
 
-.. method:: MimeTypes.guess_all_extensions(type, strict=True)
+   .. method:: MimeTypes.guess_all_extensions(type, strict=True)
 
-   Similar to the :func:`guess_all_extensions` function, using the tables stored
-   as part of the object.
+      Similar to the :func:`guess_all_extensions` function, using the tables stored
+      as part of the object.
 
 
-.. method:: MimeTypes.read(filename, strict=True)
+   .. method:: MimeTypes.read(filename, strict=True)
 
-   Load MIME information from a file named *filename*.  This uses :meth:`readfp` to
-   parse the file.
+      Load MIME information from a file named *filename*.  This uses :meth:`readfp` to
+      parse the file.
 
-   If *strict* is ``True``, information will be added to list of standard types,
-   else to the list of non-standard types.
+      If *strict* is ``True``, information will be added to list of standard types,
+      else to the list of non-standard types.
 
 
-.. method:: MimeTypes.readfp(fp, strict=True)
+   .. method:: MimeTypes.readfp(fp, strict=True)
 
-   Load MIME type information from an open file *fp*.  The file must have the format of
-   the standard :file:`mime.types` files.
+      Load MIME type information from an open file *fp*.  The file must have the format of
+      the standard :file:`mime.types` files.
 
-   If *strict* is ``True``, information will be added to the list of standard
-   types, else to the list of non-standard types.
+      If *strict* is ``True``, information will be added to the list of standard
+      types, else to the list of non-standard types.
 
 
-.. method:: MimeTypes.read_windows_registry(strict=True)
+   .. method:: MimeTypes.read_windows_registry(strict=True)
 
-   Load MIME type information from the Windows registry.  Availability: Windows.
+      Load MIME type information from the Windows registry.  Availability: Windows.
 
-   If *strict* is ``True``, information will be added to the list of standard
-   types, else to the list of non-standard types.
+      If *strict* is ``True``, information will be added to the list of standard
+      types, else to the list of non-standard types.
 
-   .. versionadded:: 2.7
+      .. versionadded:: 2.7
diff --git a/Doc/library/msilib.rst b/Doc/library/msilib.rst
index a4d382c..55785bd 100644
--- a/Doc/library/msilib.rst
+++ b/Doc/library/msilib.rst
@@ -311,7 +311,7 @@
 Errors
 ------
 
-All wrappers around MSI functions raise :exc:`MsiError`; the string inside the
+All wrappers around MSI functions raise :exc:`MSIError`; the string inside the
 exception will contain more detail.
 
 
diff --git a/Doc/library/msvcrt.rst b/Doc/library/msvcrt.rst
index 87b8166..5e6d523 100644
--- a/Doc/library/msvcrt.rst
+++ b/Doc/library/msvcrt.rst
@@ -1,6 +1,6 @@
 
-:mod:`msvcrt` -- Useful routines from the MS VC++ runtime
-=========================================================
+:mod:`msvcrt` --- Useful routines from the MS VC++ runtime
+==========================================================
 
 .. module:: msvcrt
    :platform: Windows
diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst
index b393ad1..2d8660a 100644
--- a/Doc/library/multiprocessing.rst
+++ b/Doc/library/multiprocessing.rst
@@ -803,10 +803,13 @@
 Connection Objects
 ~~~~~~~~~~~~~~~~~~
 
+.. currentmodule:: None
+
 Connection objects allow the sending and receiving of picklable objects or
 strings.  They can be thought of as message oriented connected sockets.
 
-Connection objects are usually created using :func:`Pipe` -- see also
+Connection objects are usually created using
+:func:`Pipe <multiprocessing.Pipe>` -- see also
 :ref:`multiprocessing-listeners-clients`.
 
 .. class:: Connection
@@ -822,7 +825,7 @@
    .. method:: recv()
 
       Return an object sent from the other end of the connection using
-      :meth:`send`.  Blocks until there its something to receive.  Raises
+      :meth:`send`.  Blocks until there is something to receive.  Raises
       :exc:`EOFError` if there is nothing left to receive
       and the other end was closed.
 
@@ -926,6 +929,8 @@
 Synchronization primitives
 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+.. currentmodule:: multiprocessing
+
 Generally synchronization primitives are not as necessary in a multiprocess
 program as they are in a multithreaded program.  See the documentation for
 :mod:`threading` module.
@@ -1943,8 +1948,7 @@
    :synopsis: API for dealing with sockets.
 
 Usually message passing between processes is done using queues or by using
-:class:`~multiprocessing.Connection` objects returned by
-:func:`~multiprocessing.Pipe`.
+:class:`Connection` objects returned by :func:`~multiprocessing.Pipe`.
 
 However, the :mod:`multiprocessing.connection` module allows some extra
 flexibility.  It basically gives a high level message oriented API for dealing
@@ -1972,7 +1976,7 @@
 .. function:: Client(address[, family[, authenticate[, authkey]]])
 
    Attempt to set up a connection to the listener which is using address
-   *address*, returning a :class:`~multiprocessing.Connection`.
+   *address*, returning a :class:`Connection`.
 
    The type of the connection is determined by *family* argument, but this can
    generally be omitted since it can usually be inferred from the format of
@@ -2028,8 +2032,8 @@
    .. method:: accept()
 
       Accept a connection on the bound socket or named pipe of the listener
-      object and return a :class:`~multiprocessing.Connection` object.  If
-      authentication is attempted and fails, then
+      object and return a :class:`Connection` object.
+      If authentication is attempted and fails, then
       :exc:`~multiprocessing.AuthenticationError` is raised.
 
    .. method:: close()
@@ -2050,11 +2054,24 @@
       unavailable then it is ``None``.
 
 
-The module defines two exceptions:
+The module defines the following exceptions:
+
+.. exception:: ProcessError
+
+   The base class of all :mod:`multiprocessing` exceptions.
+
+.. exception:: BufferTooShort
+
+   Exception raised by :meth:`Connection.recv_bytes_into()` when the supplied
+   buffer object is too small for the message read.
 
 .. exception:: AuthenticationError
 
-   Exception raised when there is an authentication error.
+   Raised when there is an authentication error.
+
+.. exception:: TimeoutError
+
+   Raised by methods with a timeout when the timeout expires.
 
 
 **Examples**
@@ -2126,7 +2143,7 @@
 Authentication keys
 ~~~~~~~~~~~~~~~~~~~
 
-When one uses :meth:`Connection.recv <multiprocessing.Connection.recv>`, the
+When one uses :meth:`Connection.recv`, the
 data received is automatically
 unpickled.  Unfortunately unpickling data from an untrusted source is a security
 risk.  Therefore :class:`Listener` and :func:`Client` use the :mod:`hmac` module
diff --git a/Doc/library/optparse.rst b/Doc/library/optparse.rst
index 4af75a1..627eb7d 100644
--- a/Doc/library/optparse.rst
+++ b/Doc/library/optparse.rst
@@ -1679,7 +1679,7 @@
 problems with the option or its argument(s).  :mod:`optparse` catches this and
 terminates the program, printing the error message you supply to stderr.  Your
 message should be clear, concise, accurate, and mention the option at fault.
-Otherwise, the user will have a hard time figuring out what he did wrong.
+Otherwise, the user will have a hard time figuring out what they did wrong.
 
 
 .. _optparse-callback-example-1:
diff --git a/Doc/library/os.rst b/Doc/library/os.rst
index 9caebf1..5bfa351 100644
--- a/Doc/library/os.rst
+++ b/Doc/library/os.rst
@@ -329,7 +329,7 @@
 
 .. function:: setpgrp()
 
-   Call the system call :c:func:`setpgrp` or :c:func:`setpgrp(0, 0)` depending on
+   Call the system call :c:func:`setpgrp` or ``setpgrp(0, 0)`` depending on
    which version is implemented (if any).  See the Unix manual for the semantics.
 
    Availability: Unix.
diff --git a/Doc/library/pdb.rst b/Doc/library/pdb.rst
index 9177f95..33d7750 100644
--- a/Doc/library/pdb.rst
+++ b/Doc/library/pdb.rst
@@ -70,7 +70,7 @@
    >>> import mymodule
    >>> mymodule.test()
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
      File "./mymodule.py", line 4, in test
        test2()
      File "./mymodule.py", line 3, in test2
diff --git a/Doc/library/pickle.rst b/Doc/library/pickle.rst
index 41be2c4..67f27de 100644
--- a/Doc/library/pickle.rst
+++ b/Doc/library/pickle.rst
@@ -418,10 +418,11 @@
    When a pickled class instance is unpickled, its :meth:`__init__` method is
    normally *not* invoked.  If it is desirable that the :meth:`__init__` method
    be called on unpickling, an old-style class can define a method
-   :meth:`__getinitargs__`, which should return a *tuple* containing the
+   :meth:`__getinitargs__`, which should return a *tuple* of positional
    arguments to be passed to the class constructor (:meth:`__init__` for
-   example).  The :meth:`__getinitargs__` method is called at pickle time; the
-   tuple it returns is incorporated in the pickle for the instance.
+   example).  Keyword arguments are not supported.  The :meth:`__getinitargs__`
+   method is called at pickle time; the tuple it returns is incorporated in the
+   pickle for the instance.
 
 .. method:: object.__getnewargs__()
 
diff --git a/Doc/library/platform.rst b/Doc/library/platform.rst
index 28b6f08..3d0743b 100644
--- a/Doc/library/platform.rst
+++ b/Doc/library/platform.rst
@@ -33,8 +33,8 @@
    returned as strings.
 
    Values that cannot be determined are returned as given by the parameter presets.
-   If bits is given as ``''``, the :c:func:`sizeof(pointer)` (or
-   :c:func:`sizeof(long)` on Python version < 1.5.2) is used as indicator for the
+   If bits is given as ``''``, the ``sizeof(pointer)`` (or
+   ``sizeof(long)`` on Python version < 1.5.2) is used as indicator for the
    supported pointer size.
 
    The function relies on the system's :file:`file` command to do the actual work.
@@ -270,6 +270,10 @@
    parameters.  ``id`` is the item in parentheses after the version number.  It
    is usually the version codename.
 
+   .. note::
+      This function is deprecated since Python 3.5 and removed in Python 3.8.
+      See alternative like the `distro <https://pypi.org/project/distro>`_ package.
+
    .. versionadded:: 2.6
 
 .. function:: libc_ver(executable=sys.executable, lib='', version='', chunksize=2048)
diff --git a/Doc/library/pprint.rst b/Doc/library/pprint.rst
index ffa27d4..3f09b21 100644
--- a/Doc/library/pprint.rst
+++ b/Doc/library/pprint.rst
@@ -234,4 +234,3 @@
     ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
      'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
     ['cccccccccccccccccccc', 'dddddddddddddddddddd']]
-
diff --git a/Doc/library/profile.rst b/Doc/library/profile.rst
index 210e99c..0926373 100644
--- a/Doc/library/profile.rst
+++ b/Doc/library/profile.rst
@@ -333,11 +333,12 @@
    corresponding version of :mod:`profile` or :mod:`cProfile`.  To be specific,
    there is *no* file compatibility guaranteed with future versions of this
    profiler, and there is no compatibility with files produced by other
-   profilers.  If several files are provided, all the statistics for identical
-   functions will be coalesced, so that an overall view of several processes can
-   be considered in a single report.  If additional files need to be combined
-   with data in an existing :class:`~pstats.Stats` object, the
-   :meth:`~pstats.Stats.add` method can be used.
+   profilers, or the same profiler run on a different operating system.  If
+   several files are provided, all the statistics for identical functions will
+   be coalesced, so that an overall view of several processes can be considered
+   in a single report.  If additional files need to be combined with data in an
+   existing :class:`~pstats.Stats` object, the :meth:`~pstats.Stats.add` method
+   can be used.
 
    Instead of reading the profile data from a file, a :class:`cProfile.Profile`
    or :class:`profile.Profile` object can be used as the profile data source.
diff --git a/Doc/library/pyexpat.rst b/Doc/library/pyexpat.rst
index ffa042b..9ac5572 100644
--- a/Doc/library/pyexpat.rst
+++ b/Doc/library/pyexpat.rst
@@ -911,7 +911,7 @@
 
 .. rubric:: Footnotes
 
-.. [#] The encoding string included in XML output should conform to the
+.. [1] The encoding string included in XML output should conform to the
    appropriate standards. For example, "UTF-8" is valid, but "UTF8" is
    not. See https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl
    and https://www.iana.org/assignments/character-sets/character-sets.xhtml.
diff --git a/Doc/library/random.rst b/Doc/library/random.rst
index 2a3c3af..852fe7c 100644
--- a/Doc/library/random.rst
+++ b/Doc/library/random.rst
@@ -71,17 +71,17 @@
 Bookkeeping functions:
 
 
-.. function:: seed([x])
+.. function:: seed(a=None)
 
-   Initialize the basic random number generator. Optional argument *x* can be any
-   :term:`hashable` object. If *x* is omitted or ``None``, current system time is used;
-   current system time is also used to initialize the generator when the module is
-   first imported.  If randomness sources are provided by the operating system,
-   they are used instead of the system time (see the :func:`os.urandom` function
-   for details on availability).
+   Initialize internal state of the random number generator.
 
-   If a :term:`hashable` object is given, deterministic results are only assured
-   when :envvar:`PYTHONHASHSEED` is disabled.
+   ``None`` or no argument seeds from current time or from an operating
+   system specific randomness source if available (see the :func:`os.urandom`
+   function for details on availability).
+
+   If *a* is not ``None`` or an :class:`int` or a :class:`long`, then
+   ``hash(a)`` is used instead.  Note that the hash values for some types
+   are nondeterministic when :envvar:`PYTHONHASHSEED` is enabled.
 
    .. versionchanged:: 2.4
       formerly, operating system resources were not used.
diff --git a/Doc/library/re.rst b/Doc/library/re.rst
index 7b76d0c..c708a29 100644
--- a/Doc/library/re.rst
+++ b/Doc/library/re.rst
@@ -33,6 +33,12 @@
 shortcuts that don't require you to compile a regex object first, but miss some
 fine-tuning parameters.
 
+.. seealso::
+
+   The third-party `regex <https://pypi.org/project/regex/>`_ module,
+   which has an API compatible with the standard library :mod:`re` module,
+   but offers additional functionality and a more thorough Unicode support.
+
 
 .. _re-syntax:
 
@@ -480,7 +486,9 @@
           IGNORECASE
 
    Perform case-insensitive matching; expressions like ``[A-Z]`` will match
-   lowercase letters, too.  This is not affected by the current locale.
+   lowercase letters, too.  This is not affected by the current locale.  To
+   get this effect on non-ASCII Unicode characters such as ``ü`` and ``Ü``,
+   add the :const:`UNICODE` flag.
 
 
 .. data:: L
@@ -511,8 +519,9 @@
 .. data:: U
           UNICODE
 
-   Make ``\w``, ``\W``, ``\b``, ``\B``, ``\d``, ``\D``, ``\s`` and ``\S`` dependent
-   on the Unicode character properties database.
+   Make the ``\w``, ``\W``, ``\b``, ``\B``, ``\d``, ``\D``, ``\s`` and ``\S``
+   sequences dependent on the Unicode character properties database. Also
+   enables non-ASCII matching for :const:`IGNORECASE`.
 
    .. versionadded:: 2.0
 
@@ -523,7 +532,8 @@
    This flag allows you to write regular expressions that look nicer and are
    more readable by allowing you to visually separate logical sections of the
    pattern and add comments. Whitespace within the pattern is ignored, except
-   when in a character class or when preceded by an unescaped backslash.
+   when in a character class, or when preceded by an unescaped backslash,
+   or within tokens like ``*?``, ``(?:`` or ``(?P<...>``.
    When a line contains a ``#`` that is not in a character class and is not
    preceded by an unescaped backslash, all characters from the leftmost such
    ``#`` through the end of the line are ignored.
@@ -601,14 +611,21 @@
       Added the optional flags argument.
 
 
+
 .. function:: findall(pattern, string, flags=0)
 
    Return all non-overlapping matches of *pattern* in *string*, as a list of
    strings.  The *string* is scanned left-to-right, and matches are returned in
    the order found.  If one or more groups are present in the pattern, return a
    list of groups; this will be a list of tuples if the pattern has more than
-   one group.  Empty matches are included in the result unless they touch the
-   beginning of another match.
+   one group.  Empty matches are included in the result.
+
+   .. note::
+
+      Due to the limitation of the current implementation the character
+      following an empty match is not included in a next match, so
+      ``findall(r'^|\w+', 'two words')`` returns ``['', 'wo', 'words']``
+      (note missed "t").  This is changed in Python 3.7.
 
    .. versionadded:: 1.5.2
 
@@ -621,8 +638,7 @@
    Return an :term:`iterator` yielding :class:`MatchObject` instances over all
    non-overlapping matches for the RE *pattern* in *string*.  The *string* is
    scanned left-to-right, and matches are returned in the order found.  Empty
-   matches are included in the result unless they touch the beginning of another
-   match.
+   matches are included in the result.  See also the note about :func:`findall`.
 
    .. versionadded:: 2.2
 
@@ -689,11 +705,22 @@
       Added the optional flags argument.
 
 
-.. function:: escape(string)
+.. function:: escape(pattern)
 
-   Return *string* with all non-alphanumerics backslashed; this is useful if you
-   want to match an arbitrary literal string that may have regular expression
-   metacharacters in it.
+   Escape all the characters in *pattern* except ASCII letters and numbers.
+   This is useful if you want to match an arbitrary literal string that may
+   have regular expression metacharacters in it.  For example::
+
+      >>> print re.escape('python.exe')
+      python\.exe
+
+      >>> legal_chars = string.ascii_lowercase + string.digits + "!#$%&'*+-.^_`|~:"
+      >>> print '[%s]+' % re.escape(legal_chars)
+      [abcdefghijklmnopqrstuvwxyz0123456789\!\#\$\%\&\'\*\+\-\.\^\_\`\|\~\:]+
+
+      >>> operators = ['+', '-', '*', '/', '**']
+      >>> print '|'.join(map(re.escape, sorted(operators, reverse=True)))
+      \/|\-|\+|\*\*|\*
 
 
 .. function:: purge()
@@ -1229,8 +1256,8 @@
 ^^^^^^^^^^^^^^^^^^^
 
 :func:`findall` matches *all* occurrences of a pattern, not just the first
-one as :func:`search` does.  For example, if one was a writer and wanted to
-find all of the adverbs in some text, he or she might use :func:`findall` in
+one as :func:`search` does.  For example, if a writer wanted to
+find all of the adverbs in some text, they might use :func:`findall` in
 the following manner:
 
    >>> text = "He was carefully disguised but captured quickly by police."
@@ -1244,8 +1271,8 @@
 If one wants more information about all matches of a pattern than the matched
 text, :func:`finditer` is useful as it provides instances of
 :class:`MatchObject` instead of strings.  Continuing with the previous example,
-if one was a writer who wanted to find all of the adverbs *and their positions*
-in some text, he or she would use :func:`finditer` in the following manner:
+if a writer wanted to find all of the adverbs *and their positions*
+in some text, they would use :func:`finditer` in the following manner:
 
    >>> text = "He was carefully disguised but captured quickly by police."
    >>> for m in re.finditer(r"\w+ly", text):
diff --git a/Doc/library/sched.rst b/Doc/library/sched.rst
index ebe6c0a..1fba8ba 100644
--- a/Doc/library/sched.rst
+++ b/Doc/library/sched.rst
@@ -84,7 +84,7 @@
    Schedule a new event. The *time* argument should be a numeric type compatible
    with the return value of the *timefunc* function passed  to the constructor.
    Events scheduled for the same *time* will be executed in the order of their
-   *priority*.
+   *priority*. A lower number represents a higher priority.
 
    Executing the event means executing ``action(*argument)``.  *argument* must be a
    sequence holding the parameters for *action*.
diff --git a/Doc/library/sgmllib.rst b/Doc/library/sgmllib.rst
index 1fc650c..ffd0102 100644
--- a/Doc/library/sgmllib.rst
+++ b/Doc/library/sgmllib.rst
@@ -166,7 +166,7 @@
    passing it to :meth:`convert_entityref`.  If a translation is returned, it calls
    the method :meth:`handle_data` with the translation; otherwise, it calls the
    method ``unknown_entityref(ref)``. The default :attr:`entitydefs` defines
-   translations for ``&amp;``, ``&apos``, ``&gt;``, ``&lt;``, and ``&quot;``.
+   translations for ``&amp;``, ``&apos;``, ``&gt;``, ``&lt;``, and ``&quot;``.
 
    .. versionchanged:: 2.5
       Use :meth:`convert_entityref` instead of hard-coding the conversion.
diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst
index 527cbd0..6bd8f05 100644
--- a/Doc/library/shutil.rst
+++ b/Doc/library/shutil.rst
@@ -267,7 +267,9 @@
 
    *base_name* is the name of the file to create, including the path, minus
    any format-specific extension. *format* is the archive format: one of
-   "zip", "tar", "bztar" or "gztar".
+   "zip" (if the :mod:`zlib` module or external ``zip`` executable is
+   available), "tar", "gztar" (if the :mod:`zlib` module is available), or
+   "bztar" (if the :mod:`bz2` module is available).
 
    *root_dir* is a directory that will be the root directory of the
    archive; ie. we typically chdir into *root_dir* before creating the
@@ -295,10 +297,11 @@
 
    By default :mod:`shutil` provides these formats:
 
-   - *gztar*: gzip'ed tar-file
-   - *bztar*: bzip2'ed tar-file
-   - *tar*: uncompressed tar file
-   - *zip*: ZIP file
+   - *zip*: ZIP file (if the :mod:`zlib` module or external ``zip``
+     executable is available).
+   - *tar*: uncompressed tar file.
+   - *gztar*: gzip'ed tar-file (if the :mod:`zlib` module is available).
+   - *bztar*: bzip2'ed tar-file (if the :mod:`bz2` module is available).
 
    You can register new formats or provide your own archiver for any existing
    formats, by using :func:`register_archive_format`.
diff --git a/Doc/library/signal.rst b/Doc/library/signal.rst
index fe7983b..3b02a39 100644
--- a/Doc/library/signal.rst
+++ b/Doc/library/signal.rst
@@ -197,8 +197,10 @@
    written to the fd.  This can be used by a library to wakeup a poll or select
    call, allowing the signal to be fully processed.
 
-   The old wakeup fd is returned.  *fd* must be non-blocking.  It is up to the
-   library to remove any bytes before calling poll or select again.
+   The old wakeup fd is returned (or -1 if file descriptor wakeup was not
+   enabled).  If *fd* is -1, file descriptor wakeup is disabled.
+   If not -1, *fd* must be non-blocking.  It is up to the library to remove
+   any bytes from *fd* before calling poll or select again.
 
    When threads are enabled, this function can only be called from the main thread;
    attempting to call it from other threads will cause a :exc:`ValueError`
diff --git a/Doc/library/site.rst b/Doc/library/site.rst
index ff7195d..1c2d63e 100644
--- a/Doc/library/site.rst
+++ b/Doc/library/site.rst
@@ -206,7 +206,7 @@
 If both options are given, user base and user site will be printed (always in
 this order), separated by :data:`os.pathsep`.
 
-If any option is given, the script will exit with one of these values: ``O`` if
+If any option is given, the script will exit with one of these values: ``0`` if
 the user site-packages directory is enabled, ``1`` if it was disabled by the
 user, ``2`` if it is disabled for security reasons or by an administrator, and a
 value greater than 2 if there is an error.
diff --git a/Doc/library/socketserver.rst b/Doc/library/socketserver.rst
index a81214e..1ad4b68 100644
--- a/Doc/library/socketserver.rst
+++ b/Doc/library/socketserver.rst
@@ -284,7 +284,7 @@
    .. XXX should the default implementations of these be documented, or should
       it be assumed that the user will look at SocketServer.py?
 
-   .. method:: finish_request()
+   .. method:: finish_request(request, client_address)
 
       Actually processes the request by instantiating :attr:`RequestHandlerClass` and
       calling its :meth:`~BaseRequestHandler.handle` method.
diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst
index bd5dd14..ce53e84 100644
--- a/Doc/library/sqlite3.rst
+++ b/Doc/library/sqlite3.rst
@@ -206,8 +206,8 @@
    Registers a callable to convert a bytestring from the database into a custom
    Python type. The callable will be invoked for all database values that are of
    the type *typename*. Confer the parameter *detect_types* of the :func:`connect`
-   function for how the type detection works. Note that the case of *typename* and
-   the name of the type in your query must match!
+   function for how the type detection works. Note that *typename* and the name of
+   the type in your query are matched in case-insensitive manner.
 
 
 .. function:: register_adapter(type, callable)
diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst
index 8849d0f..0421031 100644
--- a/Doc/library/ssl.rst
+++ b/Doc/library/ssl.rst
@@ -24,6 +24,9 @@
 library. It is available on all modern Unix systems, Windows, Mac OS X, and
 probably additional platforms, as long as OpenSSL is installed on that platform.
 
+.. versionchanged:: 2.7.13
+   Updated to support linking with OpenSSL 1.1.0
+
 .. note::
 
    Some behavior may be platform dependent, since calls are made to the
@@ -192,12 +195,17 @@
        ------------------------  ---------  ---------  ----------  ---------  -----------  -----------
         *SSLv2*                    yes        no         yes         no         no         no
         *SSLv3*                    no         yes        yes         no         no         no
-        *SSLv23*                   no         yes        yes         yes        yes        yes
+        *SSLv23* [1]_              no         yes        yes         yes        yes        yes
         *TLSv1*                    no         no         yes         yes        no         no
         *TLSv1.1*                  no         no         yes         no         yes        no
         *TLSv1.2*                  no         no         yes         no         no         yes
        ========================  =========  =========  ==========  =========  ===========  ===========
 
+   .. rubric:: Footnotes
+   .. [1] TLS 1.3 protocol will be available with :data:`PROTOCOL_SSLv23` in
+      OpenSSL >= 1.1.1. There is no dedicated PROTOCOL constant for just
+      TLS 1.3.
+
    .. note::
 
       Which connections succeed will vary depending on the version of
@@ -206,7 +214,7 @@
 
    The *ciphers* parameter sets the available ciphers for this SSL object.
    It should be a string in the `OpenSSL cipher list format
-   <https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT>`_.
+   <https://www.openssl.org/docs/manmaster/man1/ciphers.html>`_.
 
    The parameter ``do_handshake_on_connect`` specifies whether to do the SSL
    handshake automatically after doing a :meth:`socket.connect`, or whether the
@@ -286,6 +294,11 @@
 
      3DES was dropped from the default cipher string.
 
+   .. versionchanged:: 2.7.15
+
+     TLS 1.3 cipher suites TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384,
+     and TLS_CHACHA20_POLY1305_SHA256 were added to the default cipher string.
+
 .. function:: _https_verify_certificates(enable=True)
 
    Specifies whether or not server certificates are verified when creating
@@ -701,6 +714,16 @@
 
    .. versionadded:: 2.7.9
 
+.. data:: OP_NO_TLSv1_3
+
+   Prevents a TLSv1.3 connection. This option is only applicable in conjunction
+   with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.3 as
+   the protocol version. TLS 1.3 is available with OpenSSL 1.1.1 or later.
+   When Python has been compiled against an older version of OpenSSL, the
+   flag defaults to *0*.
+
+   .. versionadded:: 2.7.15
+
 .. data:: OP_CIPHER_SERVER_PREFERENCE
 
    Use the server's cipher ordering preference, rather than the client's.
@@ -765,6 +788,12 @@
 
    .. versionadded:: 2.7.9
 
+.. data:: HAS_TLSv1_3
+
+   Whether the OpenSSL library has built-in support for the TLS 1.3 protocol.
+
+   .. versionadded:: 2.7.15
+
 .. data:: CHANNEL_BINDING_TYPES
 
    List of supported TLS channel binding types.  Strings in this list
@@ -1108,7 +1137,7 @@
    The *capath* string, if present, is
    the path to a directory containing several CA certificates in PEM format,
    following an `OpenSSL specific layout
-   <https://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html>`_.
+   <https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_load_verify_locations.html>`_.
 
    The *cadata* object, if present, is either an ASCII string of one or more
    PEM-encoded certificates or a bytes-like object of DER-encoded
@@ -1124,6 +1153,10 @@
    does not contain certificates from *capath* unless a certificate was
    requested and loaded by a SSL connection.
 
+   .. note::
+      Certificates in a capath directory aren't loaded unless they have
+      been used at least once.
+
 .. method:: SSLContext.set_default_verify_paths()
 
    Load a set of default "certification authority" (CA) certificates from
@@ -1137,7 +1170,7 @@
 
    Set the available ciphers for sockets created with this context.
    It should be a string in the `OpenSSL cipher list format
-   <https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT>`_.
+   <https://www.openssl.org/docs/manmaster/man1/ciphers.html>`_.
    If no cipher can be selected (because compile-time options or other
    configuration forbids use of all the specified ciphers), an
    :class:`SSLError` will be raised.
@@ -1158,8 +1191,9 @@
    This method will raise :exc:`NotImplementedError` if :data:`HAS_ALPN` is
    False.
 
-   OpenSSL 1.1.0+ will abort the handshake and raise :exc:`SSLError` when
-   both sides support ALPN but cannot agree on a protocol.
+   OpenSSL 1.1.0 to 1.1.0e will abort the handshake and raise :exc:`SSLError`
+   when both sides support ALPN but cannot agree on a protocol. 1.1.0f+
+   behaves like 1.0.2, :meth:`SSLSocket.selected_alpn_protocol` returns None.
 
    .. versionadded:: 2.7.10
 
@@ -1279,7 +1313,7 @@
 
    Get statistics about the SSL sessions created or managed by this context.
    A dictionary is returned which maps the names of each `piece of information
-   <https://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>`_ to their
+   <https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_sess_number.html>`_ to their
    numeric values.  For example, here is the total number of hits and misses
    in the session cache since the context was created::
 
@@ -1287,16 +1321,6 @@
       >>> stats['hits'], stats['misses']
       (0, 0)
 
-.. method:: SSLContext.get_ca_certs(binary_form=False)
-
-   Returns a list of dicts with information of loaded CA certs. If the
-   optional argument is true, returns a DER-encoded copy of the CA
-   certificate.
-
-   .. note::
-      Certificates in a capath directory aren't loaded unless they have
-      been used at least once.
-
 .. attribute:: SSLContext.check_hostname
 
    Wether to match the peer cert's hostname with :func:`match_hostname` in
@@ -1309,7 +1333,7 @@
 
       import socket, ssl
 
-      context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
+      context = ssl.SSLContext(ssl.PROTOCOL_TLS)
       context.verify_mode = ssl.CERT_REQUIRED
       context.check_hostname = True
       context.load_default_certs()
@@ -1371,7 +1395,7 @@
 
 A certificate contains information about two principals.  It contains the name
 of a *subject*, and the subject's public key.  It also contains a statement by a
-second principal, the *issuer*, that the subject is who he claims to be, and
+second principal, the *issuer*, that the subject is who they claim to be, and
 that this is indeed the subject's public key.  The issuer's statement is signed
 with the issuer's private key, which only the issuer knows.  However, anyone can
 verify the issuer's statement by finding the issuer's public key, decrypting the
@@ -1515,7 +1539,7 @@
 a context from scratch (but beware that you might not get the settings
 right)::
 
-   >>> context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
+   >>> context = ssl.SSLContext(ssl.PROTOCOL_TLS)
    >>> context.verify_mode = ssl.CERT_REQUIRED
    >>> context.check_hostname = True
    >>> context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt")
@@ -1565,7 +1589,7 @@
                 (('commonName', 'www.python.org'),)),
     'subjectAltName': (('DNS', 'www.python.org'),
                        ('DNS', 'python.org'),
-                       ('DNS', 'pypi.python.org'),
+                       ('DNS', 'pypi.org'),
                        ('DNS', 'docs.python.org'),
                        ('DNS', 'testpypi.python.org'),
                        ('DNS', 'bugs.python.org'),
@@ -1787,6 +1811,23 @@
 :func:`~ssl.RAND_pseudo_bytes` is sufficient.
 
 
+.. ssl-libressl:
+
+LibreSSL support
+----------------
+
+LibreSSL is a fork of OpenSSL 1.0.1. The ssl module has limited support for
+LibreSSL. Some features are not available when the ssl module is compiled
+with LibreSSL.
+
+* LibreSSL >= 2.6.1 no longer supports NPN. The methods
+  :meth:`SSLContext.set_npn_protocols` and
+  :meth:`SSLSocket.selected_npn_protocol` are not available.
+* :meth:`SSLContext.set_default_verify_paths` ignores the env vars
+  :envvar:`SSL_CERT_FILE` and :envvar:`SSL_CERT_PATH` although
+  :func:`get_default_verify_paths` still reports them.
+
+
 .. seealso::
 
    Class :class:`socket.socket`
@@ -1815,3 +1856,9 @@
 
    `IANA TLS: Transport Layer Security (TLS) Parameters <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml>`_
        IANA
+
+   `RFC 7525: Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) <https://tools.ietf.org/html/rfc7525>`_
+       IETF
+
+   `Mozilla's Server Side TLS recommendations <https://wiki.mozilla.org/Security/Server_Side_TLS>`_
+       Mozilla
diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst
index 9f5255a..ff68738 100644
--- a/Doc/library/stdtypes.rst
+++ b/Doc/library/stdtypes.rst
@@ -113,11 +113,11 @@
 
 (1)
    This is a short-circuit operator, so it only evaluates the second
-   argument if the first one is :const:`False`.
+   argument if the first one is false.
 
 (2)
    This is a short-circuit operator, so it only evaluates the second
-   argument if the first one is :const:`True`.
+   argument if the first one is true.
 
 (3)
    ``not`` has a lower priority than non-Boolean operators, so ``not a == b`` is
@@ -423,10 +423,12 @@
    pair: bitwise; operations
    pair: shifting; operations
    pair: masking; operations
+   operator: |
    operator: ^
    operator: &
    operator: <<
    operator: >>
+   operator: ~
 
 Bitwise operations only make sense for integers.  Negative numbers are treated
 as their 2's complement value (this assumes a sufficiently large number of bits
@@ -819,7 +821,7 @@
    :ref:`faq-multidimensional-list`.
 
 (3)
-   If *i* or *j* is negative, the index is relative to the end of the string:
+   If *i* or *j* is negative, the index is relative to the end of sequence *s*:
    ``len(s) + i`` or ``len(s) + j`` is substituted.  But note that ``-0`` is still
    ``0``.
 
@@ -834,8 +836,10 @@
    The slice of *s* from *i* to *j* with step *k* is defined as the sequence of
    items with index  ``x = i + n*k`` such that ``0 <= n < (j-i)/k``.  In other words,
    the indices are ``i``, ``i+k``, ``i+2*k``, ``i+3*k`` and so on, stopping when
-   *j* is reached (but never including *j*).  If *i* or *j* is greater than
-   ``len(s)``, use ``len(s)``.  If *i* or *j* are omitted or ``None``, they become
+   *j* is reached (but never including *j*).  When *k* is positive,
+   *i* and *j* are reduced to ``len(s)`` if they are greater.
+   When *k* is negative, *i* and *j* are reduced to ``len(s) - 1`` if
+   they are greater.  If *i* or *j* are omitted or ``None``, they become
    "end" values (which end depends on the sign of *k*).  Note, *k* cannot be zero.
    If *k* is ``None``, it is treated like ``1``.
 
@@ -1066,8 +1070,10 @@
 
 .. method:: str.join(iterable)
 
-   Return a string which is the concatenation of the strings in the
-   :term:`iterable` *iterable*.  The separator between elements is the string
+   Return a string which is the concatenation of the strings in *iterable*.
+   If there is any Unicode object in *iterable*, return a Unicode instead.
+   A :exc:`TypeError` will be raised if there are any non-string or non Unicode
+   object values in *iterable*.  The separator between elements is the string
    providing this method.
 
 
@@ -1375,7 +1381,7 @@
 .. method:: str.upper()
 
    Return a copy of the string with all the cased characters [4]_ converted to
-   uppercase.  Note that ``str.upper().isupper()`` might be ``False`` if ``s``
+   uppercase.  Note that ``s.upper().isupper()`` might be ``False`` if ``s``
    contains uncased characters or if the Unicode category of the resulting
    character(s) is not "Lu" (Letter, uppercase), but e.g. "Lt" (Letter, titlecase).
 
@@ -1551,9 +1557,7 @@
 
 (2)
    The alternate form causes a leading ``'0x'`` or ``'0X'`` (depending on whether
-   the ``'x'`` or ``'X'`` format was used) to be inserted between left-hand padding
-   and the formatting of the number if the leading character of the result is not
-   already a zero.
+   the ``'x'`` or ``'X'`` format was used) to be inserted before the first digit.
 
 (3)
    The alternate form causes the result to always contain a decimal point, even if
@@ -2003,9 +2007,7 @@
 
    Note, the *elem* argument to the :meth:`__contains__`, :meth:`remove`, and
    :meth:`discard` methods may be a set.  To support searching for an equivalent
-   frozenset, the *elem* set is temporarily mutated during the search and then
-   restored.  During the search, the *elem* set should not be read or mutated
-   since it does not have a meaningful value.
+   frozenset, a temporary one is created from *elem*.
 
 
 .. seealso::
diff --git a/Doc/library/string.rst b/Doc/library/string.rst
index c2af446..f8d41f9 100644
--- a/Doc/library/string.rst
+++ b/Doc/library/string.rst
@@ -257,8 +257,9 @@
 does an index lookup using :func:`__getitem__`.
 
 .. versionchanged:: 2.7
-   The positional argument specifiers can be omitted, so ``'{} {}'`` is
-   equivalent to ``'{0} {1}'``.
+   The positional argument specifiers can be omitted for :meth:`str.format` and
+   :meth:`unicode.format`, so ``'{} {}'`` is equivalent to ``'{0} {1}'``,
+   ``u'{} {}'`` is equivalent to ``u'{0} {1}'``.
 
 Some simple format string examples::
 
@@ -463,10 +464,10 @@
    | ``'E'`` | Exponent notation. Same as ``'e'`` except it uses an     |
    |         | upper case 'E' as the separator character.               |
    +---------+----------------------------------------------------------+
-   | ``'f'`` | Fixed point. Displays the number as a fixed-point        |
-   |         | number.  The default precision is ``6``.                 |
+   | ``'f'`` | Fixed-point notation. Displays the number as a           |
+   |         | fixed-point number.  The default precision is ``6``.     |
    +---------+----------------------------------------------------------+
-   | ``'F'`` | Fixed point. Same as ``'f'``.                            |
+   | ``'F'`` | Fixed point notation. Same as ``'f'``.                   |
    +---------+----------------------------------------------------------+
    | ``'g'`` | General format.  For a given precision ``p >= 1``,       |
    |         | this rounds the number to ``p`` significant digits and   |
diff --git a/Doc/library/subprocess.rst b/Doc/library/subprocess.rst
index 284cf44..53a0161 100644
--- a/Doc/library/subprocess.rst
+++ b/Doc/library/subprocess.rst
@@ -32,7 +32,7 @@
 
    :pep:`324` -- PEP proposing the subprocess module
 
-.. _subprocess32: https://pypi.python.org/pypi/subprocess32/
+.. _subprocess32: https://pypi.org/project/subprocess32/
 
 Using the :mod:`subprocess` Module
 ----------------------------------
diff --git a/Doc/library/sunau.rst b/Doc/library/sunau.rst
index 5d57d4b..5bf4803 100644
--- a/Doc/library/sunau.rst
+++ b/Doc/library/sunau.rst
@@ -117,7 +117,7 @@
 
 .. method:: AU_read.getnchannels()
 
-   Returns number of audio channels (1 for mone, 2 for stereo).
+   Returns number of audio channels (1 for mono, 2 for stereo).
 
 
 .. method:: AU_read.getsampwidth()
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index 31e644e..5a7647b 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -857,13 +857,38 @@
    Set the system's profile function, which allows you to implement a Python source
    code profiler in Python.  See chapter :ref:`profile` for more information on the
    Python profiler.  The system's profile function is called similarly to the
-   system's trace function (see :func:`settrace`), but it isn't called for each
-   executed line of code (only on call and return, but the return event is reported
-   even when an exception has been set).  The function is thread-specific, but
-   there is no way for the profiler to know about context switches between threads,
-   so it does not make sense to use this in the presence of multiple threads. Also,
+   system's trace function (see :func:`settrace`), but it is called with different events,
+   for example it isn't called for each executed line of code (only on call and return,
+   but the return event is reported even when an exception has been set). The function is
+   thread-specific, but there is no way for the profiler to know about context switches between
+   threads, so it does not make sense to use this in the presence of multiple threads. Also,
    its return value is not used, so it can simply return ``None``.
 
+   Profile functions should have three arguments: *frame*, *event*, and
+   *arg*. *frame* is the current stack frame.  *event* is a string: ``'call'``,
+   ``'return'``, ``'c_call'``, ``'c_return'``, or ``'c_exception'``. *arg* depends
+   on the event type.
+
+   The events have the following meaning:
+
+   ``'call'``
+      A function is called (or some other code block entered).  The
+      profile function is called; *arg* is ``None``.
+
+   ``'return'``
+      A function (or other code block) is about to return.  The profile
+      function is called; *arg* is the value that will be returned, or ``None``
+      if the event is caused by an exception being raised.
+
+   ``'c_call'``
+      A C function is about to be called.  This may be an extension function or
+      a built-in.  *arg* is the C function object.
+
+   ``'c_return'``
+      A C function has returned. *arg* is the C function object.
+
+   ``'c_exception'``
+      A C function has raised an exception.  *arg* is the C function object.
 
 .. function:: setrecursionlimit(limit)
 
@@ -890,8 +915,8 @@
 
    Trace functions should have three arguments: *frame*, *event*, and
    *arg*. *frame* is the current stack frame.  *event* is a string: ``'call'``,
-   ``'line'``, ``'return'``, ``'exception'``, ``'c_call'``, ``'c_return'``, or
-   ``'c_exception'``. *arg* depends on the event type.
+   ``'line'``, ``'return'`` or ``'exception'``.  *arg* depends on
+   the event type.
 
    The trace function is invoked (with *event* set to ``'call'``) whenever a new
    local scope is entered; it should return a reference to a local trace
@@ -926,16 +951,6 @@
       tuple ``(exception, value, traceback)``; the return value specifies the
       new local trace function.
 
-   ``'c_call'``
-      A C function is about to be called.  This may be an extension function or
-      a built-in.  *arg* is the C function object.
-
-   ``'c_return'``
-      A C function has returned. *arg* is the C function object.
-
-   ``'c_exception'``
-      A C function has raised an exception.  *arg* is the C function object.
-
    Note that as an exception is propagated down the chain of callers, an
    ``'exception'`` event is generated at each level.
 
@@ -1078,4 +1093,3 @@
 .. rubric:: Citations
 
 .. [C99] ISO/IEC 9899:1999.  "Programming languages -- C."  A public draft of this standard is available at http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf\ .
-
diff --git a/Doc/library/sysconfig.rst b/Doc/library/sysconfig.rst
index e8fc09e..3b58266 100644
--- a/Doc/library/sysconfig.rst
+++ b/Doc/library/sysconfig.rst
@@ -83,7 +83,7 @@
 - *nt*: scheme for NT platforms like Windows.
 - *nt_user*: scheme for NT platforms, when the *user* option is used.
 - *os2*: scheme for OS/2 platforms.
-- *os2_home*: scheme for OS/2 patforms, when the *user* option is used.
+- *os2_home*: scheme for OS/2 platforms, when the *user* option is used.
 
 Each scheme is itself composed of a series of paths and each path has a unique
 identifier.  Python currently uses eight paths:
diff --git a/Doc/library/tabnanny.rst b/Doc/library/tabnanny.rst
index f447f12..f241cef 100644
--- a/Doc/library/tabnanny.rst
+++ b/Doc/library/tabnanny.rst
@@ -47,14 +47,14 @@
 
 .. exception:: NannyNag
 
-   Raised by :func:`tokeneater` if detecting an ambiguous indent. Captured and
+   Raised by :func:`process_tokens` if detecting an ambiguous indent. Captured and
    handled in :func:`check`.
 
 
-.. function:: tokeneater(type, token, start, end, line)
+.. function:: process_tokens(tokens)
 
-   This function is used by :func:`check` as a callback parameter to the function
-   :func:`tokenize.tokenize`.
+   This function is used by :func:`check` to process tokens generated by the
+   :mod:`tokenize` module.
 
 .. XXX document errprint, format_witnesses, Whitespace, check_equal, indents,
    reset_globals
diff --git a/Doc/library/test.rst b/Doc/library/test.rst
index be5a9e9..eef5d16 100644
--- a/Doc/library/test.rst
+++ b/Doc/library/test.rst
@@ -15,8 +15,8 @@
 
 
 The :mod:`test` package contains all regression tests for Python as well as the
-modules :mod:`test.test_support` and :mod:`test.regrtest`.
-:mod:`test.test_support` is used to enhance your tests while
+modules :mod:`test.support` and :mod:`test.regrtest`.
+:mod:`test.support` is used to enhance your tests while
 :mod:`test.regrtest` drives the testing suite.
 
 Each module in the :mod:`test` package whose name starts with ``test_`` is a
@@ -54,7 +54,7 @@
 A basic boilerplate is often used::
 
    import unittest
-   from test import test_support
+   from test import support
 
    class MyTestCase1(unittest.TestCase):
 
@@ -82,10 +82,10 @@
    ... more test classes ...
 
    def test_main():
-       test_support.run_unittest(MyTestCase1,
-                                 MyTestCase2,
-                                 ... list other tests ...
-                                )
+       support.run_unittest(MyTestCase1,
+                            MyTestCase2,
+                            ... list other tests ...
+                            )
 
    if __name__ == '__main__':
        test_main()
@@ -185,19 +185,24 @@
 :program:`rt.bat` from your :file:`PCBuild` directory will run all regression
 tests.
 
+.. versionchanged:: 2.7.14
+   The :mod:`test` package can be run as a script: :program:`python -m test`.
+   This works the same as running the :mod:`test.regrtest` module.
 
-:mod:`test.test_support` --- Utility functions for tests
-========================================================
 
-.. module:: test.test_support
+:mod:`test.support` --- Utility functions for tests
+===================================================
+
+.. module:: test.support
    :synopsis: Support for Python regression tests.
 
 .. note::
 
    The :mod:`test.test_support` module has been renamed to :mod:`test.support`
-   in Python 3.x.
+   in Python 3.x and 2.7.14.  The name ``test.test_support`` has been retained
+   as an alias in 2.7.
 
-The :mod:`test.test_support` module provides support for Python's regression
+The :mod:`test.support` module provides support for Python's regression
 tests.
 
 This module defines the following exceptions:
@@ -216,7 +221,7 @@
    network connection) is not available. Raised by the :func:`requires`
    function.
 
-The :mod:`test.test_support` module defines the following constants:
+The :mod:`test.support` module defines the following constants:
 
 
 .. data:: verbose
@@ -241,7 +246,7 @@
    Set to a name that is safe to use as the name of a temporary file.  Any
    temporary file that is created should be closed and unlinked (removed).
 
-The :mod:`test.test_support` module defines the following functions:
+The :mod:`test.support` module defines the following functions:
 
 
 .. function:: forget(module_name)
@@ -284,7 +289,7 @@
    following :func:`test_main` function::
 
       def test_main():
-          test_support.run_unittest(__name__)
+          support.run_unittest(__name__)
 
    This will run all tests defined in the named module.
 
@@ -433,7 +438,7 @@
    .. versionadded:: 2.7
 
 
-The :mod:`test.test_support` module defines the following classes:
+The :mod:`test.support` module defines the following classes:
 
 .. class:: TransientResource(exc[, **kwargs])
 
diff --git a/Doc/library/time.rst b/Doc/library/time.rst
index b4de643..48a01db 100644
--- a/Doc/library/time.rst
+++ b/Doc/library/time.rst
@@ -236,7 +236,7 @@
    argument.  If *t* is not provided, the current time as returned by
    :func:`localtime` is used.  *format* must be a string.  :exc:`ValueError` is
    raised if any field in *t* is outside of the allowed range. :func:`strftime`
-   returns a locale depedent byte string; the result may be converted to unicode
+   returns a locale dependent byte string; the result may be converted to unicode
    by doing ``strftime(<myformat>).decode(locale.getlocale()[1])``.
 
    .. versionchanged:: 2.1
@@ -464,8 +464,13 @@
 
 .. function:: tzset()
 
-   Resets the time conversion rules used by the library routines. The environment
-   variable :envvar:`TZ` specifies how this is done.
+   Reset the time conversion rules used by the library routines. The environment
+   variable :envvar:`TZ` specifies how this is done. It will also set the variables
+   ``tzname`` (from the :envvar:`TZ` environment variable), ``timezone`` (non-DST
+   seconds West of UTC), ``altzone`` (DST seconds west of UTC) and ``daylight``
+   (to 0 if this timezone does not have any daylight saving time rules, or to
+   nonzero if there is a time, past, present or future when daylight saving time
+   applies).
 
    .. versionadded:: 2.3
 
diff --git a/Doc/library/tkinter.rst b/Doc/library/tkinter.rst
index ab1da52..3356e4e 100644
--- a/Doc/library/tkinter.rst
+++ b/Doc/library/tkinter.rst
@@ -11,6 +11,11 @@
 platforms, as well as on Windows systems.  (Tk itself is not part of Python; it
 is maintained at ActiveState.)
 
+Running ``python -m Tkinter`` from the command line should open a window
+demonstrating a simple Tk interface, letting you know that :mod:`Tkinter` is
+properly installed on your system, and also showing what version of Tcl/Tk is
+installed, so you can read the Tcl/Tk documentation specific to that version.
+
 .. note::
 
    :mod:`Tkinter` has been renamed to :mod:`tkinter` in Python 3.  The
@@ -19,6 +24,8 @@
 
 .. seealso::
 
+   Tkinter documentation:
+
    `Python Tkinter Resources <https://wiki.python.org/moin/TkInter>`_
       The Python Tkinter Topic Guide provides a great deal of information on using Tk
       from Python and links to other sources of information on Tk.
@@ -32,17 +39,32 @@
    `Tkinter docs from effbot <http://effbot.org/tkinterbook/>`_
       Online reference for tkinter supported by effbot.org.
 
-   `Tcl/Tk manual <https://www.tcl.tk/man/tcl8.5/>`_
-      Official manual for the latest tcl/tk version.
-
-   `Programming Python <http://learning-python.com/books/about-pp4e.html>`_
+   `Programming Python <http://learning-python.com/about-pp4e.html>`_
       Book by Mark Lutz, has excellent coverage of Tkinter.
 
-   `Modern Tkinter for Busy Python Developers <http://www.amazon.com/Modern-Tkinter-Python-Developers-ebook/dp/B0071QDNLO/>`_
+   `Modern Tkinter for Busy Python Developers <https://www.amazon.com/Modern-Tkinter-Python-Developers-ebook/dp/B0071QDNLO/>`_
       Book by Mark Rozerman about building attractive and modern graphical user interfaces with Python and Tkinter.
 
    `Python and Tkinter Programming <https://www.manning.com/books/python-and-tkinter-programming>`_
-      The book by John Grayson (ISBN 1-884777-81-3).
+      Book by John Grayson (ISBN 1-884777-81-3).
+
+   Tcl/Tk documentation:
+
+   `Tk commands <https://www.tcl.tk/man/tcl8.6/TkCmd/contents.htm>`_
+      Most commands are available as :mod:`Tkinter` or :mod:`Tkinter.ttk` classes.
+      Change '8.6' to match the version of your Tcl/Tk installation.
+
+   `Tcl/Tk recent man pages <https://www.tcl.tk/doc/>`_
+      Recent Tcl/Tk manuals on www.tcl.tk.
+
+   `ActiveState Tcl Home Page <http://tcl.activestate.com/>`_
+      The Tk/Tcl development is largely taking place at ActiveState.
+
+   `Tcl and the Tk Toolkit <https://www.amazon.com/exec/obidos/ASIN/020163337X>`_
+      Book by John Ousterhout, the inventor of Tcl.
+
+   `Practical Programming in Tcl and Tk <http://www.beedub.com/book/>`_
+      Brent Welch's encyclopedic book.
 
 
 Tkinter Modules
@@ -161,7 +183,7 @@
 handy reference.
 
 When trying to answer questions of the form "how do I do blah", it is often best
-to find out how to do"blah" in straight Tk, and then convert this back into the
+to find out how to do "blah" in straight Tk, and then convert this back into the
 corresponding :mod:`Tkinter` call. Python programmers can often guess at the
 correct Python command by looking at the Tk documentation. This means that in
 order to use Tkinter, you will have to know a little bit about Tk. This document
@@ -182,18 +204,6 @@
   when nothing else makes sense.
 
 
-.. seealso::
-
-   `ActiveState Tcl Home Page <http://tcl.activestate.com/>`_
-      The Tk/Tcl development is largely taking place at ActiveState.
-
-   `Tcl and the Tk Toolkit <http://www.amazon.com/exec/obidos/ASIN/020163337X>`_
-      The book by John Ousterhout, the inventor of Tcl.
-
-   `Practical Programming in Tcl and Tk <http://www.beedub.com/book/>`_
-      Brent Welch's encyclopedic book.
-
-
 A Simple Hello World Program
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
@@ -801,12 +811,13 @@
 Images
 ^^^^^^
 
-Bitmap/Pixelmap images can be created through the subclasses of
-:class:`Tkinter.Image`:
+Images of different formats can be created through the corresponding subclass
+of :class:`Tkinter.Image`:
 
-* :class:`BitmapImage` can be used for X11 bitmap data.
+* :class:`BitmapImage` for images in XBM format.
 
-* :class:`PhotoImage` can be used for GIF and PPM/PGM color bitmaps.
+* :class:`PhotoImage` for images in PGM, PPM, GIF and PNG formats. The latter
+  is supported starting with Tk 8.6.
 
 Either type of image is created through either the ``file`` or the ``data``
 option (other options are available as well).
@@ -817,6 +828,10 @@
 deleted, the image data is deleted as well, and Tk will display an empty box
 wherever the image was used.
 
+.. seealso::
+
+    The `Pillow <http://python-pillow.org/>`_ package adds support for
+    formats such as BMP, JPEG, TIFF, and WebP, among others.
 
 .. _tkinter-file-handlers:
 
diff --git a/Doc/library/traceback.rst b/Doc/library/traceback.rst
index 7c78235..5e61141 100644
--- a/Doc/library/traceback.rst
+++ b/Doc/library/traceback.rst
@@ -67,7 +67,7 @@
 
    This function prints a stack trace from its invocation point. The optional
    *f* argument can be used to specify an alternate stack frame to start. The
-   optional limit* and *file* arguments have the same meaning as for
+   optional *limit* and *file* arguments have the same meaning as for
    :func:`print_exception`.
 
 
diff --git a/Doc/library/turtle.rst b/Doc/library/turtle.rst
index ca4f37e..1c8a967 100644
--- a/Doc/library/turtle.rst
+++ b/Doc/library/turtle.rst
@@ -2219,7 +2219,7 @@
 | wikipedia      | a pattern from the wikipedia | :func:`clone`,        |
 |                | article on turtle graphics   | :func:`undo`          |
 +----------------+------------------------------+-----------------------+
-| yingyang       | another elementary example   | :func:`circle`        |
+| yinyang        | another elementary example   | :func:`circle`        |
 +----------------+------------------------------+-----------------------+
 
 Have fun!
diff --git a/Doc/library/unicodedata.rst b/Doc/library/unicodedata.rst
index a3a7c96..d7c48c4 100644
--- a/Doc/library/unicodedata.rst
+++ b/Doc/library/unicodedata.rst
@@ -161,7 +161,7 @@
    9
    >>> unicodedata.decimal(u'a')
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    ValueError: not a decimal
    >>> unicodedata.category(u'A')  # 'L'etter, 'u'ppercase
    'Lu'
diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst
index b0eaae6..06368fc 100644
--- a/Doc/library/unittest.rst
+++ b/Doc/library/unittest.rst
@@ -78,7 +78,7 @@
    Module :mod:`doctest`
       Another test-support module with a very different flavor.
 
-   `unittest2: A backport of new unittest features for Python 2.4-2.6 <https://pypi.python.org/pypi/unittest2>`_
+   `unittest2: A backport of new unittest features for Python 2.4-2.6 <https://pypi.org/project/unittest2>`_
       Many new features were added to unittest in Python 2.7, including test
       discovery. unittest2 allows you to use these features with earlier
       versions of Python.
@@ -730,7 +730,7 @@
 
    .. method:: setUpClass()
 
-      A class method called before tests in an individual class run.
+      A class method called before tests in an individual class are run.
       ``setUpClass`` is called with the class as the only argument
       and must be decorated as a :func:`classmethod`::
 
@@ -1138,7 +1138,7 @@
       Test that the multiline string *first* is equal to the string *second*.
       When not equal a diff of the two strings highlighting the differences
       will be included in the error message. This method is used by default
-      when comparing strings with :meth:`assertEqual`.
+      when comparing Unicode strings with :meth:`assertEqual`.
 
       .. versionadded:: 2.7
 
@@ -1352,7 +1352,7 @@
 
 .. class:: TestSuite(tests=())
 
-   This class represents an aggregation of individual tests cases and test suites.
+   This class represents an aggregation of individual test cases and test suites.
    The class presents the interface needed by the test runner to allow it to be run
    as any other test case.  Running a :class:`TestSuite` instance is the same as
    iterating over the suite, running each test individually.
@@ -1437,13 +1437,13 @@
 
    .. method:: loadTestsFromTestCase(testCaseClass)
 
-      Return a suite of all tests cases contained in the :class:`TestCase`\ -derived
+      Return a suite of all test cases contained in the :class:`TestCase`\ -derived
       :class:`testCaseClass`.
 
 
    .. method:: loadTestsFromModule(module)
 
-      Return a suite of all tests cases contained in the given module. This
+      Return a suite of all test cases contained in the given module. This
       method searches *module* for classes derived from :class:`TestCase` and
       creates an instance of the class for each test method defined for the
       class.
@@ -1466,7 +1466,7 @@
 
    .. method:: loadTestsFromName(name, module=None)
 
-      Return a suite of all tests cases given a string specifier.
+      Return a suite of all test cases given a string specifier.
 
       The specifier *name* is a "dotted name" that may resolve either to a
       module, a test case class, a test method within a test case class, a
@@ -2038,7 +2038,7 @@
 
    When called without arguments this function removes the control-c handler
    if it has been installed. This function can also be used as a test decorator
-   to temporarily remove the handler whilst the test is being executed::
+   to temporarily remove the handler while the test is being executed::
 
       @unittest.removeHandler
       def test_signal_handling(self):
diff --git a/Doc/library/urllib.rst b/Doc/library/urllib.rst
index 69ef8f7..c24f437 100644
--- a/Doc/library/urllib.rst
+++ b/Doc/library/urllib.rst
@@ -26,11 +26,16 @@
 
 .. seealso::
 
-    The `Requests package <http://requests.readthedocs.org/>`_
+    The `Requests package <http://docs.python-requests.org/>`_
     is recommended for a higher-level HTTP client interface.
 
-.. warning:: When opening HTTPS URLs, it does not attempt to validate the
-   server certificate.  Use at your own risk!
+.. versionchanged:: 2.7.9
+
+    For HTTPS URIs, :mod:`urllib` performs all the neccessary certificate and hostname checks by default.
+
+.. warning::
+
+    For Python versions earlier than 2.7.9, urllib does not attempt to validate the server certificates of HTTPS URIs. Use at your own risk!
 
 
 High-level interface
@@ -142,7 +147,7 @@
       :envvar:`no_proxy` environment variable.
 
    .. versionchanged:: 2.7.9
-      The *context* parameter was added.
+      The *context* parameter was added. All the neccessary certificate and hostname checks are done by default.
 
    .. deprecated:: 2.6
       The :func:`urlopen` function has been removed in Python 3 in favor
@@ -161,9 +166,9 @@
 
    The second argument, if present, specifies the file location to copy to (if
    absent, the location will be a tempfile with a generated name). The third
-   argument, if present, is a hook function that will be called once on
+   argument, if present, is a callable that will be called once on
    establishment of the network connection and once after each block read
-   thereafter.  The hook will be passed three arguments; a count of blocks
+   thereafter.  The callable will be passed three arguments; a count of blocks
    transferred so far, a block size in bytes, and the total size of the file.  The
    third argument may be ``-1`` on older FTP servers which do not return a file
    size in response to a retrieval request.
@@ -295,15 +300,15 @@
    If both lowercase and uppercase environment variables exist (and disagree),
    lowercase is preferred.
 
-    .. note::
+   .. 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).
+      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
@@ -344,47 +349,47 @@
    :class:`URLopener` objects will raise an :exc:`IOError` exception if the server
    returns an error code.
 
-    .. method:: open(fullurl[, data])
+   .. method:: open(fullurl[, data])
 
-       Open *fullurl* using the appropriate protocol.  This method sets up cache and
-       proxy information, then calls the appropriate open method with its input
-       arguments.  If the scheme is not recognized, :meth:`open_unknown` is called.
-       The *data* argument has the same meaning as the *data* argument of
-       :func:`urlopen`.
+      Open *fullurl* using the appropriate protocol.  This method sets up cache and
+      proxy information, then calls the appropriate open method with its input
+      arguments.  If the scheme is not recognized, :meth:`open_unknown` is called.
+      The *data* argument has the same meaning as the *data* argument of
+      :func:`urlopen`.
 
 
-    .. method:: open_unknown(fullurl[, data])
+   .. method:: open_unknown(fullurl[, data])
 
-       Overridable interface to open unknown URL types.
+      Overridable interface to open unknown URL types.
 
 
-    .. method:: retrieve(url[, filename[, reporthook[, data]]])
+   .. method:: retrieve(url[, filename[, reporthook[, data]]])
 
-       Retrieves the contents of *url* and places it in *filename*.  The return value
-       is a tuple consisting of a local filename and either a
-       :class:`mimetools.Message` object containing the response headers (for remote
-       URLs) or ``None`` (for local URLs).  The caller must then open and read the
-       contents of *filename*.  If *filename* is not given and the URL refers to a
-       local file, the input filename is returned.  If the URL is non-local and
-       *filename* is not given, the filename is the output of :func:`tempfile.mktemp`
-       with a suffix that matches the suffix of the last path component of the input
-       URL.  If *reporthook* is given, it must be a function accepting three numeric
-       parameters.  It will be called after each chunk of data is read from the
-       network.  *reporthook* is ignored for local URLs.
+      Retrieves the contents of *url* and places it in *filename*.  The return value
+      is a tuple consisting of a local filename and either a
+      :class:`mimetools.Message` object containing the response headers (for remote
+      URLs) or ``None`` (for local URLs).  The caller must then open and read the
+      contents of *filename*.  If *filename* is not given and the URL refers to a
+      local file, the input filename is returned.  If the URL is non-local and
+      *filename* is not given, the filename is the output of :func:`tempfile.mktemp`
+      with a suffix that matches the suffix of the last path component of the input
+      URL.  If *reporthook* is given, it must be a function accepting three numeric
+      parameters.  It will be called after each chunk of data is read from the
+      network.  *reporthook* is ignored for local URLs.
 
-       If the *url* uses the :file:`http:` scheme identifier, the optional *data*
-       argument may be given to specify a ``POST`` request (normally the request type
-       is ``GET``).  The *data* argument must in standard
-       :mimetype:`application/x-www-form-urlencoded` format; see the :func:`urlencode`
-       function below.
+      If the *url* uses the :file:`http:` scheme identifier, the optional *data*
+      argument may be given to specify a ``POST`` request (normally the request type
+      is ``GET``).  The *data* argument must in standard
+      :mimetype:`application/x-www-form-urlencoded` format; see the :func:`urlencode`
+      function below.
 
 
-    .. attribute:: version
+   .. attribute:: version
 
-       Variable that specifies the user agent of the opener object.  To get
-       :mod:`urllib` to tell servers that it is a particular user agent, set this in a
-       subclass as a class variable or in the constructor before calling the base
-       constructor.
+      Variable that specifies the user agent of the opener object.  To get
+      :mod:`urllib` to tell servers that it is a particular user agent, set this in a
+      subclass as a class variable or in the constructor before calling the base
+      constructor.
 
 
 .. class:: FancyURLopener(...)
@@ -415,18 +420,18 @@
       users for the required information on the controlling terminal.  A subclass may
       override this method to support more appropriate behavior if needed.
 
-    The :class:`FancyURLopener` class offers one additional method that should be
-    overloaded to provide the appropriate behavior:
+   The :class:`FancyURLopener` class offers one additional method that should be
+   overloaded to provide the appropriate behavior:
 
-    .. method:: prompt_user_passwd(host, realm)
+   .. method:: prompt_user_passwd(host, realm)
 
-       Return information needed to authenticate the user at the given host in the
-       specified security realm.  The return value should be a tuple, ``(user,
-       password)``, which can be used for basic authentication.
+      Return information needed to authenticate the user at the given host in the
+      specified security realm.  The return value should be a tuple, ``(user,
+      password)``, which can be used for basic authentication.
 
-       The implementation prompts for this information on the terminal; an application
-       should override this method to use an appropriate interaction model in the local
-       environment.
+      The implementation prompts for this information on the terminal; an application
+      should override this method to use an appropriate interaction model in the local
+      environment.
 
 .. exception:: ContentTooShortError(msg[, content])
 
diff --git a/Doc/library/uuid.rst b/Doc/library/uuid.rst
index 885db3d..d2808cd 100644
--- a/Doc/library/uuid.rst
+++ b/Doc/library/uuid.rst
@@ -23,12 +23,13 @@
 .. class:: UUID([hex[, bytes[, bytes_le[, fields[, int[, version]]]]]])
 
    Create a UUID from either a string of 32 hexadecimal digits, a string of 16
-   bytes as the *bytes* argument, a string of 16 bytes in little-endian order as
-   the *bytes_le* argument, a tuple of six integers (32-bit *time_low*, 16-bit
-   *time_mid*, 16-bit *time_hi_version*, 8-bit *clock_seq_hi_variant*, 8-bit
-   *clock_seq_low*, 48-bit *node*) as the *fields* argument, or a single 128-bit
-   integer as the *int* argument.  When a string of hex digits is given, curly
-   braces, hyphens, and a URN prefix are all optional.  For example, these
+   bytes in big-endian order as the *bytes* argument, a string of 16 bytes in
+   little-endian order as the *bytes_le* argument, a tuple of six integers
+   (32-bit *time_low*, 16-bit *time_mid*, 16-bit *time_hi_version*,
+   8-bit *clock_seq_hi_variant*, 8-bit *clock_seq_low*, 48-bit *node*) as the
+   *fields* argument, or a single 128-bit integer as the *int* argument.
+   When a string of hex digits is given, curly braces, hyphens,
+   and a URN prefix are all optional.  For example, these
    expressions all yield the same UUID::
 
       UUID('{12345678-1234-5678-1234-567812345678}')
@@ -104,7 +105,7 @@
 .. attribute:: UUID.variant
 
    The UUID variant, which determines the internal layout of the UUID. This will be
-   one of the integer constants :const:`RESERVED_NCS`, :const:`RFC_4122`,
+   one of the constants :const:`RESERVED_NCS`, :const:`RFC_4122`,
    :const:`RESERVED_MICROSOFT`, or :const:`RESERVED_FUTURE`.
 
 
diff --git a/Doc/library/weakref.rst b/Doc/library/weakref.rst
index afbd611..0781e67 100644
--- a/Doc/library/weakref.rst
+++ b/Doc/library/weakref.rst
@@ -189,8 +189,8 @@
       magic" (as a side effect of garbage collection).
 
 :class:`WeakValueDictionary` objects have the following additional methods.
-These method have the same issues as the :meth:`iterkeyrefs` and :meth:`keyrefs`
-methods of :class:`WeakKeyDictionary` objects.
+These methods have the same issues as the :meth:`iterkeyrefs` and
+:meth:`keyrefs` methods of :class:`WeakKeyDictionary` objects.
 
 
 .. method:: WeakValueDictionary.itervaluerefs()
diff --git a/Doc/library/xml.dom.minidom.rst b/Doc/library/xml.dom.minidom.rst
index a1d7951..f91259a 100644
--- a/Doc/library/xml.dom.minidom.rst
+++ b/Doc/library/xml.dom.minidom.rst
@@ -273,7 +273,7 @@
 
 .. rubric:: Footnotes
 
-.. [#] The encoding string included in XML output should conform to the
+.. [1] The encoding string included in XML output should conform to the
    appropriate standards. For example, "UTF-8" is valid, but "UTF8" is
    not. See https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl
    and https://www.iana.org/assignments/character-sets/character-sets.xhtml.
diff --git a/Doc/library/xml.etree.elementtree.rst b/Doc/library/xml.etree.elementtree.rst
index 08b677b..e13da10 100644
--- a/Doc/library/xml.etree.elementtree.rst
+++ b/Doc/library/xml.etree.elementtree.rst
@@ -274,7 +274,7 @@
 with prefixes in the form ``prefix:sometag`` get expanded to
 ``{uri}sometag`` where the *prefix* is replaced by the full *URI*.
 Also, if there is a `default namespace
-<https://www.w3.org/TR/2006/REC-xml-names-20060816/#defaulting>`__,
+<https://www.w3.org/TR/xml-names/#defaulting>`__,
 that full URI gets prepended to all of the non-prefixed tags.
 
 Here is an XML example that incorporates two namespaces, one with the
@@ -1031,7 +1031,7 @@
 
 .. rubric:: Footnotes
 
-.. [#] The encoding string included in XML output should conform to the
+.. [1] The encoding string included in XML output should conform to the
    appropriate standards.  For example, "UTF-8" is valid, but "UTF8" is
    not.  See https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl
    and https://www.iana.org/assignments/character-sets/character-sets.xhtml.
diff --git a/Doc/library/xml.rst b/Doc/library/xml.rst
index a8f20cd..b107c29 100644
--- a/Doc/library/xml.rst
+++ b/Doc/library/xml.rst
@@ -129,8 +129,8 @@
 well-defined XML features.
 
 
-.. _defusedxml: https://pypi.python.org/pypi/defusedxml/
-.. _defusedexpat: https://pypi.python.org/pypi/defusedexpat/
+.. _defusedxml: https://pypi.org/project/defusedxml/
+.. _defusedexpat: https://pypi.org/project/defusedexpat/
 .. _Billion Laughs: https://en.wikipedia.org/wiki/Billion_laughs
 .. _ZIP bomb: https://en.wikipedia.org/wiki/Zip_bomb
 .. _DTD: https://en.wikipedia.org/wiki/Document_type_definition
diff --git a/Doc/license.rst b/Doc/license.rst
index ea37b5a..f33495a 100644
--- a/Doc/license.rst
+++ b/Doc/license.rst
@@ -87,7 +87,7 @@
       analyze, test, perform and/or display publicly, prepare derivative works,
       distribute, and otherwise use Python |release| alone or in any derivative
       version, provided, however, that PSF's License Agreement and PSF's notice of
-      copyright, i.e., "Copyright © 2001-2016 Python Software Foundation; All Rights
+      copyright, i.e., "Copyright © 2001-2018 Python Software Foundation; All Rights
       Reserved" are retained in Python |release| alone or in any derivative version
       prepared by Licensee.
 
diff --git a/Doc/make.bat b/Doc/make.bat
index 251f822..88f4e9e 100644
--- a/Doc/make.bat
+++ b/Doc/make.bat
@@ -1,124 +1,142 @@
-@echo off

-setlocal

-

-pushd %~dp0

-

-set this=%~n0

-

-if "%SPHINXBUILD%" EQU "" set SPHINXBUILD=sphinx-build

-if "%PYTHON%" EQU "" set PYTHON=py

-

-if DEFINED ProgramFiles(x86) set _PRGMFLS=%ProgramFiles(x86)%

-if NOT DEFINED ProgramFiles(x86) set _PRGMFLS=%ProgramFiles%

-if "%HTMLHELP%" EQU "" set HTMLHELP=%_PRGMFLS%\HTML Help Workshop\hhc.exe

-

-if "%DISTVERSION%" EQU "" for /f "usebackq" %%v in (`%PYTHON% tools/extensions/patchlevel.py`) do set DISTVERSION=%%v

-

-if "%BUILDDIR%" EQU "" set BUILDDIR=build

-

-rem Targets that don't require sphinx-build

-if "%1" EQU "" goto help

-if "%1" EQU "help" goto help

-if "%1" EQU "check" goto check

-if "%1" EQU "serve" goto serve

-if "%1" == "clean" (

-    rmdir /q /s %BUILDDIR%

-    goto end

-)

-

-%SPHINXBUILD% 2> nul

-if errorlevel 9009 (

-    echo.

-    echo.The 'sphinx-build' command was not found. Make sure you have Sphinx

-    echo.installed, then set the SPHINXBUILD environment variable to point

-    echo.to the full path of the 'sphinx-build' executable. Alternatively you

-    echo.may add the Sphinx directory to PATH.

-    echo.

-    echo.If you don't have Sphinx installed, grab it from

-    echo.http://sphinx-doc.org/

-    goto end

-)

-

-rem Targets that do require sphinx-build and have their own label

-if "%1" EQU "htmlview" goto htmlview

-

-rem Everything else

-goto build

-

-:help

-echo.usage: %this% BUILDER [filename ...]

-echo.

-echo.Call %this% with the desired Sphinx builder as the first argument, e.g.

-echo.``%this% html`` or ``%this% doctest``.  Interesting targets that are

-echo.always available include:

-echo.

-echo.   Provided by Sphinx:

-echo.      html, htmlhelp, latex, text

-echo.      suspicious, linkcheck, changes, doctest

-echo.   Provided by this script:

-echo.      clean, check, serve, htmlview

-echo.

-echo.All arguments past the first one are passed through to sphinx-build as

-echo.filenames to build or are ignored.  See README.txt in this directory or

-echo.the documentation for your version of Sphinx for more exhaustive lists

-echo.of available targets and descriptions of each.

-echo.

-echo.This script assumes that the SPHINXBUILD environment variable contains

-echo.a legitimate command for calling sphinx-build, or that sphinx-build is

-echo.on your PATH if SPHINXBUILD is not set.  Options for sphinx-build can

-echo.be passed by setting the SPHINXOPTS environment variable.

-goto end

-

-:build

-if NOT "%PAPER%" == "" (

-    set SPHINXOPTS=-D latex_paper_size=%PAPER% %SPHINXOPTS%

-)

-cmd /C %SPHINXBUILD% %SPHINXOPTS% -b%1 -dbuild\doctrees . %BUILDDIR%\%*

-

-if "%1" EQU "htmlhelp" (

-    if  not exist "%HTMLHELP%" (

-        echo.

-        echo.The HTML Help Workshop was not found.  Set the HTMLHELP variable

-        echo.to the path to hhc.exe or download and install it from

-        echo.http://msdn.microsoft.com/en-us/library/ms669985

-        rem Set errorlevel to 1 and exit

-        cmd /C exit /b 1

-        goto end

-    )

-    cmd /C "%HTMLHELP%" build\htmlhelp\python%DISTVERSION:.=%.hhp

-    rem hhc.exe seems to always exit with code 1, reset to 0 for less than 2

-    if not errorlevel 2 cmd /C exit /b 0

-)

-

-echo.

-if errorlevel 1 (

-    echo.Build failed (exit code %ERRORLEVEL%^), check for error messages

-    echo.above.  Any output will be found in %BUILDDIR%\%1

-) else (

-    echo.Build succeeded. All output should be in %BUILDDIR%\%1

-)

-goto end

-

-:htmlview

-if NOT "%2" EQU "" (

-    echo.Can't specify filenames to build with htmlview target, ignoring.

-)

-cmd /C %this% html

-

-if EXIST %BUILDDIR%\html\index.html (

-    echo.Opening %BUILDDIR%\html\index.html in the default web browser...

-    start %BUILDDIR%\html\index.html

-)

-

-goto end

-

-:check

-cmd /C %PYTHON% tools\rstlint.py -i tools

-goto end

-

-:serve

-cmd /C %PYTHON% ..\Tools\scripts\serve.py %BUILDDIR%\html

-goto end

-

-:end

-popd

+@echo off
+setlocal
+
+pushd %~dp0
+
+set this=%~n0
+
+call ..\PCbuild\find_python.bat %PYTHON%
+
+if not defined PYTHON set PYTHON=py
+
+if not defined SPHINXBUILD (
+    %PYTHON% -c "import sphinx" > nul 2> nul
+    if errorlevel 1 (
+        echo Installing sphinx with %PYTHON%
+        %PYTHON% -m pip install sphinx
+        if errorlevel 1 exit /B
+    )
+    set SPHINXBUILD=%PYTHON% -c "import sphinx, sys; sys.argv[0] = 'sphinx-build'; sys.exit(sphinx.main())"
+)
+
+if "%1" NEQ "htmlhelp" goto :skiphhcsearch
+if exist "%HTMLHELP%" goto :skiphhcsearch
+
+rem Search for HHC in likely places
+set HTMLHELP=
+where hhc /q && set HTMLHELP=hhc && goto :skiphhcsearch
+where /R ..\externals hhc > "%TEMP%\hhc.loc" 2> nul && set /P HTMLHELP= < "%TEMP%\hhc.loc" & del "%TEMP%\hhc.loc"
+if not exist "%HTMLHELP%" where /R "%ProgramFiles(x86)%" hhc > "%TEMP%\hhc.loc" 2> nul && set /P HTMLHELP= < "%TEMP%\hhc.loc" & del "%TEMP%\hhc.loc"
+if not exist "%HTMLHELP%" where /R "%ProgramFiles%" hhc > "%TEMP%\hhc.loc" 2> nul && set /P HTMLHELP= < "%TEMP%\hhc.loc" & del "%TEMP%\hhc.loc"
+if not exist "%HTMLHELP%" (
+    echo.
+    echo.The HTML Help Workshop was not found.  Set the HTMLHELP variable
+    echo.to the path to hhc.exe or download and install it from
+    echo.http://msdn.microsoft.com/en-us/library/ms669985
+    exit /B 1
+)
+:skiphhcsearch
+
+if "%DISTVERSION%" EQU "" for /f "usebackq" %%v in (`%PYTHON% tools/extensions/patchlevel.py`) do set DISTVERSION=%%v
+
+if "%BUILDDIR%" EQU "" set BUILDDIR=build
+
+rem Targets that don't require sphinx-build
+if "%1" EQU "" goto help
+if "%1" EQU "help" goto help
+if "%1" EQU "check" goto check
+if "%1" EQU "serve" goto serve
+if "%1" == "clean" (
+    rmdir /q /s "%BUILDDIR%"
+    goto end
+)
+
+%SPHINXBUILD% >nul 2> nul
+if errorlevel 9009 (
+    echo.
+    echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+    echo.installed, then set the SPHINXBUILD environment variable to point
+    echo.to the full path of the 'sphinx-build' executable. Alternatively you
+    echo.may add the Sphinx directory to PATH.
+    echo.
+    echo.If you don't have Sphinx installed, grab it from
+    echo.http://sphinx-doc.org/
+    popd
+    exit /B 1
+)
+
+rem Targets that do require sphinx-build and have their own label
+if "%1" EQU "htmlview" goto htmlview
+
+rem Everything else
+goto build
+
+:help
+echo.usage: %this% BUILDER [filename ...]
+echo.
+echo.Call %this% with the desired Sphinx builder as the first argument, e.g.
+echo.``%this% html`` or ``%this% doctest``.  Interesting targets that are
+echo.always available include:
+echo.
+echo.   Provided by Sphinx:
+echo.      html, htmlhelp, latex, text
+echo.      suspicious, linkcheck, changes, doctest
+echo.   Provided by this script:
+echo.      clean, check, serve, htmlview
+echo.
+echo.All arguments past the first one are passed through to sphinx-build as
+echo.filenames to build or are ignored.  See README.txt in this directory or
+echo.the documentation for your version of Sphinx for more exhaustive lists
+echo.of available targets and descriptions of each.
+echo.
+echo.This script assumes that the SPHINXBUILD environment variable contains
+echo.a legitimate command for calling sphinx-build, or that sphinx-build is
+echo.on your PATH if SPHINXBUILD is not set.  Options for sphinx-build can
+echo.be passed by setting the SPHINXOPTS environment variable.
+goto end
+
+:build
+if not exist "%BUILDDIR%" mkdir "%BUILDDIR%"
+if NOT "%PAPER%" == "" (
+    set SPHINXOPTS=-D latex_elements.papersize=%PAPER% %SPHINXOPTS%
+)
+cmd /S /C "%SPHINXBUILD% %SPHINXOPTS% -b%1 -dbuild\doctrees . "%BUILDDIR%\%1" %2 %3 %4 %5 %6 %7 %8 %9"
+
+if "%1" EQU "htmlhelp" (
+    "%HTMLHELP%" "%BUILDDIR%\htmlhelp\python%DISTVERSION:.=%.hhp"
+    rem hhc.exe seems to always exit with code 1, reset to 0 for less than 2
+    if not errorlevel 2 cmd /C exit /b 0
+)
+
+echo.
+if errorlevel 1 (
+    echo.Build failed (exit code %ERRORLEVEL%^), check for error messages
+    echo.above.  Any output will be found in %BUILDDIR%\%1
+) else (
+    echo.Build succeeded. All output should be in %BUILDDIR%\%1
+)
+goto end
+
+:htmlview
+if NOT "%2" EQU "" (
+    echo.Can't specify filenames to build with htmlview target, ignoring.
+)
+cmd /C %this% html
+
+if EXIST "%BUILDDIR%\html\index.html" (
+    echo.Opening "%BUILDDIR%\html\index.html" in the default web browser...
+    start "" "%BUILDDIR%\html\index.html"
+)
+
+goto end
+
+:check
+cmd /S /C "%PYTHON% tools\rstlint.py -i tools"
+goto end
+
+:serve
+cmd /S /C "%PYTHON% ..\Tools\scripts\serve.py "%BUILDDIR%\html""
+goto end
+
+:end
+popd
diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst
index 66ae530..92ce3cd 100644
--- a/Doc/reference/compound_stmts.rst
+++ b/Doc/reference/compound_stmts.rst
@@ -185,7 +185,7 @@
       single: mutable sequence; loop over
 
    There is a subtlety when the sequence is being modified by the loop (this can
-   only occur for mutable sequences, i.e. lists). An internal counter is used to
+   only occur for mutable sequences, e.g. lists). An internal counter is used to
    keep track of which item is used next, and this is incremented on each
    iteration.  When this counter has reached the length of the sequence the loop
    terminates.  This means that if the suite deletes the current (or a previous)
diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst
index db2fa17..7bdb141 100644
--- a/Doc/reference/datamodel.rst
+++ b/Doc/reference/datamodel.rst
@@ -1409,8 +1409,12 @@
    hashed collections including :class:`set`, :class:`frozenset`, and
    :class:`dict`.  :meth:`__hash__` should return an integer.  The only required
    property is that objects which compare equal have the same hash value; it is
-   advised to somehow mix together (e.g. using exclusive or) the hash values for
-   the components of the object that also play a part in comparison of objects.
+   advised to mix together the hash values of the components of the object that
+   also play a part in comparison of objects by packing them into a tuple and
+   hashing the tuple. Example::
+
+       def __hash__(self):
+           return hash((self.name, self.nick, self.color))
 
    If a class does not define a :meth:`__cmp__` or :meth:`__eq__` method it
    should not define a :meth:`__hash__` operation either; if it defines
@@ -1887,6 +1891,14 @@
    :meth:`__nonzero__` method and whose :meth:`__len__` method returns zero is
    considered to be false in a Boolean context.
 
+   .. impl-detail::
+
+      In CPython, the length is required to be at most :attr:`sys.maxsize`.
+      If the length is larger than :attr:`!sys.maxsize` some features (such as
+      :func:`len`) may raise :exc:`OverflowError`.  To prevent raising
+      :exc:`!OverflowError` by truth value testing, an object must define a
+      :meth:`__nonzero__` method.
+
 
 .. method:: object.__getitem__(self, key)
 
diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst
index f18984b..6afc867 100644
--- a/Doc/reference/expressions.rst
+++ b/Doc/reference/expressions.rst
@@ -581,7 +581,7 @@
 value in the mapping that corresponds to that key.  (The expression list is a
 tuple except if it has exactly one item.)
 
-If the primary is a sequence, the expression (list) must evaluate to a plain
+If the primary is a sequence, the expression list must evaluate to a plain
 integer.  If this value is negative, the length of the sequence is added to it
 (so that, e.g., ``x[-1]`` selects the last item of ``x``.)  The resulting value
 must be a nonnegative integer less than the number of items in the sequence, and
@@ -767,7 +767,7 @@
    2 1
    >>> f(a=1, *(2,))
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    TypeError: f() got multiple values for keyword argument 'a'
    >>> f(1, *(2,))
    1 2
@@ -1058,10 +1058,6 @@
 
 
 .. _comparisons:
-.. _is:
-.. _is not:
-.. _in:
-.. _not in:
 
 Comparisons
 ===========
@@ -1101,39 +1097,98 @@
 preferred; where ``!=`` is mentioned below ``<>`` is also accepted.  The ``<>``
 spelling is considered obsolescent.
 
+Value comparisons
+-----------------
+
 The operators ``<``, ``>``, ``==``, ``>=``, ``<=``, and ``!=`` compare the
-values of two objects.  The objects need not have the same type. If both are
-numbers, they are converted to a common type.  Otherwise, objects of different
-types *always* compare unequal, and are ordered consistently but arbitrarily.
-You can control comparison behavior of objects of non-built-in types by defining
-a ``__cmp__`` method or rich comparison methods like ``__gt__``, described in
-section :ref:`specialnames`.
+values of two objects.  The objects do not need to have the same type.
+
+Chapter :ref:`objects` states that objects have a value (in addition to type
+and identity).  The value of an object is a rather abstract notion in Python:
+For example, there is no canonical access method for an object's value.  Also,
+there is no requirement that the value of an object should be constructed in a
+particular way, e.g. comprised of all its data attributes. Comparison operators
+implement a particular notion of what the value of an object is.  One can think
+of them as defining the value of an object indirectly, by means of their
+comparison implementation.
+
+Types can customize their comparison behavior by implementing
+a :meth:`__cmp__` method or
+:dfn:`rich comparison methods` like :meth:`__lt__`, described in
+:ref:`customization`.
+
+The default behavior for equality comparison (``==`` and ``!=``) is based on
+the identity of the objects.  Hence, equality comparison of instances with the
+same identity results in equality, and equality comparison of instances with
+different identities results in inequality.  A motivation for this default
+behavior is the desire that all objects should be reflexive (i.e. ``x is y``
+implies ``x == y``).
+
+The default order comparison (``<``, ``>``, ``<=``, and ``>=``) gives a
+consistent but arbitrary order.
 
 (This unusual definition of comparison was used to simplify the definition of
 operations like sorting and the :keyword:`in` and :keyword:`not in` operators.
 In the future, the comparison rules for objects of different types are likely to
 change.)
 
-Comparison of objects of the same type depends on the type:
+The behavior of the default equality comparison, that instances with different
+identities are always unequal, may be in contrast to what types will need that
+have a sensible definition of object value and value-based equality.  Such
+types will need to customize their comparison behavior, and in fact, a number
+of built-in types have done that.
 
-* Numbers are compared arithmetically.
+The following list describes the comparison behavior of the most important
+built-in types.
 
-* Strings are compared lexicographically using the numeric equivalents (the
-  result of the built-in function :func:`ord`) of their characters.  Unicode and
-  8-bit strings are fully interoperable in this behavior. [#]_
+* Numbers of built-in numeric types (:ref:`typesnumeric`) and of the standard
+  library types :class:`fractions.Fraction` and :class:`decimal.Decimal` can be
+  compared within and across their types, with the restriction that complex
+  numbers do not support order comparison.  Within the limits of the types
+  involved, they compare mathematically (algorithmically) correct without loss
+  of precision.
 
-* Tuples and lists are compared lexicographically using comparison of
-  corresponding elements.  This means that to compare equal, each element must
-  compare equal and the two sequences must be of the same type and have the same
-  length.
+* Strings (instances of :class:`str` or :class:`unicode`)
+  compare lexicographically using the numeric equivalents (the
+  result of the built-in function :func:`ord`) of their characters. [#]_
+  When comparing an 8-bit string and a Unicode string, the 8-bit string
+  is converted to Unicode.  If the conversion fails, the strings
+  are considered unequal.
 
-  If not equal, the sequences are ordered the same as their first differing
-  elements.  For example, ``cmp([1,2,x], [1,2,y])`` returns the same as
-  ``cmp(x,y)``.  If the corresponding element does not exist, the shorter sequence
-  is ordered first (for example, ``[1,2] < [1,2,3]``).
+* Instances of :class:`tuple` or :class:`list` can be compared only
+  within each of their types.  Equality comparison across these types
+  results in unequality, and ordering comparison across these types
+  gives an arbitrary order.
 
-* Mappings (dictionaries) compare equal if and only if their sorted (key, value)
-  lists compare equal. [#]_ Outcomes other than equality are resolved
+  These sequences compare lexicographically using comparison of corresponding
+  elements, whereby reflexivity of the elements is enforced.
+
+  In enforcing reflexivity of elements, the comparison of collections assumes
+  that for a collection element ``x``, ``x == x`` is always true.  Based on
+  that assumption, element identity is compared first, and element comparison
+  is performed only for distinct elements.  This approach yields the same
+  result as a strict element comparison would, if the compared elements are
+  reflexive.  For non-reflexive elements, the result is different than for
+  strict element comparison.
+
+  Lexicographical comparison between built-in collections works as follows:
+
+  - For two collections to compare equal, they must be of the same type, have
+    the same length, and each pair of corresponding elements must compare
+    equal (for example, ``[1,2] == (1,2)`` is false because the type is not the
+    same).
+
+  - Collections are ordered the same as their
+    first unequal elements (for example, ``cmp([1,2,x], [1,2,y])`` returns the
+    same as ``cmp(x,y)``).  If a corresponding element does not exist, the
+    shorter collection is ordered first (for example, ``[1,2] < [1,2,3]`` is
+    true).
+
+* Mappings (instances of :class:`dict`) compare equal if and only if they have
+  equal `(key, value)` pairs. Equality comparison of the keys and values
+  enforces reflexivity.
+
+  Outcomes other than equality are resolved
   consistently, but are not otherwise defined. [#]_
 
 * Most other objects of built-in types compare unequal unless they are the same
@@ -1141,39 +1196,83 @@
   another one is made arbitrarily but consistently within one execution of a
   program.
 
+User-defined classes that customize their comparison behavior should follow
+some consistency rules, if possible:
+
+* Equality comparison should be reflexive.
+  In other words, identical objects should compare equal:
+
+    ``x is y`` implies ``x == y``
+
+* Comparison should be symmetric.
+  In other words, the following expressions should have the same result:
+
+    ``x == y`` and ``y == x``
+
+    ``x != y`` and ``y != x``
+
+    ``x < y`` and ``y > x``
+
+    ``x <= y`` and ``y >= x``
+
+* Comparison should be transitive.
+  The following (non-exhaustive) examples illustrate that:
+
+    ``x > y and y > z`` implies ``x > z``
+
+    ``x < y and y <= z`` implies ``x < z``
+
+* Inverse comparison should result in the boolean negation.
+  In other words, the following expressions should have the same result:
+
+    ``x == y`` and ``not x != y``
+
+    ``x < y`` and ``not x >= y`` (for total ordering)
+
+    ``x > y`` and ``not x <= y`` (for total ordering)
+
+  The last two expressions apply to totally ordered collections (e.g. to
+  sequences, but not to sets or mappings). See also the
+  :func:`~functools.total_ordering` decorator.
+
+* The :func:`hash` result should be consistent with equality.
+  Objects that are equal should either have the same hash value,
+  or be marked as unhashable.
+
+Python does not enforce these consistency rules.
+
+
+.. _in:
+.. _not in:
 .. _membership-test-details:
 
-The operators :keyword:`in` and :keyword:`not in` test for collection
-membership.  ``x in s`` evaluates to true if *x* is a member of the collection
-*s*, and false otherwise.  ``x not in s`` returns the negation of ``x in s``.
-The collection membership test has traditionally been bound to sequences; an
-object is a member of a collection if the collection is a sequence and contains
-an element equal to that object.  However, it make sense for many other object
-types to support membership tests without being a sequence.  In particular,
-dictionaries (for keys) and sets support membership testing.
+Membership test operations
+--------------------------
 
-For the list and tuple types, ``x in y`` is true if and only if there exists an
-index *i* such that either ``x is y[i]`` or ``x == y[i]`` is true.
+The operators :keyword:`in` and :keyword:`not in` test for membership.  ``x in
+s`` evaluates to ``True`` if *x* is a member of *s*, and ``False`` otherwise.
+``x not in s`` returns the negation of ``x in s``.  All built-in sequences and
+set types support this as well as dictionary, for which :keyword:`in` tests
+whether the dictionary has a given key. For container types such as list, tuple,
+set, frozenset, dict, or collections.deque, the expression ``x in y`` is equivalent
+to ``any(x is e or x == e for e in y)``.
 
-For the Unicode and string types, ``x in y`` is true if and only if *x* is a
-substring of *y*.  An equivalent test is ``y.find(x) != -1``.  Note, *x* and *y*
-need not be the same type; consequently, ``u'ab' in 'abc'`` will return
-``True``. Empty strings are always considered to be a substring of any other
-string, so ``"" in "abc"`` will return ``True``.
-
-.. versionchanged:: 2.3
-   Previously, *x* was required to be a string of length ``1``.
+For the string and bytes types, ``x in y`` is ``True`` if and only if *x* is a
+substring of *y*.  An equivalent test is ``y.find(x) != -1``.  Empty strings are
+always considered to be a substring of any other string, so ``"" in "abc"`` will
+return ``True``.
 
 For user-defined classes which define the :meth:`__contains__` method, ``x in
-y`` is true if and only if ``y.__contains__(x)`` is true.
+y`` returns ``True`` if ``y.__contains__(x)`` returns a true value, and
+``False`` otherwise.
 
 For user-defined classes which do not define :meth:`__contains__` but do define
-:meth:`__iter__`, ``x in y`` is true if some value ``z`` with ``x == z`` is
+:meth:`__iter__`, ``x in y`` is ``True`` if some value ``z`` with ``x == z`` is
 produced while iterating over ``y``.  If an exception is raised during the
 iteration, it is as if :keyword:`in` raised that exception.
 
 Lastly, the old-style iteration protocol is tried: if a class defines
-:meth:`__getitem__`, ``x in y`` is true if and only if there is a non-negative
+:meth:`__getitem__`, ``x in y`` is ``True`` if and only if there is a non-negative
 integer index *i* such that ``x == y[i]``, and all lower integer indices do not
 raise :exc:`IndexError` exception. (If any other exception is raised, it is as
 if :keyword:`in` raised that exception).
@@ -1192,6 +1291,13 @@
    operator: is not
    pair: identity; test
 
+
+.. _is:
+.. _is not:
+
+Identity comparisons
+--------------------
+
 The operators :keyword:`is` and :keyword:`is not` test for object identity: ``x
 is y`` is true if and only if *x* and *y* are the same object.  ``x is not y``
 yields the inverse truth value. [#]_
@@ -1284,10 +1390,10 @@
 
 Lambda expressions (sometimes called lambda forms) have the same syntactic position as
 expressions.  They are a shorthand to create anonymous functions; the expression
-``lambda arguments: expression`` yields a function object.  The unnamed object
+``lambda parameters: expression`` yields a function object.  The unnamed object
 behaves like a function object defined with ::
 
-   def name(arguments):
+   def <lambda>(parameters):
        return expression
 
 See section :ref:`function` for the syntax of parameter lists.  Note that
@@ -1418,15 +1524,24 @@
    cases, Python returns the latter result, in order to preserve that
    ``divmod(x,y)[0] * y + x % y`` be very close to ``x``.
 
-.. [#] While comparisons between unicode strings make sense at the byte
-   level, they may be counter-intuitive to users. For example, the
-   strings ``u"\u00C7"`` and ``u"\u0043\u0327"`` compare differently,
-   even though they both represent the same unicode character (LATIN
-   CAPITAL LETTER C WITH CEDILLA). To compare strings in a human
-   recognizable way, compare using :func:`unicodedata.normalize`.
+.. [#] The Unicode standard distinguishes between :dfn:`code points`
+   (e.g. U+0041) and :dfn:`abstract characters` (e.g. "LATIN CAPITAL LETTER A").
+   While most abstract characters in Unicode are only represented using one
+   code point, there is a number of abstract characters that can in addition be
+   represented using a sequence of more than one code point.  For example, the
+   abstract character "LATIN CAPITAL LETTER C WITH CEDILLA" can be represented
+   as a single :dfn:`precomposed character` at code position U+00C7, or as a
+   sequence of a :dfn:`base character` at code position U+0043 (LATIN CAPITAL
+   LETTER C), followed by a :dfn:`combining character` at code position U+0327
+   (COMBINING CEDILLA).
 
-.. [#] The implementation computes this efficiently, without constructing lists or
-   sorting.
+   The comparison operators on unicode strings compare at the level of Unicode code
+   points. This may be counter-intuitive to humans.  For example,
+   ``u"\u00C7" == u"\u0043\u0327"`` is ``False``, even though both strings
+   represent the same abstract character "LATIN CAPITAL LETTER C WITH CEDILLA".
+
+   To compare strings at the level of abstract characters (that is, in a way
+   intuitive to humans), use :func:`unicodedata.normalize`.
 
 .. [#] Earlier versions of Python used lexicographic comparison of the sorted (key,
    value) lists, but this was very expensive for the common case of comparing for
diff --git a/Doc/reference/lexical_analysis.rst b/Doc/reference/lexical_analysis.rst
index 9f69ef7..435dfc5 100644
--- a/Doc/reference/lexical_analysis.rst
+++ b/Doc/reference/lexical_analysis.rst
@@ -73,11 +73,12 @@
 --------------
 
 A physical line is a sequence of characters terminated by an end-of-line
-sequence.  In source files, any of the standard platform line termination
-sequences can be used - the Unix form using ASCII LF (linefeed), the Windows
-form using the ASCII sequence CR LF (return followed by linefeed), or the old
-Macintosh form using the ASCII CR (return) character.  All of these forms can be
-used equally, regardless of platform.
+sequence.  In source files and strings, any of the standard platform line
+termination sequences can be used - the Unix form using ASCII LF (linefeed),
+the Windows form using the ASCII sequence CR LF (return followed by linefeed),
+or the old Macintosh form using the ASCII CR (return) character.  All of these
+forms can be used equally, regardless of platform. The end of input also serves
+as an implicit terminator for the final physical line.
 
 When embedding Python, source code strings should be passed to Python APIs using
 the standard C conventions for newline characters (the ``\n`` character,
diff --git a/Doc/reference/simple_stmts.rst b/Doc/reference/simple_stmts.rst
index 848bb9e..43935da 100644
--- a/Doc/reference/simple_stmts.rst
+++ b/Doc/reference/simple_stmts.rst
@@ -972,7 +972,7 @@
    builtin: execfile
    builtin: compile
 
-**Programmer's note:** the :keyword:`global` is a directive to the parser.  It
+**Programmer's note:** :keyword:`global` is a directive to the parser.  It
 applies only to code parsed at the same time as the :keyword:`global` statement.
 In particular, a :keyword:`global` statement contained in an :keyword:`exec`
 statement does not affect the code block *containing* the :keyword:`exec`
diff --git a/Doc/reference/toplevel_components.rst b/Doc/reference/toplevel_components.rst
index 304abac..44196f7 100644
--- a/Doc/reference/toplevel_components.rst
+++ b/Doc/reference/toplevel_components.rst
@@ -51,11 +51,11 @@
    single: command line
    single: standard input
 
-Under Unix, a complete program can be passed to the interpreter in three forms:
-with the :option:`-c` *string* command line option, as a file passed as the
-first command line argument, or as standard input. If the file or standard input
-is a tty device, the interpreter enters interactive mode; otherwise, it executes
-the file as a complete program.
+A complete program can be passed to the interpreter
+in three forms: with the :option:`-c` *string* command line option, as a file
+passed as the first command line argument, or as standard input. If the file
+or standard input is a tty device, the interpreter enters interactive mode;
+otherwise, it executes the file as a complete program.
 
 
 .. _file-input:
diff --git a/Doc/tools/extensions/pyspecific.py b/Doc/tools/extensions/pyspecific.py
index 1b6b0e2..8c45274 100644
--- a/Doc/tools/extensions/pyspecific.py
+++ b/Doc/tools/extensions/pyspecific.py
@@ -10,14 +10,16 @@
 """
 
 ISSUE_URI = 'https://bugs.python.org/issue%s'
-SOURCE_URI = 'https://hg.python.org/cpython/file/2.7/%s'
+SOURCE_URI = 'https://github.com/python/cpython/tree/2.7/%s'
 
 from docutils import nodes, utils
+from docutils.parsers.rst import Directive
 
+from sphinx.util import status_iterator
 from sphinx.util.nodes import split_explicit_title
-from sphinx.util.compat import Directive
 from sphinx.writers.html import HTMLTranslator
 from sphinx.writers.latex import LaTeXTranslator
+from sphinx.writers.text import TextTranslator
 
 # monkey-patch reST parser to disable alphabetic and roman enumerated lists
 from docutils.parsers.rst.states import Body
@@ -58,7 +60,7 @@
 
 def issue_role(typ, rawtext, text, lineno, inliner, options={}, content=[]):
     issue = utils.unescape(text)
-    text = 'issue ' + issue
+    text = 'bpo-'+ issue
     refnode = nodes.reference(text, text, refuri=ISSUE_URI % issue)
     return [refnode], []
 
@@ -158,8 +160,11 @@
 class PydocTopicsBuilder(Builder):
     name = 'pydoc-topics'
 
+    default_translator_class = TextTranslator
+
     def init(self):
         self.topics = {}
+        self.secnumbers = {}
 
     def get_outdated_docs(self):
         return 'all pydoc topics'
@@ -169,9 +174,9 @@
 
     def write(self, *ignored):
         writer = TextWriter(self)
-        for label in self.status_iterator(pydoc_topic_labels,
-                                          'building topics... ',
-                                          length=len(pydoc_topic_labels)):
+        for label in status_iterator(pydoc_topic_labels,
+                                     'building topics... ',
+                                     length=len(pydoc_topic_labels)):
             if label not in self.env.domaindata['std']['labels']:
                 self.warn('label %r not in documentation' % label)
                 continue
diff --git a/Doc/tools/static/switchers.js b/Doc/tools/static/switchers.js
new file mode 100644
index 0000000..2c051eb
--- /dev/null
+++ b/Doc/tools/static/switchers.js
@@ -0,0 +1,146 @@
+(function() {
+  'use strict';
+
+  // Parses versions in URL segments like:
+  // "3", "dev", "release/2.7" or "3.6rc2"
+  var version_regexs = [
+    '(?:\\d)',
+    '(?:\\d\\.\\d[\\w\\d\\.]*)',
+    '(?:dev)',
+    '(?:release/\\d.\\d[\\x\\d\\.]*)'];
+
+  var all_versions = {
+    '3.8': 'dev (3.8)',
+    '3.7': '3.7',
+    '3.6': '3.6',
+    '3.5': '3.5',
+    '2.7': '2.7',
+  };
+
+  var all_languages = {
+      'en': 'English',
+      'fr': 'French',
+      'ja': 'Japanese',
+  };
+
+  function build_version_select(current_version, current_release) {
+    var buf = ['<select>'];
+
+    $.each(all_versions, function(version, title) {
+      buf.push('<option value="' + version + '"');
+      if (version == current_version)
+        buf.push(' selected="selected">' + current_release + '</option>');
+      else
+        buf.push('>' + title + '</option>');
+    });
+
+    buf.push('</select>');
+    return buf.join('');
+  }
+
+  function build_language_select(current_language) {
+    var buf = ['<select>'];
+
+    $.each(all_languages, function(language, title) {
+      if (language == current_language)
+        buf.push('<option value="' + language + '" selected="selected">' +
+                 all_languages[current_language] + '</option>');
+      else
+        buf.push('<option value="' + language + '">' + title + '</option>');
+    });
+    buf.push('</select>');
+    return buf.join('');
+  }
+
+  function navigate_to_first_existing(urls) {
+    // Navigate to the first existing URL in urls.
+    var url = urls.shift();
+    if (urls.length == 0) {
+      window.location.href = url;
+      return;
+    }
+    $.ajax({
+      url: url,
+      success: function() {
+        window.location.href = url;
+      },
+      error: function() {
+        navigate_to_first_existing(urls);
+      }
+    });
+  }
+
+  function on_version_switch() {
+    var selected_version = $(this).children('option:selected').attr('value') + '/';
+    var url = window.location.href;
+    var current_language = language_segment_from_url(url);
+    var current_version = version_segment_in_url(url);
+    var new_url = url.replace('.org/' + current_language + current_version,
+                              '.org/' + current_language + selected_version);
+    if (new_url != url) {
+      navigate_to_first_existing([
+        new_url,
+        url.replace('.org/' + current_language + current_version,
+                    '.org/' + selected_version),
+        'https://docs.python.org/' + current_language + selected_version,
+        'https://docs.python.org/' + selected_version,
+        'https://docs.python.org/'
+      ]);
+    }
+  }
+
+  function on_language_switch() {
+    var selected_language = $(this).children('option:selected').attr('value') + '/';
+    var url = window.location.href;
+    var current_language = language_segment_from_url(url);
+    var current_version = version_segment_in_url(url);
+    if (selected_language == 'en/') // Special 'default' case for english.
+      selected_language = '';
+    var new_url = url.replace('.org/' + current_language + current_version,
+                              '.org/' + selected_language + current_version);
+    if (new_url != url) {
+      navigate_to_first_existing([
+        new_url,
+        'https://docs.python.org/'
+      ]);
+    }
+  }
+
+  // Returns the path segment of the language as a string, like 'fr/'
+  // or '' if not found.
+  function language_segment_from_url(url) {
+    var language_regexp = '\.org/([a-z]{2}(?:-[a-z]{2})?/)';
+    var match = url.match(language_regexp);
+    if (match !== null)
+        return match[1];
+    return '';
+  }
+
+  // Returns the path segment of the version as a string, like '3.6/'
+  // or '' if not found.
+  function version_segment_in_url(url) {
+    var language_segment = '(?:[a-z]{2}(?:-[a-z]{2})?/)';
+    var version_segment = '(?:(?:' + version_regexs.join('|') + ')/)';
+    var version_regexp = '\\.org/' + language_segment + '?(' + version_segment + ')';
+    var match = url.match(version_regexp);
+    if (match !== null)
+      return match[1];
+    return ''
+  }
+
+  $(document).ready(function() {
+    var release = DOCUMENTATION_OPTIONS.VERSION;
+    var language_segment = language_segment_from_url(window.location.href);
+    var current_language = language_segment.replace(/\/+$/g, '') || 'en';
+    var version = release.substr(0, 3);
+    var version_select = build_version_select(version, release);
+
+    $('.version_switcher_placeholder').html(version_select);
+    $('.version_switcher_placeholder select').bind('change', on_version_switch);
+
+    var language_select = build_language_select(current_language);
+
+    $('.language_switcher_placeholder').html(language_select);
+    $('.language_switcher_placeholder select').bind('change', on_language_switch);
+  });
+})();
diff --git a/Doc/tools/static/version_switch.js b/Doc/tools/static/version_switch.js
deleted file mode 100644
index 8b36a61..0000000
--- a/Doc/tools/static/version_switch.js
+++ /dev/null
@@ -1,67 +0,0 @@
-(function() {
-  'use strict';
-
-  var all_versions = {
-    '3.7': 'dev (3.7)',
-    '3.6': '3.6',
-    '3.5': '3.5',
-    '3.4': '3.4',
-    '3.3': '3.3',
-    '2.7': '2.7',
-  };
-
-  function build_select(current_version, current_release) {
-    var buf = ['<select>'];
-
-    $.each(all_versions, function(version, title) {
-      buf.push('<option value="' + version + '"');
-      if (version == current_version)
-        buf.push(' selected="selected">' + current_release + '</option>');
-      else
-        buf.push('>' + title + '</option>');
-    });
-
-    buf.push('</select>');
-    return buf.join('');
-  }
-
-  function patch_url(url, new_version) {
-    var url_re = /\.org\/(\d|py3k|dev|((release\/)?\d\.\d[\w\d\.]*))\//,
-        new_url = url.replace(url_re, '.org/' + new_version + '/');
-
-    if (new_url == url && !new_url.match(url_re)) {
-      // python 2 url without version?
-      new_url = url.replace(/\.org\//, '.org/' + new_version + '/');
-    }
-    return new_url;
-  }
-
-  function on_switch() {
-    var selected = $(this).children('option:selected').attr('value');
-
-    var url = window.location.href,
-        new_url = patch_url(url, selected);
-
-    if (new_url != url) {
-      // check beforehand if url exists, else redirect to version's start page
-      $.ajax({
-        url: new_url,
-        success: function() {
-           window.location.href = new_url;
-        },
-        error: function() {
-           window.location.href = 'https://docs.python.org/' + selected;
-        }
-      });
-    }
-  }
-
-  $(document).ready(function() {
-    var release = DOCUMENTATION_OPTIONS.VERSION;
-    var version = release.substr(0, 3);
-    var select = build_select(version, release);
-
-    $('.version_switcher_placeholder').html(select);
-    $('.version_switcher_placeholder select').bind('change', on_switch);
-  });
-})();
diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv
index 17b2366..f7d23e2 100644
--- a/Doc/tools/susp-ignored.csv
+++ b/Doc/tools/susp-ignored.csv
@@ -46,7 +46,7 @@
 howto/pyporting,,::,Programming Language :: Python :: 3
 howto/regex,,::,
 howto/regex,,:foo,(?:foo)
-howto/urllib2,,:password,"for example ""joe:password@example.com"""
+howto/urllib2,,:password,"""joe:password@example.com"""
 library/audioop,,:ipos,"# factor = audioop.findfactor(in_test[ipos*2:ipos*2+len(out_test)],"
 library/bisect,,:hi,all(val >= x for val in a[i:hi])
 library/bisect,,:hi,all(val > x for val in a[i:hi])
@@ -99,6 +99,8 @@
 library/profile,,:lineno,filename:lineno(function)
 library/pyexpat,,:elem1,<py:elem1 />
 library/pyexpat,,:py,"xmlns:py = ""http://www.python.org/ns/"">"
+library/re,,`,!#$%&'*+-.^_`|~:
+library/re,,`,[abcdefghijklmnopqrstuvwxyz0123456789\!\#\$\%\&\'\*\+\-\.\^\_\`\|\~\:]+
 library/smtplib,,:port,method must support that as well as a regular host:port
 library/socket,,::,'5aef:2b::8'
 library/sqlite3,,:memory,
@@ -150,7 +152,7 @@
 reference/datamodel,,:max,
 reference/expressions,,:index,x[index:index]
 reference/expressions,,`,`expressions...`
-reference/expressions,,`,"""`"""
+reference/expressions,350,`,`
 reference/grammar,,`,'`' testlist1 '`'
 reference/lexical_analysis,,:fileencoding,# vim:fileencoding=<encoding-name>
 reference/lexical_analysis,,`,",       :       .       `       =       ;"
diff --git a/Doc/tools/templates/download.html b/Doc/tools/templates/download.html
index 2a885d7..298dc5c 100644
--- a/Doc/tools/templates/download.html
+++ b/Doc/tools/templates/download.html
@@ -27,34 +27,34 @@
     <td>
       <a href="{{ dlbase }}/python-{{ release }}-docs-pdf-letter.zip">
         {% trans %}Download{% endtrans %}
-      </a> {% trans %}(ca. 8 MB){% endtrans %}
+      </a> {% trans %}(ca. 11 MB){% endtrans %}
     </td>
     <td>
       <a href="{{ dlbase }}/python-{{ release }}-docs-pdf-letter.tar.bz2">
         {% trans %}Download{% endtrans %}
-      </a> {% trans %}(ca. 8 MB){% endtrans %}
+      </a> {% trans %}(ca. 11 MB){% endtrans %}
     </td>
   </tr>
   <tr><td>{% trans %}PDF (A4 paper size){% endtrans %}</td>
     <td>
       <a href="{{ dlbase }}/python-{{ release }}-docs-pdf-a4.zip">
         {% trans %}Download{% endtrans %}
-      </a> {% trans %}(ca. 8 MB){% endtrans %}</td>
+      </a> {% trans %}(ca. 11 MB){% endtrans %}</td>
     <td>
       <a href="{{ dlbase }}/python-{{ release }}-docs-pdf-a4.tar.bz2">
         {% trans %}Download{% endtrans %}
-      </a> {% trans %}(ca. 8 MB){% endtrans %}</td>
+      </a> {% trans %}(ca. 11 MB){% endtrans %}</td>
   </tr>
   <tr><td>{% trans %}HTML{% endtrans %}</td>
     <td>
       <a href="{{ dlbase }}/python-{{ release }}-docs-html.zip">
         {% trans %}Download{% endtrans %}
-      </a> {% trans %}(ca. 6 MB){% endtrans %}
+      </a> {% trans %}(ca. 7.5 MB){% endtrans %}
     </td>
     <td>
       <a href="{{ dlbase }}/python-{{ release }}-docs-html.tar.bz2">
         {% trans %}Download{% endtrans %}
-      </a> {% trans %}(ca. 4 MB){% endtrans %}
+      </a> {% trans %}(ca. 5 MB){% endtrans %}
     </td>
   </tr>
   <tr>
@@ -62,12 +62,12 @@
     <td>
       <a href="{{ dlbase }}/python-{{ release }}-docs-text.zip">
         {% trans %}Download{% endtrans %}
-      </a> {% trans %}(ca. 2 MB){% endtrans %}
+      </a> {% trans %}(ca. 2.5 MB){% endtrans %}
     </td>
     <td>
       <a href="{{ dlbase }}/python-{{ release }}-docs-text.tar.bz2">
         {% trans %}Download{% endtrans %}
-      </a> {% trans %}(ca. 1.5 MB){% endtrans %}
+      </a> {% trans %}(ca. 2 MB){% endtrans %}
     </td>
   </tr>
 </table>
@@ -75,9 +75,9 @@
 <p>{% trans %}These archives contain all the content in the
 documentation.{% endtrans %}</p>
 
-<p>{% trans download_page="https://www.python.org/download/releases/{{ release[:5] }}/" %}HTML Help
-(<tt>.chm</tt>) files are made available in the "Windows" section
-on the <a href={{ download_page }}>Python download page</a>.{% endtrans %}</p>
+<p>{% trans download_page="https://www.python.org/downloads/release/python-" + release.replace('.', '') + "/" %}HTML Help
+(<tt>.chm</tt>) files are made available in the "Files" section
+on the <a href="{{ download_page }}">Python download page</a>.{% endtrans %}</p>
 
 
 <h2>{% trans %}Unpacking{% endtrans %}</h2>
diff --git a/Doc/tools/templates/indexcontent.html b/Doc/tools/templates/indexcontent.html
index 6488c16..5cba973 100644
--- a/Doc/tools/templates/indexcontent.html
+++ b/Doc/tools/templates/indexcontent.html
@@ -1,5 +1,12 @@
-{% extends "defindex.html" %}
-{% block tables %}
+{% extends "layout.html" %}
+{%- block htmltitle -%}
+<title>{{ shorttitle }}</title>
+{%- endblock -%}
+{% block body %}
+  <h1>{{ docstitle|e }}</h1>
+  <p>
+  {% trans %}Welcome! This is the documentation for Python {{ release }}.{% endtrans %}
+  </p>
   <p><strong>{% trans %}Parts of the documentation:{% endtrans %}</strong></p>
   <table class="contentstable" align="center"><tr>
     <td width="50%">
diff --git a/Doc/tools/templates/indexsidebar.html b/Doc/tools/templates/indexsidebar.html
index d93021d..d6b054e 100644
--- a/Doc/tools/templates/indexsidebar.html
+++ b/Doc/tools/templates/indexsidebar.html
@@ -2,8 +2,10 @@
 <p><a href="{{ pathto('download') }}">{% trans %}Download these documents{% endtrans %}</a></p>
 <h3>{% trans %}Docs for other versions{% endtrans %}</h3>
 <ul>
-  <li><a href="https://docs.python.org/3.4/">{% trans %}Python 3.4 (stable){% endtrans %}</a></li>
-  <li><a href="https://docs.python.org/3.5/">{% trans %}Python 3.5 (in development){% endtrans %}</a></li>
+  <li><a href="https://docs.python.org/3.8/">{% trans %}Python 3.8 (in development){% endtrans %}</a></li>
+  <li><a href="https://docs.python.org/3.7/">{% trans %}Python 3.7 (stable){% endtrans %}</a></li>
+  <li><a href="https://docs.python.org/3.6/">{% trans %}Python 3.6 (stable){% endtrans %}</a></li>
+  <li><a href="https://docs.python.org/3.5/">{% trans %}Python 3.5 (security-fixes){% endtrans %}</a></li>
   <li><a href="https://www.python.org/doc/versions/">{% trans %}Old versions{% endtrans %}</a></li>
 </ul>
 
diff --git a/Doc/tools/templates/layout.html b/Doc/tools/templates/layout.html
index 78b3b27..8d6d3e5 100644
--- a/Doc/tools/templates/layout.html
+++ b/Doc/tools/templates/layout.html
@@ -4,7 +4,8 @@
                  style="vertical-align: middle; margin-top: -1px"/></li>
         <li><a href="https://www.python.org/">Python</a>{{ reldelim1 }}</li>
         <li>
-          {%- if versionswitcher is defined %}
+          {%- if switchers is defined %}
+          <span class="language_switcher_placeholder">{{ language or 'en' }}</span>
           <span class="version_switcher_placeholder">{{ release }}</span>
           <a href="{{ pathto('index') }}">{% trans %}Documentation{% endtrans %}</a>{{ reldelim1 }}
           {%- else %}
@@ -16,8 +17,9 @@
 {% block relbar2 %} {% if builder != 'qthelp' %} {{ relbar() }} {% endif %} {% endblock %}
 {% block extrahead %}
     <link rel="shortcut icon" type="image/png" href="{{ pathto('_static/py.png', 1) }}" />
+    <link rel="canonical" href="https://docs.python.org/2/{{pagename}}.html" />
     {% if not embedded %}<script type="text/javascript" src="{{ pathto('_static/copybutton.js', 1) }}"></script>{% endif %}
-    {% if versionswitcher is defined and not embedded %}<script type="text/javascript" src="{{ pathto('_static/version_switch.js', 1) }}"></script>{% endif %}
+    {% if switchers is defined and not embedded %}<script type="text/javascript" src="{{ pathto('_static/switchers.js', 1) }}"></script>{% endif %}
 {{ super() }}
     {% if builder == 'qthelp' %}
     <style type="text/css">
@@ -44,8 +46,9 @@
 <h3>{{ _('This Page') }}</h3>
 <ul class="this-page-menu">
   <li><a href="{{ pathto('bugs') }}">{% trans %}Report a Bug{% endtrans %}</a></li>
-  <li><a href="{{ pathto('_sources/' + sourcename, true)|e }}"
-         rel="nofollow">{% trans %}Show Source{% endtrans %}</a></li>
+  <li><a href="https://github.com/python/cpython/blob/{{ version }}/Doc/{{ sourcename|replace('.rst.txt', '.rst') }}"
+         rel="nofollow">{% trans %}Show Source{% endtrans %}</a>
+  </li>
 </ul>
 {%- endif %}
 {% endblock %}
diff --git a/Doc/tutorial/classes.rst b/Doc/tutorial/classes.rst
index 963581b..1058b77 100644
--- a/Doc/tutorial/classes.rst
+++ b/Doc/tutorial/classes.rst
@@ -328,8 +328,8 @@
 the method's object before the first argument.
 
 If you still don't understand how methods work, a look at the implementation can
-perhaps clarify matters.  When an instance attribute is referenced that isn't a
-data attribute, its class is searched.  If the name denotes a valid class
+perhaps clarify matters.  When a non-data attribute of an instance is
+referenced, the instance's class is searched.  If the name denotes a valid class
 attribute that is a function object, a method object is created by packing
 (pointers to) the instance object and the function object just found together in
 an abstract object: this is the method object.  When the method object is called
@@ -787,7 +787,7 @@
    'c'
    >>> it.next()
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
        it.next()
    StopIteration
 
@@ -873,9 +873,9 @@
 =====================
 
 Some simple generators can be coded succinctly as expressions using a syntax
-similar to list comprehensions but with parentheses instead of brackets.  These
-expressions are designed for situations where the generator is used right away
-by an enclosing function.  Generator expressions are more compact but less
+similar to list comprehensions but with parentheses instead of square brackets.
+These expressions are designed for situations where the generator is used right
+away by an enclosing function.  Generator expressions are more compact but less
 versatile than full generator definitions and tend to be more memory friendly
 than equivalent list comprehensions.
 
diff --git a/Doc/tutorial/controlflow.rst b/Doc/tutorial/controlflow.rst
index e1ac89f..c1c3d28 100644
--- a/Doc/tutorial/controlflow.rst
+++ b/Doc/tutorial/controlflow.rst
@@ -126,7 +126,7 @@
 :keyword:`break` and :keyword:`continue` Statements, and :keyword:`else` Clauses on Loops
 =========================================================================================
 
-The :keyword:`break` statement, like in C, breaks out of the smallest enclosing
+The :keyword:`break` statement, like in C, breaks out of the innermost enclosing
 :keyword:`for` or :keyword:`while` loop.
 
 Loop statements may have an ``else`` clause; it is executed when the loop
@@ -444,7 +444,7 @@
    ...
    >>> function(0, a=0)
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    TypeError: function() got multiple values for keyword argument 'a'
 
 When a final formal parameter of the form ``**name`` is present, it receives a
diff --git a/Doc/tutorial/datastructures.rst b/Doc/tutorial/datastructures.rst
index 0e5891a..4e60e32 100644
--- a/Doc/tutorial/datastructures.rst
+++ b/Doc/tutorial/datastructures.rst
@@ -107,7 +107,7 @@
 
 You might have noticed that methods like ``insert``, ``remove`` or ``sort`` that
 only modify the list have no return value printed -- they return the default
-``None``. [1]_  This is a design principle for all mutable data structures in
+``None``.  This is a design principle for all mutable data structures in
 Python.
 
 
@@ -311,7 +311,7 @@
    [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
    >>> # the tuple must be parenthesized, otherwise an error is raised
    >>> [x, x**2 for x in range(6)]
-     File "<stdin>", line 1
+     File "<stdin>", line 1, in <module>
        [x, x**2 for x in range(6)]
                   ^
    SyntaxError: invalid syntax
diff --git a/Doc/tutorial/inputoutput.rst b/Doc/tutorial/inputoutput.rst
index 3e32af2..78d6ba3 100644
--- a/Doc/tutorial/inputoutput.rst
+++ b/Doc/tutorial/inputoutput.rst
@@ -101,7 +101,7 @@
    10 100 1000
 
 (Note that in the first example, one space between each column was added by the
-way :keyword:`print` works: it always adds spaces between its arguments.)
+way :keyword:`print` works: by default it adds spaces between its arguments.)
 
 This example demonstrates the :meth:`str.rjust` method of string
 objects, which right-justifies a string in a field of a given width by padding
@@ -340,7 +340,7 @@
    >>> f.close()
    >>> f.read()
    Traceback (most recent call last):
-     File "<stdin>", line 1, in ?
+     File "<stdin>", line 1, in <module>
    ValueError: I/O operation on closed file
 
 It is good practice to use the :keyword:`with` keyword when dealing with file
@@ -390,6 +390,7 @@
 If you have an object ``x``, you can view its JSON string representation with a
 simple line of code::
 
+   >>> import json
    >>> json.dumps([1, 'simple', 'list'])
    '[1, "simple", "list"]'
 
diff --git a/Doc/tutorial/interpreter.rst b/Doc/tutorial/interpreter.rst
index 50e50c7..b727be0 100644
--- a/Doc/tutorial/interpreter.rst
+++ b/Doc/tutorial/interpreter.rst
@@ -126,40 +126,23 @@
 Source Code Encoding
 --------------------
 
-It is possible to use encodings different than ASCII in Python source files. The
-best way to do it is to put one more special comment line right after the ``#!``
-line to define the source file encoding::
+By default, Python source files are treated as encoded in ASCII.
+To declare an encoding other than the default one, a special comment line
+should be added as the *first* line of the file.  The syntax is as follows::
 
    # -*- coding: encoding -*-
 
+where *encoding* is one of the valid :mod:`codecs` supported by Python.
 
-With that declaration, all characters in the source file will be treated as
-having the encoding *encoding*, and it will be possible to directly write
-Unicode string literals in the selected encoding.  The list of possible
-encodings can be found in the Python Library Reference, in the section on
-:mod:`codecs`.
+For example, to declare that Windows-1252 encoding is to be used, the first
+line of your source code file should be::
 
-For example, to write Unicode literals including the Euro currency symbol, the
-ISO-8859-15 encoding can be used, with the Euro symbol having the ordinal value
-164.  This script, when saved in the ISO-8859-15 encoding, will print the value
-8364 (the Unicode code point corresponding to the Euro symbol) and then exit::
+   # -*- coding: cp1252 -*-
 
-   # -*- coding: iso-8859-15 -*-
+One exception to the *first line* rule is when the source code starts with a
+:ref:`UNIX "shebang" line <tut-scripts>`.  In this case, the encoding
+declaration should be added as the second line of the file.  For example::
 
-   currency = u"€"
-   print ord(currency)
-
-If your editor supports saving files as ``UTF-8`` with a UTF-8 *byte order mark*
-(aka BOM), you can use that instead of an encoding declaration. IDLE supports
-this capability if ``Options/General/Default Source Encoding/UTF-8`` is set.
-Notice that this signature is not understood in older Python releases (2.2 and
-earlier), and also not understood by the operating system for script files with
-``#!`` lines (only used on Unix systems).
-
-By using UTF-8 (either through the signature or an encoding declaration),
-characters of most languages in the world can be used simultaneously in string
-literals and comments.  Using non-ASCII characters in identifiers is not
-supported. To display all these characters properly, your editor must recognize
-that the file is UTF-8, and it must use a font that supports all the characters
-in the file.
+   #!/usr/bin/env python
+   # -*- coding: cp1252 -*-
 
diff --git a/Doc/tutorial/introduction.rst b/Doc/tutorial/introduction.rst
index b7be00e..2ff776e 100644
--- a/Doc/tutorial/introduction.rst
+++ b/Doc/tutorial/introduction.rst
@@ -149,12 +149,12 @@
    "doesn't"
    >>> "doesn't"  # ...or use double quotes instead
    "doesn't"
-   >>> '"Yes," he said.'
-   '"Yes," he said.'
-   >>> "\"Yes,\" he said."
-   '"Yes," he said.'
-   >>> '"Isn\'t," she said.'
-   '"Isn\'t," she said.'
+   >>> '"Yes," they said.'
+   '"Yes," they said.'
+   >>> "\"Yes,\" they said."
+   '"Yes," they said.'
+   >>> '"Isn\'t," they said.'
+   '"Isn\'t," they said.'
 
 In the interactive interpreter, the output string is enclosed in quotes and
 special characters are escaped with backslashes.  While this might sometimes
@@ -165,10 +165,10 @@
 readable output, by omitting the enclosing quotes and by printing escaped
 and special characters::
 
-   >>> '"Isn\'t," she said.'
-   '"Isn\'t," she said.'
-   >>> print '"Isn\'t," she said.'
-   "Isn't," she said.
+   >>> '"Isn\'t," they said.'
+   '"Isn\'t," they said.'
+   >>> print '"Isn\'t," they said.'
+   "Isn't," they said.
    >>> s = 'First line.\nSecond line.'  # \n means newline
    >>> s  # without print, \n is included in the output
    'First line.\nSecond line.'
@@ -218,6 +218,13 @@
    >>> 'Py' 'thon'
    'Python'
 
+This feature is particularly useful when you want to break long strings::
+
+   >>> text = ('Put several strings within parentheses '
+   ...         'to have them joined together.')
+   >>> text
+   'Put several strings within parentheses to have them joined together.'
+
 This only works with two literals though, not with variables or expressions::
 
    >>> prefix = 'Py'
@@ -233,13 +240,6 @@
    >>> prefix + 'thon'
    'Python'
 
-This feature is particularly useful when you want to break long strings::
-
-   >>> text = ('Put several strings within parentheses '
-   ...         'to have them joined together.')
-   >>> text
-   'Put several strings within parentheses to have them joined together.'
-
 Strings can be *indexed* (subscripted), with the first character having index 0.
 There is no separate character type; a character is simply a string of size
 one::
diff --git a/Doc/tutorial/modules.rst b/Doc/tutorial/modules.rst
index 6fb4ffd..042d233 100644
--- a/Doc/tutorial/modules.rst
+++ b/Doc/tutorial/modules.rst
@@ -108,6 +108,25 @@
 frowned upon, since it often causes poorly readable code. However, it is okay to
 use it to save typing in interactive sessions.
 
+If the module name is followed by :keyword:`as`, then the name
+following :keyword:`as` is bound directly to the imported module.
+
+::
+
+   >>> import fibo as fib
+   >>> fib.fib(500)
+   0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
+
+This is effectively importing the module in the same way that ``import fibo``
+will do, with the only difference of it being available as ``fib``.
+
+It can also be used when utilising :keyword:`from` with similar effects::
+
+   >>> from fibo import fib as fibonacci
+   >>> fibonacci(500)
+   0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
+
+
 .. note::
 
    For efficiency reasons, each module is only imported once per interpreter
@@ -358,7 +377,7 @@
 named ``B`` in a package named ``A``.  Just like the use of modules saves the
 authors of different modules from having to worry about each other's global
 variable names, the use of dotted module names saves the authors of multi-module
-packages like NumPy or the Python Imaging Library from having to worry about
+packages like NumPy or Pillow from having to worry about
 each other's module names.
 
 Suppose you want to design a collection of modules (a "package") for the uniform
diff --git a/Doc/tutorial/stdlib2.rst b/Doc/tutorial/stdlib2.rst
index 50b74d1..22c2a4f 100644
--- a/Doc/tutorial/stdlib2.rst
+++ b/Doc/tutorial/stdlib2.rst
@@ -1,8 +1,8 @@
 .. _tut-brieftourtwo:
 
-*********************************************
-Brief Tour of the Standard Library -- Part II
-*********************************************
+**********************************************
+Brief Tour of the Standard Library --- Part II
+**********************************************
 
 This second tour covers more advanced modules that support professional
 programming needs.  These modules rarely occur in small scripts.
diff --git a/Doc/tutorial/whatnow.rst b/Doc/tutorial/whatnow.rst
index 89dfa6a..f6ce4f4 100644
--- a/Doc/tutorial/whatnow.rst
+++ b/Doc/tutorial/whatnow.rst
@@ -38,7 +38,7 @@
 
 * https://docs.python.org:  Fast access to Python's  documentation.
 
-* https://pypi.python.org/pypi: The Python Package Index, previously also nicknamed
+* https://pypi.org: The Python Package Index, previously also nicknamed
   the Cheese Shop, is an index of user-created Python modules that are available
   for download.  Once you begin releasing code, you can register it here so that
   others can find it.
diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst
index c6b372b..c27ec4f 100644
--- a/Doc/using/cmdline.rst
+++ b/Doc/using/cmdline.rst
@@ -24,7 +24,7 @@
 
 When invoking Python, you may specify any of these options::
 
-    python [-BdEiOQsRStuUvVWxX3?] [-c command | -m module-name | script | - ] [args]
+    python [-bBdEiOQsRStuUvVWxX3?] [-c command | -m module-name | script | - ] [args]
 
 The most common use case is, of course, a simple invocation of a script::
 
@@ -191,6 +191,19 @@
 Miscellaneous options
 ~~~~~~~~~~~~~~~~~~~~~
 
+.. cmdoption:: -b
+
+   Issue a warning when comparing :class:`unicode` with :class:`bytearray`.
+   Issue an error when the option is given twice (:option:`!-bb`).
+
+   Note that, unlike the corresponding Python 3.x flag, this will **not** emit
+   warnings for comparisons between :class:`str` and :class:`unicode`.
+   Instead, the ``str`` instance will be implicitly decoded to ``unicode`` and
+   Unicode comparison used.
+
+   .. versionadded:: 2.6
+
+
 .. cmdoption:: -B
 
    If given, Python won't try to write ``.pyc`` or ``.pyo`` files on the
@@ -398,16 +411,16 @@
    Skip the first line of the source, allowing use of non-Unix forms of
    ``#!cmd``.  This is intended for a DOS specific hack only.
 
-   .. note:: The line numbers in error messages will be off by one.
-
 .. cmdoption:: -3
 
    Warn about Python 3.x possible incompatibilities by emitting a
    :exc:`DeprecationWarning` for features that are removed or significantly
-   changed in Python 3.
+   changed in Python 3 and can't be detected using static code analysis.
 
    .. versionadded:: 2.6
 
+   See :doc:`/howto/pyporting` for more details.
+
 Options you shouldn't use
 ~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -648,3 +661,17 @@
 
    If set, Python will print memory allocation statistics every time a new
    object arena is created, and on shutdown.
+
+.. envvar:: PYTHONSHOWALLOCCOUNT
+
+   If set and Python was compiled with ``COUNT_ALLOCS`` defined, Python will
+   dump allocations counts into stderr on shutdown.
+
+   .. versionadded:: 2.7.15
+
+.. envvar:: PYTHONSHOWREFCOUNT
+
+   If set, Python will print the total reference count when the program
+   finishes or after each statement in the interactive interpreter.
+
+   .. versionadded:: 2.7.15
diff --git a/Doc/using/index.rst b/Doc/using/index.rst
index 1201153..96bd4b0 100644
--- a/Doc/using/index.rst
+++ b/Doc/using/index.rst
@@ -6,7 +6,7 @@
 
 
 This part of the documentation is devoted to general information on the setup
-of the Python environment on different platform, the invocation of the
+of the Python environment on different platforms, the invocation of the
 interpreter and things that make working with Python easier.
 
 
diff --git a/Doc/using/unix.rst b/Doc/using/unix.rst
index dd754a6..7719baa 100644
--- a/Doc/using/unix.rst
+++ b/Doc/using/unix.rst
@@ -41,9 +41,11 @@
 
 * FreeBSD users, to add the package use::
 
-     pkg_add -r python
+     pkg install python3
 
-* OpenBSD users use::
+* OpenBSD users, to add the package use::
+
+     pkg_add -r python
 
      pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/<insert your architecture here>/python-<version>.tgz
 
@@ -136,17 +138,12 @@
 To use shell commands in your Python scripts, look at the :mod:`subprocess` module.
 
 
-Editors
-=======
+Editors and IDEs
+================
 
-Vim and Emacs are excellent editors which support Python very well.  For more
-information on how to code in Python in these editors, look at:
+There are a number of IDEs that support Python programming language.
+Many editors and IDEs provide syntax highlighting, debugging tools, and PEP-8 checks.
 
-* http://www.vim.org/scripts/script.php?script_id=790
-* https://sourceforge.net/projects/python-mode
-
-Geany is an excellent IDE with support for a lot of languages. For more
-information, read: https://www.geany.org/
-
-Komodo edit is another extremely good IDE.  It also has support for a lot of
-languages. For more information, read https://komodoide.com/.
+Please go to `Python Editors <https://wiki.python.org/moin/PythonEditors>`_ and
+`Integrated Development Environments <https://wiki.python.org/moin/IntegratedDevelopmentEnvironments>`_
+for a comprehensive list.
\ No newline at end of file
diff --git a/Doc/using/windows.rst b/Doc/using/windows.rst
index f597476..778b884 100644
--- a/Doc/using/windows.rst
+++ b/Doc/using/windows.rst
@@ -242,7 +242,7 @@
 PyWin32
 -------
 
-The `PyWin32 <https://pypi.python.org/pypi/pywin32>`_ module by Mark Hammond
+The `PyWin32 <https://pypi.org/project/pywin32>`_ module by Mark Hammond
 is a collection of modules for advanced Windows-specific support.  This includes
 utilities for:
 
diff --git a/Doc/whatsnew/2.0.rst b/Doc/whatsnew/2.0.rst
index 6d3f56e..a35728a 100644
--- a/Doc/whatsnew/2.0.rst
+++ b/Doc/whatsnew/2.0.rst
@@ -145,8 +145,8 @@
 8-bit number used by ASCII, meaning that 65,536 distinct characters can be
 supported.
 
-The final interface for Unicode support was arrived at through countless often-
-stormy discussions on the python-dev mailing list, and mostly implemented by
+The final interface for Unicode support was arrived at through countless
+often-stormy discussions on the python-dev mailing list, and mostly implemented by
 Marc-André Lemburg, based on a Unicode string type implementation by Fredrik
 Lundh.  A detailed explanation of the interface was written up as :pep:`100`,
 "Python Unicode Integration". This article will simply cover the most
@@ -166,7 +166,7 @@
 registering new encodings that are then available throughout a Python program.
 If an encoding isn't specified, the default encoding is usually 7-bit ASCII,
 though it can be changed for your Python installation by calling the
-:func:`sys.setdefaultencoding(encoding)` function in a customised version of
+``sys.setdefaultencoding(encoding)`` function in a customised version of
 :file:`site.py`.
 
 Combining 8-bit and Unicode strings always coerces to Unicode, using the default
@@ -203,7 +203,7 @@
 
 The :mod:`codecs` module contains functions to look up existing encodings and
 register new ones.  Unless you want to implement a new encoding, you'll most
-often use the :func:`codecs.lookup(encoding)` function, which returns a
+often use the ``codecs.lookup(encoding)`` function, which returns a
 4-element tuple: ``(encode_func, decode_func, stream_reader, stream_writer)``.
 
 * *encode_func* is a function that takes a Unicode string, and returns a 2-tuple
@@ -600,7 +600,7 @@
 Changes to Built-in Functions
 -----------------------------
 
-A new built-in, :func:`zip(seq1, seq2, ...)`, has been added.  :func:`zip`
+A new built-in, ``zip(seq1, seq2, ...)``, has been added.  :func:`zip`
 returns a list of tuples where each tuple contains the i-th element from each of
 the argument sequences.  The difference between :func:`zip` and ``map(None,
 seq1, seq2)`` is that :func:`map` pads the sequences with ``None`` if the
@@ -619,7 +619,7 @@
 would be ``(2, 0, 1, 'beta', 1)``. *level* is a string such as ``"alpha"``,
 ``"beta"``, or ``"final"`` for a final release.
 
-Dictionaries have an odd new method, :meth:`setdefault(key, default)`, which
+Dictionaries have an odd new method, ``setdefault(key, default)``, which
 behaves similarly to the existing :meth:`get` method.  However, if the key is
 missing, :meth:`setdefault` both returns the value of *default* as :meth:`get`
 would do, and also inserts it into the dictionary as the value for *key*.  Thus,
@@ -885,8 +885,8 @@
 API for XML) provides an event-driven interface with some similarities to
 :mod:`xmllib`, and the DOM (Document Object Model) provides a tree-based
 interface, transforming an XML document into a tree of nodes that can be
-traversed and modified.  Python 2.0 includes a SAX2 interface and a stripped-
-down DOM interface as part of the :mod:`xml` package. Here we will give a brief
+traversed and modified.  Python 2.0 includes a SAX2 interface and a stripped-down
+DOM interface as part of the :mod:`xml` package. Here we will give a brief
 overview of these new interfaces; consult the Python documentation or the source
 code for complete details. The Python XML SIG is also working on improved
 documentation.
@@ -1038,7 +1038,7 @@
 is an implementation of the Secure Socket Layer, which encrypts the data being
 sent over a socket.  When compiling Python, you can edit :file:`Modules/Setup`
 to include SSL support, which adds an additional function to the :mod:`socket`
-module: :func:`socket.ssl(socket, keyfile, certfile)`, which takes a socket
+module: ``socket.ssl(socket, keyfile, certfile)``, which takes a socket
 object and returns an SSL socket.  The :mod:`httplib` and :mod:`urllib` modules
 were also changed to support ``https://`` URLs, though no one has implemented
 FTP or SMTP over SSL.
diff --git a/Doc/whatsnew/2.1.rst b/Doc/whatsnew/2.1.rst
index f8bb11a..f13d55b 100644
--- a/Doc/whatsnew/2.1.rst
+++ b/Doc/whatsnew/2.1.rst
@@ -159,8 +159,8 @@
 PEP 207: Rich Comparisons
 =========================
 
-In earlier versions, Python's support for implementing comparisons on user-
-defined classes and extension types was quite simple. Classes could implement a
+In earlier versions, Python's support for implementing comparisons on user-defined
+classes and extension types was quite simple. Classes could implement a
 :meth:`__cmp__` method that was given two instances of a class, and could only
 return 0 if they were equal or +1 or -1 if they weren't; the method couldn't
 raise an exception or return anything other than a Boolean value.  Users of
@@ -204,7 +204,7 @@
 list, or any other Python object.  Alternatively they can raise an exception if
 the comparison is impossible, inconsistent, or otherwise meaningless.
 
-The built-in :func:`cmp(A,B)` function can use the rich comparison machinery,
+The built-in ``cmp(A,B)`` function can use the rich comparison machinery,
 and now accepts an optional argument specifying which comparison operation to
 use; this is given as one of the strings ``"<"``, ``"<="``, ``">"``, ``">="``,
 ``"=="``, or ``"!="``.  If called without the optional third argument,
@@ -350,7 +350,7 @@
 and another being circular references in data structures such as trees.
 
 For example, consider a memoizing function that caches the results of another
-function :func:`f(x)` by storing the function's argument and its result in a
+function ``f(x)`` by storing the function's argument and its result in a
 dictionary::
 
    _cache = {}
@@ -465,11 +465,11 @@
 distinguish the filenames ``FILE.PY`` and ``file.py``, even though they do store
 the file's name  in its original case (they're case-preserving, too).
 
-In Python 2.1, the :keyword:`import` statement will work to simulate case-
-sensitivity on case-insensitive platforms.  Python will now search for the first
+In Python 2.1, the :keyword:`import` statement will work to simulate case-sensitivity
+on case-insensitive platforms.  Python will now search for the first
 case-sensitive match by default, raising an :exc:`ImportError` if no such file
-is found, so ``import file`` will not import a module named ``FILE.PY``.  Case-
-insensitive matching can be requested by setting the :envvar:`PYTHONCASEOK`
+is found, so ``import file`` will not import a module named ``FILE.PY``.
+Case-insensitive matching can be requested by setting the :envvar:`PYTHONCASEOK`
 environment variable before starting the Python interpreter.
 
 .. ======================================================================
@@ -481,8 +481,8 @@
 When using the Python interpreter interactively, the output of commands is
 displayed using the built-in :func:`repr` function. In Python 2.1, the variable
 :func:`sys.displayhook` can be set to a callable object which will be called
-instead of :func:`repr`. For example, you can set it to a special pretty-
-printing function::
+instead of :func:`repr`. For example, you can set it to a special
+pretty-printing function::
 
    >>> # Create a recursive data structure
    ... L = [1,2,3]
@@ -656,7 +656,7 @@
   use :mod:`ftplib` to retrieve files and then don't work from behind a firewall.
   It's deemed unlikely that this will cause problems for anyone, because Netscape
   defaults to passive mode and few people complain, but if passive mode is
-  unsuitable for your application or network setup, call :meth:`set_pasv(0)` on
+  unsuitable for your application or network setup, call ``set_pasv(0)`` on
   FTP objects to disable passive mode.
 
 * Support for raw socket access has been added to the :mod:`socket` module,
@@ -666,7 +666,7 @@
   for displaying timing profiles for Python programs, invoked when the module is
   run as a script.  Contributed by  Eric S. Raymond.
 
-* A new implementation-dependent function, :func:`sys._getframe([depth])`, has
+* A new implementation-dependent function, ``sys._getframe([depth])``, has
   been added to return a given frame object from the current call stack.
   :func:`sys._getframe` returns the frame at the top of the call stack;  if the
   optional integer argument *depth* is supplied, the function returns the frame
diff --git a/Doc/whatsnew/2.2.rst b/Doc/whatsnew/2.2.rst
index dfb1460..b231967 100644
--- a/Doc/whatsnew/2.2.rst
+++ b/Doc/whatsnew/2.2.rst
@@ -173,12 +173,12 @@
 
 * :attr:`__doc__` is the attribute's docstring.
 
-* :meth:`__get__(object)` is a method that retrieves the attribute value from
+* ``__get__(object)`` is a method that retrieves the attribute value from
   *object*.
 
-* :meth:`__set__(object, value)` sets the attribute on *object* to *value*.
+* ``__set__(object, value)`` sets the attribute on *object* to *value*.
 
-* :meth:`__delete__(object, value)` deletes the *value*  attribute of *object*.
+* ``__delete__(object, value)`` deletes the *value*  attribute of *object*.
 
 For example, when you write ``obj.x``, the steps that Python actually performs
 are::
@@ -288,7 +288,7 @@
 which is the behaviour we're after.  This lookup rule is the same as the one
 followed by Common Lisp.  A new built-in function, :func:`super`, provides a way
 to get at a class's superclasses without having to reimplement Python's
-algorithm. The most commonly used form will be  :func:`super(class, obj)`, which
+algorithm. The most commonly used form will be  ``super(class, obj)``, which
 returns  a bound superclass object (not the actual class object).  This form
 will be used in methods to call a method in the superclass; for example,
 :class:`D`'s :meth:`save` method would look like this::
@@ -301,7 +301,7 @@
            ...
 
 :func:`super` can also return unbound superclass objects when called as
-:func:`super(class)` or :func:`super(class1, class2)`, but this probably won't
+``super(class)`` or ``super(class1, class2)``, but this probably won't
 often be useful.
 
 
@@ -314,13 +314,13 @@
 ``obj.parent`` into a method call such as ``obj.get_parent``.  Python 2.2 adds
 some new ways of controlling attribute access.
 
-First, :meth:`__getattr__(attr_name)` is still supported by new-style classes,
+First, ``__getattr__(attr_name)`` is still supported by new-style classes,
 and nothing about it has changed.  As before, it will be called when an attempt
 is made to access ``obj.foo`` and no attribute named ``foo`` is found in the
 instance's dictionary.
 
 New-style classes also support a new method,
-:meth:`__getattribute__(attr_name)`.  The difference between the two methods is
+``__getattribute__(attr_name)``.  The difference between the two methods is
 that :meth:`__getattribute__` is *always* called whenever any attribute is
 accessed, while the old :meth:`__getattr__` is only called if ``foo`` isn't
 found in the instance's dictionary.
@@ -441,8 +441,8 @@
 
 In Python 2.2, iteration can be implemented separately, and :meth:`__getitem__`
 methods can be limited to classes that really do support random access.  The
-basic idea of iterators is  simple.  A new built-in function, :func:`iter(obj)`
-or ``iter(C, sentinel)``, is used to get an iterator. :func:`iter(obj)` returns
+basic idea of iterators is  simple.  A new built-in function, ``iter(obj)``
+or ``iter(C, sentinel)``, is used to get an iterator. ``iter(obj)`` returns
 an iterator for the object *obj*, while ``iter(C, sentinel)`` returns an
 iterator that will invoke the callable object *C* until it returns *sentinel* to
 signal that the iterator is done.
@@ -793,7 +793,7 @@
 
 Another change is simpler to explain. Since their introduction, Unicode strings
 have supported an :meth:`encode` method to convert the string to a selected
-encoding such as UTF-8 or Latin-1.  A symmetric :meth:`decode([*encoding*])`
+encoding such as UTF-8 or Latin-1.  A symmetric ``decode([*encoding*])``
 method has been added to 8-bit strings (though not to Unicode strings) in 2.2.
 :meth:`decode` assumes that the string is in the specified encoding and decodes
 it, returning whatever is returned by the codec.
@@ -962,8 +962,8 @@
 * The new :mod:`hmac` module implements the HMAC algorithm described by
   :rfc:`2104`. (Contributed by Gerhard Häring.)
 
-* Several functions that originally returned lengthy tuples now return pseudo-
-  sequences that still behave like tuples but also have mnemonic attributes such
+* Several functions that originally returned lengthy tuples now return
+  pseudo-sequences that still behave like tuples but also have mnemonic attributes such
   as memberst_mtime or :attr:`tm_year`. The enhanced functions include
   :func:`stat`, :func:`fstat`, :func:`statvfs`, and :func:`fstatvfs` in the
   :mod:`os` module, and :func:`localtime`, :func:`gmtime`, and :func:`strptime` in
@@ -1141,8 +1141,8 @@
 
   The most significant change is the ability to build Python as a framework,
   enabled by supplying the :option:`!--enable-framework` option to the configure
-  script when compiling Python.  According to Jack Jansen, "This installs a self-
-  contained Python installation plus the OS X framework "glue" into
+  script when compiling Python.  According to Jack Jansen, "This installs a
+  self-contained Python installation plus the OS X framework "glue" into
   :file:`/Library/Frameworks/Python.framework` (or another location of choice).
   For now there is little immediate added benefit to this (actually, there is the
   disadvantage that you have to change your PATH to be able to find Python), but
@@ -1203,7 +1203,7 @@
   to an MBCS encoded string, as used by the Microsoft file APIs.  As MBCS is
   explicitly used by the file APIs, Python's choice of ASCII as the default
   encoding turns out to be an annoyance.  On Unix, the locale's character set is
-  used if :func:`locale.nl_langinfo(CODESET)` is available.  (Windows support was
+  used if ``locale.nl_langinfo(CODESET)`` is available.  (Windows support was
   contributed by Mark Hammond with assistance from Marc-André Lemburg. Unix
   support was added by Martin von Löwis.)
 
diff --git a/Doc/whatsnew/2.3.rst b/Doc/whatsnew/2.3.rst
index 13c6960..1ef2cb5 100644
--- a/Doc/whatsnew/2.3.rst
+++ b/Doc/whatsnew/2.3.rst
@@ -86,8 +86,8 @@
 It's also possible to take the symmetric difference of two sets.  This is the
 set of all elements in the union that aren't in the intersection.  Another way
 of putting it is that the symmetric difference contains all elements that are in
-exactly one set.  Again, there's an alternative notation (``^``), and an in-
-place version with the ungainly name :meth:`symmetric_difference_update`. ::
+exactly one set.  Again, there's an alternative notation (``^``), and an
+in-place version with the ungainly name :meth:`symmetric_difference_update`. ::
 
    >>> S1 = sets.Set([1,2,3,4])
    >>> S2 = sets.Set([3,4,5,6])
@@ -288,8 +288,8 @@
 PEP 273: Importing Modules from ZIP Archives
 ============================================
 
-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
+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:
 
@@ -375,8 +375,8 @@
 ==================================
 
 The three major operating systems used today are Microsoft Windows, Apple's
-Macintosh OS, and the various Unix derivatives.  A minor irritation of cross-
-platform work  is that these three platforms all use different characters to
+Macintosh OS, and the various Unix derivatives.  A minor irritation of
+cross-platform work  is that these three platforms all use different characters to
 mark the ends of lines in text files.  Unix uses the linefeed (ASCII character
 10), MacOS uses the carriage return (ASCII character 13), and Windows uses a
 two-character sequence of a carriage return plus a newline.
@@ -506,8 +506,8 @@
    ZeroDivisionError: integer division or modulo by zero
 
 Slightly more advanced programs will use a logger other than the root logger.
-The :func:`getLogger(name)` function is used to get a particular log, creating
-it if it doesn't exist yet. :func:`getLogger(None)` returns the root logger. ::
+The ``getLogger(name)`` function is used to get a particular log, creating
+it if it doesn't exist yet. ``getLogger(None)`` returns the root logger. ::
 
    log = logging.getLogger('server')
     ...
@@ -659,7 +659,7 @@
 Running ``python setup.py register`` will collect the metadata describing a
 package, such as its name, version, maintainer, description, &c., and send it to
 a central catalog server.  The resulting catalog is available from
-https://pypi.python.org/pypi.
+https://pypi.org.
 
 To make the catalog a bit more useful, a new optional *classifiers* keyword
 argument has been added to the Distutils :func:`setup` function.  A list of
@@ -726,10 +726,10 @@
   objects to it.  Additional built-in and frozen modules can be imported by an
   object added to this list.
 
-Importer objects must have a single method, :meth:`find_module(fullname,
-path=None)`.  *fullname* will be a module or package name, e.g. ``string`` or
+Importer objects must have a single method, ``find_module(fullname,
+path=None)``.  *fullname* will be a module or package name, e.g. ``string`` or
 ``distutils.core``.  :meth:`find_module` must return a loader object that has a
-single method, :meth:`load_module(fullname)`, that creates and returns the
+single method, ``load_module(fullname)``, that creates and returns the
 corresponding module object.
 
 Pseudo-code for Python's new import logic, therefore, looks something like this
@@ -937,7 +937,7 @@
    [0, 2, 4]
 
 To simplify implementing sequences that support extended slicing, slice objects
-now have a method :meth:`indices(length)` which, given the length of a sequence,
+now have a method ``indices(length)`` which, given the length of a sequence,
 returns a ``(start, stop, step)`` tuple that can be passed directly to
 :func:`range`. :meth:`indices` handles omitted and out-of-bounds indices in a
 manner consistent with regular slices (and this innocuous phrase hides a welter
@@ -986,7 +986,7 @@
 * Built-in types now support the extended slicing syntax, as described in
   section :ref:`section-slices` of this document.
 
-* A new built-in function, :func:`sum(iterable, start=0)`,  adds up the numeric
+* A new built-in function, ``sum(iterable, start=0)``,  adds up the numeric
   items in the iterable object and returns their sum.  :func:`sum` only accepts
   numbers, meaning that you can't use it to concatenate a bunch of strings.
   (Contributed by Alex Martelli.)
@@ -1000,7 +1000,7 @@
   its index, now takes optional  *start* and *stop* arguments to limit the search
   to  only part of the list.
 
-* Dictionaries have a new method, :meth:`pop(key[, *default*])`, that returns
+* Dictionaries have a new method, ``pop(key[, *default*])``, that returns
   the value corresponding to *key* and removes that key/value pair from the
   dictionary.  If the requested key isn't present in the dictionary, *default* is
   returned if it's specified and :exc:`KeyError` raised if it isn't. ::
@@ -1022,7 +1022,7 @@
      {}
      >>>
 
-  There's also a new class method,  :meth:`dict.fromkeys(iterable, value)`, that
+  There's also a new class method,  ``dict.fromkeys(iterable, value)``, that
   creates a dictionary with keys taken from the supplied iterator *iterable* and
   all values set to *value*, defaulting to ``None``.
 
@@ -1095,7 +1095,7 @@
   100 bytecodes, speeding up single-threaded applications by reducing the
   switching overhead.  Some multithreaded applications may suffer slower response
   time, but that's easily fixed by setting the limit back to a lower number using
-  :func:`sys.setcheckinterval(N)`. The limit can be retrieved with the new
+  ``sys.setcheckinterval(N)``. The limit can be retrieved with the new
   :func:`sys.getcheckinterval` function.
 
 * One minor but far-reaching change is that the names of extension types defined
@@ -1274,10 +1274,10 @@
 
 * Previously the :mod:`doctest` module would only search the docstrings of
   public methods and functions for test cases, but it now also examines private
-  ones as well.  The :func:`DocTestSuite(` function creates a
+  ones as well.  The :func:`DocTestSuite` function creates a
   :class:`unittest.TestSuite` object from a set of :mod:`doctest` tests.
 
-* The new :func:`gc.get_referents(object)` function returns a list of all the
+* The new ``gc.get_referents(object)`` function returns a list of all the
   objects referenced by *object*.
 
 * The :mod:`getopt` module gained a new function, :func:`gnu_getopt`, that
@@ -1349,8 +1349,8 @@
   documentation for details.
   (Contributed by Raymond Hettinger.)
 
-* Two new functions in the :mod:`math` module, :func:`degrees(rads)` and
-  :func:`radians(degs)`, convert between radians and degrees.  Other functions in
+* Two new functions in the :mod:`math` module, ``degrees(rads)`` and
+  ``radians(degs)``, convert between radians and degrees.  Other functions in
   the :mod:`math` module such as :func:`math.sin` and :func:`math.cos` have always
   required input values measured in radians.  Also, an optional *base* argument
   was added to :func:`math.log` to make it easier to compute logarithms for bases
@@ -1407,7 +1407,7 @@
   and therefore faster performance.  Setting the parser object's
   :attr:`buffer_text` attribute to :const:`True` will enable buffering.
 
-* The :func:`sample(population, k)` function was added to the :mod:`random`
+* The ``sample(population, k)`` function was added to the :mod:`random`
   module.  *population* is a sequence or :class:`xrange` object containing the
   elements of a population, and :func:`sample` chooses *k* elements from the
   population without replacing chosen elements.  *k* can be any value up to
@@ -1453,7 +1453,7 @@
   encryption is not believed to be secure.  If you need encryption, use one of the
   several AES Python modules that are available separately.
 
-* The :mod:`shutil` module gained a :func:`move(src, dest)` function that
+* The :mod:`shutil` module gained a ``move(src, dest)`` function that
   recursively moves a file or directory to a new location.
 
 * Support for more advanced POSIX signal handling was added to the :mod:`signal`
@@ -1461,7 +1461,7 @@
   platforms.
 
 * The :mod:`socket` module now supports timeouts.  You can call the
-  :meth:`settimeout(t)` method on a socket object to set a timeout of *t* seconds.
+  ``settimeout(t)`` method on a socket object to set a timeout of *t* seconds.
   Subsequent socket operations that take longer than *t* seconds to complete will
   abort and raise a :exc:`socket.timeout` exception.
 
@@ -1482,9 +1482,9 @@
   :program:`tar`\ -format archive files. (Contributed by Lars Gustäbel.)
 
 * The new :mod:`textwrap` module contains functions for wrapping strings
-  containing paragraphs of text.  The :func:`wrap(text, width)` function takes a
+  containing paragraphs of text.  The ``wrap(text, width)`` function takes a
   string and returns a list containing the text split into lines of no more than
-  the chosen width.  The :func:`fill(text, width)` function returns a single
+  the chosen width.  The ``fill(text, width)`` function returns a single
   string, reformatted to fit into lines no longer than the chosen width. (As you
   can guess, :func:`fill` is built on top of :func:`wrap`.  For example::
 
@@ -1909,7 +1909,7 @@
   short int`,  ``I`` for :c:type:`unsigned int`,  and ``K`` for :c:type:`unsigned
   long long`.
 
-* A new function, :c:func:`PyObject_DelItemString(mapping, char \*key)` was added
+* A new function, ``PyObject_DelItemString(mapping, char *key)`` was added
   as shorthand for ``PyObject_DelItem(mapping, PyString_New(key))``.
 
 * File objects now manage their internal string buffer differently, increasing
diff --git a/Doc/whatsnew/2.4.rst b/Doc/whatsnew/2.4.rst
index d003cdb..421dc0c 100644
--- a/Doc/whatsnew/2.4.rst
+++ b/Doc/whatsnew/2.4.rst
@@ -37,7 +37,7 @@
 
 Python 2.3 introduced the :mod:`sets` module.  C implementations of set data
 types have now been added to the Python core as two new built-in types,
-:func:`set(iterable)` and :func:`frozenset(iterable)`.  They provide high speed
+``set(iterable)`` and ``frozenset(iterable)``.  They provide high speed
 operations for membership testing, for eliminating duplicates from sequences,
 and for mathematical operations like unions, intersections, differences, and
 symmetric differences. ::
@@ -346,7 +346,7 @@
 PEP 322: Reverse Iteration
 ==========================
 
-A new built-in function, :func:`reversed(seq)`, takes a sequence and returns an
+A new built-in function, ``reversed(seq)``, takes a sequence and returns an
 iterator that loops over the elements of the sequence  in reverse order.   ::
 
    >>> for i in reversed(xrange(1,4)):
@@ -384,7 +384,7 @@
 
 The standard library provides a number of ways to execute a subprocess, offering
 different features and different levels of complexity.
-:func:`os.system(command)` is easy to use, but slow (it runs a shell process
+``os.system(command)`` is easy to use, but slow (it runs a shell process
 which executes the command) and dangerous (you have to be careful about escaping
 the shell's metacharacters).  The :mod:`popen2` module offers classes that can
 capture standard output and standard error from the subprocess, but the naming
@@ -431,8 +431,8 @@
 
 Once you've created the :class:`Popen` instance,  you can call its :meth:`wait`
 method to pause until the subprocess has exited, :meth:`poll` to check if it's
-exited without pausing,  or :meth:`communicate(data)` to send the string *data*
-to the subprocess's standard input.   :meth:`communicate(data)`  then reads any
+exited without pausing,  or ``communicate(data)`` to send the string *data*
+to the subprocess's standard input.   ``communicate(data)``  then reads any
 data that the subprocess has sent to its standard output  or standard error,
 returning a tuple ``(stdout_data, stderr_data)``.
 
@@ -517,8 +517,8 @@
    >>> 1.1
    1.1000000000000001
 
-The inaccuracy isn't always visible when you print the number because the FP-to-
-decimal-string conversion is provided by the C library, and most C libraries try
+The inaccuracy isn't always visible when you print the number because the
+FP-to-decimal-string conversion is provided by the C library, and most C libraries try
 to produce sensible output.  Even if it's not displayed, however, the inaccuracy
 is still there and subsequent operations can magnify the error.
 
@@ -595,8 +595,8 @@
      ...
    decimal.InvalidOperation: x ** (non-integer)
 
-You can combine :class:`Decimal` instances with integers, but not with floating-
-point numbers::
+You can combine :class:`Decimal` instances with integers, but not with
+floating-point numbers::
 
    >>> a + 4
    Decimal("39.72")
@@ -684,8 +684,8 @@
       Raymond Hettinger, Aahz, and Tim Peters.
 
    http://www.lahey.com/float.htm
-      The article uses Fortran code to illustrate many of the problems that floating-
-      point inaccuracy can cause.
+      The article uses Fortran code to illustrate many of the problems that
+      floating-point inaccuracy can cause.
 
    http://speleotrove.com/decimal/
       A description of a decimal-based representation.  This representation is being
@@ -741,18 +741,18 @@
 to the ``'C'`` locale.  Often this was because the code was using the C
 library's :c:func:`atof` function.
 
-Not setting the numeric locale caused trouble for extensions that used third-
-party C libraries, however, because they wouldn't have the correct locale set.
+Not setting the numeric locale caused trouble for extensions that used third-party
+C libraries, however, because they wouldn't have the correct locale set.
 The motivating example was GTK+, whose user interface widgets weren't displaying
 numbers in the current locale.
 
 The solution described in the PEP is to add three new functions to the Python
 API that perform ASCII-only conversions, ignoring the locale setting:
 
-* :c:func:`PyOS_ascii_strtod(str, ptr)`  and :c:func:`PyOS_ascii_atof(str, ptr)`
+* ``PyOS_ascii_strtod(str, ptr)``  and ``PyOS_ascii_atof(str, ptr)``
   both convert a string to a C :c:type:`double`.
 
-* :c:func:`PyOS_ascii_formatd(buffer, buf_len, format, d)` converts a
+* ``PyOS_ascii_formatd(buffer, buf_len, format, d)`` converts a
   :c:type:`double` to an ASCII string.
 
 The code for these functions came from the GLib library
@@ -778,7 +778,7 @@
 * Decorators for functions and methods were added (:pep:`318`).
 
 * Built-in :func:`set` and :func:`frozenset` types were  added (:pep:`218`).
-  Other new built-ins include the :func:`reversed(seq)` function (:pep:`322`).
+  Other new built-ins include the ``reversed(seq)`` function (:pep:`322`).
 
 * Generator expressions were added (:pep:`289`).
 
@@ -857,7 +857,7 @@
 
   (All changes to :meth:`sort` contributed by Raymond Hettinger.)
 
-* There is a new built-in function :func:`sorted(iterable)` that works like the
+* There is a new built-in function ``sorted(iterable)`` that works like the
   in-place :meth:`list.sort` method but can be used in expressions.  The
   differences are:
 
@@ -898,8 +898,8 @@
   For example,  you can now run the Python profiler with ``python -m profile``.
   (Contributed by Nick Coghlan.)
 
-* The :func:`eval(expr, globals, locals)` and :func:`execfile(filename, globals,
-  locals)` functions and the :keyword:`exec` statement now accept any mapping type
+* The ``eval(expr, globals, locals)`` and ``execfile(filename, globals,
+  locals)`` functions and the :keyword:`exec` statement now accept any mapping type
   for the *locals* parameter.  Previously this had to be a regular Python
   dictionary.  (Contributed by Raymond Hettinger.)
 
@@ -918,8 +918,8 @@
 
   (Contributed by Raymond Hettinger.)
 
-* Encountering a failure while importing a module no longer leaves a partially-
-  initialized module object in ``sys.modules``.  The incomplete module object left
+* Encountering a failure while importing a module no longer leaves a partially-initialized
+  module object in ``sys.modules``.  The incomplete module object left
   behind would fool further imports of the same module into succeeding, leading to
   confusing errors.   (Fixed by Tim Peters.)
 
@@ -1028,8 +1028,8 @@
   previous ones left off.  (Implemented by Walter Dörwald.)
 
 * There is a new :mod:`collections` module for  various specialized collection
-  datatypes.   Currently it contains just one type, :class:`deque`,  a double-
-  ended queue that supports efficiently adding and removing elements from either
+  datatypes.  Currently it contains just one type, :class:`deque`, a double-ended
+  queue that supports efficiently adding and removing elements from either
   end::
 
      >>> from collections import deque
@@ -1090,7 +1090,7 @@
   Yves Dionne) and new :meth:`deleteacl` and :meth:`myrights` methods (contributed
   by Arnaud Mazin).
 
-* The :mod:`itertools` module gained a :func:`groupby(iterable[, *func*])`
+* The :mod:`itertools` module gained a ``groupby(iterable[, *func*])``
   function. *iterable* is something that can be iterated over to return a stream
   of elements, and the optional *func* parameter is a function that takes an
   element and returns a key value; if omitted, the key is simply the element
@@ -1139,7 +1139,7 @@
 
   (Contributed by Hye-Shik Chang.)
 
-* :mod:`itertools` also gained a function named :func:`tee(iterator, N)` that
+* :mod:`itertools` also gained a function named ``tee(iterator, N)`` that
   returns *N* independent iterators that replicate *iterator*.  If *N* is omitted,
   the default is 2. ::
 
@@ -1177,7 +1177,7 @@
          level=0,  # Log all messages
          format='%(levelname):%(process):%(thread):%(message)')
 
-  Other additions to the :mod:`logging` package include a :meth:`log(level, msg)`
+  Other additions to the :mod:`logging` package include a ``log(level, msg)``
   convenience method, as well as a :class:`TimedRotatingFileHandler` class that
   rotates its log files at a timed interval.  The module already had
   :class:`RotatingFileHandler`, which rotated logs once the file exceeded a
@@ -1196,7 +1196,7 @@
   group or for a range of groups. (Contributed by Jürgen A. Erhard.)
 
 * Two new functions were added to the :mod:`operator` module,
-  :func:`attrgetter(attr)` and :func:`itemgetter(index)`. Both functions return
+  ``attrgetter(attr)`` and ``itemgetter(index)``. Both functions return
   callables that take a single argument and return the corresponding attribute or
   item; these callables make excellent data extractors when used with :func:`map`
   or :func:`sorted`.  For example::
@@ -1223,14 +1223,14 @@
   replacement for :func:`rfc822.formatdate`.  You may want to write new e-mail
   processing code with this in mind.  (Change implemented by Anthony Baxter.)
 
-* A new :func:`urandom(n)` function was added to the :mod:`os` module, returning
+* A new ``urandom(n)`` function was added to the :mod:`os` module, returning
   a string containing *n* bytes of random data.  This function provides access to
   platform-specific sources of randomness such as :file:`/dev/urandom` on Linux or
   the Windows CryptoAPI.  (Contributed by Trevor Perrin.)
 
-* Another new function: :func:`os.path.lexists(path)`  returns true if the file
+* Another new function: ``os.path.lexists(path)``  returns true if the file
   specified by *path* exists, whether or not it's a symbolic link.  This differs
-  from the existing :func:`os.path.exists(path)` function, which returns false if
+  from the existing ``os.path.exists(path)`` function, which returns false if
   *path* is a symlink that points to a destination that doesn't exist.
   (Contributed by Beni Cherniavsky.)
 
@@ -1243,7 +1243,7 @@
 * The :mod:`profile` module can now profile C extension functions. (Contributed
   by Nick Bastin.)
 
-* The :mod:`random` module has a new method called :meth:`getrandbits(N)` that
+* The :mod:`random` module has a new method called ``getrandbits(N)`` that
   returns a long integer *N* bits in length.  The existing :meth:`randrange`
   method now uses :meth:`getrandbits` where appropriate, making generation of
   arbitrarily large random numbers more efficient.  (Contributed by Raymond
@@ -1272,7 +1272,7 @@
   this, but 2.4 will raise a :exc:`RuntimeError` exception.
 
 * Two new functions were added to the :mod:`socket` module. :func:`socketpair`
-  returns a pair of connected sockets and :func:`getservbyport(port)` looks up the
+  returns a pair of connected sockets and ``getservbyport(port)`` looks up the
   service name for a given port number. (Contributed by Dave Cole and Barry
   Warsaw.)
 
@@ -1456,11 +1456,11 @@
 * Another new macro, :c:macro:`Py_CLEAR(obj)`,  decreases the reference count of
   *obj* and sets *obj* to the null pointer.  (Contributed by Jim Fulton.)
 
-* A new function, :c:func:`PyTuple_Pack(N, obj1, obj2, ..., objN)`, constructs
+* A new function, ``PyTuple_Pack(N, obj1, obj2, ..., objN)``, constructs
   tuples from a variable length argument list of Python objects.  (Contributed by
   Raymond Hettinger.)
 
-* A new function, :c:func:`PyDict_Contains(d, k)`, implements fast dictionary
+* A new function, ``PyDict_Contains(d, k)``, implements fast dictionary
   lookups without masking exceptions raised during the look-up process.
   (Contributed by Raymond Hettinger.)
 
@@ -1485,8 +1485,8 @@
   intended as an aid to people developing the Python core.  Providing
   :option:`!--enable-profiling` to the :program:`configure` script will let you
   profile the interpreter with :program:`gprof`, and providing the
-  :option:`!--with-tsc` switch enables profiling using the Pentium's Time-Stamp-
-  Counter register.  Note that the :option:`!--with-tsc` switch is slightly
+  :option:`!--with-tsc` switch enables profiling using the Pentium's
+  Time-Stamp-Counter register.  Note that the :option:`!--with-tsc` switch is slightly
   misnamed, because the profiling feature also works on the PowerPC platform,
   though that processor architecture doesn't call that register "the TSC
   register".  (Contributed by Jeremy Hylton.)
@@ -1540,8 +1540,8 @@
 
 * The :mod:`tarfile` module now generates GNU-format tar files by default.
 
-* Encountering a failure while importing a module no longer leaves a partially-
-  initialized module object in ``sys.modules``.
+* Encountering a failure while importing a module no longer leaves a
+  partially-initialized module object in ``sys.modules``.
 
 * :const:`None` is now a constant; code that binds a new value to  the name
   ``None`` is now a syntax error.
diff --git a/Doc/whatsnew/2.5.rst b/Doc/whatsnew/2.5.rst
index c1b26f4..6400bb1 100644
--- a/Doc/whatsnew/2.5.rst
+++ b/Doc/whatsnew/2.5.rst
@@ -157,8 +157,8 @@
    server_log = functools.partial(log, subsystem='server')
    server_log('Unable to open socket')
 
-Here's another example, from a program that uses PyGTK.  Here a context-
-sensitive pop-up menu is being constructed dynamically.  The callback provided
+Here's another example, from a program that uses PyGTK.  Here a context-sensitive
+pop-up menu is being constructed dynamically.  The callback provided
 for the menu option is a partially applied version of the :meth:`open_item`
 method, where the first argument has been provided. ::
 
@@ -171,8 +171,8 @@
            popup_menu.append( ("Open", open_func, 1) )
 
 Another function in the :mod:`functools` module is the
-:func:`update_wrapper(wrapper, wrapped)` function that helps you write well-
-behaved decorators.  :func:`update_wrapper` copies the name, module, and
+``update_wrapper(wrapper, wrapped)`` function that helps you write
+well-behaved decorators.  :func:`update_wrapper` copies the name, module, and
 docstring attribute to a wrapper function so that tracebacks inside the wrapped
 function are easier to understand.  For example, you might write::
 
@@ -229,7 +229,7 @@
         )
 
 Another new enhancement to the Python package index at
-https://pypi.python.org is storing source and binary archives for a
+https://pypi.org is storing source and binary archives for a
 package.  The new :command:`upload` Distutils command will upload a package to
 the repository.
 
@@ -297,8 +297,8 @@
 added in a future version of Python.
 
 In Python 2.5, you can switch :keyword:`import`'s behaviour to  absolute imports
-using a ``from __future__ import absolute_import`` directive.  This absolute-
-import behaviour will become the default in a future version (probably Python
+using a ``from __future__ import absolute_import`` directive.  This absolute-import
+behaviour will become the default in a future version (probably Python
 2.7).  Once absolute imports  are the default, ``import string`` will always
 find the standard library's version. It's suggested that users should begin
 using absolute imports as much as possible, so it's preferable to begin writing
@@ -454,7 +454,7 @@
 ``val = yield i`` but have to use parentheses when there's an operation, as in
 ``val = (yield i) + 12``.)
 
-Values are sent into a generator by calling its :meth:`send(value)` method.  The
+Values are sent into a generator by calling its ``send(value)`` method.  The
 generator's code is then resumed and the :keyword:`yield` expression returns the
 specified *value*.  If the regular :meth:`next` method is called, the
 :keyword:`yield` returns :const:`None`.
@@ -496,7 +496,7 @@
 
 In addition to :meth:`send`, there are two other new methods on generators:
 
-* :meth:`throw(type, value=None, traceback=None)` is used to raise an exception
+* ``throw(type, value=None, traceback=None)`` is used to raise an exception
   inside the generator; the exception is raised by the :keyword:`yield` expression
   where the generator's execution is paused.
 
@@ -602,8 +602,8 @@
            ... more processing code ...
 
 After this statement has executed, the file object in *f* will have been
-automatically closed, even if the :keyword:`for` loop raised an exception part-
-way through the block.
+automatically closed, even if the :keyword:`for` loop raised an exception
+part-way through the block.
 
 .. note::
 
@@ -660,7 +660,7 @@
 
 * The code in *BLOCK* is executed.
 
-* If *BLOCK* raises an exception, the :meth:`__exit__(type, value, traceback)`
+* If *BLOCK* raises an exception, the ``__exit__(type, value, traceback)``
   is called with the exception details, the same values returned by
   :func:`sys.exc_info`.  The method's return value controls whether the exception
   is re-raised: any false value re-raises the exception, and ``True`` will result
@@ -773,7 +773,7 @@
    with db_transaction(db) as cursor:
        ...
 
-The :mod:`contextlib` module also has a :func:`nested(mgr1, mgr2, ...)` function
+The :mod:`contextlib` module also has a ``nested(mgr1, mgr2, ...)`` function
 that combines a number of context managers so you don't need to write nested
 ':keyword:`with`' statements.  In this example, the single ':keyword:`with`'
 statement both starts a database transaction and acquires a thread lock::
@@ -782,7 +782,7 @@
    with nested (db_transaction(db), lock) as (cursor, locked):
        ...
 
-Finally, the :func:`closing(object)` function returns *object* so that it can be
+Finally, the ``closing(object)`` function returns *object* so that it can be
 bound to a variable, and calls ``object.close`` at the end of the block. ::
 
    import urllib, sys
@@ -955,7 +955,7 @@
 
 A corresponding :attr:`nb_index` slot was added to the C-level
 :c:type:`PyNumberMethods` structure to let C extensions implement this protocol.
-:c:func:`PyNumber_Index(obj)` can be used in extension code to call the
+``PyNumber_Index(obj)`` can be used in extension code to call the
 :meth:`__index__` function and retrieve its result.
 
 
@@ -976,7 +976,7 @@
 
 * The :class:`dict` type has a new hook for letting subclasses provide a default
   value when a key isn't contained in the dictionary. When a key isn't found, the
-  dictionary's :meth:`__missing__(key)` method will be called.  This hook is used
+  dictionary's ``__missing__(key)`` method will be called.  This hook is used
   to implement the new :class:`defaultdict` class in the :mod:`collections`
   module.  The following example defines a dictionary  that returns zero for any
   missing key::
@@ -989,16 +989,16 @@
      print d[1], d[2]   # Prints 1, 2
      print d[3], d[4]   # Prints 0, 0
 
-* Both 8-bit and Unicode strings have new :meth:`partition(sep)`  and
-  :meth:`rpartition(sep)` methods that simplify a common use case.
+* Both 8-bit and Unicode strings have new ``partition(sep)``  and
+  ``rpartition(sep)`` methods that simplify a common use case.
 
-  The :meth:`find(S)` method is often used to get an index which is then used to
+  The ``find(S)`` method is often used to get an index which is then used to
   slice the string and obtain the pieces that are before and after the separator.
-  :meth:`partition(sep)` condenses this pattern into a single method call that
+  ``partition(sep)`` condenses this pattern into a single method call that
   returns a 3-tuple containing the substring before the separator, the separator
   itself, and the substring after the separator.  If the separator isn't found,
   the first element of the tuple is the entire string and the other two elements
-  are empty.  :meth:`rpartition(sep)` also returns a 3-tuple but starts searching
+  are empty.  ``rpartition(sep)`` also returns a 3-tuple but starts searching
   from the end of the string; the ``r`` stands for 'reverse'.
 
   Some examples::
@@ -1157,7 +1157,7 @@
 
   .. Patch 1313939, 1359618
 
-* The :func:`long(str, base)` function is now faster on long digit strings
+* The ``long(str, base)`` function is now faster on long digit strings
   because fewer intermediate results are calculated.  The peak is for strings of
   around 800--1000 digits where  the function is 6 times faster. (Contributed by
   Alan McIntyre and committed at the NeedForSpeed sprint.)
@@ -1268,7 +1268,7 @@
   (Contributed by Guido van Rossum.)
 
 * The :class:`deque` double-ended queue type supplied by the :mod:`collections`
-  module now has a :meth:`remove(value)` method that removes the first occurrence
+  module now has a ``remove(value)`` method that removes the first occurrence
   of *value* in the queue, raising :exc:`ValueError` if the value isn't found.
   (Contributed by Raymond Hettinger.)
 
@@ -1291,7 +1291,7 @@
 * The :mod:`csv` module, which parses files in comma-separated value format,
   received several enhancements and a number of bugfixes.  You can now set the
   maximum size in bytes of a field by calling the
-  :meth:`csv.field_size_limit(new_limit)` function; omitting the *new_limit*
+  ``csv.field_size_limit(new_limit)`` function; omitting the *new_limit*
   argument will return the currently-set limit.  The :class:`reader` class now has
   a :attr:`line_num` attribute that counts the number of physical lines read from
   the source; records can span multiple physical lines, so :attr:`line_num` is not
@@ -1308,7 +1308,7 @@
   (Contributed by Skip Montanaro and Andrew McNamara.)
 
 * The :class:`~datetime.datetime` class in the :mod:`datetime`  module now has a
-  :meth:`strptime(string, format)`  method for parsing date strings, contributed
+  ``strptime(string, format)``  method for parsing date strings, contributed
   by Josh Spoerri. It uses the same format characters as :func:`time.strptime` and
   :func:`time.strftime`::
 
@@ -1403,7 +1403,7 @@
 * The :mod:`mailbox` module underwent a massive rewrite to add the capability to
   modify mailboxes in addition to reading them.  A new set of classes that include
   :class:`mbox`, :class:`MH`, and :class:`Maildir` are used to read mailboxes, and
-  have an :meth:`add(message)` method to add messages, :meth:`remove(key)` to
+  have an ``add(message)`` method to add messages, ``remove(key)`` to
   remove messages, and :meth:`lock`/:meth:`unlock` to lock/unlock the mailbox.
   The following example converts a maildir-format mailbox into an mbox-format
   one::
@@ -1458,7 +1458,7 @@
   :func:`wait4` return additional information.  :func:`wait3` doesn't take a
   process ID as input, so it waits for any child process to exit and returns a
   3-tuple of *process-id*, *exit-status*, *resource-usage* as returned from the
-  :func:`resource.getrusage` function. :func:`wait4(pid)` does take a process ID.
+  :func:`resource.getrusage` function. ``wait4(pid)`` does take a process ID.
   (Contributed by Chad J. Schroeder.)
 
   On FreeBSD, the :func:`os.stat` function now returns  times with nanosecond
@@ -1532,8 +1532,8 @@
   In Python code, netlink addresses are represented as a tuple of 2 integers,
   ``(pid, group_mask)``.
 
-  Two new methods on socket objects, :meth:`recv_into(buffer)` and
-  :meth:`recvfrom_into(buffer)`, store the received data in an object  that
+  Two new methods on socket objects, ``recv_into(buffer)`` and
+  ``recvfrom_into(buffer)``, store the received data in an object  that
   supports the buffer protocol instead of returning the data as a string.  This
   means you can put the data directly into an array or a memory-mapped file.
 
@@ -1557,9 +1557,9 @@
      year, number, name = s.unpack(data)
 
   You can also pack and unpack data to and from buffer objects directly using the
-  :meth:`pack_into(buffer, offset, v1, v2, ...)` and :meth:`unpack_from(buffer,
-  offset)` methods.  This lets you store data directly into an array or a memory-
-  mapped file.
+  ``pack_into(buffer, offset, v1, v2, ...)`` and ``unpack_from(buffer,
+  offset)`` methods.  This lets you store data directly into an array or a
+  memory-mapped file.
 
   (:class:`Struct` objects were implemented by Bob Ippolito at the NeedForSpeed
   sprint.  Support for buffer objects was added by Martin Blais, also at the
@@ -1592,7 +1592,7 @@
   .. patch 918101
 
 * The :mod:`threading` module now lets you set the stack size used when new
-  threads are created. The :func:`stack_size([*size*])` function returns the
+  threads are created. The ``stack_size([*size*])`` function returns the
   currently configured stack size, and supplying the optional *size* parameter
   sets a new value.  Not all platforms support changing the stack size, but
   Windows, POSIX threading, and OS/2 all do. (Contributed by Andrew MacIntyre.)
@@ -1911,7 +1911,7 @@
    h = hashlib.new('md5')          # Provide algorithm as a string
 
 Once a hash object has been created, its methods are the same as before:
-:meth:`update(string)` hashes the specified string into the  current digest
+``update(string)`` hashes the specified string into the  current digest
 state, :meth:`digest` and :meth:`hexdigest` return the digest value as a binary
 string or a string of hex digits, and :meth:`copy` returns a new hashing object
 with the same digest state.
@@ -2168,20 +2168,20 @@
 
 * Two new macros can be used to indicate C functions that are local to the
   current file so that a faster calling convention can be used.
-  :c:func:`Py_LOCAL(type)` declares the function as returning a value of the
+  ``Py_LOCAL(type)`` declares the function as returning a value of the
   specified *type* and uses a fast-calling qualifier.
-  :c:func:`Py_LOCAL_INLINE(type)` does the same thing and also requests the
+  ``Py_LOCAL_INLINE(type)`` does the same thing and also requests the
   function be inlined.  If :c:func:`PY_LOCAL_AGGRESSIVE` is defined before
   :file:`python.h` is included, a set of more aggressive optimizations are enabled
   for the module; you should benchmark the results to find out if these
   optimizations actually make the code faster.  (Contributed by Fredrik Lundh at
   the NeedForSpeed sprint.)
 
-* :c:func:`PyErr_NewException(name, base, dict)` can now accept a tuple of base
+* ``PyErr_NewException(name, base, dict)`` can now accept a tuple of base
   classes as its *base* argument.  (Contributed by Georg Brandl.)
 
 * The :c:func:`PyErr_Warn` function for issuing warnings is now deprecated in
-  favour of :c:func:`PyErr_WarnEx(category, message, stacklevel)` which lets you
+  favour of ``PyErr_WarnEx(category, message, stacklevel)`` which lets you
   specify the number of stack frames separating this function and the caller.  A
   *stacklevel* of 1 is the function calling :c:func:`PyErr_WarnEx`, 2 is the
   function above that, and so forth.  (Added by Neal Norwitz.)
@@ -2281,8 +2281,8 @@
 
 The author would like to thank the following people for offering suggestions,
 corrections and assistance with various drafts of this article: Georg Brandl,
-Nick Coghlan, Phillip J. Eby, Lars Gustäbel, Raymond Hettinger, Ralf W. Grosse-
-Kunstleve, Kent Johnson, Iain Lowe, Martin von Löwis, Fredrik Lundh, Andrew
+Nick Coghlan, Phillip J. Eby, Lars Gustäbel, Raymond Hettinger, Ralf W.
+Grosse-Kunstleve, Kent Johnson, Iain Lowe, Martin von Löwis, Fredrik Lundh, Andrew
 McNamara, Skip Montanaro, Gustavo Niemeyer, Paul Prescod, James Pryor, Mike
 Rovner, Scott Weikart, Barry Warsaw, Thomas Wouters.
 
diff --git a/Doc/whatsnew/2.6.rst b/Doc/whatsnew/2.6.rst
index 71a3b7a..f4c742e 100644
--- a/Doc/whatsnew/2.6.rst
+++ b/Doc/whatsnew/2.6.rst
@@ -286,8 +286,8 @@
            ... more processing code ...
 
 After this statement has executed, the file object in *f* will have been
-automatically closed, even if the :keyword:`for` loop raised an exception part-
-way through the block.
+automatically closed, even if the :keyword:`for` loop raised an exception
+part-way through the block.
 
 .. note::
 
@@ -2607,7 +2607,7 @@
 
 * The XML-RPC :class:`~SimpleXMLRPCServer.SimpleXMLRPCServer` and :class:`~DocXMLRPCServer.DocXMLRPCServer`
   classes can now be prevented from immediately opening and binding to
-  their socket by passing True as the ``bind_and_activate``
+  their socket by passing ``False`` as the *bind_and_activate*
   constructor parameter.  This can be used to modify the instance's
   :attr:`allow_reuse_address` attribute before calling the
   :meth:`server_bind` and :meth:`server_activate` methods to
diff --git a/Doc/whatsnew/2.7.rst b/Doc/whatsnew/2.7.rst
index 28a8d4b..992658e 100644
--- a/Doc/whatsnew/2.7.rst
+++ b/Doc/whatsnew/2.7.rst
@@ -1530,7 +1530,7 @@
   *ciphers* argument that's a string listing the encryption algorithms
   to be allowed; the format of the string is described
   `in the OpenSSL documentation
-  <https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT>`__.
+  <https://www.openssl.org/docs/manmaster/man1/ciphers.html#CIPHER-LIST-FORMAT>`__.
   (Added by Antoine Pitrou; :issue:`8322`.)
 
   Another change makes the extension load all of OpenSSL's ciphers and
@@ -1785,7 +1785,7 @@
 Ttk theme engine, available at
 https://www.tcl.tk/man/tcl8.5/TkCmd/ttk_intro.htm. Some
 screenshots of the Python/Ttk code in use are at
-http://code.google.com/p/python-ttk/wiki/Screenshots.
+https://code.google.com/archive/p/python-ttk/wikis/Screenshots.wiki.
 
 The :mod:`ttk` module was written by Guilherme Polo and added in
 :issue:`2983`.  An alternate version called ``Tile.py``, written by
@@ -1804,12 +1804,12 @@
 by Michael Foord, unless otherwise noted.  The enhanced version of
 the module is downloadable separately for use with Python versions 2.4 to 2.6,
 packaged as the :mod:`unittest2` package, from
-https://pypi.python.org/pypi/unittest2.
+https://pypi.org/project/unittest2.
 
 When used from the command line, the module can automatically discover
 tests.  It's not as fancy as `py.test <http://pytest.org>`__ or
-`nose <http://code.google.com/p/python-nose/>`__, but provides a simple way
-to run tests kept within a set of package directories.  For example,
+`nose <https://nose.readthedocs.io/>`__, but provides a
+simple way to run tests kept within a set of package directories.  For example,
 the following command will search the :file:`test/` subdirectory for
 any importable test files named ``test*.py``::
 
@@ -2540,6 +2540,21 @@
 maintenance release.
 
 
+Two new environment variables for debug mode
+--------------------------------------------
+
+In debug mode, the ``[xxx refs]`` statistic is not written by default, the
+:envvar:`PYTHONSHOWREFCOUNT` environment variable now must also be set.
+(Contributed by Victor Stinner; :issue:`31733`.)
+
+When Python is compiled with ``COUNT_ALLOC`` defined, allocation counts are no
+longer dumped by default anymore: the :envvar:`PYTHONSHOWALLOCCOUNT` environment
+variable must now also be set. Moreover, allocation counts are now dumped into
+stderr, rather than stdout. (Contributed by Victor Stinner; :issue:`31692`.)
+
+.. versionadded:: 2.7.15
+
+
 PEP 434: IDLE Enhancement Exception for All Branches
 ----------------------------------------------------
 
@@ -2708,6 +2723,39 @@
 overall application can be, the new :func:`ssl._https_verify_certificates`
 function can be used to adjust the default behaviour at runtime.
 
+
+New ``make regen-all`` build target
+-----------------------------------
+
+To simplify cross-compilation, and to ensure that CPython can reliably be
+compiled without requiring an existing version of Python to already be
+available, the autotools-based build system no longer attempts to implicitly
+recompile generated files based on file modification times.
+
+Instead, a new ``make regen-all`` command has been added to force regeneration
+of these files when desired (e.g. after an initial version of Python has
+already been built based on the pregenerated versions).
+
+More selective regeneration targets are also defined - see
+:source:`Makefile.pre.in` for details.
+
+(Contributed by Victor Stinner in :issue:`23404`.)
+
+.. versionadded:: 2.7.14
+
+
+Removal of ``make touch`` build target
+--------------------------------------
+
+The ``make touch`` build target previously used to request implicit regeneration
+of generated files by updating their modification times has been removed.
+
+It has been replaced by the new ``make regen-all`` target.
+
+(Contributed by Victor Stinner in :issue:`23404`.)
+
+.. versionchanged:: 2.7.14
+
 .. ======================================================================
 
 .. _acks27:
diff --git a/Include/Python.h b/Include/Python.h
index 775412b..a9327b0 100644
--- a/Include/Python.h
+++ b/Include/Python.h
@@ -43,6 +43,9 @@
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+#ifdef HAVE_CRYPT_H
+#include <crypt.h>
+#endif
 
 /* For size_t? */
 #ifdef HAVE_STDDEF_H
diff --git a/Include/ceval.h b/Include/ceval.h
index 3735f00..f461601 100644
--- a/Include/ceval.h
+++ b/Include/ceval.h
@@ -145,6 +145,7 @@
 #endif /* !WITH_THREAD */
 
 PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *);
+PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *);
 
 
 #ifdef __cplusplus
diff --git a/Include/dictobject.h b/Include/dictobject.h
index ef524a4..5a1e9fe 100644
--- a/Include/dictobject.h
+++ b/Include/dictobject.h
@@ -111,6 +111,9 @@
 PyAPI_FUNC(PyObject *) _PyDict_GetItemWithError(PyObject *mp, PyObject *key);
 PyAPI_FUNC(int) PyDict_SetItem(PyObject *mp, PyObject *key, PyObject *item);
 PyAPI_FUNC(int) PyDict_DelItem(PyObject *mp, PyObject *key);
+PyAPI_FUNC(int) _PyDict_DelItemIf(PyObject *mp, PyObject *key,
+                                  int (*predicate)(PyObject *value));
+
 PyAPI_FUNC(void) PyDict_Clear(PyObject *mp);
 PyAPI_FUNC(int) PyDict_Next(
     PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value);
diff --git a/Include/errcode.h b/Include/errcode.h
index becec80..5c5a0f7 100644
--- a/Include/errcode.h
+++ b/Include/errcode.h
@@ -29,6 +29,7 @@
 #define E_EOFS		23	/* EOF in triple-quoted string */
 #define E_EOLS		24	/* EOL in single-quoted string */
 #define E_LINECONT	25	/* Unexpected characters after a line continuation */
+#define E_IO    	26	/* I/O error */
 
 #ifdef __cplusplus
 }
diff --git a/Include/frameobject.h b/Include/frameobject.h
index 17e7679..8439081 100644
--- a/Include/frameobject.h
+++ b/Include/frameobject.h
@@ -54,7 +54,7 @@
 
 PyAPI_DATA(PyTypeObject) PyFrame_Type;
 
-#define PyFrame_Check(op) ((op)->ob_type == &PyFrame_Type)
+#define PyFrame_Check(op) (Py_TYPE(op) == &PyFrame_Type)
 #define PyFrame_IsRestricted(f) \
 	((f)->f_builtins != (f)->f_tstate->interp->builtins)
 
diff --git a/Include/grammar.h b/Include/grammar.h
index 8426da3..decf2e6 100644
--- a/Include/grammar.h
+++ b/Include/grammar.h
@@ -69,6 +69,7 @@
 /* FUNCTIONS */
 
 grammar *newgrammar(int start);
+void freegrammar(grammar *g);
 dfa *adddfa(grammar *g, int type, char *name);
 int addstate(dfa *d);
 void addarc(dfa *d, int from, int to, int lbl);
diff --git a/Include/intobject.h b/Include/intobject.h
index 252eea9..d198574 100644
--- a/Include/intobject.h
+++ b/Include/intobject.h
@@ -28,8 +28,11 @@
 PyAPI_DATA(PyTypeObject) PyInt_Type;
 
 #define PyInt_Check(op) \
-		 PyType_FastSubclass((op)->ob_type, Py_TPFLAGS_INT_SUBCLASS)
-#define PyInt_CheckExact(op) ((op)->ob_type == &PyInt_Type)
+		 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_INT_SUBCLASS)
+#define PyInt_CheckExact(op) (Py_TYPE(op) == &PyInt_Type)
+
+#define _PyAnyInt_Check(op) (PyInt_Check(op) || PyLong_Check(op))
+#define _PyAnyInt_CheckExact(op) (PyInt_CheckExact(op) || PyLong_CheckExact(op))
 
 PyAPI_FUNC(PyObject *) PyInt_FromString(char*, char**, int);
 #ifdef Py_USING_UNICODE
diff --git a/Include/objimpl.h b/Include/objimpl.h
index 55e83ec..cbf6bc3 100644
--- a/Include/objimpl.h
+++ b/Include/objimpl.h
@@ -56,7 +56,7 @@
 operator new), you must first allocate the object with your custom allocator,
 then pass its pointer to PyObject_{Init, InitVar} for filling in its Python-
 specific fields:  reference count, type pointer, possibly others.  You should
-be aware that Python no control over these objects because they don't
+be aware that Python has no control over these objects because they don't
 cooperate with the Python memory manager.  Such objects may not be eligible
 for automatic garbage collection and you have to make sure that they are
 released accordingly whenever their destructor gets called (cf. the specific
@@ -248,6 +248,20 @@
 /* for source compatibility with 2.2 */
 #define _PyObject_GC_Del PyObject_GC_Del
 
+/*
+ * Former over-aligned definition of PyGC_Head, used to compute the size of the
+ * padding for the new version below.
+ */
+union _gc_head;
+union _gc_head_old {
+    struct {
+        union _gc_head_old *gc_next;
+        union _gc_head_old *gc_prev;
+        Py_ssize_t gc_refs;
+    } gc;
+    long double dummy;
+};
+
 /* GC information is stored BEFORE the object structure. */
 typedef union _gc_head {
     struct {
@@ -255,7 +269,8 @@
         union _gc_head *gc_prev;
         Py_ssize_t gc_refs;
     } gc;
-    long double dummy;  /* force worst-case alignment */
+    double dummy; /* Force at least 8-byte alignment. */
+    char dummy_padding[sizeof(union _gc_head_old)];
 } PyGC_Head;
 
 extern PyGC_Head *_PyGC_generation0;
diff --git a/Include/patchlevel.h b/Include/patchlevel.h
index 5269e31..8a04a90 100644
--- a/Include/patchlevel.h
+++ b/Include/patchlevel.h
@@ -22,12 +22,12 @@
 /*--start constants--*/
 #define PY_MAJOR_VERSION	2
 #define PY_MINOR_VERSION	7
-#define PY_MICRO_VERSION	13
+#define PY_MICRO_VERSION	15
 #define PY_RELEASE_LEVEL	PY_RELEASE_LEVEL_FINAL
 #define PY_RELEASE_SERIAL	0
 
 /* Version as a string */
-#define PY_VERSION      	"2.7.13"
+#define PY_VERSION      	"2.7.15+"
 /*--end constants--*/
 
 /* Subversion Revision number of this file (not of the repository). Empty
diff --git a/Include/py_curses.h b/Include/py_curses.h
index 657816c..eb77e35 100644
--- a/Include/py_curses.h
+++ b/Include/py_curses.h
@@ -7,14 +7,9 @@
 ** On Mac OS X 10.2 [n]curses.h and stdlib.h use different guards
 ** against multiple definition of wchar_t.
 */
-#ifdef	_BSD_WCHAR_T_DEFINED_
+#ifdef _BSD_WCHAR_T_DEFINED_
 #define _WCHAR_T
 #endif
-
-/* the following define is necessary for OS X 10.6; without it, the
-   Apple-supplied ncurses.h sets NCURSES_OPAQUE to 1, and then Python
-   can't get at the WINDOW flags field. */
-#define NCURSES_OPAQUE 0
 #endif /* __APPLE__ */
 
 #ifdef __FreeBSD__
@@ -22,7 +17,7 @@
 ** On FreeBSD, [n]curses.h and stdlib.h/wchar.h use different guards
 ** against multiple definition of wchar_t and wint_t.
 */
-#ifdef	_XOPEN_SOURCE_EXTENDED
+#ifdef _XOPEN_SOURCE_EXTENDED
 #ifndef __FreeBSD_version
 #include <osreldate.h>
 #endif
@@ -44,22 +39,28 @@
 #endif
 #endif
 
+#if !defined(HAVE_CURSES_IS_PAD) && defined(WINDOW_HAS_FLAGS)
+/* The following definition is necessary for ncurses 5.7; without it,
+   some of [n]curses.h set NCURSES_OPAQUE to 1, and then Python
+   can't get at the WINDOW flags field. */
+#define NCURSES_OPAQUE 0
+#endif
+
 #ifdef HAVE_NCURSES_H
 #include <ncurses.h>
 #else
 #include <curses.h>
-#ifdef HAVE_TERM_H
-/* for tigetstr, which is not declared in SysV curses */
-#include <term.h>
-#endif
 #endif
 
 #ifdef HAVE_NCURSES_H
 /* configure was checking <curses.h>, but we will
-   use <ncurses.h>, which has all these features. */
-#ifndef WINDOW_HAS_FLAGS
+   use <ncurses.h>, which has some or all these features. */
+#if !defined(WINDOW_HAS_FLAGS) && !(NCURSES_OPAQUE+0)
 #define WINDOW_HAS_FLAGS 1
 #endif
+#if !defined(HAVE_CURSES_IS_PAD) && NCURSES_VERSION_PATCH+0 >= 20090906
+#define HAVE_CURSES_IS_PAD 1
+#endif
 #ifndef MVWDELCH_IS_EXPRESSION
 #define MVWDELCH_IS_EXPRESSION 1
 #endif
@@ -74,11 +75,11 @@
 /* Type declarations */
 
 typedef struct {
-	PyObject_HEAD
-	WINDOW *win;
+    PyObject_HEAD
+    WINDOW *win;
 } PyCursesWindowObject;
 
-#define PyCursesWindow_Check(v)	 (Py_TYPE(v) == &PyCursesWindow_Type)
+#define PyCursesWindow_Check(v)  (Py_TYPE(v) == &PyCursesWindow_Type)
 
 #define PyCurses_CAPSULE_NAME "_curses._C_API"
 
diff --git a/Include/pymem.h b/Include/pymem.h
index 10b5bea..2c239df 100644
--- a/Include/pymem.h
+++ b/Include/pymem.h
@@ -72,9 +72,9 @@
 /* Returns NULL to indicate error if a negative size or size larger than
    Py_ssize_t can represent is supplied.  Helps prevents security holes. */
 #define PyMem_MALLOC(n)		((size_t)(n) > (size_t)PY_SSIZE_T_MAX ? NULL \
-				: malloc((n) ? (n) : 1))
+				: malloc(((n) != 0) ? (n) : 1))
 #define PyMem_REALLOC(p, n)	((size_t)(n) > (size_t)PY_SSIZE_T_MAX  ? NULL \
-				: realloc((p), (n) ? (n) : 1))
+				: realloc((p), ((n) != 0) ? (n) : 1))
 #define PyMem_FREE		free
 
 #endif	/* PYMALLOC_DEBUG */
diff --git a/Include/pythonrun.h b/Include/pythonrun.h
index cfb02b0..f0f4e38 100644
--- a/Include/pythonrun.h
+++ b/Include/pythonrun.h
@@ -111,11 +111,10 @@
 PyAPI_FUNC(const char *) Py_GetCopyright(void);
 PyAPI_FUNC(const char *) Py_GetCompiler(void);
 PyAPI_FUNC(const char *) Py_GetBuildInfo(void);
-PyAPI_FUNC(const char *) _Py_svnversion(void);
 PyAPI_FUNC(const char *) Py_SubversionRevision(void);
 PyAPI_FUNC(const char *) Py_SubversionShortBranch(void);
-PyAPI_FUNC(const char *) _Py_hgidentifier(void);
-PyAPI_FUNC(const char *) _Py_hgversion(void);
+PyAPI_FUNC(const char *) _Py_gitidentifier(void);
+PyAPI_FUNC(const char *) _Py_gitversion(void);
 
 /* Internal -- various one-time initializations */
 PyAPI_FUNC(PyObject *) _PyBuiltin_Init(void);
diff --git a/Include/sliceobject.h b/Include/sliceobject.h
index 8ab62dd..a10cc05 100644
--- a/Include/sliceobject.h
+++ b/Include/sliceobject.h
@@ -38,6 +38,12 @@
 				    Py_ssize_t *start, Py_ssize_t *stop, 
 				    Py_ssize_t *step, Py_ssize_t *slicelength);
 
+PyAPI_FUNC(int) _PySlice_Unpack(PyObject *slice,
+                                Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step);
+PyAPI_FUNC(Py_ssize_t) _PySlice_AdjustIndices(Py_ssize_t length,
+                                              Py_ssize_t *start, Py_ssize_t *stop,
+                                              Py_ssize_t step);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/LICENSE b/LICENSE
index 84a3337..1afbedb 100644
--- a/LICENSE
+++ b/LICENSE
@@ -13,12 +13,11 @@
 
 In May 2000, Guido and the Python core development team moved to
 BeOpen.com to form the BeOpen PythonLabs team.  In October of the same
-year, the PythonLabs team moved to Digital Creations (now Zope
-Corporation, see http://www.zope.com).  In 2001, the Python Software
-Foundation (PSF, see http://www.python.org/psf/) was formed, a
-non-profit organization created specifically to own Python-related
-Intellectual Property.  Zope Corporation is a sponsoring member of
-the PSF.
+year, the PythonLabs team moved to Digital Creations, which became
+Zope Corporation.  In 2001, the Python Software Foundation (PSF, see
+https://www.python.org/psf/) was formed, a non-profit organization
+created specifically to own Python-related Intellectual Property.
+Zope Corporation was a sponsoring member of the PSF.
 
 All Python releases are Open Source (see http://www.opensource.org for
 the Open Source Definition).  Historically, most, but not all, Python
@@ -74,9 +73,9 @@
 distribute, and otherwise use Python alone or in any derivative version,
 provided, however, that PSF's License Agreement and PSF's notice of copyright,
 i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-2011, 2012, 2013, 2014, 2015, 2016 Python Software Foundation; All Rights
-Reserved" are retained in Python alone or in any derivative version prepared by
-Licensee.
+2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 Python Software Foundation; All
+Rights Reserved" are retained in Python alone or in any derivative version
+prepared by Licensee.
 
 3. In the event Licensee prepares a derivative work that is based on
 or incorporates Python or any part thereof, and wants to make
diff --git a/Launcher/launcher_internal.cpp b/Launcher/launcher_internal.cpp
deleted file mode 100644
index 01274bb..0000000
--- a/Launcher/launcher_internal.cpp
+++ /dev/null
@@ -1,216 +0,0 @@
-// Copyright 2017 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "launcher_internal.h"
-
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-extern "C" {
-// Cpython built-in C functions.
-/*
-   read_directory(archive) -> files dict (new reference)
-
-   Given a path to a Zip archive, build a dict, mapping file names
-   (local to the archive, using SEP as a separator) to toc entries.
-*/
-PyObject *read_directory(const char *archive);
-
-/* Given a path to a Zip file and a toc_entry, return the (uncompressed)
-   data as a new reference. */
-PyObject *get_data(const char *archive, PyObject *toc_entry);
-}
-
-namespace android {
-namespace cpython2 {
-namespace python_launcher {
-namespace internal {
-
-int RunModule(const char *module, int set_argv0) {
-  PyObject *runpy, *runmodule, *runargs, *result;
-  runpy = PyImport_ImportModule("runpy");
-  if (runpy == NULL) {
-    fprintf(stderr, "Could not import runpy module\n");
-    return -1;
-  }
-  runmodule = PyObject_GetAttrString(runpy, "_run_module_as_main");
-  if (runmodule == NULL) {
-    fprintf(stderr, "Could not access runpy._run_module_as_main\n");
-    Py_DECREF(runpy);
-    return -1;
-  }
-  runargs = Py_BuildValue("(si)", module, set_argv0);
-  if (runargs == NULL) {
-    fprintf(stderr,
-            "Could not create arguments for runpy._run_module_as_main\n");
-    Py_DECREF(runpy);
-    Py_DECREF(runmodule);
-    return -1;
-  }
-  result = PyObject_Call(runmodule, runargs, NULL);
-  if (result == NULL) {
-    PyErr_Print();
-  }
-  Py_DECREF(runpy);
-  Py_DECREF(runmodule);
-  Py_DECREF(runargs);
-  if (result == NULL) {
-    return -1;
-  }
-  Py_DECREF(result);
-  return 0;
-}
-
-std::string GetEntryPointFilePath(const char *launcher_path) {
-  PyObject *files;
-  files = read_directory(launcher_path);
-  if (files == NULL) {
-    return std::string();
-  }
-  PyObject *toc_entry;
-  // Return value: Borrowed reference.
-  toc_entry = PyDict_GetItemString(files, ENTRYPOINT_FILE);
-  if (toc_entry == NULL) {
-    Py_DECREF(files);
-    return std::string();
-  }
-  PyObject *py_data;
-  py_data = get_data(launcher_path, toc_entry);
-  if (py_data == NULL) {
-    Py_DECREF(files);
-    return std::string();
-  }
-  // PyString_AsString returns a NUL-terminated representation of the "py_data",
-  // "data" must not be modified in any way. And it must not be deallocated.
-  char *data = PyString_AsString(py_data);
-  if (data == NULL) {
-    Py_DECREF(py_data);
-    Py_DECREF(files);
-    return std::string();
-  }
-
-  char *res = strdup(data); /* deep copy of data */
-  Py_DECREF(py_data);
-  Py_DECREF(files);
-
-  int i = 0;
-  /* Strip newline and other trailing whitespace. */
-  for (i = strlen(res) - 1; i >= 0 && isspace(res[i]); i--) {
-    res[i] = '\0';
-  }
-  /* Check for the file extension. */
-  i = strlen(res);
-  if (i > 3 && strcmp(res + i - 3, ".py") == 0) {
-    res[i - 3] = '\0';
-  } else {
-    PyErr_Format(PyExc_ValueError, "Invalid entrypoint in %s: %s",
-                 ENTRYPOINT_FILE, res);
-    return std::string();
-  }
-  return std::string(res);
-}
-
-int RunModuleNameFromEntryPoint(const char *launcher_path, std::string entrypoint) {
-  if (entrypoint.empty()) {
-    return -1;
-  }
-  // Has to pass to free to avoid a memory leak after use.
-  char *arr = strdup(entrypoint.c_str());
-  // Replace file system path seperator with Python package/module seperator.
-  char *ch;
-  for (ch = arr; *ch; ch++) {
-    if (*ch == '/') {
-      *ch = '.';
-    }
-  }
-
-  if (AddPathToPythonSysPath(launcher_path) < 0) {
-    free(arr);
-    return -1;
-  }
-  // Calculate the runfiles path size. Extra space for '\0'.
-  size_t size = snprintf(nullptr, 0, "%s/%s", launcher_path, RUNFILES) + 1;
-  char runfiles_path[size];
-  snprintf(runfiles_path, size, "%s/%s", launcher_path, RUNFILES);
-  if (AddPathToPythonSysPath(runfiles_path) < 0) {
-    free(arr);
-    return -1;
-  }
-  int ret =  RunModule(arr, 0);
-  free(arr);
-  return ret;
-}
-
-int AddPathToPythonSysPath(const char *path) {
-  if (path == NULL) {
-    return -1;
-  }
-  PyObject *py_path;
-  py_path = PyString_FromString(path);
-  if (py_path == NULL) {
-    return -1;
-  }
-  PyObject *sys_path;
-  // Return value: Borrowed reference.
-  sys_path = PySys_GetObject(const_cast<char*>("path"));
-  if (sys_path == NULL) {
-    Py_DECREF(py_path);
-    return -1;
-  }
-  PyList_Insert(sys_path, 0, py_path);
-  Py_DECREF(py_path);
-  return 0;
-}
-
-int RunMainFromImporter(const char *launcher_path) {
-  PyObject *py_launcher_path, *importer;
-  py_launcher_path = PyString_FromString(launcher_path);
-  if (py_launcher_path == NULL) {
-    return -1;
-  }
-  importer = PyImport_GetImporter(py_launcher_path);
-  if (importer == NULL) {
-    Py_DECREF(py_launcher_path);
-    return -1;
-  }
-  if (importer != Py_None && importer->ob_type != &PyNullImporter_Type) {
-    /* Launcher path is usable as an import source, so
-       put it in sys.path[0] and import __main__ */
-    if (AddPathToPythonSysPath(launcher_path) < 0) {
-      Py_DECREF(importer);
-      Py_DECREF(py_launcher_path);
-      return -1;
-    }
-  }
-  Py_DECREF(importer);
-  Py_DECREF(py_launcher_path);
-  return RunModule("__main__", 0);
-}
-}  // namespace internal
-
-int RunEntryPointOrMainModule(const char *launcher_path) {
-  std::string entrypoint = internal::GetEntryPointFilePath(launcher_path);
-  if (entrypoint.empty()) {
-    // If entry point can not be found or can not be executed, we try to
-    // run __main__.py within the .par file.
-    fprintf(stderr, "Cannot find valid entry point to execute par file!\n");
-    fprintf(stdout, "Start trying to run __main__ module within par file.\n");
-    return internal::RunMainFromImporter(launcher_path);
-  }
-  return internal::RunModuleNameFromEntryPoint(launcher_path, entrypoint);
-}
-}  // namespace python_launcher
-}  // namespace cpython2
-}  // namespace android
diff --git a/Launcher/launcher_internal.h b/Launcher/launcher_internal.h
deleted file mode 100644
index 285176a..0000000
--- a/Launcher/launcher_internal.h
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2017 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef ANDROID_CPYTHON2_PYTHON_LAUNCHER_INTERNAL_H
-#define ANDROID_CPYTHON2_PYTHON_LAUNCHER_INTERNAL_H
-
-#include <Python.h>
-
-#include <string>
-
-namespace android {
-namespace cpython2 {
-namespace python_launcher {
-
-namespace internal{
-#define ENTRYPOINT_FILE "entry_point.txt"
-#define RUNFILES "runfiles"
-
-// Use "runpy" module to locate and run Python script using Python module
-// namespace rather than the filesystem.
-// The caller owns "module" pointer, which cannot be NULL.
-int RunModule(const char *module, int set_argv0);
-
-// Get valid entrypoint file path.
-// The caller owns "launcher_path" pointer, which cannot be NULL.
-// Return non-empty string as success. Otherwise, return empty string.
-std::string GetEntryPointFilePath(const char *launcher_path);
-
-// Run the Python script embedded in ENTRYPOINT_FILE.
-// The caller owns "launcher_path" pointer, which cannot be NULL.
-int RunModuleNameFromEntryPoint(const char *launcher_path, std::string entrypoint);
-
-// Add path to Python sys.path list.
-// The caller owns "path" pointer, which cannot be NULL.
-int AddPathToPythonSysPath(const char *path);
-
-// Run __main__ module within the hermetic .par file.
-// The caller owns "launcher_path" pointer, which cannot be NULL.
-// Return 0 as success. Otherwise, return -1.
-int RunMainFromImporter(const char *launcher_path);
-}  // namespace internal
-
-// Try to run the Python script embedded in ENTRYPOINT_FILE. Otherwise,
-// run __main__ module as fallback.
-// The caller owns "launcher_path" pointer, which cannot be NULL.
-int RunEntryPointOrMainModule(const char *launcher_path);
-}  // namespace python_launcher
-}  // namespace cpython2
-}  // namespace android
-
-#endif  // ANDROID_CPYTHON2_PYTHON_LAUNCHER_INTERNAL_H
diff --git a/Launcher/launcher_main.cpp b/Launcher/launcher_main.cpp
index a49998c..0a34c18 100644
--- a/Launcher/launcher_main.cpp
+++ b/Launcher/launcher_main.cpp
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "launcher_internal.h"
-
 #include <Python.h>
 #include <android-base/file.h>
 #include <osdefs.h>
@@ -22,103 +20,49 @@
 #include <string>
 
 int main(int argc, char *argv[]) {
-  int result = 0 /* Used to mark if current program runs with success/failure. */;
-
-  // Clear PYTHONPATH and PYTHONHOME so Python doesn't attempt to check the local
-  // disk for Python modules to load. The value of PYTHONHOME will replace "prefix"
-  // and "exe_prefix" based on the description in getpath.c.
-  // Please don't use PYTHONPATH and PYTHONHOME within user program.
-  // TODO(nanzhang): figure out if unsetenv("PYTHONPATH") is better.
-  unsetenv(const_cast<char *>("PYTHONPATH"));
-  // TODO(nanzhang): figure out if Py_SetPythonHome() is better.
-  unsetenv(const_cast<char *>("PYTHONHOME"));
   // PYTHONEXECUTABLE is only used on MacOs X, when the Python interpreter
   // embedded in an application bundle. It is not sure that we have this use case
-  // for Android hermetic Python. So override this environment variable to empty
-  // for now to make our self-contained environment more strict.
+  // for Android hermetic Python. So remove this environment variable to make
+  // our self-contained environment more strict.
   // For user (.py) program, it can access hermetic .par file path through
   // sys.argv[0].
   unsetenv(const_cast<char *>("PYTHONEXECUTABLE"));
 
+  // Always enable Python "-s" option. We don't need user-site directories,
+  // everything's supposed to be hermetic.
+  Py_NoUserSiteDirectory = 1;
+
+  // Ignore PYTHONPATH and PYTHONHOME from the environment. Unless we're not
+  // running from inside the zip file, in which case the user may have
+  // specified a PYTHONPATH.
+#ifdef ANDROID_AUTORUN
+  Py_IgnoreEnvironmentFlag = 1;
+#endif
+
+  Py_DontWriteBytecodeFlag = 1;
+
   // Resolving absolute path based on argv[0] is not reliable since it may
   // include something unusable, too bad.
   // android::base::GetExecutablePath() also handles for Darwin/Windows.
   std::string executable_path = android::base::GetExecutablePath();
 
-  argv[0] = strdup(executable_path.c_str());
-  // argv[0] is used for setting internal path, and Python sys.argv[0]. It
-  // should not exceed MAXPATHLEN defined for CPython.
-  if (!argv[0] || strlen(argv[0]) > MAXPATHLEN) {
-    fprintf(stderr, "The executable path %s is NULL or of invalid length.\n", argv[0]);
-    return 1;
+  // Set the equivalent of PYTHONHOME internally.
+  Py_SetPythonHome(strdup(executable_path.c_str()));
+
+#ifdef ANDROID_AUTORUN
+  argc += 1;
+  char **new_argv = reinterpret_cast<char**>(calloc(argc, sizeof(*argv)));
+
+  // Inject the path to our binary into argv[1] so the Py_Main won't parse any
+  // other options, and will execute the __main__.py script inside the zip file
+  // attached to our executable.
+  new_argv[0] = argv[0];
+  new_argv[1] = strdup(executable_path.c_str());
+  for (int i = 1; i < argc - 1; i++) {
+    new_argv[i+1] = argv[i];
   }
+  argv = new_argv;
+#endif
 
-  // For debugging/logging purpose, set stdin/stdout/stderr unbuffered through
-  // environment variable.
-  // TODO(nanzhang): Set Py_VerboseFlag if more debugging requests needed.
-  const char *unbuffered_env = getenv("PYTHONUNBUFFERED");
-  if (unbuffered_env && unbuffered_env[0]) {
-    #if defined(MS_WINDOWS) || defined(__CYGWIN__)
-      _setmode(fileno(stdin), O_BINARY);
-      _setmode(fileno(stdout), O_BINARY);
-    #endif
-    #ifdef HAVE_SETVBUF
-      setvbuf(stdin,  (char *)NULL, _IONBF, BUFSIZ);
-      setvbuf(stdout, (char *)NULL, _IONBF, BUFSIZ);
-      setvbuf(stderr, (char *)NULL, _IONBF, BUFSIZ);
-    #else /* !HAVE_SETVBUF */
-      setbuf(stdin,  (char *)NULL);
-      setbuf(stdout, (char *)NULL);
-      setbuf(stderr, (char *)NULL);
-    #endif /* !HAVE_SETVBUF */
-  }
-  //For debugging/logging purpose, Warning control.
-  //Python’s warning machinery by default prints warning messages to sys.stderr.
-  //The full form of argument is:action:message:category:module:line
-  char *warnings_env = getenv("PYTHONWARNINGS");
-  if (warnings_env && warnings_env[0]) {
-      char *warnings_buf, *warning;
-
-      // Note: "new" operation; we need free this chuck of data after use.
-      warnings_buf = new char[strlen(warnings_env) + 1];
-      if (warnings_buf == NULL)
-          Py_FatalError(
-             "not enough memory to copy PYTHONWARNINGS");
-      strcpy(warnings_buf, warnings_env);
-      for (warning = strtok(warnings_buf, ",");
-           warning != NULL;
-           warning = strtok(NULL, ","))
-          PySys_AddWarnOption(warning);
-      delete[] warnings_buf;
-  }
-
-  // Always enable Python "-s" option. We don't need user-site directories,
-  // everything's supposed to be hermetic.
-  Py_NoUserSiteDirectory = 1;
-
-  Py_SetProgramName(argv[0]);
-  Py_Initialize();
-  PySys_SetArgvEx(argc, argv, 0);
-
-  // Set sys.executable to None. The real executable is available as
-  // sys.argv[0], and too many things assume sys.executable is a regular Python
-  // binary, which isn't available. By setting it to None we get clear errors
-  // when people try to use it.
-  if (PySys_SetObject(const_cast<char *>("executable"), Py_None) < 0) {
-    PyErr_Print();
-    result = 1;
-    goto error;
-  }
-
-  result = android::cpython2::python_launcher::RunEntryPointOrMainModule(argv[0]);
-  if (result < 0) {
-    PyErr_Print();
-    goto error;
-  }
-
-error:
-  Py_Finalize();
-
-  free(argv[0]);
-  exit(abs(result));
+  return Py_Main(argc, argv);
 }
diff --git a/Lib/Android.bp b/Lib/Android.bp
index 58659dc..48e5caa 100644
--- a/Lib/Android.bp
+++ b/Lib/Android.bp
@@ -20,6 +20,7 @@
         "*.py",
         "compiler/**/*.py",
         "ctypes/**/*.py",
+        "distutils/**/*.py",
         "email/**/*.py",
         "encodings/**/*.py",
         "hotshot/**/*.py",
@@ -28,6 +29,7 @@
         "logging/**/*.py",
         "multiprocessing/**/*.py",
         "pydoc_data/**/*.py",
+        "sqlite3/**/*.py",
         "unittest/**/*.py",
         "wsgiref/**/*.py",
         "xml/**/*.py",
diff --git a/Lib/HTMLParser.py b/Lib/HTMLParser.py
index 3f97830..fb9380e 100644
--- a/Lib/HTMLParser.py
+++ b/Lib/HTMLParser.py
@@ -462,11 +462,12 @@
             else:
                 # Cannot use name2codepoint directly, because HTMLParser supports apos,
                 # which is not part of HTML 4
-                import htmlentitydefs
                 if HTMLParser.entitydefs is None:
-                    entitydefs = HTMLParser.entitydefs = {'apos':u"'"}
+                    import htmlentitydefs
+                    entitydefs = {'apos':u"'"}
                     for k, v in htmlentitydefs.name2codepoint.iteritems():
                         entitydefs[k] = unichr(v)
+                    HTMLParser.entitydefs = entitydefs
                 try:
                     return self.entitydefs[s]
                 except KeyError:
diff --git a/Lib/_pyio.py b/Lib/_pyio.py
index f022a4e..98c2d58 100644
--- a/Lib/_pyio.py
+++ b/Lib/_pyio.py
@@ -1619,6 +1619,7 @@
         self.buffer.write(b)
         if self._line_buffering and (haslf or "\r" in s):
             self.flush()
+        self._set_decoded_chars('')
         self._snapshot = None
         if self._decoder:
             self._decoder.reset()
diff --git a/Lib/_strptime.py b/Lib/_strptime.py
index feac05a..8eb2718 100644
--- a/Lib/_strptime.py
+++ b/Lib/_strptime.py
@@ -254,8 +254,8 @@
         # format directives (%m, etc.).
         regex_chars = re_compile(r"([\\.^$*+?\(\){}\[\]|])")
         format = regex_chars.sub(r"\\\1", format)
-        whitespace_replacement = re_compile('\s+')
-        format = whitespace_replacement.sub('\s+', format)
+        whitespace_replacement = re_compile(r'\s+')
+        format = whitespace_replacement.sub(r'\\s+', format)
         while '%' in format:
             directive_index = format.index('%')+1
             processed_format = "%s%s%s" % (processed_format,
diff --git a/Lib/_threading_local.py b/Lib/_threading_local.py
index 09a3515..1480329 100644
--- a/Lib/_threading_local.py
+++ b/Lib/_threading_local.py
@@ -57,11 +57,7 @@
 
   >>> class MyLocal(local):
   ...     number = 2
-  ...     initialized = False
   ...     def __init__(self, **kw):
-  ...         if self.initialized:
-  ...             raise SystemError('__init__ called too many times')
-  ...         self.initialized = True
   ...         self.__dict__.update(kw)
   ...     def squared(self):
   ...         return self.number ** 2
@@ -98,7 +94,7 @@
   >>> thread.start()
   >>> thread.join()
   >>> log
-  [[('color', 'red'), ('initialized', True)], 11]
+  [[('color', 'red')], 11]
 
 without affecting this thread's data:
 
diff --git a/Lib/aifc.py b/Lib/aifc.py
index c9a021e..981f801 100644
--- a/Lib/aifc.py
+++ b/Lib/aifc.py
@@ -288,6 +288,8 @@
     # _ssnd_chunk -- instantiation of a chunk class for the SSND chunk
     # _framesize -- size of one frame in the file
 
+    _file = None  # Set here since __del__ checks it
+
     def initfp(self, file):
         self._version = 0
         self._decomp = None
@@ -306,6 +308,7 @@
         else:
             raise Error, 'not an AIFF or AIFF-C file'
         self._comm_chunk_read = 0
+        self._ssnd_chunk = None
         while 1:
             self._ssnd_seek_needed = 1
             try:
@@ -341,10 +344,16 @@
             self._decomp.SetParams(params)
 
     def __init__(self, f):
-        if type(f) == type(''):
+        if isinstance(f, basestring):
             f = __builtin__.open(f, 'rb')
-        # else, assume it is an open file object already
-        self.initfp(f)
+            try:
+                self.initfp(f)
+            except:
+                f.close()
+                raise
+        else:
+            # assume it is an open file object already
+            self.initfp(f)
 
     #
     # User visible methods.
@@ -562,8 +571,10 @@
     # _datalength -- the size of the audio samples written to the header
     # _datawritten -- the size of the audio samples actually written
 
+    _file = None  # Set here since __del__ checks it
+
     def __init__(self, f):
-        if type(f) == type(''):
+        if isinstance(f, basestring):
             filename = f
             f = __builtin__.open(f, 'wb')
         else:
diff --git a/Lib/argparse.py b/Lib/argparse.py
index 1b233b8..d000486 100644
--- a/Lib/argparse.py
+++ b/Lib/argparse.py
@@ -324,7 +324,11 @@
             if len(prefix) + len(usage) > text_width:
 
                 # break usage into wrappable parts
-                part_regexp = r'\(.*?\)+|\[.*?\]+|\S+'
+                part_regexp = (
+                    r'\(.*?\)+(?=\s|$)|'
+                    r'\[.*?\]+(?=\s|$)|'
+                    r'\S+'
+                )
                 opt_usage = format(optionals, groups)
                 pos_usage = format(positionals, groups)
                 opt_parts = _re.findall(part_regexp, opt_usage)
diff --git a/Lib/asynchat.py b/Lib/asynchat.py
index 57459a0..392ee61 100644
--- a/Lib/asynchat.py
+++ b/Lib/asynchat.py
@@ -133,7 +133,7 @@
                 # no terminator, collect it all
                 self.collect_incoming_data (self.ac_in_buffer)
                 self.ac_in_buffer = ''
-            elif isinstance(terminator, int) or isinstance(terminator, long):
+            elif isinstance(terminator, (int, long)):
                 # numeric terminator
                 n = terminator
                 if lb < n:
diff --git a/Lib/asyncore.py b/Lib/asyncore.py
index 29099bd..105982f 100644
--- a/Lib/asyncore.py
+++ b/Lib/asyncore.py
@@ -633,7 +633,11 @@
         write = send
 
         def close(self):
-            os.close(self.fd)
+            if self.fd < 0:
+                return
+            fd = self.fd
+            self.fd = -1
+            os.close(fd)
 
         def fileno(self):
             return self.fd
diff --git a/Lib/bsddb/test/test_associate.py b/Lib/bsddb/test/test_associate.py
index 7a49e11..4a8d2ae 100644
--- a/Lib/bsddb/test/test_associate.py
+++ b/Lib/bsddb/test/test_associate.py
@@ -114,6 +114,22 @@
             dupDB.close()
             self.fail("DBError exception was expected")
 
+    @unittest.skipUnless(db.version() >= (4, 6), 'Needs 4.6+')
+    def test_associateListError(self):
+        db1 = db.DB(self.env)
+        db1.open('bad.db', "a.db", db.DB_BTREE, db.DB_CREATE)
+        db2 = db.DB(self.env)
+        db2.open('bad.db', "b.db", db.DB_BTREE, db.DB_CREATE)
+
+        db1.associate(db2, lambda a, b: [0])
+
+        msg = "TypeError: The list returned by DB->associate callback" \
+              " should be a list of strings."
+        with test_support.captured_output("stderr") as s:
+            db1.put("0", "1")
+        db1.close()
+        db2.close()
+        self.assertEquals(s.getvalue().strip(), msg)
 
 
 #----------------------------------------------------------------------
@@ -233,7 +249,7 @@
         self.assertEqual(vals, None, vals)
 
         vals = secDB.pget('Unknown', txn=txn)
-        self.assertTrue(vals[0] == 99 or vals[0] == '99', vals)
+        self.assertIn(vals[0], (99, '99'), vals)
         vals[1].index('Unknown')
         vals[1].index('Unnamed')
         vals[1].index('unknown')
@@ -247,7 +263,8 @@
             if type(self.keytype) == type(''):
                 self.assertTrue(int(rec[0]))  # for primary db, key is a number
             else:
-                self.assertTrue(rec[0] and type(rec[0]) == type(0))
+                self.assertTrue(rec[0])
+                self.assertIs(type(rec[0]), int)
             count = count + 1
             if verbose:
                 print rec
@@ -262,7 +279,7 @@
 
         # test cursor pget
         vals = self.cur.pget('Unknown', flags=db.DB_LAST)
-        self.assertTrue(vals[1] == 99 or vals[1] == '99', vals)
+        self.assertIn(vals[1], (99, '99'), vals)
         self.assertEqual(vals[0], 'Unknown')
         vals[2].index('Unknown')
         vals[2].index('Unnamed')
diff --git a/Lib/bsddb/test/test_basics.py b/Lib/bsddb/test/test_basics.py
index 1459d36..6b8cf7d 100644
--- a/Lib/bsddb/test/test_basics.py
+++ b/Lib/bsddb/test/test_basics.py
@@ -597,7 +597,7 @@
 
         d.put("abcde", "ABCDE");
         num = d.truncate()
-        self.assertTrue(num >= 1, "truncate returned <= 0 on non-empty database")
+        self.assertGreaterEqual(num, 1, "truncate returned <= 0 on non-empty database")
         num = d.truncate()
         self.assertEqual(num, 0,
                 "truncate on empty DB returned nonzero (%r)" % (num,))
@@ -616,9 +616,9 @@
     if db.version() >= (4, 6):
         def test08_exists(self) :
             self.d.put("abcde", "ABCDE")
-            self.assertTrue(self.d.exists("abcde") == True,
+            self.assertEqual(self.d.exists("abcde"), True,
                     "DB->exists() returns wrong value")
-            self.assertTrue(self.d.exists("x") == False,
+            self.assertEqual(self.d.exists("x"), False,
                     "DB->exists() returns wrong value")
 
     #----------------------------------------
@@ -773,7 +773,7 @@
             if verbose:
                 print 'log file: ' + log
             logs = self.env.log_archive(db.DB_ARCH_REMOVE)
-            self.assertTrue(not logs)
+            self.assertFalse(logs)
 
         self.txn = self.env.txn_begin()
 
@@ -785,9 +785,9 @@
             self.d.put("abcde", "ABCDE", txn=txn)
             txn.commit()
             txn = self.env.txn_begin()
-            self.assertTrue(self.d.exists("abcde", txn=txn) == True,
+            self.assertEqual(self.d.exists("abcde", txn=txn), True,
                     "DB->exists() returns wrong value")
-            self.assertTrue(self.d.exists("x", txn=txn) == False,
+            self.assertEqual(self.d.exists("x", txn=txn), False,
                     "DB->exists() returns wrong value")
             txn.abort()
 
@@ -802,7 +802,7 @@
         d.put("abcde", "ABCDE");
         txn = self.env.txn_begin()
         num = d.truncate(txn)
-        self.assertTrue(num >= 1, "truncate returned <= 0 on non-empty database")
+        self.assertGreaterEqual(num, 1, "truncate returned <= 0 on non-empty database")
         num = d.truncate(txn)
         self.assertEqual(num, 0,
                 "truncate on empty DB returned nonzero (%r)" % (num,))
@@ -1086,7 +1086,7 @@
         a = "example of private object"
         self.obj.set_private(a)
         b = self.obj.get_private()
-        self.assertTrue(a is b)  # Object identity
+        self.assertIs(a, b)  # Object identity
 
     def test03_leak_assignment(self) :
         a = "example of private object"
diff --git a/Lib/bsddb/test/test_dbenv.py b/Lib/bsddb/test/test_dbenv.py
index 76ef7db..5429ca5 100644
--- a/Lib/bsddb/test/test_dbenv.py
+++ b/Lib/bsddb/test/test_dbenv.py
@@ -54,15 +54,15 @@
                 self.env.set_cache_max(0, size)
                 size2 = self.env.get_cache_max()
                 self.assertEqual(0, size2[0])
-                self.assertTrue(size <= size2[1])
-                self.assertTrue(2*size > size2[1])
+                self.assertLessEqual(size, size2[1])
+                self.assertGreater(2*size, size2[1])
 
     if db.version() >= (4, 4) :
         def test_mutex_stat(self) :
             self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL |
                     db.DB_INIT_LOCK)
             stat = self.env.mutex_stat()
-            self.assertTrue("mutex_inuse_max" in stat)
+            self.assertIn("mutex_inuse_max", stat)
 
         def test_lg_filemode(self) :
             for i in [0600, 0660, 0666] :
@@ -128,8 +128,8 @@
                 i = i*1024*1024
                 self.env.set_lg_regionmax(i)
                 j = self.env.get_lg_regionmax()
-                self.assertTrue(i <= j)
-                self.assertTrue(2*i > j)
+                self.assertLessEqual(i, j)
+                self.assertGreater(2*i, j)
 
         def test_lk_detect(self) :
             flags= [db.DB_LOCK_DEFAULT, db.DB_LOCK_EXPIRE, db.DB_LOCK_MAXLOCKS,
@@ -150,10 +150,10 @@
         def test_lg_bsize(self) :
             log_size = 70*1024
             self.env.set_lg_bsize(log_size)
-            self.assertTrue(self.env.get_lg_bsize() >= log_size)
-            self.assertTrue(self.env.get_lg_bsize() < 4*log_size)
+            self.assertGreaterEqual(self.env.get_lg_bsize(), log_size)
+            self.assertLess(self.env.get_lg_bsize(), 4*log_size)
             self.env.set_lg_bsize(4*log_size)
-            self.assertTrue(self.env.get_lg_bsize() >= 4*log_size)
+            self.assertGreaterEqual(self.env.get_lg_bsize(), 4*log_size)
 
         def test_setget_data_dirs(self) :
             dirs = ("a", "b", "c", "d")
@@ -185,7 +185,7 @@
             self.assertEqual(cachesize2[0], cachesize3[0])
             self.assertEqual(cachesize2[2], cachesize3[2])
             # In Berkeley DB 5.1, the cachesize can change when opening the Env
-            self.assertTrue(cachesize2[1] <= cachesize3[1])
+            self.assertLessEqual(cachesize2[1], cachesize3[1])
 
         def test_set_cachesize_dbenv_db(self) :
             # You can not configure the cachesize using
@@ -299,7 +299,7 @@
             msg = "This is a test..."
             self.env.log_printf(msg)
             logc = self.env.log_cursor()
-            self.assertTrue(msg in (logc.last()[1]))
+            self.assertIn(msg, logc.last()[1])
 
     if db.version() >= (4, 7) :
         def test_log_config(self) :
@@ -341,21 +341,21 @@
             txn.commit()
             logc = self.env.log_cursor()
             logc.last()  # Skip the commit
-            self.assertTrue(msg in (logc.prev()[1]))
+            self.assertIn(msg, logc.prev()[1])
 
             msg = "This is another test..."
             txn = self.env.txn_begin()
             self.env.log_printf(msg, txn=txn)
             txn.abort()  # Do not store the new message
             logc.last()  # Skip the abort
-            self.assertTrue(msg not in (logc.prev()[1]))
+            self.assertNotIn(msg, logc.prev()[1])
 
             msg = "This is a third test..."
             txn = self.env.txn_begin()
             self.env.log_printf(msg, txn=txn)
             txn.commit()  # Do not store the new message
             logc.last()  # Skip the commit
-            self.assertTrue(msg in (logc.prev()[1]))
+            self.assertIn(msg, logc.prev()[1])
 
 
 class DBEnv_memp(DBEnv):
@@ -372,39 +372,39 @@
 
     def test_memp_1_trickle(self) :
         self.db.put("hi", "bye")
-        self.assertTrue(self.env.memp_trickle(100) > 0)
+        self.assertGreater(self.env.memp_trickle(100), 0)
 
 # Preserve the order, do "memp_trickle" test first
     def test_memp_2_sync(self) :
         self.db.put("hi", "bye")
         self.env.memp_sync()  # Full flush
         # Nothing to do...
-        self.assertTrue(self.env.memp_trickle(100) == 0)
+        self.assertEqual(self.env.memp_trickle(100), 0)
 
         self.db.put("hi", "bye2")
         self.env.memp_sync((1, 0))  # NOP, probably
         # Something to do... or not
-        self.assertTrue(self.env.memp_trickle(100) >= 0)
+        self.assertGreaterEqual(self.env.memp_trickle(100), 0)
 
         self.db.put("hi", "bye3")
         self.env.memp_sync((123, 99))  # Full flush
         # Nothing to do...
-        self.assertTrue(self.env.memp_trickle(100) == 0)
+        self.assertEqual(self.env.memp_trickle(100), 0)
 
     def test_memp_stat_1(self) :
         stats = self.env.memp_stat()  # No param
-        self.assertTrue(len(stats)==2)
-        self.assertTrue("cache_miss" in stats[0])
+        self.assertEqual(len(stats), 2)
+        self.assertIn("cache_miss", stats[0])
         stats = self.env.memp_stat(db.DB_STAT_CLEAR)  # Positional param
-        self.assertTrue("cache_miss" in stats[0])
+        self.assertIn("cache_miss", stats[0])
         stats = self.env.memp_stat(flags=0)  # Keyword param
-        self.assertTrue("cache_miss" in stats[0])
+        self.assertIn("cache_miss", stats[0])
 
     def test_memp_stat_2(self) :
         stats=self.env.memp_stat()[1]
-        self.assertTrue(len(stats))==1
-        self.assertTrue("test" in stats)
-        self.assertTrue("page_in" in stats["test"])
+        self.assertEqual(len(stats), 1)
+        self.assertIn("test", stats)
+        self.assertIn("page_in", stats["test"])
 
 class DBEnv_logcursor(DBEnv):
     def setUp(self):
@@ -426,28 +426,28 @@
         DBEnv.tearDown(self)
 
     def _check_return(self, value) :
-        self.assertTrue(isinstance(value, tuple))
+        self.assertIsInstance(value, tuple)
         self.assertEqual(len(value), 2)
-        self.assertTrue(isinstance(value[0], tuple))
+        self.assertIsInstance(value[0], tuple)
         self.assertEqual(len(value[0]), 2)
-        self.assertTrue(isinstance(value[0][0], int))
-        self.assertTrue(isinstance(value[0][1], int))
-        self.assertTrue(isinstance(value[1], str))
+        self.assertIsInstance(value[0][0], int)
+        self.assertIsInstance(value[0][1], int)
+        self.assertIsInstance(value[1], str)
 
     # Preserve test order
     def test_1_first(self) :
         logc = self.env.log_cursor()
         v = logc.first()
         self._check_return(v)
-        self.assertTrue((1, 1) < v[0])
-        self.assertTrue(len(v[1])>0)
+        self.assertLess((1, 1), v[0])
+        self.assertGreater(len(v[1]), 0)
 
     def test_2_last(self) :
         logc = self.env.log_cursor()
         lsn_first = logc.first()[0]
         v = logc.last()
         self._check_return(v)
-        self.assertTrue(lsn_first < v[0])
+        self.assertLess(lsn_first, v[0])
 
     def test_3_next(self) :
         logc = self.env.log_cursor()
@@ -456,16 +456,16 @@
         lsn_first = logc.first()[0]
         v = logc.next()
         self._check_return(v)
-        self.assertTrue(lsn_first < v[0])
-        self.assertTrue(lsn_last > v[0])
+        self.assertLess(lsn_first, v[0])
+        self.assertGreater(lsn_last, v[0])
 
         v2 = logc.next()
-        self.assertTrue(v2[0] > v[0])
-        self.assertTrue(lsn_last > v2[0])
+        self.assertGreater(v2[0], v[0])
+        self.assertGreater(lsn_last, v2[0])
 
         v3 = logc.next()
-        self.assertTrue(v3[0] > v2[0])
-        self.assertTrue(lsn_last > v3[0])
+        self.assertGreater(v3[0], v2[0])
+        self.assertGreater(lsn_last, v3[0])
 
     def test_4_prev(self) :
         logc = self.env.log_cursor()
@@ -474,16 +474,16 @@
         lsn_last = logc.last()[0]
         v = logc.prev()
         self._check_return(v)
-        self.assertTrue(lsn_first < v[0])
-        self.assertTrue(lsn_last > v[0])
+        self.assertLess(lsn_first, v[0])
+        self.assertGreater(lsn_last, v[0])
 
         v2 = logc.prev()
-        self.assertTrue(v2[0] < v[0])
-        self.assertTrue(lsn_first < v2[0])
+        self.assertLess(v2[0], v[0])
+        self.assertLess(lsn_first, v2[0])
 
         v3 = logc.prev()
-        self.assertTrue(v3[0] < v2[0])
-        self.assertTrue(lsn_first < v3[0])
+        self.assertLess(v3[0], v2[0])
+        self.assertLess(lsn_first, v3[0])
 
     def test_5_current(self) :
         logc = self.env.log_cursor()
diff --git a/Lib/bsddb/test/test_dbshelve.py b/Lib/bsddb/test/test_dbshelve.py
index e5609c5..6ec1e28 100644
--- a/Lib/bsddb/test/test_dbshelve.py
+++ b/Lib/bsddb/test/test_dbshelve.py
@@ -248,7 +248,7 @@
             self.assertEqual(value.L, [x] * 10)
 
         else:
-            self.assertTrue(0, 'Unknown key type, fix the test')
+            self.fail('Unknown key type, fix the test')
 
 #----------------------------------------------------------------------
 
diff --git a/Lib/bsddb/test/test_dbtables.py b/Lib/bsddb/test/test_dbtables.py
index 250c492..ad8565d 100644
--- a/Lib/bsddb/test/test_dbtables.py
+++ b/Lib/bsddb/test/test_dbtables.py
@@ -82,8 +82,8 @@
             colval = pickle.loads(values[0][colname])
         else :
             colval = pickle.loads(bytes(values[0][colname], "iso8859-1"))
-        self.assertTrue(colval > 3.141)
-        self.assertTrue(colval < 3.142)
+        self.assertGreater(colval, 3.141)
+        self.assertLess(colval, 3.142)
 
 
     def test02(self):
diff --git a/Lib/bsddb/test/test_distributed_transactions.py b/Lib/bsddb/test/test_distributed_transactions.py
index 9058575..65ace9c 100644
--- a/Lib/bsddb/test/test_distributed_transactions.py
+++ b/Lib/bsddb/test/test_distributed_transactions.py
@@ -79,7 +79,7 @@
         recovered_txns=self.dbenv.txn_recover()
         self.assertEqual(self.num_txns,len(recovered_txns))
         for gid,txn in recovered_txns :
-            self.assertTrue(gid in txns)
+            self.assertIn(gid, txns)
         del txn
         del recovered_txns
 
@@ -122,7 +122,7 @@
     # Be sure there are not pending transactions.
     # Check also database size.
         recovered_txns=self.dbenv.txn_recover()
-        self.assertTrue(len(recovered_txns)==0)
+        self.assertEqual(len(recovered_txns), 0)
         self.assertEqual(len(committed_txns),self.db.stat()["nkeys"])
 
 class DBTxn_distributedSYNC(DBTxn_distributed):
diff --git a/Lib/bsddb/test/test_lock.py b/Lib/bsddb/test/test_lock.py
index fd87ea2..22bf8cd 100644
--- a/Lib/bsddb/test/test_lock.py
+++ b/Lib/bsddb/test/test_lock.py
@@ -2,6 +2,7 @@
 TestCases for testing the locking sub-system.
 """
 
+import sys
 import time
 
 import unittest
@@ -10,7 +11,6 @@
 
 if have_threads :
     from threading import Thread
-    import sys
     if sys.version_info[0] < 3 :
         from threading import currentThread
     else :
@@ -129,7 +129,14 @@
         end_time=time.time()
         deadlock_detection.end=True
         # Floating point rounding
-        self.assertTrue((end_time-start_time) >= 0.0999)
+        if sys.platform == 'win32':
+            # bpo-30850: On Windows, tolerate 50 ms whereas 100 ms is expected.
+            # The lock sometimes times out after only 58 ms. Windows clocks
+            # have a bad resolution and bad accuracy.
+            min_dt = 0.050
+        else:
+            min_dt = 0.0999
+        self.assertGreaterEqual(end_time-start_time, min_dt)
         self.env.lock_put(lock)
         t.join()
 
@@ -137,7 +144,7 @@
         self.env.lock_id_free(anID2)
 
         if db.version() >= (4,6):
-            self.assertTrue(deadlock_detection.count>0)
+            self.assertGreater(deadlock_detection.count, 0)
 
     def theThread(self, lockType):
         import sys
diff --git a/Lib/bsddb/test/test_misc.py b/Lib/bsddb/test/test_misc.py
index b1e928f..e2ff2af 100644
--- a/Lib/bsddb/test/test_misc.py
+++ b/Lib/bsddb/test/test_misc.py
@@ -25,7 +25,7 @@
     def test02_db_home(self):
         env = db.DBEnv()
         # check for crash fixed when db_home is used before open()
-        self.assertTrue(env.db_home is None)
+        self.assertIsNone(env.db_home)
         env.open(self.homeDir, db.DB_CREATE)
         if sys.version_info[0] < 3 :
             self.assertEqual(self.homeDir, env.db_home)
diff --git a/Lib/bsddb/test/test_recno.py b/Lib/bsddb/test/test_recno.py
index b0e30de..1097420 100644
--- a/Lib/bsddb/test/test_recno.py
+++ b/Lib/bsddb/test/test_recno.py
@@ -18,7 +18,7 @@
         def assertIsInstance(self, obj, datatype, msg=None) :
             return self.assertEqual(type(obj), datatype, msg=msg)
         def assertGreaterEqual(self, a, b, msg=None) :
-            return self.assertTrue(a>=b, msg=msg)
+            return self.assertGreaterEqual(a, b, msg=msg)
 
 
     def setUp(self):
diff --git a/Lib/bsddb/test/test_replication.py b/Lib/bsddb/test/test_replication.py
index 12ab2dd..536d25d 100644
--- a/Lib/bsddb/test/test_replication.py
+++ b/Lib/bsddb/test/test_replication.py
@@ -186,20 +186,18 @@
         d = d.values()[0]  # There is only one
         self.assertEqual(d[0], "127.0.0.1")
         self.assertEqual(d[1], client_port)
-        self.assertTrue((d[2]==db.DB_REPMGR_CONNECTED) or \
-                (d[2]==db.DB_REPMGR_DISCONNECTED))
+        self.assertIn(d[2], (db.DB_REPMGR_CONNECTED, db.DB_REPMGR_DISCONNECTED))
 
         d = self.dbenvClient.repmgr_site_list()
         self.assertEqual(len(d), 1)
         d = d.values()[0]  # There is only one
         self.assertEqual(d[0], "127.0.0.1")
         self.assertEqual(d[1], master_port)
-        self.assertTrue((d[2]==db.DB_REPMGR_CONNECTED) or \
-                (d[2]==db.DB_REPMGR_DISCONNECTED))
+        self.assertIn(d[2], (db.DB_REPMGR_CONNECTED, db.DB_REPMGR_DISCONNECTED))
 
         if db.version() >= (4,6) :
             d = self.dbenvMaster.repmgr_stat(flags=db.DB_STAT_CLEAR);
-            self.assertTrue("msgs_queued" in d)
+            self.assertIn("msgs_queued", d)
 
         self.dbMaster=db.DB(self.dbenvMaster)
         txn=self.dbenvMaster.txn_begin()
@@ -247,7 +245,7 @@
         if time.time()>=timeout and startup_timeout:
             self.skipTest("replication test skipped due to random failure, "
                 "see issue 3892")
-        self.assertTrue(time.time()<timeout)
+        self.assertLess(time.time(), timeout)
         self.assertEqual("123", v)
 
         txn=self.dbenvMaster.txn_begin()
@@ -260,7 +258,7 @@
             txn.commit()
             if v is None :
                 time.sleep(0.02)
-        self.assertTrue(time.time()<timeout)
+        self.assertLess(time.time(), timeout)
         self.assertEqual(None, v)
 
 class DBBaseReplication(DBReplication) :
@@ -381,7 +379,7 @@
         while (time.time()<timeout) and not (self.confirmed_master and
                 self.client_startupdone) :
             time.sleep(0.02)
-        self.assertTrue(time.time()<timeout)
+        self.assertLess(time.time(), timeout)
 
         self.dbMaster=db.DB(self.dbenvMaster)
         txn=self.dbenvMaster.txn_begin()
@@ -410,7 +408,7 @@
             break
 
         d = self.dbenvMaster.rep_stat(flags=db.DB_STAT_CLEAR);
-        self.assertTrue("master_changes" in d)
+        self.assertIn("master_changes", d)
 
         txn=self.dbenvMaster.txn_begin()
         self.dbMaster.put("ABC", "123", txn=txn)
@@ -424,7 +422,7 @@
             txn.commit()
             if v is None :
                 time.sleep(0.02)
-        self.assertTrue(time.time()<timeout)
+        self.assertLess(time.time(), timeout)
         self.assertEqual("123", v)
 
         txn=self.dbenvMaster.txn_begin()
@@ -437,7 +435,7 @@
             txn.commit()
             if v is None :
                 time.sleep(0.02)
-        self.assertTrue(time.time()<timeout)
+        self.assertLess(time.time(), timeout)
         self.assertEqual(None, v)
 
     if db.version() >= (4,7) :
diff --git a/Lib/bsddb/test/test_sequence.py b/Lib/bsddb/test/test_sequence.py
index f0aa12a..763a947 100644
--- a/Lib/bsddb/test/test_sequence.py
+++ b/Lib/bsddb/test/test_sequence.py
@@ -82,7 +82,7 @@
         stat = self.seq.stat()
         for param in ('nowait', 'min', 'max', 'value', 'current',
                       'flags', 'cache_size', 'last_value', 'wait'):
-            self.assertTrue(param in stat, "parameter %s isn't in stat info" % param)
+            self.assertIn(param, stat, "parameter %s isn't in stat info" % param)
 
     if db.version() >= (4,7) :
         # This code checks a crash solved in Berkeley DB 4.7
diff --git a/Lib/bsddb/test/test_thread.py b/Lib/bsddb/test/test_thread.py
index 42212e9..ce4963d 100644
--- a/Lib/bsddb/test/test_thread.py
+++ b/Lib/bsddb/test/test_thread.py
@@ -85,7 +85,7 @@
         readers_per_writer=self.readers//self.writers
         self.assertEqual(self.records,self.writers*records_per_writer)
         self.assertEqual(self.readers,self.writers*readers_per_writer)
-        self.assertTrue((records_per_writer%readers_per_writer)==0)
+        self.assertEqual(records_per_writer%readers_per_writer, 0)
         readers = []
 
         for x in xrange(self.readers):
@@ -213,7 +213,7 @@
         readers_per_writer=self.readers//self.writers
         self.assertEqual(self.records,self.writers*records_per_writer)
         self.assertEqual(self.readers,self.writers*readers_per_writer)
-        self.assertTrue((records_per_writer%readers_per_writer)==0)
+        self.assertEqual(records_per_writer%readers_per_writer, 0)
 
         readers = []
         for x in xrange(self.readers):
@@ -339,7 +339,7 @@
         readers_per_writer=self.readers//self.writers
         self.assertEqual(self.records,self.writers*records_per_writer)
         self.assertEqual(self.readers,self.writers*readers_per_writer)
-        self.assertTrue((records_per_writer%readers_per_writer)==0)
+        self.assertEqual(records_per_writer%readers_per_writer, 0)
 
         readers=[]
         for x in xrange(self.readers):
diff --git a/Lib/cProfile.py b/Lib/cProfile.py
index b2efd04..d377094 100755
--- a/Lib/cProfile.py
+++ b/Lib/cProfile.py
@@ -64,11 +64,11 @@
 # ____________________________________________________________
 
 class Profile(_lsprof.Profiler):
-    """Profile(custom_timer=None, time_unit=None, subcalls=True, builtins=True)
+    """Profile(timer=None, timeunit=None, subcalls=True, builtins=True)
 
     Builds a profiler object using the specified timer function.
     The default timer is a fast built-in one based on real time.
-    For custom timer functions returning integers, time_unit can
+    For custom timer functions returning integers, timeunit can
     be a float specifying a scale (i.e. how long each integer unit
     is, in seconds).
     """
diff --git a/Lib/cgitb.py b/Lib/cgitb.py
index 8acc4b7..3689f8a 100644
--- a/Lib/cgitb.py
+++ b/Lib/cgitb.py
@@ -125,7 +125,7 @@
         args, varargs, varkw, locals = inspect.getargvalues(frame)
         call = ''
         if func != '?':
-            call = 'in ' + strong(func) + \
+            call = 'in ' + strong(pydoc.html.escape(func)) + \
                 inspect.formatargvalues(args, varargs, varkw, locals,
                     formatvalue=lambda value: '=' + pydoc.html.repr(value))
 
@@ -285,7 +285,7 @@
 
         if self.display:
             if plain:
-                doc = doc.replace('&', '&amp;').replace('<', '&lt;')
+                doc = pydoc.html.escape(doc)
                 self.file.write('<pre>' + doc + '</pre>\n')
             else:
                 self.file.write(doc + '\n')
diff --git a/Lib/codecs.py b/Lib/codecs.py
index 590238e..e120d63 100644
--- a/Lib/codecs.py
+++ b/Lib/codecs.py
@@ -472,15 +472,17 @@
             self.charbuffer = "".join(self.linebuffer)
             self.linebuffer = None
 
+        if chars < 0:
+            # For compatibility with other read() methods that take a
+            # single argument
+            chars = size
+
         # read until we get the required number of characters (if available)
         while True:
             # can the request be satisfied from the character buffer?
             if chars >= 0:
                 if len(self.charbuffer) >= chars:
                     break
-            elif size >= 0:
-                if len(self.charbuffer) >= size:
-                    break
             # we need more data
             if size < 0:
                 newdata = self.stream.read()
diff --git a/Lib/compiler/pyassem.py b/Lib/compiler/pyassem.py
index f52f7d0..b82073e 100644
--- a/Lib/compiler/pyassem.py
+++ b/Lib/compiler/pyassem.py
@@ -581,7 +581,7 @@
 
 def twobyte(val):
     """Convert an int argument into high and low bytes"""
-    assert isinstance(val, int)
+    assert isinstance(val, (int, long))
     return divmod(val, 256)
 
 class LineAddrTable:
diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py
index d4f4613..ba5c03c 100644
--- a/Lib/compiler/transformer.py
+++ b/Lib/compiler/transformer.py
@@ -1526,7 +1526,7 @@
 def debug_tree(tree):
     l = []
     for elt in tree:
-        if isinstance(elt, int):
+        if isinstance(elt, (int, long)):
             l.append(_names.get(elt, elt))
         elif isinstance(elt, str):
             l.append(elt)
diff --git a/Lib/copy_reg.py b/Lib/copy_reg.py
index db17150..8943077 100644
--- a/Lib/copy_reg.py
+++ b/Lib/copy_reg.py
@@ -127,7 +127,11 @@
                         continue
                     # mangled names
                     elif name.startswith('__') and not name.endswith('__'):
-                        names.append('_%s%s' % (c.__name__, name))
+                        stripped = c.__name__.lstrip('_')
+                        if stripped:
+                            names.append('_%s%s' % (stripped, name))
+                        else:
+                            names.append(name)
                     else:
                         names.append(name)
 
diff --git a/Lib/csv.py b/Lib/csv.py
index c155ada..70c53ae 100644
--- a/Lib/csv.py
+++ b/Lib/csv.py
@@ -217,7 +217,7 @@
         matches = []
         for restr in ('(?P<delim>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?P=delim)', # ,".*?",
                       '(?:^|\n)(?P<quote>["\']).*?(?P=quote)(?P<delim>[^\w\n"\'])(?P<space> ?)',   #  ".*?",
-                      '(?P<delim>>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?:$|\n)',  # ,".*?"
+                      '(?P<delim>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?:$|\n)',   # ,".*?"
                       '(?:^|\n)(?P<quote>["\']).*?(?P=quote)(?:$|\n)'):                            #  ".*?" (no delim, no space)
             regexp = re.compile(restr, re.DOTALL | re.MULTILINE)
             matches = regexp.findall(data)
diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py
index e24cfd2..88c85ff 100644
--- a/Lib/ctypes/__init__.py
+++ b/Lib/ctypes/__init__.py
@@ -342,6 +342,10 @@
     """
     _func_flags_ = _FUNCFLAG_CDECL
     _func_restype_ = c_int
+    # default values for repr
+    _name = '<uninitialized>'
+    _handle = 0
+    _FuncPtr = None
 
     def __init__(self, name, mode=DEFAULT_MODE, handle=None,
                  use_errno=False,
diff --git a/Lib/ctypes/macholib/fetch_macholib.bat b/Lib/ctypes/macholib/fetch_macholib.bat
index f474d5c..f9e1c0d 100644
--- a/Lib/ctypes/macholib/fetch_macholib.bat
+++ b/Lib/ctypes/macholib/fetch_macholib.bat
@@ -1 +1 @@
-svn export --force http://svn.red-bean.com/bob/macholib/trunk/macholib/ .

+svn export --force http://svn.red-bean.com/bob/macholib/trunk/macholib/ .
diff --git a/Lib/ctypes/test/test_anon.py b/Lib/ctypes/test/test_anon.py
index d892b59..2c28b7f 100644
--- a/Lib/ctypes/test/test_anon.py
+++ b/Lib/ctypes/test/test_anon.py
@@ -1,4 +1,5 @@
 import unittest
+from test.support import cpython_only
 from ctypes import *
 
 class AnonTest(unittest.TestCase):
@@ -35,6 +36,18 @@
                                                       {"_fields_": [],
                                                        "_anonymous_": ["x"]}))
 
+    @cpython_only
+    def test_issue31490(self):
+        # There shouldn't be an assertion failure in case the class has an
+        # attribute whose name is specified in _anonymous_ but not in _fields_.
+
+        # AttributeError: 'x' is specified in _anonymous_ but not in _fields_
+        with self.assertRaises(AttributeError):
+            class Name(Structure):
+                _fields_ = []
+                _anonymous_ = ["x"]
+                x = 42
+
     def test_nested(self):
         class ANON_S(Structure):
             _fields_ = [("a", c_int)]
diff --git a/Lib/ctypes/test/test_as_parameter.py b/Lib/ctypes/test/test_as_parameter.py
index f2fe10a..de730e9 100644
--- a/Lib/ctypes/test/test_as_parameter.py
+++ b/Lib/ctypes/test/test_as_parameter.py
@@ -24,7 +24,7 @@
         f.argtypes = [c_byte, c_wchar, c_int, c_long, c_float, c_double]
         result = f(self.wrap(1), self.wrap(u"x"), self.wrap(3), self.wrap(4), self.wrap(5.0), self.wrap(6.0))
         self.assertEqual(result, 139)
-        self.assertTrue(type(result), int)
+        self.assertIs(type(result), int)
 
     def test_pointers(self):
         f = dll._testfunc_p_p
diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py
index bf894d4..db3d9e7 100644
--- a/Lib/ctypes/test/test_callbacks.py
+++ b/Lib/ctypes/test/test_callbacks.py
@@ -250,6 +250,7 @@
     def test_callback_large_struct(self):
         class Check: pass
 
+        # This should mirror the structure in Modules/_ctypes/_ctypes_test.c
         class X(Structure):
             _fields_ = [
                 ('first', c_ulong),
@@ -261,6 +262,11 @@
             check.first = s.first
             check.second = s.second
             check.third = s.third
+            # See issue #29565.
+            # The structure should be passed by value, so
+            # any changes to it should not be reflected in
+            # the value passed
+            s.first = s.second = s.third = 0x0badf00d
 
         check = Check()
         s = X()
@@ -281,6 +287,11 @@
         self.assertEqual(check.first, 0xdeadbeef)
         self.assertEqual(check.second, 0xcafebabe)
         self.assertEqual(check.third, 0x0bad1dea)
+        # See issue #29565.
+        # Ensure that the original struct is unchanged.
+        self.assertEqual(s.first, check.first)
+        self.assertEqual(s.second, check.second)
+        self.assertEqual(s.third, check.third)
 
 ################################################################
 
diff --git a/Lib/ctypes/test/test_frombuffer.py b/Lib/ctypes/test/test_frombuffer.py
index d708ed6..99c32e0 100644
--- a/Lib/ctypes/test/test_frombuffer.py
+++ b/Lib/ctypes/test/test_frombuffer.py
@@ -78,12 +78,21 @@
                           (c_int * 1).from_buffer_copy, a, 16 * sizeof(c_int))
 
     def test_abstract(self):
+        from ctypes import _Pointer, _SimpleCData, _CFuncPtr
+
         self.assertRaises(TypeError, Array.from_buffer, bytearray(10))
         self.assertRaises(TypeError, Structure.from_buffer, bytearray(10))
         self.assertRaises(TypeError, Union.from_buffer, bytearray(10))
+        self.assertRaises(TypeError, _CFuncPtr.from_buffer, bytearray(10))
+        self.assertRaises(TypeError, _Pointer.from_buffer, bytearray(10))
+        self.assertRaises(TypeError, _SimpleCData.from_buffer, bytearray(10))
+
         self.assertRaises(TypeError, Array.from_buffer_copy, b"123")
         self.assertRaises(TypeError, Structure.from_buffer_copy, b"123")
         self.assertRaises(TypeError, Union.from_buffer_copy, b"123")
+        self.assertRaises(TypeError, _CFuncPtr.from_buffer_copy, b"123")
+        self.assertRaises(TypeError, _Pointer.from_buffer_copy, b"123")
+        self.assertRaises(TypeError, _SimpleCData.from_buffer_copy, b"123")
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/ctypes/test/test_funcptr.py b/Lib/ctypes/test/test_funcptr.py
index 58cbb47..5750303 100644
--- a/Lib/ctypes/test/test_funcptr.py
+++ b/Lib/ctypes/test/test_funcptr.py
@@ -123,5 +123,10 @@
         self.assertEqual(strtok(None, "\n"), "c")
         self.assertEqual(strtok(None, "\n"), None)
 
+    def test_abstract(self):
+        from ctypes import _CFuncPtr
+
+        self.assertRaises(TypeError, _CFuncPtr, 13, "name", 42, "iid")
+
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/ctypes/test/test_loading.py b/Lib/ctypes/test/test_loading.py
index 81a27e3..e64fff7 100644
--- a/Lib/ctypes/test/test_loading.py
+++ b/Lib/ctypes/test/test_loading.py
@@ -3,6 +3,7 @@
 import os
 from ctypes.util import find_library
 from ctypes.test import is_resource_enabled
+import test.test_support as support
 
 libc_name = None
 if os.name == "nt":
@@ -27,6 +28,12 @@
         CDLL(os.path.basename(libc_name))
         self.assertRaises(OSError, CDLL, self.unknowndll)
 
+    @support.requires_unicode
+    @unittest.skipUnless(libc_name is not None, 'could not find libc')
+    def test_load_unicode(self):
+        CDLL(unicode(libc_name))
+        self.assertRaises(OSError, CDLL, unicode(self.unknowndll))
+
     @unittest.skipUnless(libc_name is not None, 'could not find libc')
     @unittest.skipUnless(libc_name is not None and
                          os.path.basename(libc_name) == "libc.so.6",
diff --git a/Lib/ctypes/test/test_parameters.py b/Lib/ctypes/test/test_parameters.py
index 192d9ed..23c1b6e 100644
--- a/Lib/ctypes/test/test_parameters.py
+++ b/Lib/ctypes/test/test_parameters.py
@@ -1,5 +1,6 @@
 import unittest, sys
 from ctypes.test import need_symbol
+import test.support
 
 class SimpleTypesTestCase(unittest.TestCase):
 
@@ -174,6 +175,36 @@
         # ArgumentError: argument 1: ValueError: 99
         self.assertRaises(ArgumentError, func, 99)
 
+    def test_abstract(self):
+        from ctypes import (Array, Structure, Union, _Pointer,
+                            _SimpleCData, _CFuncPtr)
+
+        self.assertRaises(TypeError, Array.from_param, 42)
+        self.assertRaises(TypeError, Structure.from_param, 42)
+        self.assertRaises(TypeError, Union.from_param, 42)
+        self.assertRaises(TypeError, _CFuncPtr.from_param, 42)
+        self.assertRaises(TypeError, _Pointer.from_param, 42)
+        self.assertRaises(TypeError, _SimpleCData.from_param, 42)
+
+    @test.support.cpython_only
+    def test_issue31311(self):
+        # __setstate__ should neither raise a SystemError nor crash in case
+        # of a bad __dict__.
+        from ctypes import Structure
+
+        class BadStruct(Structure):
+            @property
+            def __dict__(self):
+                pass
+        with self.assertRaises(TypeError):
+            BadStruct().__setstate__({}, b'foo')
+
+        class WorseStruct(Structure):
+            @property
+            def __dict__(self):
+                1/0.0
+        with self.assertRaises(ZeroDivisionError):
+            WorseStruct().__setstate__({}, b'foo')
 
 ################################################################
 
diff --git a/Lib/ctypes/test/test_pep3118.py b/Lib/ctypes/test/test_pep3118.py
index 3e007e1..49a1356 100644
--- a/Lib/ctypes/test/test_pep3118.py
+++ b/Lib/ctypes/test/test_pep3118.py
@@ -109,6 +109,34 @@
 # This table contains format strings as they look on little endian
 # machines.  The test replaces '<' with '>' on big endian machines.
 #
+
+# Platform-specific type codes
+s_bool = {1: '?', 2: 'H', 4: 'L', 8: 'Q'}[sizeof(c_bool)]
+s_short = {2: 'h', 4: 'l', 8: 'q'}[sizeof(c_short)]
+s_ushort = {2: 'H', 4: 'L', 8: 'Q'}[sizeof(c_ushort)]
+s_int = {2: 'h', 4: 'i', 8: 'q'}[sizeof(c_int)]
+s_uint = {2: 'H', 4: 'I', 8: 'Q'}[sizeof(c_uint)]
+s_long = {4: 'l', 8: 'q'}[sizeof(c_long)]
+s_ulong = {4: 'L', 8: 'Q'}[sizeof(c_ulong)]
+s_longlong = "q"
+s_ulonglong = "Q"
+s_float = "f"
+s_double = "d"
+s_longdouble = "g"
+
+# Alias definitions in ctypes/__init__.py
+if c_int is c_long:
+    s_int = s_long
+if c_uint is c_ulong:
+    s_uint = s_ulong
+if c_longlong is c_long:
+    s_longlong = s_long
+if c_ulonglong is c_ulong:
+    s_ulonglong = s_ulong
+if c_longdouble is c_double:
+    s_longdouble = s_double
+
+
 native_types = [
     # type                      format                  shape           calc itemsize
 
@@ -117,52 +145,51 @@
     (c_char,                    "<c",                   None,           c_char),
     (c_byte,                    "<b",                   None,           c_byte),
     (c_ubyte,                   "<B",                   None,           c_ubyte),
-    (c_short,                   "<h",                   None,           c_short),
-    (c_ushort,                  "<H",                   None,           c_ushort),
+    (c_short,                   "<" + s_short,          None,           c_short),
+    (c_ushort,                  "<" + s_ushort,         None,           c_ushort),
 
-    # c_int and c_uint may be aliases to c_long
-    #(c_int,                     "<i",                   None,           c_int),
-    #(c_uint,                    "<I",                   None,           c_uint),
+    (c_int,                     "<" + s_int,            None,           c_int),
+    (c_uint,                    "<" + s_uint,           None,           c_uint),
 
-    (c_long,                    "<l",                   None,           c_long),
-    (c_ulong,                   "<L",                   None,           c_ulong),
+    (c_long,                    "<" + s_long,           None,           c_long),
+    (c_ulong,                   "<" + s_ulong,          None,           c_ulong),
 
-    # c_longlong and c_ulonglong are aliases on 64-bit platforms
-    #(c_longlong,                "<q",                   None,           c_longlong),
-    #(c_ulonglong,               "<Q",                   None,           c_ulonglong),
+    (c_longlong,                "<" + s_longlong,       None,           c_longlong),
+    (c_ulonglong,               "<" + s_ulonglong,      None,           c_ulonglong),
 
     (c_float,                   "<f",                   None,           c_float),
     (c_double,                  "<d",                   None,           c_double),
-    # c_longdouble may be an alias to c_double
 
-    (c_bool,                    "<?",                   None,           c_bool),
+    (c_longdouble,              "<" + s_longdouble,     None,           c_longdouble),
+
+    (c_bool,                    "<" + s_bool,           None,           c_bool),
     (py_object,                 "<O",                   None,           py_object),
 
     ## pointers
 
     (POINTER(c_byte),           "&<b",                  None,           POINTER(c_byte)),
-    (POINTER(POINTER(c_long)),  "&&<l",                 None,           POINTER(POINTER(c_long))),
+    (POINTER(POINTER(c_long)),  "&&<" + s_long,         None,           POINTER(POINTER(c_long))),
 
     ## arrays and pointers
 
     (c_double * 4,              "<d",                   (4,),           c_double),
     (c_float * 4 * 3 * 2,       "<f",                   (2,3,4),        c_float),
-    (POINTER(c_short) * 2,      "&<h",                  (2,),           POINTER(c_short)),
-    (POINTER(c_short) * 2 * 3,  "&<h",                  (3,2,),         POINTER(c_short)),
-    (POINTER(c_short * 2),      "&(2)<h",               None,           POINTER(c_short)),
+    (POINTER(c_short) * 2,      "&<" + s_short,         (2,),           POINTER(c_short)),
+    (POINTER(c_short) * 2 * 3,  "&<" + s_short,         (3,2,),         POINTER(c_short)),
+    (POINTER(c_short * 2),      "&(2)<" + s_short,      None,             POINTER(c_short)),
 
     ## structures and unions
 
-    (Point,                     "T{<l:x:<l:y:}",        None,           Point),
+    (Point,                     "T{<l:x:<l:y:}".replace('l', s_long),  None,  Point),
     # packed structures do not implement the pep
-    (PackedPoint,               "B",                    None,           PackedPoint),
-    (Point2,                    "T{<l:x:<l:y:}",        None,           Point2),
-    (EmptyStruct,               "T{}",                  None,           EmptyStruct),
+    (PackedPoint,               "B",                                   None,  PackedPoint),
+    (Point2,                    "T{<l:x:<l:y:}".replace('l', s_long),  None,  Point2),
+    (EmptyStruct,               "T{}",                                 None,  EmptyStruct),
     # the pep does't support unions
-    (aUnion,                    "B",                    None,           aUnion),
+    (aUnion,                    "B",                                   None,  aUnion),
     # structure with sub-arrays
-    (StructWithArrays,          "T{(2,3)<l:x:(4)T{<l:x:<l:y:}:y:}", None,  StructWithArrays),
-    (StructWithArrays * 3,      "T{(2,3)<l:x:(4)T{<l:x:<l:y:}:y:}", (3,),  StructWithArrays),
+    (StructWithArrays, "T{(2,3)<l:x:(4)T{<l:x:<l:y:}:y:}".replace('l', s_long), None, StructWithArrays),
+    (StructWithArrays * 3, "T{(2,3)<l:x:(4)T{<l:x:<l:y:}:y:}".replace('l', s_long), (3,), StructWithArrays),
 
     ## pointer to incomplete structure
     (Incomplete,                "B",                    None,           Incomplete),
@@ -170,7 +197,7 @@
 
     # 'Complete' is a structure that starts incomplete, but is completed after the
     # pointer type to it has been created.
-    (Complete,                  "T{<l:a:}",             None,           Complete),
+    (Complete,                  "T{<l:a:}".replace('l', s_long), None, Complete),
     # Unfortunately the pointer format string is not fixed...
     (POINTER(Complete),         "&B",                   None,           POINTER(Complete)),
 
@@ -193,10 +220,10 @@
 # and little endian machines.
 #
 endian_types = [
-    (BEPoint,                   "T{>l:x:>l:y:}",        None,           BEPoint),
-    (LEPoint,                   "T{<l:x:<l:y:}",        None,           LEPoint),
-    (POINTER(BEPoint),          "&T{>l:x:>l:y:}",       None,           POINTER(BEPoint)),
-    (POINTER(LEPoint),          "&T{<l:x:<l:y:}",       None,           POINTER(LEPoint)),
+    (BEPoint, "T{>l:x:>l:y:}".replace('l', s_long), None, BEPoint),
+    (LEPoint, "T{<l:x:<l:y:}".replace('l', s_long), None, LEPoint),
+    (POINTER(BEPoint), "&T{>l:x:>l:y:}".replace('l', s_long), None, POINTER(BEPoint)),
+    (POINTER(LEPoint), "&T{<l:x:<l:y:}".replace('l', s_long), None, POINTER(LEPoint)),
     ]
 
 if __name__ == "__main__":
diff --git a/Lib/ctypes/test/test_pointers.py b/Lib/ctypes/test/test_pointers.py
index 24b0546..4a8887c 100644
--- a/Lib/ctypes/test/test_pointers.py
+++ b/Lib/ctypes/test/test_pointers.py
@@ -210,6 +210,11 @@
         from ctypes import _pointer_type_cache
         del _pointer_type_cache[id(P)]
 
+    def test_abstract(self):
+        from ctypes import _Pointer
+
+        self.assertRaises(TypeError, _Pointer.set_type, 42)
+
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/ctypes/test/test_struct_fields.py b/Lib/ctypes/test/test_struct_fields.py
index 22eb3b0..8045cc8 100644
--- a/Lib/ctypes/test/test_struct_fields.py
+++ b/Lib/ctypes/test/test_struct_fields.py
@@ -46,5 +46,29 @@
         Y._fields_ = []
         self.assertRaises(AttributeError, setattr, X, "_fields_", [])
 
+    # __set__ and __get__ should raise a TypeError in case their self
+    # argument is not a ctype instance.
+    def test___set__(self):
+        class MyCStruct(Structure):
+            _fields_ = (("field", c_int),)
+        self.assertRaises(TypeError,
+                          MyCStruct.field.__set__, 'wrong type self', 42)
+
+        class MyCUnion(Union):
+            _fields_ = (("field", c_int),)
+        self.assertRaises(TypeError,
+                          MyCUnion.field.__set__, 'wrong type self', 42)
+
+    def test___get__(self):
+        class MyCStruct(Structure):
+            _fields_ = (("field", c_int),)
+        self.assertRaises(TypeError,
+                          MyCStruct.field.__get__, 'wrong type self', 42)
+
+        class MyCUnion(Union):
+            _fields_ = (("field", c_int),)
+        self.assertRaises(TypeError,
+                          MyCUnion.field.__get__, 'wrong type self', 42)
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py
index 5650189..9a863c9 100644
--- a/Lib/ctypes/test/test_structures.py
+++ b/Lib/ctypes/test/test_structures.py
@@ -3,6 +3,7 @@
 from ctypes.test import need_symbol
 from struct import calcsize
 import _testcapi
+import _ctypes_test
 
 class SubclassesTest(unittest.TestCase):
     def test_subclass(self):
@@ -401,6 +402,28 @@
                          (1, 0, 0, 0, 0, 0))
         self.assertRaises(TypeError, lambda: Z(1, 2, 3, 4, 5, 6, 7))
 
+    def test_pass_by_value(self):
+        # This should mirror the structure in Modules/_ctypes/_ctypes_test.c
+        class X(Structure):
+            _fields_ = [
+                ('first', c_ulong),
+                ('second', c_ulong),
+                ('third', c_ulong),
+            ]
+
+        s = X()
+        s.first = 0xdeadbeef
+        s.second = 0xcafebabe
+        s.third = 0x0bad1dea
+        dll = CDLL(_ctypes_test.__file__)
+        func = dll._testfunc_large_struct_update_value
+        func.argtypes = (X,)
+        func.restype = None
+        func(s)
+        self.assertEqual(s.first, 0xdeadbeef)
+        self.assertEqual(s.second, 0xcafebabe)
+        self.assertEqual(s.third, 0x0bad1dea)
+
 class PointerMemberTestCase(unittest.TestCase):
 
     def test(self):
diff --git a/Lib/curses/ascii.py b/Lib/curses/ascii.py
index 6a466e0..5b243be 100644
--- a/Lib/curses/ascii.py
+++ b/Lib/curses/ascii.py
@@ -53,19 +53,19 @@
 
 def isalnum(c): return isalpha(c) or isdigit(c)
 def isalpha(c): return isupper(c) or islower(c)
-def isascii(c): return _ctoi(c) <= 127          # ?
+def isascii(c): return 0 <= _ctoi(c) <= 127          # ?
 def isblank(c): return _ctoi(c) in (9, 32)
-def iscntrl(c): return _ctoi(c) <= 31 or _ctoi(c) == 127
-def isdigit(c): return _ctoi(c) >= 48 and _ctoi(c) <= 57
-def isgraph(c): return _ctoi(c) >= 33 and _ctoi(c) <= 126
-def islower(c): return _ctoi(c) >= 97 and _ctoi(c) <= 122
-def isprint(c): return _ctoi(c) >= 32 and _ctoi(c) <= 126
+def iscntrl(c): return 0 <= _ctoi(c) <= 31 or _ctoi(c) == 127
+def isdigit(c): return 48 <= _ctoi(c) <= 57
+def isgraph(c): return 33 <= _ctoi(c) <= 126
+def islower(c): return 97 <= _ctoi(c) <= 122
+def isprint(c): return 32 <= _ctoi(c) <= 126
 def ispunct(c): return isgraph(c) and not isalnum(c)
 def isspace(c): return _ctoi(c) in (9, 10, 11, 12, 13, 32)
-def isupper(c): return _ctoi(c) >= 65 and _ctoi(c) <= 90
+def isupper(c): return 65 <= _ctoi(c) <= 90
 def isxdigit(c): return isdigit(c) or \
-    (_ctoi(c) >= 65 and _ctoi(c) <= 70) or (_ctoi(c) >= 97 and _ctoi(c) <= 102)
-def isctrl(c): return _ctoi(c) < 32
+    (65 <= _ctoi(c) <= 70) or (97 <= _ctoi(c) <= 102)
+def isctrl(c): return 0 <= _ctoi(c) < 32
 def ismeta(c): return _ctoi(c) > 127
 
 def ascii(c):
diff --git a/Lib/curses/has_key.py b/Lib/curses/has_key.py
index 1dd5a3b..60b7be9 100644
--- a/Lib/curses/has_key.py
+++ b/Lib/curses/has_key.py
@@ -182,7 +182,7 @@
         L = []
         _curses.initscr()
         for key in _capability_names.keys():
-            system = key in _curses
+            system = _curses.has_key(key)
             python = has_key(key)
             if system != python:
                 L.append( 'Mismatch for key %s, system=%i, Python=%i'
diff --git a/Lib/curses/textpad.py b/Lib/curses/textpad.py
index c45361c..b50c03a 100644
--- a/Lib/curses/textpad.py
+++ b/Lib/curses/textpad.py
@@ -43,16 +43,20 @@
     def __init__(self, win, insert_mode=False):
         self.win = win
         self.insert_mode = insert_mode
-        (self.maxy, self.maxx) = win.getmaxyx()
-        self.maxy = self.maxy - 1
-        self.maxx = self.maxx - 1
+        self._update_max_yx()
         self.stripspaces = 1
         self.lastcmd = None
         win.keypad(1)
 
+    def _update_max_yx(self):
+        maxy, maxx = self.win.getmaxyx()
+        self.maxy = maxy - 1
+        self.maxx = maxx - 1
+
     def _end_of_line(self, y):
         """Go to the location of the first blank on the given line,
         returning the index of the last non-blank character."""
+        self._update_max_yx()
         last = self.maxx
         while True:
             if curses.ascii.ascii(self.win.inch(y, last)) != curses.ascii.SP:
@@ -64,8 +68,10 @@
         return last
 
     def _insert_printable_char(self, ch):
+        self._update_max_yx()
         (y, x) = self.win.getyx()
-        if y < self.maxy or x < self.maxx:
+        backyx = None
+        while y < self.maxy or x < self.maxx:
             if self.insert_mode:
                 oldch = self.win.inch()
             # The try-catch ignores the error we trigger from some curses
@@ -75,14 +81,20 @@
                 self.win.addch(ch)
             except curses.error:
                 pass
-            if self.insert_mode:
-                (backy, backx) = self.win.getyx()
-                if curses.ascii.isprint(oldch):
-                    self._insert_printable_char(oldch)
-                    self.win.move(backy, backx)
+            if not self.insert_mode or not curses.ascii.isprint(oldch):
+                break
+            ch = oldch
+            (y, x) = self.win.getyx()
+            # Remember where to put the cursor back since we are in insert_mode
+            if backyx is None:
+                backyx = y, x
+
+        if backyx is not None:
+            self.win.move(*backyx)
 
     def do_command(self, ch):
         "Process a single editing command."
+        self._update_max_yx()
         (y, x) = self.win.getyx()
         self.lastcmd = ch
         if curses.ascii.isprint(ch):
@@ -148,6 +160,7 @@
     def gather(self):
         "Collect and return the contents of the window."
         result = ""
+        self._update_max_yx()
         for y in range(self.maxy+1):
             self.win.move(y, 0)
             stop = self._end_of_line(y)
diff --git a/Lib/difflib.py b/Lib/difflib.py
index 1c6fbdb..788a92d 100644
--- a/Lib/difflib.py
+++ b/Lib/difflib.py
@@ -1103,7 +1103,7 @@
 
 import re
 
-def IS_LINE_JUNK(line, pat=re.compile(r"\s*#?\s*$").match):
+def IS_LINE_JUNK(line, pat=re.compile(r"\s*(?:#\s*)?$").match):
     r"""
     Return 1 for ignorable line: iff `line` is blank or contains a single '#'.
 
diff --git a/Lib/distutils/ccompiler.py b/Lib/distutils/ccompiler.py
index 62506a6..88a910c 100644
--- a/Lib/distutils/ccompiler.py
+++ b/Lib/distutils/ccompiler.py
@@ -160,7 +160,7 @@
             self.set_executable(key, args[key])
 
     def set_executable(self, key, value):
-        if isinstance(value, str):
+        if isinstance(value, basestring):
             setattr(self, key, split_quoted(value))
         else:
             setattr(self, key, value)
diff --git a/Lib/distutils/command/upload.py b/Lib/distutils/command/upload.py
index b773f47..ff043d2 100644
--- a/Lib/distutils/command/upload.py
+++ b/Lib/distutils/command/upload.py
@@ -55,7 +55,9 @@
 
     def run(self):
         if not self.distribution.dist_files:
-            raise DistutilsOptionError("No dist file created in earlier command")
+            msg = ("Must create and upload files in one command "
+                   "(e.g. setup.py sdist upload)")
+            raise DistutilsOptionError(msg)
         for command, pyversion, filename in self.distribution.dist_files:
             self.upload_file(command, pyversion, filename)
 
@@ -155,8 +157,6 @@
                 body.write(fn)
                 body.write("\r\n\r\n")
                 body.write(value)
-                if value and value[-1] == '\r':
-                    body.write('\n')  # write an extra newline (lurve Macs)
         body.write(end_boundary)
         body = body.getvalue()
 
diff --git a/Lib/distutils/spawn.py b/Lib/distutils/spawn.py
index 321344a..737b293 100644
--- a/Lib/distutils/spawn.py
+++ b/Lib/distutils/spawn.py
@@ -208,7 +208,8 @@
     os.environ['PATH'].  Returns the complete filename or None if not found.
     """
     if path is None:
-        path = os.environ['PATH']
+        path = os.environ.get('PATH', os.defpath)
+
     paths = path.split(os.pathsep)
     base, ext = os.path.splitext(executable)
 
diff --git a/Lib/distutils/tests/test_bdist_rpm.py b/Lib/distutils/tests/test_bdist_rpm.py
index 475a827..8248c08 100644
--- a/Lib/distutils/tests/test_bdist_rpm.py
+++ b/Lib/distutils/tests/test_bdist_rpm.py
@@ -99,7 +99,7 @@
     @unittest.skipIf(find_executable('rpmbuild') is None,
                      'the rpmbuild command is not found')
     def test_no_optimize_flag(self):
-        # let's create a package that brakes bdist_rpm
+        # let's create a package that breaks bdist_rpm
         tmp_dir = self.mkdtemp()
         os.environ['HOME'] = tmp_dir   # to confine dir '.rpmdb' creation
         pkg_dir = os.path.join(tmp_dir, 'foo')
diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py
index a4494db..a6d2d2e 100644
--- a/Lib/distutils/tests/test_build_ext.py
+++ b/Lib/distutils/tests/test_build_ext.py
@@ -20,6 +20,7 @@
 
 class BuildExtTestCase(support.TempdirManager,
                        support.LoggingSilencer,
+                       support.EnvironGuard,
                        unittest.TestCase):
     def setUp(self):
         super(BuildExtTestCase, self).setUp()
diff --git a/Lib/distutils/tests/test_ccompiler.py b/Lib/distutils/tests/test_ccompiler.py
index 446eac2..4976098 100644
--- a/Lib/distutils/tests/test_ccompiler.py
+++ b/Lib/distutils/tests/test_ccompiler.py
@@ -24,6 +24,30 @@
 
 class CCompilerTestCase(support.EnvironGuard, unittest.TestCase):
 
+    def test_set_executables(self):
+        class MyCCompiler(CCompiler):
+            executables = {'compiler': '', 'compiler_cxx': '', 'linker': ''}
+
+        compiler = MyCCompiler()
+
+        # set executable as list
+        compiler.set_executables(compiler=['env', 'OMPI_MPICC=clang', 'mpicc'])
+        self.assertEqual(compiler.compiler, ['env',
+                                             'OMPI_MPICC=clang',
+                                             'mpicc'])
+
+        # set executable as string
+        compiler.set_executables(compiler_cxx='env OMPI_MPICXX=clang++ mpicxx')
+        self.assertEqual(compiler.compiler_cxx, ['env',
+                                                 'OMPI_MPICXX=clang++',
+                                                 'mpicxx'])
+
+        # set executable as unicode string
+        compiler.set_executables(linker=u'env OMPI_MPICXX=clang++ mpiCC')
+        self.assertEqual(compiler.linker, [u'env',
+                                           u'OMPI_MPICXX=clang++',
+                                           u'mpiCC'])
+
     def test_gen_lib_options(self):
         compiler = FakeCompiler()
         libdirs = ['lib1', 'lib2']
diff --git a/Lib/distutils/tests/test_check.py b/Lib/distutils/tests/test_check.py
index 81058b1..e94647f 100644
--- a/Lib/distutils/tests/test_check.py
+++ b/Lib/distutils/tests/test_check.py
@@ -8,6 +8,12 @@
 from distutils.tests import support
 from distutils.errors import DistutilsSetupError
 
+try:
+    import pygments
+except ImportError:
+    pygments = None
+
+
 class CheckTestCase(support.LoggingSilencer,
                     support.TempdirManager,
                     unittest.TestCase):
@@ -120,9 +126,15 @@
             pkg_info, dist = self.create_dist(long_description=rest_with_code)
             cmd = check(dist)
             cmd.check_restructuredtext()
-            self.assertEqual(cmd._warnings, 0)
             msgs = cmd._check_rst_data(rest_with_code)
-            self.assertEqual(len(msgs), 0)
+            if pygments is not None:
+                self.assertEqual(len(msgs), 0)
+            else:
+                self.assertEqual(len(msgs), 1)
+                self.assertEqual(
+                    str(msgs[0][1]),
+                    'Cannot analyze code. Pygments package not found.'
+                )
 
     def test_check_all(self):
 
diff --git a/Lib/distutils/tests/test_install.py b/Lib/distutils/tests/test_install.py
index c3492b8..397e2a7 100644
--- a/Lib/distutils/tests/test_install.py
+++ b/Lib/distutils/tests/test_install.py
@@ -26,6 +26,7 @@
 
 
 class InstallTestCase(support.TempdirManager,
+                      support.EnvironGuard,
                       support.LoggingSilencer,
                       unittest.TestCase):
 
diff --git a/Lib/distutils/tests/test_spawn.py b/Lib/distutils/tests/test_spawn.py
index defa54d..061a72f 100644
--- a/Lib/distutils/tests/test_spawn.py
+++ b/Lib/distutils/tests/test_spawn.py
@@ -1,8 +1,11 @@
 """Tests for distutils.spawn."""
-import unittest
 import os
+import stat
+import sys
 import time
-from test.test_support import captured_stdout, run_unittest
+import unittest
+from test.support import captured_stdout, run_unittest
+from test import support as test_support
 
 from distutils.spawn import _nt_quote_args
 from distutils.spawn import spawn, find_executable
@@ -53,6 +56,48 @@
         os.chmod(exe, 0777)
         spawn([exe])  # should work without any error
 
+    def test_find_executable(self):
+        with test_support.temp_dir() as tmp_dir:
+            # use TESTFN to get a pseudo-unique filename
+            program_noeext = test_support.TESTFN
+            # Give the temporary program an ".exe" suffix for all.
+            # It's needed on Windows and not harmful on other platforms.
+            program = program_noeext + ".exe"
+
+            filename = os.path.join(tmp_dir, program)
+            with open(filename, "wb"):
+                pass
+            os.chmod(filename, stat.S_IXUSR)
+
+            # test path parameter
+            rv = find_executable(program, path=tmp_dir)
+            self.assertEqual(rv, filename)
+
+            if sys.platform == 'win32':
+                # test without ".exe" extension
+                rv = find_executable(program_noeext, path=tmp_dir)
+                self.assertEqual(rv, filename)
+
+            # test find in the current directory
+            with test_support.change_cwd(tmp_dir):
+                rv = find_executable(program)
+                self.assertEqual(rv, program)
+
+            # test non-existent program
+            dont_exist_program = "dontexist_" + program
+            rv = find_executable(dont_exist_program , path=tmp_dir)
+            self.assertIsNone(rv)
+
+            # test os.defpath: missing PATH environment variable
+            with test_support.EnvironmentVarGuard() as env:
+                from distutils import spawn
+                with test_support.swap_attr(spawn.os, 'defpath', tmp_dir):
+                    env.pop('PATH')
+
+                    rv = find_executable(program)
+                    self.assertEqual(rv, filename)
+
+
 def test_suite():
     return unittest.makeSuite(SpawnTestCase)
 
diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py
index 3d4f305..d225754 100644
--- a/Lib/distutils/tests/test_upload.py
+++ b/Lib/distutils/tests/test_upload.py
@@ -128,6 +128,32 @@
         auth = self.last_open.req.headers['Authorization']
         self.assertNotIn('\n', auth)
 
+    # bpo-32304: archives whose last byte was b'\r' were corrupted due to
+    # normalization intended for Mac OS 9.
+    def test_upload_correct_cr(self):
+        # content that ends with \r should not be modified.
+        tmp = self.mkdtemp()
+        path = os.path.join(tmp, 'xxx')
+        self.write_file(path, content='yy\r')
+        command, pyversion, filename = 'xxx', '2.6', path
+        dist_files = [(command, pyversion, filename)]
+        self.write_file(self.rc, PYPIRC_LONG_PASSWORD)
+
+        # other fields that ended with \r used to be modified, now are
+        # preserved.
+        pkg_dir, dist = self.create_dist(
+            dist_files=dist_files,
+            description='long description\r'
+        )
+        cmd = upload(dist)
+        cmd.ensure_finalized()
+        cmd.run()
+
+        headers = dict(self.last_open.req.headers)
+        self.assertEqual(headers['Content-length'], '2170')
+        self.assertIn(b'long description\r', self.last_open.req.data)
+        self.assertNotIn(b'long description\r\n', self.last_open.req.data)
+
     def test_upload_fails(self):
         self.next_msg = "Not Found"
         self.next_code = 404
diff --git a/Lib/distutils/tests/test_util.py b/Lib/distutils/tests/test_util.py
index 2d7b101..7898e07 100644
--- a/Lib/distutils/tests/test_util.py
+++ b/Lib/distutils/tests/test_util.py
@@ -4,10 +4,11 @@
 from test.test_support import run_unittest
 
 from distutils.errors import DistutilsByteCompileError
+from distutils.tests import support
 from distutils.util import byte_compile, grok_environment_error
 
 
-class UtilTestCase(unittest.TestCase):
+class UtilTestCase(support.EnvironGuard, unittest.TestCase):
 
     def test_dont_write_bytecode(self):
         # makes sure byte_compile raise a DistutilsError
diff --git a/Lib/email/utils.py b/Lib/email/utils.py
index ac13f49..5b22521 100644
--- a/Lib/email/utils.py
+++ b/Lib/email/utils.py
@@ -211,6 +211,12 @@
 
 
 def parseaddr(addr):
+    """
+    Parse addr into its constituent realname and email address parts.
+
+    Return a tuple of realname and email address, unless the parse fails, in
+    which case return a 2-tuple of ('', '').
+    """
     addrs = _AddressList(addr).addresslist
     if not addrs:
         return '', ''
diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py
index c2abed8..3c679e5 100644
--- a/Lib/ensurepip/__init__.py
+++ b/Lib/ensurepip/__init__.py
@@ -12,9 +12,9 @@
 __all__ = ["version", "bootstrap"]
 
 
-_SETUPTOOLS_VERSION = "28.8.0"
+_SETUPTOOLS_VERSION = "39.0.1"
 
-_PIP_VERSION = "9.0.1"
+_PIP_VERSION = "10.0.1"
 
 _PROJECTS = [
     ("setuptools", _SETUPTOOLS_VERSION),
@@ -28,8 +28,8 @@
         sys.path = additional_paths + sys.path
 
     # Install the bundled software
-    import pip
-    pip.main(args)
+    import pip._internal
+    return pip._internal.main(args)
 
 
 def version():
@@ -60,6 +60,21 @@
 
     Note that calling this function will alter both sys.path and os.environ.
     """
+    # Discard the return value
+    _bootstrap(root=root, upgrade=upgrade, user=user,
+               altinstall=altinstall, default_pip=default_pip,
+               verbosity=verbosity)
+
+
+def _bootstrap(root=None, upgrade=False, user=False,
+               altinstall=False, default_pip=True,
+               verbosity=0):
+    """
+    Bootstrap pip into the current Python installation (or the given root
+    directory). Returns pip command status code.
+
+    Note that calling this function will alter both sys.path and os.environ.
+    """
     if altinstall and default_pip:
         raise ValueError("Cannot use altinstall and default_pip together")
 
@@ -105,11 +120,10 @@
         if verbosity:
             args += ["-" + "v" * verbosity]
 
-        _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
+        return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
     finally:
         shutil.rmtree(tmpdir, ignore_errors=True)
 
-
 def _uninstall_helper(verbosity=0):
     """Helper to support a clean default uninstall process on Windows
 
@@ -135,7 +149,7 @@
     if verbosity:
         args += ["-" + "v" * verbosity]
 
-    _run_pip(args + [p[0] for p in reversed(_PROJECTS)])
+    return _run_pip(args + [p[0] for p in reversed(_PROJECTS)])
 
 
 def _main(argv=None):
@@ -176,8 +190,8 @@
         "--altinstall",
         action="store_true",
         default=False,
-        help=("Make an alternate install, installing only the X.Y versioned"
-              "scripts (Default: pipX, pipX.Y, easy_install-X.Y)"),
+        help=("Make an alternate install, installing only the X.Y versioned "
+              "scripts (Default: pipX, pipX.Y, easy_install-X.Y)."),
     )
     parser.add_argument(
         "--default-pip",
@@ -196,7 +210,7 @@
 
     args = parser.parse_args(argv)
 
-    bootstrap(
+    return _bootstrap(
         root=args.root,
         upgrade=args.upgrade,
         user=args.user,
diff --git a/Lib/ensurepip/__main__.py b/Lib/ensurepip/__main__.py
index 77527d7..03eef0d 100644
--- a/Lib/ensurepip/__main__.py
+++ b/Lib/ensurepip/__main__.py
@@ -1,4 +1,5 @@
 import ensurepip
+import sys
 
 if __name__ == "__main__":
-    ensurepip._main()
+    sys.exit(ensurepip._main())
diff --git a/Lib/ensurepip/_bundled/pip-10.0.1-py2.py3-none-any.whl b/Lib/ensurepip/_bundled/pip-10.0.1-py2.py3-none-any.whl
new file mode 100644
index 0000000..9837092
--- /dev/null
+++ b/Lib/ensurepip/_bundled/pip-10.0.1-py2.py3-none-any.whl
Binary files differ
diff --git a/Lib/ensurepip/_bundled/pip-9.0.1-py2.py3-none-any.whl b/Lib/ensurepip/_bundled/pip-9.0.1-py2.py3-none-any.whl
deleted file mode 100644
index 4b8ecc6..0000000
--- a/Lib/ensurepip/_bundled/pip-9.0.1-py2.py3-none-any.whl
+++ /dev/null
Binary files differ
diff --git a/Lib/ensurepip/_bundled/setuptools-28.8.0-py2.py3-none-any.whl b/Lib/ensurepip/_bundled/setuptools-28.8.0-py2.py3-none-any.whl
deleted file mode 100644
index 502e3cb..0000000
--- a/Lib/ensurepip/_bundled/setuptools-28.8.0-py2.py3-none-any.whl
+++ /dev/null
Binary files differ
diff --git a/Lib/ensurepip/_bundled/setuptools-39.0.1-py2.py3-none-any.whl b/Lib/ensurepip/_bundled/setuptools-39.0.1-py2.py3-none-any.whl
new file mode 100644
index 0000000..edc3ca2
--- /dev/null
+++ b/Lib/ensurepip/_bundled/setuptools-39.0.1-py2.py3-none-any.whl
Binary files differ
diff --git a/Lib/ensurepip/_uninstall.py b/Lib/ensurepip/_uninstall.py
index 750365e..b257904 100644
--- a/Lib/ensurepip/_uninstall.py
+++ b/Lib/ensurepip/_uninstall.py
@@ -2,6 +2,7 @@
 
 import argparse
 import ensurepip
+import sys
 
 
 def _main(argv=None):
@@ -23,8 +24,8 @@
 
     args = parser.parse_args(argv)
 
-    ensurepip._uninstall_helper(verbosity=args.verbosity)
+    return ensurepip._uninstall_helper(verbosity=args.verbosity)
 
 
 if __name__ == "__main__":
-    _main()
+    sys.exit(_main())
diff --git a/Lib/fpformat.py b/Lib/fpformat.py
index 71cbb25..0537a27 100644
--- a/Lib/fpformat.py
+++ b/Lib/fpformat.py
@@ -19,7 +19,7 @@
 __all__ = ["fix","sci","NotANumber"]
 
 # Compiled regular expression to "decode" a number
-decoder = re.compile(r'^([-+]?)0*(\d*)((?:\.\d*)?)(([eE][-+]?\d+)?)$')
+decoder = re.compile(r'^([-+]?)(\d*)((?:\.\d*)?)(([eE][-+]?\d+)?)$')
 # \0 the whole thing
 # \1 leading sign or empty
 # \2 digits left of decimal point
@@ -41,6 +41,7 @@
     res = decoder.match(s)
     if res is None: raise NotANumber, s
     sign, intpart, fraction, exppart = res.group(1,2,3,4)
+    intpart = intpart.lstrip('0');
     if sign == '+': sign = ''
     if fraction: fraction = fraction[1:]
     if exppart: expo = int(exppart[1:])
diff --git a/Lib/ftplib.py b/Lib/ftplib.py
index 3739741..6644554 100644
--- a/Lib/ftplib.py
+++ b/Lib/ftplib.py
@@ -171,6 +171,8 @@
 
     # Internal: send one line to the server, appending CRLF
     def putline(self, line):
+        if '\r' in line or '\n' in line:
+            raise ValueError('an illegal newline character should not be contained')
         line = line + CRLF
         if self.debugging > 1: print '*put*', self.sanitize(line)
         self.sock.sendall(line)
@@ -412,12 +414,14 @@
         """
         self.voidcmd('TYPE I')
         conn = self.transfercmd(cmd, rest)
-        while 1:
-            data = conn.recv(blocksize)
-            if not data:
-                break
-            callback(data)
-        conn.close()
+        try:
+            while 1:
+                data = conn.recv(blocksize)
+                if not data:
+                    break
+                callback(data)
+        finally:
+            conn.close()
         return self.voidresp()
 
     def retrlines(self, cmd, callback = None):
@@ -435,21 +439,25 @@
         if callback is None: callback = print_line
         resp = self.sendcmd('TYPE A')
         conn = self.transfercmd(cmd)
-        fp = conn.makefile('rb')
-        while 1:
-            line = fp.readline(self.maxline + 1)
-            if len(line) > self.maxline:
-                raise Error("got more than %d bytes" % self.maxline)
-            if self.debugging > 2: print '*retr*', repr(line)
-            if not line:
-                break
-            if line[-2:] == CRLF:
-                line = line[:-2]
-            elif line[-1:] == '\n':
-                line = line[:-1]
-            callback(line)
-        fp.close()
-        conn.close()
+        fp = None
+        try:
+            fp = conn.makefile('rb')
+            while 1:
+                line = fp.readline(self.maxline + 1)
+                if len(line) > self.maxline:
+                    raise Error("got more than %d bytes" % self.maxline)
+                if self.debugging > 2: print '*retr*', repr(line)
+                if not line:
+                    break
+                if line[-2:] == CRLF:
+                    line = line[:-2]
+                elif line[-1:] == '\n':
+                    line = line[:-1]
+                callback(line)
+        finally:
+            if fp:
+                fp.close()
+            conn.close()
         return self.voidresp()
 
     def storbinary(self, cmd, fp, blocksize=8192, callback=None, rest=None):
@@ -469,12 +477,14 @@
         """
         self.voidcmd('TYPE I')
         conn = self.transfercmd(cmd, rest)
-        while 1:
-            buf = fp.read(blocksize)
-            if not buf: break
-            conn.sendall(buf)
-            if callback: callback(buf)
-        conn.close()
+        try:
+            while 1:
+                buf = fp.read(blocksize)
+                if not buf: break
+                conn.sendall(buf)
+                if callback: callback(buf)
+        finally:
+            conn.close()
         return self.voidresp()
 
     def storlines(self, cmd, fp, callback=None):
@@ -491,17 +501,19 @@
         """
         self.voidcmd('TYPE A')
         conn = self.transfercmd(cmd)
-        while 1:
-            buf = fp.readline(self.maxline + 1)
-            if len(buf) > self.maxline:
-                raise Error("got more than %d bytes" % self.maxline)
-            if not buf: break
-            if buf[-2:] != CRLF:
-                if buf[-1] in CRLF: buf = buf[:-1]
-                buf = buf + CRLF
-            conn.sendall(buf)
-            if callback: callback(buf)
-        conn.close()
+        try:
+            while 1:
+                buf = fp.readline(self.maxline + 1)
+                if len(buf) > self.maxline:
+                    raise Error("got more than %d bytes" % self.maxline)
+                if not buf: break
+                if buf[-2:] != CRLF:
+                    if buf[-1] in CRLF: buf = buf[:-1]
+                    buf = buf + CRLF
+                conn.sendall(buf)
+                if callback: callback(buf)
+        finally:
+            conn.close()
         return self.voidresp()
 
     def acct(self, password):
diff --git a/Lib/functools.py b/Lib/functools.py
index 53680b8..5d755d4 100644
--- a/Lib/functools.py
+++ b/Lib/functools.py
@@ -55,23 +55,28 @@
     convert = {
         '__lt__': [('__gt__', lambda self, other: not (self < other or self == other)),
                    ('__le__', lambda self, other: self < other or self == other),
+                   ('__ne__', lambda self, other: not self == other),
                    ('__ge__', lambda self, other: not self < other)],
         '__le__': [('__ge__', lambda self, other: not self <= other or self == other),
                    ('__lt__', lambda self, other: self <= other and not self == other),
+                   ('__ne__', lambda self, other: not self == other),
                    ('__gt__', lambda self, other: not self <= other)],
         '__gt__': [('__lt__', lambda self, other: not (self > other or self == other)),
                    ('__ge__', lambda self, other: self > other or self == other),
+                   ('__ne__', lambda self, other: not self == other),
                    ('__le__', lambda self, other: not self > other)],
         '__ge__': [('__le__', lambda self, other: (not self >= other) or self == other),
                    ('__gt__', lambda self, other: self >= other and not self == other),
+                   ('__ne__', lambda self, other: not self == other),
                    ('__lt__', lambda self, other: not self >= other)]
     }
-    roots = set(dir(cls)) & set(convert)
+    defined_methods = set(dir(cls))
+    roots = defined_methods & set(convert)
     if not roots:
         raise ValueError('must define at least one ordering operation: < > <= >=')
     root = max(roots)       # prefer __lt__ to __le__ to __gt__ to __ge__
     for opname, opfunc in convert[root]:
-        if opname not in roots:
+        if opname not in defined_methods:
             opfunc.__name__ = opname
             opfunc.__doc__ = getattr(int, opname).__doc__
             setattr(cls, opname, opfunc)
diff --git a/Lib/gzip.py b/Lib/gzip.py
index 07c6db4..76ace39 100644
--- a/Lib/gzip.py
+++ b/Lib/gzip.py
@@ -95,9 +95,8 @@
         if filename is None:
             # Issue #13781: os.fdopen() creates a fileobj with a bogus name
             # attribute. Avoid saving this in the gzip header's filename field.
-            if hasattr(fileobj, 'name') and fileobj.name != '<fdopen>':
-                filename = fileobj.name
-            else:
+            filename = getattr(fileobj, 'name', '')
+            if not isinstance(filename, basestring) or filename == '<fdopen>':
                 filename = ''
         if mode is None:
             if hasattr(fileobj, 'mode'): mode = fileobj.mode
diff --git a/Lib/idlelib/CallTipWindow.py b/Lib/idlelib/CallTipWindow.py
index e63164b..2a453d0 100644
--- a/Lib/idlelib/CallTipWindow.py
+++ b/Lib/idlelib/CallTipWindow.py
@@ -72,6 +72,7 @@
                            background="#ffffe0", relief=SOLID, borderwidth=1,
                            font = self.widget['font'])
         self.label.pack()
+        tw.update_idletasks()
         tw.lift()  # work around bug in Tk 8.5.18+ (issue #24570)
 
         self.checkhideid = self.widget.bind(CHECKHIDE_VIRTUAL_EVENT_NAME,
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index 3ea1a7d..337530a 100755
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -1040,7 +1040,7 @@
         return self.shell_title
 
     COPYRIGHT = \
-          'Type "copyright", "credits" or "license()" for more information.'
+          'Type "help", "copyright", "credits" or "license()" for more information.'
 
     def begin(self):
         self.resetoutput()
@@ -1370,7 +1370,7 @@
             raise ValueError("read from closed file")
         if size is None:
             size = -1
-        elif not isinstance(size, int):
+        elif not isinstance(size, (int, long)):
             raise TypeError('must be int, not ' + type(size).__name__)
         result = self._line_buffer
         self._line_buffer = ''
@@ -1393,7 +1393,7 @@
             raise ValueError("read from closed file")
         if size is None:
             size = -1
-        elif not isinstance(size, int):
+        elif not isinstance(size, (int, long)):
             raise TypeError('must be int, not ' + type(size).__name__)
         line = self._line_buffer or self.shell.readline()
         if size < 0:
diff --git a/Lib/idlelib/aboutDialog.py b/Lib/idlelib/aboutDialog.py
index c9adc08..87d6c3c 100644
--- a/Lib/idlelib/aboutDialog.py
+++ b/Lib/idlelib/aboutDialog.py
@@ -141,6 +141,7 @@
         textView.view_file(self, title, fn, encoding)
 
     def Ok(self, event=None):
+        self.grab_release()
         self.destroy()
 
 if __name__ == '__main__':
diff --git a/Lib/idlelib/configDialog.py b/Lib/idlelib/configDialog.py
index d53f5ff..3c29af1 100644
--- a/Lib/idlelib/configDialog.py
+++ b/Lib/idlelib/configDialog.py
@@ -1197,10 +1197,12 @@
             instance.reset_help_menu_entries()
 
     def Cancel(self):
+        self.grab_release()
         self.destroy()
 
     def Ok(self):
         self.Apply()
+        self.grab_release()
         self.destroy()
 
     def Apply(self):
diff --git a/Lib/idlelib/configHelpSourceEdit.py b/Lib/idlelib/configHelpSourceEdit.py
index 5816449..62b010a 100644
--- a/Lib/idlelib/configHelpSourceEdit.py
+++ b/Lib/idlelib/configHelpSourceEdit.py
@@ -155,10 +155,12 @@
                     # Mac Safari insists on using the URI form for local files
                     self.result = list(self.result)
                     self.result[1] = "file://" + path
+            self.grab_release()
             self.destroy()
 
     def Cancel(self, event=None):
         self.result = None
+        self.grab_release()
         self.destroy()
 
 if __name__ == '__main__':
diff --git a/Lib/idlelib/configSectionNameDialog.py b/Lib/idlelib/configSectionNameDialog.py
index c09dca8..f28dc1a 100644
--- a/Lib/idlelib/configSectionNameDialog.py
+++ b/Lib/idlelib/configSectionNameDialog.py
@@ -80,10 +80,13 @@
         name = self.name_ok()
         if name:
             self.result = name
+            self.grab_release()
             self.destroy()
     def Cancel(self, event=None):
         self.result = ''
+        self.grab_release()
         self.destroy()
+
 if __name__ == '__main__':
     import unittest
     unittest.main('idlelib.idle_test.test_config_name', verbosity=2, exit=False)
diff --git a/Lib/idlelib/help.html b/Lib/idlelib/help.html
index 1c4598b..9a20c39 100644
--- a/Lib/idlelib/help.html
+++ b/Lib/idlelib/help.html
@@ -700,7 +700,7 @@
       </ul>
     </div>
     <div class="footer">
-    &copy; <a href="../copyright.html">Copyright</a> 1990-2016, Python Software Foundation.
+    &copy; <a href="../copyright.html">Copyright</a> 1990-2017, Python Software Foundation.
     <br />
     The Python Software Foundation is a non-profit corporation.
     <a href="https://www.python.org/psf/donations/">Please donate.</a>
diff --git a/Lib/idlelib/idle.bat b/Lib/idlelib/idle.bat
index 3d619a3..e77b96e 100755
--- a/Lib/idlelib/idle.bat
+++ b/Lib/idlelib/idle.bat
@@ -1,4 +1,4 @@
-@echo off

-rem Start IDLE using the appropriate Python interpreter

-set CURRDIR=%~dp0

-start "IDLE" "%CURRDIR%..\..\pythonw.exe" "%CURRDIR%idle.pyw" %1 %2 %3 %4 %5 %6 %7 %8 %9

+@echo off
+rem Start IDLE using the appropriate Python interpreter
+set CURRDIR=%~dp0
+start "IDLE" "%CURRDIR%..\..\pythonw.exe" "%CURRDIR%idle.pyw" %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Lib/idlelib/idle_test/test_config_name.py b/Lib/idlelib/idle_test/test_config_name.py
index 4403f87..2a4df6a 100644
--- a/Lib/idlelib/idle_test/test_config_name.py
+++ b/Lib/idlelib/idle_test/test_config_name.py
@@ -15,6 +15,8 @@
     name = Var()
     result = None
     destroyed = False
+    def grab_release(self):
+        pass
     def destroy(self):
         self.destroyed = True
 
diff --git a/Lib/idlelib/keybindingDialog.py b/Lib/idlelib/keybindingDialog.py
index 4d32ca9..755f1af 100644
--- a/Lib/idlelib/keybindingDialog.py
+++ b/Lib/idlelib/keybindingDialog.py
@@ -217,10 +217,12 @@
     def OK(self, event=None):
         if self.advanced or self.KeysOK():  # doesn't check advanced string yet
             self.result=self.keyString.get()
+            self.grab_release()
             self.destroy()
 
     def Cancel(self, event=None):
         self.result=''
+        self.grab_release()
         self.destroy()
 
     def KeysOK(self):
diff --git a/Lib/idlelib/textView.py b/Lib/idlelib/textView.py
index b8c4ac1..ec837f8 100644
--- a/Lib/idlelib/textView.py
+++ b/Lib/idlelib/textView.py
@@ -39,7 +39,8 @@
         self.textView.insert(0.0, text)
         self.textView.config(state=DISABLED)
 
-        if modal:
+        self.is_modal = modal
+        if self.is_modal:
             self.transient(parent)
             self.grab_set()
             self.wait_window()
@@ -62,6 +63,8 @@
         frameText.pack(side=TOP,expand=TRUE,fill=BOTH)
 
     def Ok(self, event=None):
+        if self.is_modal:
+            self.grab_release()
         self.destroy()
 
 
diff --git a/Lib/imaplib.py b/Lib/imaplib.py
index 826eea2..2e5511e 100644
--- a/Lib/imaplib.py
+++ b/Lib/imaplib.py
@@ -70,6 +70,7 @@
         'LOGIN':        ('NONAUTH',),
         'LOGOUT':       ('NONAUTH', 'AUTH', 'SELECTED', 'LOGOUT'),
         'LSUB':         ('AUTH', 'SELECTED'),
+        'MOVE':         ('SELECTED',),
         'NAMESPACE':    ('AUTH', 'SELECTED'),
         'NOOP':         ('NONAUTH', 'AUTH', 'SELECTED', 'LOGOUT'),
         'PARTIAL':      ('SELECTED',),                                  # NB: obsolete
@@ -264,8 +265,10 @@
         try:
             self.sock.shutdown(socket.SHUT_RDWR)
         except socket.error as e:
-            # The server might already have closed the connection
-            if e.errno != errno.ENOTCONN:
+            # The server might already have closed the connection.
+            # On Windows, this may result in WSAEINVAL (error 10022):
+            # An invalid operation was attempted.
+            if e.errno not in (errno.ENOTCONN, 10022):
                 raise
         finally:
             self.sock.close()
@@ -1409,7 +1412,7 @@
     be in the correct format.
     """
 
-    if isinstance(date_time, (int, float)):
+    if isinstance(date_time, (int, long, float)):
         tt = time.localtime(date_time)
     elif isinstance(date_time, (tuple, time.struct_time)):
         tt = date_time
diff --git a/Lib/inspect.py b/Lib/inspect.py
index 6d645bd..cbced17 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -688,8 +688,15 @@
     raised if the source code cannot be retrieved."""
     lines, lnum = findsource(object)
 
-    if ismodule(object): return lines, 0
-    else: return getblock(lines[lnum:]), lnum + 1
+    if istraceback(object):
+        object = object.tb_frame
+
+    # for module or frame that corresponds to module, return all source lines
+    if (ismodule(object) or
+        (isframe(object) and object.f_code.co_name == "<module>")):
+        return lines, 0
+    else:
+        return getblock(lines[lnum:]), lnum + 1
 
 def getsource(object):
     """Return the text of the source code for an object.
@@ -769,8 +776,11 @@
                     if opname in ('UNPACK_TUPLE', 'UNPACK_SEQUENCE'):
                         remain.append(value)
                         count.append(value)
-                    elif opname == 'STORE_FAST':
-                        stack.append(names[value])
+                    elif opname in ('STORE_FAST', 'STORE_DEREF'):
+                        if opname == 'STORE_FAST':
+                            stack.append(names[value])
+                        else:
+                            stack.append(co.co_cellvars[value])
 
                         # Special case for sublists of length 1: def foo((bar))
                         # doesn't generate the UNPACK_TUPLE bytecode, so if
diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py
index d1be041..ce62361 100644
--- a/Lib/json/__init__.py
+++ b/Lib/json/__init__.py
@@ -78,7 +78,7 @@
     >>> def encode_complex(obj):
     ...     if isinstance(obj, complex):
     ...         return [obj.real, obj.imag]
-    ...     raise TypeError(repr(o) + " is not JSON serializable")
+    ...     raise TypeError(repr(obj) + " is not JSON serializable")
     ...
     >>> json.dumps(2 + 1j, default=encode_complex)
     '[2.0, 1.0]'
diff --git a/Lib/json/tests/test_speedups.py b/Lib/json/tests/test_speedups.py
index 7186a40..a6b7c38 100644
--- a/Lib/json/tests/test_speedups.py
+++ b/Lib/json/tests/test_speedups.py
@@ -1,6 +1,11 @@
 from json.tests import CTest
 
 
+class BadBool:
+    def __nonzero__(self):
+        1/0.0
+
+
 class TestSpeedups(CTest):
     def test_scanstring(self):
         self.assertEqual(self.json.decoder.scanstring.__module__, "_json")
@@ -16,8 +21,31 @@
     def test_make_scanner(self):
         self.assertRaises(AttributeError, self.json.scanner.c_make_scanner, 1)
 
+    def test_bad_bool_args(self):
+        def test(value):
+            self.json.decoder.JSONDecoder(strict=BadBool()).decode(value)
+        self.assertRaises(ZeroDivisionError, test, '""')
+        self.assertRaises(ZeroDivisionError, test, '{}')
+        self.assertRaises(ZeroDivisionError, test, u'""')
+        self.assertRaises(ZeroDivisionError, test, u'{}')
+
+
+class TestEncode(CTest):
     def test_make_encoder(self):
         self.assertRaises(TypeError, self.json.encoder.c_make_encoder,
             None,
             "\xCD\x7D\x3D\x4E\x12\x4C\xF9\x79\xD7\x52\xBA\x82\xF2\x27\x4A\x7D\xA0\xCA\x75",
             None)
+
+    def test_bad_bool_args(self):
+        def test(name):
+            self.json.encoder.JSONEncoder(**{name: BadBool()}).encode({'a': 1})
+        self.assertRaises(ZeroDivisionError, test, 'skipkeys')
+        self.assertRaises(ZeroDivisionError, test, 'ensure_ascii')
+        self.assertRaises(ZeroDivisionError, test, 'check_circular')
+        self.assertRaises(ZeroDivisionError, test, 'allow_nan')
+        self.assertRaises(ZeroDivisionError, test, 'sort_keys')
+
+    def test_bad_encoding(self):
+        with self.assertRaises(UnicodeEncodeError):
+            self.json.encoder.JSONEncoder(encoding=u'\udcff').encode({'key': 123})
diff --git a/Lib/lib-tk/Tix.py b/Lib/lib-tk/Tix.py
index 45e8a90..d0f8fe7 100644
--- a/Lib/lib-tk/Tix.py
+++ b/Lib/lib-tk/Tix.py
@@ -1,7 +1,3 @@
-# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
-#
-# $Id$
-#
 # Tix.py -- Tix widget wrappers.
 #
 #       For Tix, see http://tix.sourceforge.net
diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py
index 64e9924..2f3a3f1 100644
--- a/Lib/lib-tk/Tkinter.py
+++ b/Lib/lib-tk/Tkinter.py
@@ -71,7 +71,7 @@
     if isinstance(value, (list, tuple)):
         if len(value) == 1:
             value = _stringify(value[0])
-            if value[0] == '{':
+            if _magic_re.search(value):
                 value = '{%s}' % value
         else:
             value = '{%s}' % _join(value)
@@ -85,7 +85,10 @@
         elif _magic_re.search(value):
             # add '\' before special characters and spaces
             value = _magic_re.sub(r'\\\1', value)
+            value = value.replace('\n', r'\n')
             value = _space_re.sub(r'\\\1', value)
+            if value[0] == '"':
+                value = '\\' + value
         elif value[0] == '"' or _space_re.search(value):
             value = '{%s}' % value
     return value
@@ -586,6 +589,7 @@
         if not func:
             # I'd rather use time.sleep(ms*0.001)
             self.tk.call('after', ms)
+            return None
         else:
             def callit():
                 try:
@@ -609,11 +613,13 @@
         """Cancel scheduling of function identified with ID.
 
         Identifier returned by after or after_idle must be
-        given as first parameter."""
+        given as first parameter.
+        """
+        if not id:
+            raise ValueError('id must be a valid identifier returned from '
+                             'after or after_idle')
         try:
             data = self.tk.call('after', 'info', id)
-            # In Tk 8.3, splitlist returns: (script, type)
-            # In Tk 8.4, splitlist may return (script, type) or (script,)
             script = self.tk.splitlist(data)[0]
             self.deletecommand(script)
         except TclError:
@@ -844,8 +850,7 @@
             self.tk.call('winfo', 'height', self._w))
     def winfo_id(self):
         """Return identifier ID for this widget."""
-        return self.tk.getint(
-            self.tk.call('winfo', 'id', self._w))
+        return int(self.tk.call('winfo', 'id', self._w), 0)
     def winfo_interps(self, displayof=0):
         """Return the name of all Tcl interpreters for this display."""
         args = ('winfo', 'interps') + self._displayof(displayof)
@@ -855,7 +860,7 @@
         return getint(
             self.tk.call('winfo', 'ismapped', self._w))
     def winfo_manager(self):
-        """Return the window mananger name for this widget."""
+        """Return the window manager name for this widget."""
         return self.tk.call('winfo', 'manager', self._w)
     def winfo_name(self):
         """Return the name of this widget."""
@@ -1174,9 +1179,9 @@
                 elif isinstance(v, (tuple, list)):
                     nv = []
                     for item in v:
-                        if not isinstance(item, (basestring, int)):
+                        if not isinstance(item, (basestring, int, long)):
                             break
-                        elif isinstance(item, int):
+                        elif isinstance(item, (int, long)):
                             nv.append('%d' % item)
                         else:
                             # format it to proper Tcl code if it contains space
@@ -1522,7 +1527,7 @@
         return self.tk.splitlist(self.tk.call('image', 'names'))
 
     def image_types(self):
-        """Return a list of all available image types (e.g. phote bitmap)."""
+        """Return a list of all available image types (e.g. photo bitmap)."""
         return self.tk.splitlist(self.tk.call('image', 'types'))
 
 
@@ -2364,7 +2369,7 @@
         """Return item which is closest to pixel at X, Y.
         If several match take the top-most.
         All items closer than HALO are considered overlapping (all are
-        closests). If START is specified the next below this tag is taken."""
+        closest). If START is specified the next below this tag is taken."""
         return self.find('closest', x, y, halo, start)
     def find_enclosed(self, x1, y1, x2, y2):
         """Return all items in rectangle defined
@@ -2424,7 +2429,7 @@
         """Print the contents of the canvas to a postscript
         file. Valid options: colormap, colormode, file, fontmap,
         height, pageanchor, pageheight, pagewidth, pagex, pagey,
-        rotate, witdh, x, y."""
+        rotate, width, x, y."""
         return self.tk.call((self._w, 'postscript') +
                     self._options(cnf, kw))
     def tag_raise(self, *args):
@@ -3355,7 +3360,7 @@
         return getint(
             self.tk.call('image', 'height', self.name))
     def type(self):
-        """Return the type of the imgage, e.g. "photo" or "bitmap"."""
+        """Return the type of the image, e.g. "photo" or "bitmap"."""
         return self.tk.call('image', 'type', self.name)
     def width(self):
         """Return the width of the image."""
@@ -3363,7 +3368,7 @@
             self.tk.call('image', 'width', self.name))
 
 class PhotoImage(Image):
-    """Widget which can display colored images in GIF, PPM/PGM format."""
+    """Widget which can display images in PGM, PPM, GIF, PNG format."""
     def __init__(self, name=None, cnf={}, master=None, **kw):
         """Create an image with NAME.
 
@@ -3427,7 +3432,7 @@
         self.tk.call(args)
 
 class BitmapImage(Image):
-    """Widget which can display a bitmap."""
+    """Widget which can display images in XBM format."""
     def __init__(self, name=None, cnf={}, master=None, **kw):
         """Create a bitmap with NAME.
 
diff --git a/Lib/lib-tk/test/test_tkinter/test_font.py b/Lib/lib-tk/test/test_tkinter/test_font.py
index 4cbf82e..830c5a6 100644
--- a/Lib/lib-tk/test/test_tkinter/test_font.py
+++ b/Lib/lib-tk/test/test_tkinter/test_font.py
@@ -1,7 +1,7 @@
 import unittest
 import Tkinter as tkinter
 import tkFont as font
-from test.test_support import requires, run_unittest
+from test.test_support import requires, run_unittest, gc_collect
 from test_ttk.support import AbstractTkTest
 
 requires('gui')
@@ -35,6 +35,16 @@
             self.assertIsInstance(self.font.cget(key), sizetype)
             self.assertIsInstance(self.font[key], sizetype)
 
+    def test_unicode_family(self):
+        family = u'MS \u30b4\u30b7\u30c3\u30af'
+        try:
+            f = font.Font(root=self.root, family=family, exists=True)
+        except tkinter.TclError:
+            f = font.Font(root=self.root, family=family, exists=False)
+        self.assertEqual(f.cget('family'), family)
+        del f
+        gc_collect()
+
     def test_actual(self):
         options = self.font.actual()
         self.assertGreaterEqual(set(options),
diff --git a/Lib/lib-tk/test/test_tkinter/test_misc.py b/Lib/lib-tk/test/test_tkinter/test_misc.py
new file mode 100644
index 0000000..796269e
--- /dev/null
+++ b/Lib/lib-tk/test/test_tkinter/test_misc.py
@@ -0,0 +1,122 @@
+import unittest
+import Tkinter as tkinter
+from test.test_support import requires, run_unittest
+from test_ttk.support import AbstractTkTest
+
+requires('gui')
+
+class MiscTest(AbstractTkTest, unittest.TestCase):
+
+    def test_after(self):
+        root = self.root
+        cbcount = {'count': 0}
+
+        def callback(start=0, step=1):
+            cbcount['count'] = start + step
+
+        # Without function, sleeps for ms.
+        self.assertIsNone(root.after(1))
+
+        # Set up with callback with no args.
+        cbcount['count'] = 0
+        timer1 = root.after(0, callback)
+        self.assertIn(timer1, root.tk.call('after', 'info'))
+        (script, _) = root.tk.splitlist(root.tk.call('after', 'info', timer1))
+        root.update()  # Process all pending events.
+        self.assertEqual(cbcount['count'], 1)
+        with self.assertRaises(tkinter.TclError):
+            root.tk.call(script)
+
+        # Set up with callback with args.
+        cbcount['count'] = 0
+        timer1 = root.after(0, callback, 42, 11)
+        root.update()  # Process all pending events.
+        self.assertEqual(cbcount['count'], 53)
+
+        # Cancel before called.
+        timer1 = root.after(1000, callback)
+        self.assertIn(timer1, root.tk.call('after', 'info'))
+        (script, _) = root.tk.splitlist(root.tk.call('after', 'info', timer1))
+        root.after_cancel(timer1)  # Cancel this event.
+        self.assertEqual(cbcount['count'], 53)
+        with self.assertRaises(tkinter.TclError):
+            root.tk.call(script)
+
+    def test_after_idle(self):
+        root = self.root
+        cbcount = {'count': 0}
+
+        def callback(start=0, step=1):
+            cbcount['count'] = start + step
+
+        # Set up with callback with no args.
+        cbcount['count'] = 0
+        idle1 = root.after_idle(callback)
+        self.assertIn(idle1, root.tk.call('after', 'info'))
+        (script, _) = root.tk.splitlist(root.tk.call('after', 'info', idle1))
+        root.update_idletasks()  # Process all pending events.
+        self.assertEqual(cbcount['count'], 1)
+        with self.assertRaises(tkinter.TclError):
+            root.tk.call(script)
+
+        # Set up with callback with args.
+        cbcount['count'] = 0
+        idle1 = root.after_idle(callback, 42, 11)
+        root.update_idletasks()  # Process all pending events.
+        self.assertEqual(cbcount['count'], 53)
+
+        # Cancel before called.
+        idle1 = root.after_idle(callback)
+        self.assertIn(idle1, root.tk.call('after', 'info'))
+        (script, _) = root.tk.splitlist(root.tk.call('after', 'info', idle1))
+        root.after_cancel(idle1)  # Cancel this event.
+        self.assertEqual(cbcount['count'], 53)
+        with self.assertRaises(tkinter.TclError):
+            root.tk.call(script)
+
+    def test_after_cancel(self):
+        root = self.root
+        cbcount = {'count': 0}
+
+        def callback():
+            cbcount['count'] += 1
+
+        timer1 = root.after(5000, callback)
+        idle1 = root.after_idle(callback)
+
+        # No value for id raises a ValueError.
+        with self.assertRaises(ValueError):
+            root.after_cancel(None)
+
+        # Cancel timer event.
+        cbcount['count'] = 0
+        (script, _) = root.tk.splitlist(root.tk.call('after', 'info', timer1))
+        root.tk.call(script)
+        self.assertEqual(cbcount['count'], 1)
+        root.after_cancel(timer1)
+        with self.assertRaises(tkinter.TclError):
+            root.tk.call(script)
+        self.assertEqual(cbcount['count'], 1)
+        with self.assertRaises(tkinter.TclError):
+            root.tk.call('after', 'info', timer1)
+
+        # Cancel same event - nothing happens.
+        root.after_cancel(timer1)
+
+        # Cancel idle event.
+        cbcount['count'] = 0
+        (script, _) = root.tk.splitlist(root.tk.call('after', 'info', idle1))
+        root.tk.call(script)
+        self.assertEqual(cbcount['count'], 1)
+        root.after_cancel(idle1)
+        with self.assertRaises(tkinter.TclError):
+            root.tk.call(script)
+        self.assertEqual(cbcount['count'], 1)
+        with self.assertRaises(tkinter.TclError):
+            root.tk.call('after', 'info', idle1)
+
+
+tests_gui = (MiscTest, )
+
+if __name__ == "__main__":
+    run_unittest(*tests_gui)
diff --git a/Lib/lib-tk/test/test_tkinter/test_widgets.py b/Lib/lib-tk/test/test_tkinter/test_widgets.py
index 4da3096..db2cd9d 100644
--- a/Lib/lib-tk/test/test_tkinter/test_widgets.py
+++ b/Lib/lib-tk/test/test_tkinter/test_widgets.py
@@ -88,9 +88,10 @@
         widget = self.create()
         self.assertEqual(widget['use'], '')
         parent = self.create(container=True)
-        wid = parent.winfo_id()
+        # hex() adds the 'L' suffix for longs
+        wid = '%#x' % parent.winfo_id()
         widget2 = self.create(use=wid)
-        self.assertEqual(int(widget2['use']), wid)
+        self.assertEqual(widget2['use'], wid)
 
 
 @add_standard_options(StandardOptionsTests)
@@ -699,7 +700,7 @@
         'disabledforeground', 'exportselection',
         'font', 'foreground', 'height',
         'highlightbackground', 'highlightcolor', 'highlightthickness',
-        'listvariable', 'relief',
+        'justify', 'listvariable', 'relief',
         'selectbackground', 'selectborderwidth', 'selectforeground',
         'selectmode', 'setgrid', 'state',
         'takefocus', 'width', 'xscrollcommand', 'yscrollcommand',
@@ -713,6 +714,8 @@
         self.checkEnumParam(widget, 'activestyle',
                             'dotbox', 'none', 'underline')
 
+    test_justify = requires_tcl(8, 6, 5)(StandardOptionsTests.test_justify.im_func)
+
     def test_listvariable(self):
         widget = self.create()
         var = tkinter.DoubleVar(self.root)
@@ -946,7 +949,9 @@
     OPTIONS = (
         'background', 'borderwidth', 'cursor',
         'handlepad', 'handlesize', 'height',
-        'opaqueresize', 'orient', 'relief',
+        'opaqueresize', 'orient',
+        'proxybackground', 'proxyborderwidth', 'proxyrelief',
+        'relief',
         'sashcursor', 'sashpad', 'sashrelief', 'sashwidth',
         'showhandle', 'width',
     )
@@ -973,6 +978,23 @@
         widget = self.create()
         self.checkBooleanParam(widget, 'opaqueresize')
 
+    @requires_tcl(8, 6, 5)
+    def test_proxybackground(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'proxybackground')
+
+    @requires_tcl(8, 6, 5)
+    def test_proxyborderwidth(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'proxyborderwidth',
+                              0, 1.3, 2.9, 6, -2, '10p',
+                              conv=noconv)
+
+    @requires_tcl(8, 6, 5)
+    def test_proxyrelief(self):
+        widget = self.create()
+        self.checkReliefParam(widget, 'proxyrelief')
+
     def test_sashcursor(self):
         widget = self.create()
         self.checkCursorParam(widget, 'sashcursor')
diff --git a/Lib/lib-tk/test/test_ttk/support.py b/Lib/lib-tk/test/test_ttk/support.py
index c4d842a..cb8eae2 100644
--- a/Lib/lib-tk/test/test_ttk/support.py
+++ b/Lib/lib-tk/test/test_ttk/support.py
@@ -1,3 +1,4 @@
+import functools
 import re
 import unittest
 import Tkinter as tkinter
@@ -54,9 +55,20 @@
 tcl_version = tuple(map(int, _tkinter.TCL_VERSION.split('.')))
 
 def requires_tcl(*version):
-    return unittest.skipUnless(tcl_version >= version,
+    if len(version) <= 2:
+        return unittest.skipUnless(tcl_version >= version,
             'requires Tcl version >= ' + '.'.join(map(str, version)))
 
+    def deco(test):
+        @functools.wraps(test)
+        def newtest(self):
+            if get_tk_patchlevel() < (8, 6, 5):
+                self.skipTest('requires Tcl version >= ' +
+                                '.'.join(map(str, get_tk_patchlevel())))
+            test(self)
+        return newtest
+    return deco
+
 _tk_patchlevel = None
 def get_tk_patchlevel():
     global _tk_patchlevel
diff --git a/Lib/lib-tk/test/test_ttk/test_extensions.py b/Lib/lib-tk/test/test_ttk/test_extensions.py
index 57ffddd..70b2f9c 100644
--- a/Lib/lib-tk/test/test_ttk/test_extensions.py
+++ b/Lib/lib-tk/test/test_ttk/test_extensions.py
@@ -284,6 +284,31 @@
 
         optmenu.destroy()
 
+    def test_unique_radiobuttons(self):
+        # check that radiobuttons are unique across instances (bpo25684)
+        items = ('a', 'b', 'c')
+        default = 'a'
+        optmenu = ttk.OptionMenu(self.root, self.textvar, default, *items)
+        textvar2 = tkinter.StringVar(self.root)
+        optmenu2 = ttk.OptionMenu(self.root, textvar2, default, *items)
+        optmenu.pack()
+        optmenu.wait_visibility()
+        optmenu2.pack()
+        optmenu2.wait_visibility()
+        optmenu['menu'].invoke(1)
+        optmenu2['menu'].invoke(2)
+        optmenu_stringvar_name = optmenu['menu'].entrycget(0, 'variable')
+        optmenu2_stringvar_name = optmenu2['menu'].entrycget(0, 'variable')
+        self.assertNotEqual(optmenu_stringvar_name,
+                            optmenu2_stringvar_name)
+        self.assertEqual(self.root.tk.globalgetvar(optmenu_stringvar_name),
+                         items[1])
+        self.assertEqual(self.root.tk.globalgetvar(optmenu2_stringvar_name),
+                         items[2])
+
+        optmenu.destroy()
+        optmenu2.destroy()
+
 
 tests_gui = (LabeledScaleTest, OptionMenuTest)
 
diff --git a/Lib/lib-tk/test/test_ttk/test_widgets.py b/Lib/lib-tk/test/test_ttk/test_widgets.py
index a84960d..3d5683c 100644
--- a/Lib/lib-tk/test/test_ttk/test_widgets.py
+++ b/Lib/lib-tk/test/test_ttk/test_widgets.py
@@ -1485,6 +1485,15 @@
             self.tv.insert('', 'end', text=value), text=None),
             value)
 
+        # test for values which are not None
+        itemid = self.tv.insert('', 'end', 0)
+        self.assertEqual(itemid, '0')
+        itemid = self.tv.insert('', 'end', 0.0)
+        self.assertEqual(itemid, '0.0')
+        # this is because False resolves to 0 and element with 0 iid is already present
+        self.assertRaises(tkinter.TclError, self.tv.insert, '', 'end', False)
+        self.assertRaises(tkinter.TclError, self.tv.insert, '', 'end', '')
+
 
     def test_selection(self):
         # item 'none' doesn't exist
diff --git a/Lib/lib-tk/tkFont.py b/Lib/lib-tk/tkFont.py
index 113c983..b245623 100644
--- a/Lib/lib-tk/tkFont.py
+++ b/Lib/lib-tk/tkFont.py
@@ -47,8 +47,10 @@
     def _set(self, kw):
         options = []
         for k, v in kw.items():
+            if not isinstance(v, basestring):
+                v = str(v)
             options.append("-"+k)
-            options.append(str(v))
+            options.append(v)
         return tuple(options)
 
     def _get(self, args):
diff --git a/Lib/lib-tk/ttk.py b/Lib/lib-tk/ttk.py
index 1125439..d4df408 100644
--- a/Lib/lib-tk/ttk.py
+++ b/Lib/lib-tk/ttk.py
@@ -1332,7 +1332,7 @@
         already exist in the tree. Otherwise, a new unique identifier
         is generated."""
         opts = _format_optdict(kw)
-        if iid:
+        if iid is not None:
             res = self.tk.call(self._w, "insert", parent, index,
                 "-id", iid, *opts)
         else:
@@ -1521,7 +1521,9 @@
             pass
         else:
             del self._variable
-            Frame.destroy(self)
+        Frame.destroy(self)
+        self.label = None
+        self.scale = None
 
 
     def _adjust(self, *args):
@@ -1612,7 +1614,8 @@
         menu.delete(0, 'end')
         for val in values:
             menu.add_radiobutton(label=val,
-                command=Tkinter._setit(self._variable, val, self._callback))
+                command=Tkinter._setit(self._variable, val, self._callback),
+                variable=self._variable)
 
         if default:
             self._variable.set(default)
@@ -1620,5 +1623,8 @@
 
     def destroy(self):
         """Destroy this widget and its associated variable."""
-        del self._variable
+        try:
+            del self._variable
+        except AttributeError:
+            pass
         Menubutton.destroy(self)
diff --git a/Lib/lib-tk/turtle.py b/Lib/lib-tk/turtle.py
index 264318e..52e669b 100644
--- a/Lib/lib-tk/turtle.py
+++ b/Lib/lib-tk/turtle.py
@@ -276,7 +276,7 @@
             return self[0]*other[0]+self[1]*other[1]
         return Vec2D(self[0]*other, self[1]*other)
     def __rmul__(self, other):
-        if isinstance(other, int) or isinstance(other, float):
+        if isinstance(other, (int, long, float)):
             return Vec2D(self[0]*other, self[1]*other)
     def __sub__(self, other):
         return Vec2D(self[0]-other[0], self[1]-other[1])
@@ -2352,7 +2352,7 @@
             self._resizemode = p["resizemode"]
         if "stretchfactor" in p:
             sf = p["stretchfactor"]
-            if isinstance(sf, (int, float)):
+            if isinstance(sf, (int, long, float)):
                 sf = (sf, sf)
             self._stretchfactor = sf
         if "outline" in p:
diff --git a/Lib/lib2to3/fixer_base.py b/Lib/lib2to3/fixer_base.py
index d437b96..2f50ad3 100644
--- a/Lib/lib2to3/fixer_base.py
+++ b/Lib/lib2to3/fixer_base.py
@@ -4,7 +4,6 @@
 """Base class for fixers (optional, but recommended)."""
 
 # Python imports
-import logging
 import itertools
 
 # Local imports
@@ -75,7 +74,6 @@
         The main refactoring tool should call this.
         """
         self.filename = filename
-        self.logger = logging.getLogger(filename)
 
     def match(self, node):
         """Returns match for a given parse tree node.
diff --git a/Lib/lib2to3/patcomp.py b/Lib/lib2to3/patcomp.py
index d31a9da..49ed668 100644
--- a/Lib/lib2to3/patcomp.py
+++ b/Lib/lib2to3/patcomp.py
@@ -11,7 +11,6 @@
 __author__ = "Guido van Rossum <guido@python.org>"
 
 # Python imports
-import os
 import StringIO
 
 # Fairly local imports
@@ -21,10 +20,6 @@
 from . import pytree
 from . import pygram
 
-# The pattern grammar file
-_PATTERN_GRAMMAR_FILE = os.path.join(os.path.dirname(__file__),
-                                     "PatternGrammar.txt")
-
 
 class PatternSyntaxError(Exception):
     pass
@@ -42,13 +37,17 @@
 
 class PatternCompiler(object):
 
-    def __init__(self, grammar_file=_PATTERN_GRAMMAR_FILE):
+    def __init__(self, grammar_file=None):
         """Initializer.
 
         Takes an optional alternative filename for the pattern grammar.
         """
-        self.grammar = driver.load_grammar(grammar_file)
-        self.syms = pygram.Symbols(self.grammar)
+        if grammar_file is None:
+            self.grammar = pygram.pattern_grammar
+            self.syms = pygram.pattern_symbols
+        else:
+            self.grammar = driver.load_grammar(grammar_file)
+            self.syms = pygram.Symbols(self.grammar)
         self.pygrammar = pygram.python_grammar
         self.pysyms = pygram.python_symbols
         self.driver = driver.Driver(self.grammar, convert=pattern_convert)
diff --git a/Lib/lib2to3/pgen2/driver.py b/Lib/lib2to3/pgen2/driver.py
index ce601bb..a513330 100644
--- a/Lib/lib2to3/pgen2/driver.py
+++ b/Lib/lib2to3/pgen2/driver.py
@@ -19,6 +19,7 @@
 import codecs
 import os
 import logging
+import pkgutil
 import StringIO
 import sys
 
@@ -143,6 +144,26 @@
     return os.path.getmtime(a) >= os.path.getmtime(b)
 
 
+def load_packaged_grammar(package, grammar_source):
+    """Normally, loads a pickled grammar by doing
+        pkgutil.get_data(package, pickled_grammar)
+    where *pickled_grammar* is computed from *grammar_source* by adding the
+    Python version and using a ``.pickle`` extension.
+
+    However, if *grammar_source* is an extant file, load_grammar(grammar_source)
+    is called instead. This facilitates using a packaged grammar file when needed
+    but preserves load_grammar's automatic regeneration behavior when possible.
+
+    """
+    if os.path.isfile(grammar_source):
+        return load_grammar(grammar_source)
+    pickled_name = _generate_pickle_name(os.path.basename(grammar_source))
+    data = pkgutil.get_data(package, pickled_name)
+    g = grammar.Grammar()
+    g.loads(data)
+    return g
+
+
 def main(*args):
     """Main program, when run as a script: produce grammar pickle files.
 
diff --git a/Lib/lib2to3/pgen2/grammar.py b/Lib/lib2to3/pgen2/grammar.py
index 75255e9..0b6d86b 100644
--- a/Lib/lib2to3/pgen2/grammar.py
+++ b/Lib/lib2to3/pgen2/grammar.py
@@ -109,6 +109,10 @@
         f.close()
         self.__dict__.update(d)
 
+    def loads(self, pkl):
+        """Load the grammar tables from a pickle bytes object."""
+        self.__dict__.update(pickle.loads(pkl))
+
     def copy(self):
         """
         Copy the grammar.
diff --git a/Lib/lib2to3/pgen2/pgen.py b/Lib/lib2to3/pgen2/pgen.py
index ed16992..be4fcad 100644
--- a/Lib/lib2to3/pgen2/pgen.py
+++ b/Lib/lib2to3/pgen2/pgen.py
@@ -74,7 +74,7 @@
             else:
                 # A named token (NAME, NUMBER, STRING)
                 itoken = getattr(token, label, None)
-                assert isinstance(itoken, int), label
+                assert isinstance(itoken, (int, long)), label
                 assert itoken in token.tok_name, label
                 if itoken in c.tokens:
                     return c.tokens[itoken]
diff --git a/Lib/lib2to3/pygram.py b/Lib/lib2to3/pygram.py
index 621ff24..7e67e4a 100644
--- a/Lib/lib2to3/pygram.py
+++ b/Lib/lib2to3/pygram.py
@@ -29,12 +29,12 @@
             setattr(self, name, symbol)
 
 
-python_grammar = driver.load_grammar(_GRAMMAR_FILE)
+python_grammar = driver.load_packaged_grammar("lib2to3", _GRAMMAR_FILE)
 
 python_symbols = Symbols(python_grammar)
 
 python_grammar_no_print_statement = python_grammar.copy()
 del python_grammar_no_print_statement.keywords["print"]
 
-pattern_grammar = driver.load_grammar(_PATTERN_GRAMMAR_FILE)
+pattern_grammar = driver.load_packaged_grammar("lib2to3", _PATTERN_GRAMMAR_FILE)
 pattern_symbols = Symbols(pattern_grammar)
diff --git a/Lib/lib2to3/tests/test_parser.py b/Lib/lib2to3/tests/test_parser.py
index ebf8441..d2254f1 100644
--- a/Lib/lib2to3/tests/test_parser.py
+++ b/Lib/lib2to3/tests/test_parser.py
@@ -11,11 +11,14 @@
 from .support import driver, test_dir
 
 # Python imports
+import operator
 import os
+import pickle
 import shutil
 import subprocess
 import sys
 import tempfile
+import types
 import unittest
 
 # Local imports
@@ -97,6 +100,18 @@
         finally:
             shutil.rmtree(tmpdir)
 
+    def test_load_packaged_grammar(self):
+        modname = __name__ + '.load_test'
+        class MyLoader:
+            def get_data(self, where):
+                return pickle.dumps({'elephant': 19})
+        class MyModule(types.ModuleType):
+            __file__ = 'parsertestmodule'
+            __loader__ = MyLoader()
+        sys.modules[modname] = MyModule(modname)
+        self.addCleanup(operator.delitem, sys.modules, modname)
+        g = pgen2_driver.load_packaged_grammar(modname, 'Grammar.txt')
+        self.assertEqual(g.elephant, 19)
 
 
 class GrammarTest(support.TestCase):
diff --git a/Lib/locale.py b/Lib/locale.py
index 5aab163..51909f8 100644
--- a/Lib/locale.py
+++ b/Lib/locale.py
@@ -618,9 +618,18 @@
                     pass
                 result = nl_langinfo(CODESET)
                 setlocale(LC_CTYPE, oldloc)
-                return result
             else:
-                return nl_langinfo(CODESET)
+                result = nl_langinfo(CODESET)
+
+            if not result and sys.platform == 'darwin':
+                # nl_langinfo can return an empty string
+                # when the setting has an invalid value.
+                # Default to UTF-8 in that case because
+                # UTF-8 is the default charset on OSX and
+                # returning nothing will crash the
+                # interpreter.
+                result = 'UTF-8'
+            return result
 
 
 ### Database
@@ -789,6 +798,17 @@
 #
 # SS 2014-10-01:
 # Updated alias mapping with glibc 2.19 supported locales.
+#
+# SS 2018-05-05:
+# Updated alias mapping with glibc 2.27 supported locales.
+#
+# These are the differences compared to the old mapping (Python 2.7.15
+# and older):
+#
+#    updated 'ca_es@valencia' -> 'ca_ES.ISO8859-15@valencia' to 'ca_ES.UTF-8@valencia'
+#    updated 'english.iso88591' -> 'en_EN.ISO8859-1' to 'en_US.ISO8859-1'
+#    updated 'kk_kz' -> 'kk_KZ.RK1048' to 'kk_KZ.ptcp154'
+#    updated 'russian' -> 'ru_RU.ISO8859-5' to 'ru_RU.KOI8-R'
 
 locale_alias = {
     'a3':                                   'az_AZ.KOI8-C',
@@ -801,11 +821,14 @@
     'af':                                   'af_ZA.ISO8859-1',
     'af_za':                                'af_ZA.ISO8859-1',
     'af_za.iso88591':                       'af_ZA.ISO8859-1',
+    'agr_pe':                               'agr_PE.UTF-8',
+    'ak_gh':                                'ak_GH.UTF-8',
     'am':                                   'am_ET.UTF-8',
     'am_et':                                'am_ET.UTF-8',
     'american':                             'en_US.ISO8859-1',
     'american.iso88591':                    'en_US.ISO8859-1',
     'an_es':                                'an_ES.ISO8859-15',
+    'anp_in':                               'anp_IN.UTF-8',
     'ar':                                   'ar_AA.ISO8859-6',
     'ar_aa':                                'ar_AA.ISO8859-6',
     'ar_aa.iso88596':                       'ar_AA.ISO8859-6',
@@ -838,6 +861,7 @@
     'ar_sa.iso88596':                       'ar_SA.ISO8859-6',
     'ar_sd':                                'ar_SD.ISO8859-6',
     'ar_sd.iso88596':                       'ar_SD.ISO8859-6',
+    'ar_ss':                                'ar_SS.UTF-8',
     'ar_sy':                                'ar_SY.ISO8859-6',
     'ar_sy.iso88596':                       'ar_SY.ISO8859-6',
     'ar_tn':                                'ar_TN.ISO8859-6',
@@ -853,6 +877,7 @@
     'az':                                   'az_AZ.ISO8859-9E',
     'az_az':                                'az_AZ.ISO8859-9E',
     'az_az.iso88599e':                      'az_AZ.ISO8859-9E',
+    'az_ir':                                'az_IR.UTF-8',
     'be':                                   'be_BY.CP1251',
     'be@latin':                             'be_BY.UTF-8@latin',
     'be_bg.utf8':                           'bg_BG.UTF-8',
@@ -870,7 +895,10 @@
     'bg_bg.iso88595':                       'bg_BG.ISO8859-5',
     'bg_bg.koi8r':                          'bg_BG.KOI8-R',
     'bg_bg.microsoftcp1251':                'bg_BG.CP1251',
+    'bhb_in.utf8':                          'bhb_IN.UTF-8',
     'bho_in':                               'bho_IN.UTF-8',
+    'bho_np':                               'bho_NP.UTF-8',
+    'bi_vu':                                'bi_VU.UTF-8',
     'bn_bd':                                'bn_BD.UTF-8',
     'bn_in':                                'bn_IN.UTF-8',
     'bo_cn':                                'bo_CN.UTF-8',
@@ -912,8 +940,8 @@
     'ca_es.iso885915':                      'ca_ES.ISO8859-15',
     'ca_es.iso885915@euro':                 'ca_ES.ISO8859-15',
     'ca_es.utf8@euro':                      'ca_ES.UTF-8',
-    'ca_es@valencia':                       'ca_ES.ISO8859-15@valencia',
     'ca_es@euro':                           'ca_ES.ISO8859-15',
+    'ca_es@valencia':                       'ca_ES.UTF-8@valencia',
     'ca_fr':                                'ca_FR.ISO8859-1',
     'ca_fr.iso88591':                       'ca_FR.ISO8859-1',
     'ca_fr.iso885915':                      'ca_FR.ISO8859-15',
@@ -927,10 +955,14 @@
     'ca_it.utf8@euro':                      'ca_IT.UTF-8',
     'ca_it@euro':                           'ca_IT.ISO8859-15',
     'catalan':                              'ca_ES.ISO8859-1',
+    'ce_ru':                                'ce_RU.UTF-8',
     'cextend':                              'en_US.ISO8859-1',
     'cextend.en':                           'en_US.ISO8859-1',
     'chinese-s':                            'zh_CN.eucCN',
     'chinese-t':                            'zh_TW.eucTW',
+    'chr_us':                               'chr_US.UTF-8',
+    'ckb_iq':                               'ckb_IQ.UTF-8',
+    'cmn_tw':                               'cmn_TW.UTF-8',
     'crh_ua':                               'crh_UA.UTF-8',
     'croatian':                             'hr_HR.ISO8859-2',
     'cs':                                   'cs_CZ.ISO8859-2',
@@ -987,6 +1019,7 @@
     'de_de.iso885915@euro':                 'de_DE.ISO8859-15',
     'de_de.utf8@euro':                      'de_DE.UTF-8',
     'de_de@euro':                           'de_DE.ISO8859-15',
+    'de_it':                                'de_IT.ISO8859-1',
     'de_li.utf8':                           'de_LI.UTF-8',
     'de_lu':                                'de_LU.ISO8859-1',
     'de_lu.iso88591':                       'de_LU.ISO8859-1',
@@ -1021,6 +1054,8 @@
     'en_ca':                                'en_CA.ISO8859-1',
     'en_ca.iso88591':                       'en_CA.ISO8859-1',
     'en_dk':                                'en_DK.ISO8859-1',
+    'en_dk.iso88591':                       'en_DK.ISO8859-1',
+    'en_dk.iso885915':                      'en_DK.ISO8859-15',
     'en_dl.utf8':                           'en_DL.UTF-8',
     'en_gb':                                'en_GB.ISO8859-1',
     'en_gb.88591':                          'en_GB.ISO8859-1',
@@ -1035,12 +1070,14 @@
     'en_ie.iso885915@euro':                 'en_IE.ISO8859-15',
     'en_ie.utf8@euro':                      'en_IE.UTF-8',
     'en_ie@euro':                           'en_IE.ISO8859-15',
+    'en_il':                                'en_IL.UTF-8',
     'en_in':                                'en_IN.ISO8859-1',
     'en_ng':                                'en_NG.UTF-8',
     'en_nz':                                'en_NZ.ISO8859-1',
     'en_nz.iso88591':                       'en_NZ.ISO8859-1',
     'en_ph':                                'en_PH.ISO8859-1',
     'en_ph.iso88591':                       'en_PH.ISO8859-1',
+    'en_sc.utf8':                           'en_SC.UTF-8',
     'en_sg':                                'en_SG.ISO8859-1',
     'en_sg.iso88591':                       'en_SG.ISO8859-1',
     'en_uk':                                'en_GB.ISO8859-1',
@@ -1064,7 +1101,7 @@
     'eng_gb':                               'en_GB.ISO8859-1',
     'eng_gb.8859':                          'en_GB.ISO8859-1',
     'english':                              'en_EN.ISO8859-1',
-    'english.iso88591':                     'en_EN.ISO8859-1',
+    'english.iso88591':                     'en_US.ISO8859-1',
     'english_uk':                           'en_GB.ISO8859-1',
     'english_uk.8859':                      'en_GB.ISO8859-1',
     'english_united-states':                'en_US.ISO8859-1',
@@ -1259,6 +1296,7 @@
     'gv_gb.iso885915':                      'gv_GB.ISO8859-15',
     'gv_gb@euro':                           'gv_GB.ISO8859-15',
     'ha_ng':                                'ha_NG.UTF-8',
+    'hak_tw':                               'hak_TW.UTF-8',
     'he':                                   'he_IL.ISO8859-8',
     'he_il':                                'he_IL.ISO8859-8',
     'he_il.cp1255':                         'he_IL.CP1255',
@@ -1269,6 +1307,7 @@
     'hi':                                   'hi_IN.ISCII-DEV',
     'hi_in':                                'hi_IN.ISCII-DEV',
     'hi_in.isciidev':                       'hi_IN.ISCII-DEV',
+    'hif_fj':                               'hif_FJ.UTF-8',
     'hne':                                  'hne_IN.UTF-8',
     'hne_in':                               'hne_IN.UTF-8',
     'hr':                                   'hr_HR.ISO8859-2',
@@ -1352,7 +1391,8 @@
     'ka_ge.georgianacademy':                'ka_GE.GEORGIAN-ACADEMY',
     'ka_ge.georgianps':                     'ka_GE.GEORGIAN-PS',
     'ka_ge.georgianrs':                     'ka_GE.GEORGIAN-ACADEMY',
-    'kk_kz':                                'kk_KZ.RK1048',
+    'kab_dz':                               'kab_DZ.UTF-8',
+    'kk_kz':                                'kk_KZ.ptcp154',
     'kl':                                   'kl_GL.ISO8859-1',
     'kl_gl':                                'kl_GL.ISO8859-1',
     'kl_gl.iso88591':                       'kl_GL.ISO8859-1',
@@ -1370,6 +1410,7 @@
     'korean.euc':                           'ko_KR.eucKR',
     'ks':                                   'ks_IN.UTF-8',
     'ks_in':                                'ks_IN.UTF-8',
+    'ks_in.utf8@devanagari':                'ks_IN.UTF-8@devanagari',
     'ks_in@devanagari':                     'ks_IN.UTF-8@devanagari',
     'ks_in@devanagari.utf8':                'ks_IN.UTF-8@devanagari',
     'ku_tr':                                'ku_TR.ISO8859-9',
@@ -1387,6 +1428,7 @@
     'li_nl':                                'li_NL.UTF-8',
     'lij_it':                               'lij_IT.UTF-8',
     'lithuanian':                           'lt_LT.ISO8859-13',
+    'ln_cd':                                'ln_CD.UTF-8',
     'lo':                                   'lo_LA.MULELAO-1',
     'lo_la':                                'lo_LA.MULELAO-1',
     'lo_la.cp1133':                         'lo_LA.IBM-CP1133',
@@ -1400,14 +1442,19 @@
     'lv_lv':                                'lv_LV.ISO8859-13',
     'lv_lv.iso885913':                      'lv_LV.ISO8859-13',
     'lv_lv.iso88594':                       'lv_LV.ISO8859-4',
+    'lzh_tw':                               'lzh_TW.UTF-8',
     'mag_in':                               'mag_IN.UTF-8',
     'mai':                                  'mai_IN.UTF-8',
     'mai_in':                               'mai_IN.UTF-8',
+    'mai_np':                               'mai_NP.UTF-8',
+    'mfe_mu':                               'mfe_MU.UTF-8',
     'mg_mg':                                'mg_MG.ISO8859-15',
     'mhr_ru':                               'mhr_RU.UTF-8',
     'mi':                                   'mi_NZ.ISO8859-1',
     'mi_nz':                                'mi_NZ.ISO8859-1',
     'mi_nz.iso88591':                       'mi_NZ.ISO8859-1',
+    'miq_ni':                               'miq_NI.UTF-8',
+    'mjw_in':                               'mjw_IN.UTF-8',
     'mk':                                   'mk_MK.ISO8859-5',
     'mk_mk':                                'mk_MK.ISO8859-5',
     'mk_mk.cp1251':                         'mk_MK.CP1251',
@@ -1426,7 +1473,7 @@
     'mt_mt':                                'mt_MT.ISO8859-3',
     'mt_mt.iso88593':                       'mt_MT.ISO8859-3',
     'my_mm':                                'my_MM.UTF-8',
-    'nan_tw@latin':                         'nan_TW.UTF-8@latin',
+    'nan_tw':                               'nan_TW.UTF-8',
     'nb':                                   'nb_NO.ISO8859-1',
     'nb_no':                                'nb_NO.ISO8859-1',
     'nb_no.88591':                          'nb_NO.ISO8859-1',
@@ -1500,6 +1547,8 @@
     'pa_in':                                'pa_IN.UTF-8',
     'pa_pk':                                'pa_PK.UTF-8',
     'pap_an':                               'pap_AN.UTF-8',
+    'pap_aw':                               'pap_AW.UTF-8',
+    'pap_cw':                               'pap_CW.UTF-8',
     'pd':                                   'pd_US.ISO8859-1',
     'pd_de':                                'pd_DE.ISO8859-1',
     'pd_de.iso88591':                       'pd_DE.ISO8859-1',
@@ -1540,6 +1589,8 @@
     'pt_pt.iso885915@euro':                 'pt_PT.ISO8859-15',
     'pt_pt.utf8@euro':                      'pt_PT.UTF-8',
     'pt_pt@euro':                           'pt_PT.ISO8859-15',
+    'quz_pe':                               'quz_PE.UTF-8',
+    'raj_in':                               'raj_IN.UTF-8',
     'ro':                                   'ro_RO.ISO8859-2',
     'ro_ro':                                'ro_RO.ISO8859-2',
     'ro_ro.iso88592':                       'ro_RO.ISO8859-2',
@@ -1556,7 +1607,7 @@
     'ru_ua.koi8u':                          'ru_UA.KOI8-U',
     'ru_ua.microsoftcp1251':                'ru_UA.CP1251',
     'rumanian':                             'ro_RO.ISO8859-2',
-    'russian':                              'ru_RU.ISO8859-5',
+    'russian':                              'ru_RU.KOI8-R',
     'rw':                                   'rw_RW.ISO8859-1',
     'rw_rw':                                'rw_RW.ISO8859-1',
     'rw_rw.iso88591':                       'rw_RW.ISO8859-1',
@@ -1566,17 +1617,20 @@
     'sd':                                   'sd_IN.UTF-8',
     'sd@devanagari':                        'sd_IN.UTF-8@devanagari',
     'sd_in':                                'sd_IN.UTF-8',
+    'sd_in.utf8@devanagari':                'sd_IN.UTF-8@devanagari',
     'sd_in@devanagari':                     'sd_IN.UTF-8@devanagari',
     'sd_in@devanagari.utf8':                'sd_IN.UTF-8@devanagari',
     'sd_pk':                                'sd_PK.UTF-8',
     'se_no':                                'se_NO.UTF-8',
     'serbocroatian':                        'sr_RS.UTF-8@latin',
+    'sgs_lt':                               'sgs_LT.UTF-8',
     'sh':                                   'sr_RS.UTF-8@latin',
     'sh_ba.iso88592@bosnia':                'sr_CS.ISO8859-2',
     'sh_hr':                                'sh_HR.ISO8859-2',
     'sh_hr.iso88592':                       'hr_HR.ISO8859-2',
     'sh_sp':                                'sr_CS.ISO8859-2',
     'sh_yu':                                'sr_RS.UTF-8@latin',
+    'shn_mm':                               'shn_MM.UTF-8',
     'shs_ca':                               'shs_CA.UTF-8',
     'si':                                   'si_LK.UTF-8',
     'si_lk':                                'si_LK.UTF-8',
@@ -1592,6 +1646,7 @@
     'slovak':                               'sk_SK.ISO8859-2',
     'slovene':                              'sl_SI.ISO8859-2',
     'slovenian':                            'sl_SI.ISO8859-2',
+    'sm_ws':                                'sm_WS.UTF-8',
     'so_dj':                                'so_DJ.ISO8859-1',
     'so_et':                                'so_ET.UTF-8',
     'so_ke':                                'so_KE.ISO8859-1',
@@ -1618,6 +1673,7 @@
     'sr_cs@latn':                           'sr_CS.UTF-8@latin',
     'sr_me':                                'sr_ME.UTF-8',
     'sr_rs':                                'sr_RS.UTF-8',
+    'sr_rs.utf8@latn':                      'sr_RS.UTF-8@latin',
     'sr_rs@latin':                          'sr_RS.UTF-8@latin',
     'sr_rs@latn':                           'sr_RS.UTF-8@latin',
     'sr_sp':                                'sr_CS.ISO8859-2',
@@ -1659,6 +1715,7 @@
     'ta_in.tscii':                          'ta_IN.TSCII-0',
     'ta_in.tscii0':                         'ta_IN.TSCII-0',
     'ta_lk':                                'ta_LK.UTF-8',
+    'tcy_in.utf8':                          'tcy_IN.UTF-8',
     'te':                                   'te_IN.UTF-8',
     'te_in':                                'te_IN.UTF-8',
     'tg':                                   'tg_TJ.KOI8-C',
@@ -1670,6 +1727,7 @@
     'th_th.tactis':                         'th_TH.TIS620',
     'th_th.tis620':                         'th_TH.TIS620',
     'thai':                                 'th_TH.ISO8859-11',
+    'the_np':                               'the_NP.UTF-8',
     'ti_er':                                'ti_ER.UTF-8',
     'ti_et':                                'ti_ET.UTF-8',
     'tig_er':                               'tig_ER.UTF-8',
@@ -1680,6 +1738,8 @@
     'tn':                                   'tn_ZA.ISO8859-15',
     'tn_za':                                'tn_ZA.ISO8859-15',
     'tn_za.iso885915':                      'tn_ZA.ISO8859-15',
+    'to_to':                                'to_TO.UTF-8',
+    'tpi_pg':                               'tpi_PG.UTF-8',
     'tr':                                   'tr_TR.ISO8859-9',
     'tr_cy':                                'tr_CY.ISO8859-9',
     'tr_tr':                                'tr_TR.ISO8859-9',
@@ -1741,6 +1801,7 @@
     'yi_us.microsoftcp1255':                'yi_US.CP1255',
     'yo_ng':                                'yo_NG.UTF-8',
     'yue_hk':                               'yue_HK.UTF-8',
+    'yuw_pg':                               'yuw_PG.UTF-8',
     'zh':                                   'zh_CN.eucCN',
     'zh_cn':                                'zh_CN.gb2312',
     'zh_cn.big5':                           'zh_TW.big5',
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index caf151d..cc24b30 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -636,12 +636,19 @@
     # to prevent race conditions and failures during interpreter shutdown.
     acquire, release, handlers = _acquireLock, _releaseLock, _handlerList
     if acquire and release and handlers:
-        acquire()
         try:
-            if wr in handlers:
-                handlers.remove(wr)
-        finally:
-            release()
+            acquire()
+            try:
+                if wr in handlers:
+                    handlers.remove(wr)
+            finally:
+                release()
+        except TypeError:
+            # https://bugs.python.org/issue21149 - If the RLock object behind
+            # acquire() and release() has been partially finalized you may see
+            # an error about NoneType not being callable.  Absolutely nothing
+            # we can do in this GC during process shutdown situation.  Eat it.
+            pass
 
 def _addHandlerRef(handler):
     """
@@ -1222,7 +1229,7 @@
 
         logger.log(level, "We have a %s", "mysterious problem", exc_info=1)
         """
-        if not isinstance(level, int):
+        if not isinstance(level, (int, long)):
             if raiseExceptions:
                 raise TypeError("level must be an integer")
             else:
diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py
index e430ab7..e0b935c 100644
--- a/Lib/logging/handlers.py
+++ b/Lib/logging/handlers.py
@@ -760,14 +760,29 @@
             self.unixsocket = 1
             self._connect_unixsocket(address)
         else:
-            self.unixsocket = 0
+            self.unixsocket = False
             if socktype is None:
                 socktype = socket.SOCK_DGRAM
-            self.socket = socket.socket(socket.AF_INET, socktype)
-            if socktype == socket.SOCK_STREAM:
-                self.socket.connect(address)
+            host, port = address
+            ress = socket.getaddrinfo(host, port, 0, socktype)
+            if not ress:
+                raise socket.error("getaddrinfo returns an empty list")
+            for res in ress:
+                af, socktype, proto, _, sa = res
+                err = sock = None
+                try:
+                    sock = socket.socket(af, socktype, proto)
+                    if socktype == socket.SOCK_STREAM:
+                        sock.connect(sa)
+                    break
+                except socket.error as exc:
+                    err = exc
+                    if sock is not None:
+                        sock.close()
+            if err is not None:
+                raise err
+            self.socket = sock
             self.socktype = socktype
-        self.formatter = None
 
     def _connect_unixsocket(self, address):
         use_socktype = self.socktype
@@ -812,7 +827,7 @@
             priority = self.priority_names[priority]
         return (facility << 3) | priority
 
-    def close (self):
+    def close(self):
         """
         Closes the socket.
         """
diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py
index 157d455..caecc11 100644
--- a/Lib/mimetypes.py
+++ b/Lib/mimetypes.py
@@ -442,6 +442,7 @@
         '.jpeg'   : 'image/jpeg',
         '.jpg'    : 'image/jpeg',
         '.js'     : 'application/javascript',
+        '.json'   : 'application/json',
         '.ksh'    : 'text/plain',
         '.latex'  : 'application/x-latex',
         '.m1v'    : 'video/mpeg',
diff --git a/Lib/multiprocessing/forking.py b/Lib/multiprocessing/forking.py
index d393817..9412eb1 100644
--- a/Lib/multiprocessing/forking.py
+++ b/Lib/multiprocessing/forking.py
@@ -405,7 +405,8 @@
         if _logger is not None:
             d['log_level'] = _logger.getEffectiveLevel()
 
-        if not WINEXE and not WINSERVICE:
+        if not WINEXE and not WINSERVICE and \
+           not d['sys_argv'][0].lower().endswith('pythonservice.exe'):
             main_path = getattr(sys.modules['__main__'], '__file__', None)
             if not main_path and sys.argv[0] not in ('', '-c'):
                 main_path = sys.argv[0]
diff --git a/Lib/multiprocessing/pool.py b/Lib/multiprocessing/pool.py
index 991f87f..a47cd0f 100644
--- a/Lib/multiprocessing/pool.py
+++ b/Lib/multiprocessing/pool.py
@@ -86,7 +86,7 @@
 
 
 def worker(inqueue, outqueue, initializer=None, initargs=(), maxtasks=None):
-    assert maxtasks is None or (type(maxtasks) == int and maxtasks > 0)
+    assert maxtasks is None or (type(maxtasks) in (int, long) and maxtasks > 0)
     put = outqueue.put
     get = inqueue.get
     if hasattr(inqueue, '_writer'):
@@ -120,6 +120,8 @@
             debug("Possible encoding error while sending result: %s" % (
                 wrapped))
             put((job, i, (False, wrapped)))
+
+        task = job = result = func = args = kwds = None
         completed += 1
     debug('worker exiting after %d tasks' % completed)
 
@@ -362,10 +364,11 @@
                 if set_length:
                     debug('doing set_length()')
                     set_length(i+1)
+            finally:
+                task = taskseq = job = None
         else:
             debug('task handler got sentinel')
 
-
         try:
             # tell result handler to finish when cache is empty
             debug('task handler sending sentinel to result handler')
@@ -405,6 +408,7 @@
                 cache[job]._set(i, obj)
             except KeyError:
                 pass
+            task = job = obj = None
 
         while cache and thread._state != TERMINATE:
             try:
@@ -421,6 +425,7 @@
                 cache[job]._set(i, obj)
             except KeyError:
                 pass
+            task = job = obj = None
 
         if hasattr(outqueue, '_reader'):
             debug('ensuring that outqueue is not full')
diff --git a/Lib/multiprocessing/process.py b/Lib/multiprocessing/process.py
index 44c1e44..11c8fca 100644
--- a/Lib/multiprocessing/process.py
+++ b/Lib/multiprocessing/process.py
@@ -128,6 +128,9 @@
         else:
             from .forking import Popen
         self._popen = Popen(self)
+        # Avoid a refcycle if the target function holds an indirect
+        # reference to the process object (see bpo-30775)
+        del self._target, self._args, self._kwargs
         _current_process._children.add(self)
 
     def terminate(self):
@@ -153,10 +156,16 @@
         if self is _current_process:
             return True
         assert self._parent_pid == os.getpid(), 'can only test a child process'
+
         if self._popen is None:
             return False
-        self._popen.poll()
-        return self._popen.returncode is None
+
+        returncode = self._popen.poll()
+        if returncode is None:
+            return True
+        else:
+            _current_process._children.discard(self)
+            return False
 
     @property
     def name(self):
@@ -227,7 +236,7 @@
             else:
                 status = 'started'
 
-        if type(status) is int:
+        if type(status) in (int, long):
             if status == 0:
                 status = 'stopped'
             else:
@@ -262,8 +271,8 @@
         except SystemExit, e:
             if not e.args:
                 exitcode = 1
-            elif isinstance(e.args[0], int):
-                exitcode = e.args[0]
+            elif isinstance(e.args[0], (int, long)):
+                exitcode = int(e.args[0])
             else:
                 sys.stderr.write(str(e.args[0]) + '\n')
                 sys.stderr.flush()
diff --git a/Lib/multiprocessing/queues.py b/Lib/multiprocessing/queues.py
index a88e298..079cd35 100644
--- a/Lib/multiprocessing/queues.py
+++ b/Lib/multiprocessing/queues.py
@@ -128,7 +128,7 @@
             try:
                 if block:
                     timeout = deadline - time.time()
-                    if timeout < 0 or not self._poll(timeout):
+                    if not self._poll(timeout):
                         raise Empty
                 elif not self._poll():
                     raise Empty
@@ -244,8 +244,8 @@
         else:
             wacquire = None
 
-        try:
-            while 1:
+        while 1:
+            try:
                 nacquire()
                 try:
                     if not buffer:
@@ -270,19 +270,17 @@
                                 wrelease()
                 except IndexError:
                     pass
-        except Exception, e:
-            # Since this runs in a daemon thread the resources it uses
-            # may be become unusable while the process is cleaning up.
-            # We ignore errors which happen after the process has
-            # started to cleanup.
-            try:
+            except Exception as e:
+                # Since this runs in a daemon thread the resources it uses
+                # may be become unusable while the process is cleaning up.
+                # We ignore errors which happen after the process has
+                # started to cleanup.
                 if is_exiting():
                     info('error in queue thread: %s', e)
+                    return
                 else:
                     import traceback
                     traceback.print_exc()
-            except Exception:
-                pass
 
 _sentinel = object()
 
diff --git a/Lib/multiprocessing/util.py b/Lib/multiprocessing/util.py
index 092b61c..2920f24 100644
--- a/Lib/multiprocessing/util.py
+++ b/Lib/multiprocessing/util.py
@@ -174,7 +174,7 @@
     Class which supports object finalization using weakrefs
     '''
     def __init__(self, obj, callback, args=(), kwargs=None, exitpriority=None):
-        assert exitpriority is None or type(exitpriority) is int
+        assert exitpriority is None or type(exitpriority) in (int, long)
 
         if obj is not None:
             self._weakref = weakref.ref(obj, self)
@@ -265,6 +265,9 @@
     else:
         f = lambda p : p[0][0] is not None and p[0][0] >= minpriority
 
+    # Careful: _finalizer_registry may be mutated while this function
+    # is running (either by a GC run or by another thread).
+
     items = [x for x in _finalizer_registry.items() if f(x)]
     items.sort(reverse=True)
 
diff --git a/Lib/netrc.py b/Lib/netrc.py
index 4b18973..16bc347 100644
--- a/Lib/netrc.py
+++ b/Lib/netrc.py
@@ -130,15 +130,15 @@
         rep = ""
         for host in self.hosts.keys():
             attrs = self.hosts[host]
-            rep = rep + "machine "+ host + "\n\tlogin " + repr(attrs[0]) + "\n"
+            rep += "machine {host}\n\tlogin {attrs[0]}\n".format(host=host, attrs=attrs)
             if attrs[1]:
-                rep = rep + "account " + repr(attrs[1])
-            rep = rep + "\tpassword " + repr(attrs[2]) + "\n"
+                rep += "\taccount {attrs[1]}\n".format(attrs=attrs)
+            rep += "\tpassword {attrs[2]}\n".format(attrs=attrs)
         for macro in self.macros.keys():
-            rep = rep + "macdef " + macro + "\n"
+            rep += "macdef {macro}\n".format(macro=macro)
             for line in self.macros[macro]:
-                rep = rep + line
-            rep = rep + "\n"
+                rep += line
+            rep += "\n"
         return rep
 
 if __name__ == '__main__':
diff --git a/Lib/pickletools.py b/Lib/pickletools.py
index 8de53dd..c9366c8 100644
--- a/Lib/pickletools.py
+++ b/Lib/pickletools.py
@@ -185,7 +185,7 @@
         assert isinstance(name, str)
         self.name = name
 
-        assert isinstance(n, int) and (n >= 0 or
+        assert isinstance(n, (int, long)) and (n >= 0 or
                                        n in (UP_TO_NEWLINE,
                                              TAKEN_FROM_ARGUMENT1,
                                              TAKEN_FROM_ARGUMENT4))
@@ -873,7 +873,7 @@
             assert isinstance(x, StackObject)
         self.stack_after = stack_after
 
-        assert isinstance(proto, int) and 0 <= proto <= 2
+        assert isinstance(proto, (int, long)) and 0 <= proto <= 2
         self.proto = proto
 
         assert isinstance(doc, str)
diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py
index ce072ec..68ca72b 100644
--- a/Lib/pkgutil.py
+++ b/Lib/pkgutil.py
@@ -1,8 +1,5 @@
 """Utilities to support packages."""
 
-# NOTE: This module must remain compatible with Python 2.3, as it is shared
-# by setuptools for distribution with Python 2.3 and up.
-
 import os
 import sys
 import imp
@@ -252,7 +249,8 @@
         return mod
 
     def get_data(self, pathname):
-        return open(pathname, "rb").read()
+        with open(pathname, "rb") as file:
+            return file.read()
 
     def _reopen(self):
         if self.file and self.file.closed:
diff --git a/Lib/platform.py b/Lib/platform.py
index 55f2fa8..62a5476 100755
--- a/Lib/platform.py
+++ b/Lib/platform.py
@@ -132,6 +132,35 @@
         # Standard Unix uses /dev/null
         DEV_NULL = '/dev/null'
 
+# Helper for comparing two version number strings.
+# Based on the description of the PHP's version_compare():
+# http://php.net/manual/en/function.version-compare.php
+
+_ver_stages = {
+    # any string not found in this dict, will get 0 assigned
+    'dev': 10,
+    'alpha': 20, 'a': 20,
+    'beta': 30, 'b': 30,
+    'c': 40,
+    'RC': 50, 'rc': 50,
+    # number, will get 100 assigned
+    'pl': 200, 'p': 200,
+}
+
+_component_re = re.compile(r'([0-9]+|[._+-])')
+
+def _comparable_version(version):
+    result = []
+    for v in _component_re.split(version):
+        if v not in '._+-':
+            try:
+                v = int(v, 10)
+                t = 100
+            except ValueError:
+                t = _ver_stages.get(v, 0)
+            result.extend((t, v))
+    return result
+
 ### Platform specific APIs
 
 _libc_search = re.compile(r'(__libc_init)'
@@ -140,9 +169,7 @@
                           '|'
                           '(libc(_\w+)?\.so(?:\.(\d[0-9.]*))?)')
 
-def libc_ver(executable=sys.executable,lib='',version='',
-
-             chunksize=2048):
+def libc_ver(executable=sys.executable,lib='',version='', chunksize=2048):
 
     """ Tries to determine the libc version that the file executable
         (which defaults to the Python interpreter) is linked against.
@@ -157,40 +184,42 @@
         The file is read and scanned in chunks of chunksize bytes.
 
     """
+    V = _comparable_version
     if hasattr(os.path, 'realpath'):
         # Python 2.2 introduced os.path.realpath(); it is used
         # here to work around problems with Cygwin not being
         # able to open symlinks for reading
         executable = os.path.realpath(executable)
-    f = open(executable,'rb')
-    binary = f.read(chunksize)
-    pos = 0
-    while 1:
-        m = _libc_search.search(binary,pos)
-        if not m:
-            binary = f.read(chunksize)
-            if not binary:
-                break
-            pos = 0
-            continue
-        libcinit,glibc,glibcversion,so,threads,soversion = m.groups()
-        if libcinit and not lib:
-            lib = 'libc'
-        elif glibc:
-            if lib != 'glibc':
-                lib = 'glibc'
-                version = glibcversion
-            elif glibcversion > version:
-                version = glibcversion
-        elif so:
-            if lib != 'glibc':
+    with open(executable, 'rb') as f:
+        binary = f.read(chunksize)
+        pos = 0
+        while pos < len(binary):
+            m = _libc_search.search(binary,pos)
+            if not m or m.end() == len(binary):
+                chunk = f.read(chunksize)
+                if chunk:
+                    binary = binary[max(pos, len(binary) - 1000):] + chunk
+                    pos = 0
+                    continue
+                if not m:
+                    break
+            libcinit,glibc,glibcversion,so,threads,soversion = m.groups()
+            if libcinit and not lib:
                 lib = 'libc'
-                if soversion and soversion > version:
-                    version = soversion
-                if threads and version[-len(threads):] != threads:
-                    version = version + threads
-        pos = m.end()
-    f.close()
+            elif glibc:
+                if lib != 'glibc':
+                    lib = 'glibc'
+                    version = glibcversion
+                elif V(glibcversion) > V(version):
+                    version = glibcversion
+            elif so:
+                if lib != 'glibc':
+                    lib = 'libc'
+                    if soversion and (not version or V(soversion) > V(version)):
+                        version = soversion
+                    if threads and version[-len(threads):] != threads:
+                        version = version + threads
+            pos = m.end()
     return lib,version
 
 def _dist_try_harder(distname,version,id):
@@ -451,6 +480,7 @@
     else:
         return popen(cmd,mode,bufsize)
 
+
 def _norm_version(version, build=''):
 
     """ Normalize the version and build strings and return a single
diff --git a/Lib/poplib.py b/Lib/poplib.py
index b91e5f7..a238510 100644
--- a/Lib/poplib.py
+++ b/Lib/poplib.py
@@ -274,7 +274,7 @@
         return self._shortcmd('RPOP %s' % user)
 
 
-    timestamp = re.compile(r'\+OK.*(<[^>]+>)')
+    timestamp = re.compile(br'\+OK.[^<]*(<.*>)')
 
     def apop(self, user, secret):
         """Authorisation
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index b4b190f..62cc262 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -1647,8 +1647,9 @@
     }
     # Either add symbols to this dictionary or to the symbols dictionary
     # directly: Whichever is easier. They are merged later.
+    _strprefixes = tuple(p + q for p in ('b', 'r', 'u') for q in ("'", '"'))
     _symbols_inverse = {
-        'STRINGS' : ("'", "'''", "r'", "u'", '"""', '"', 'r"', 'u"'),
+        'STRINGS' : ("'", "'''", '"""', '"') + _strprefixes,
         'OPERATORS' : ('+', '-', '*', '**', '/', '//', '%', '<<', '>>', '&',
                        '|', '^', '~', '<', '>', '<=', '>=', '==', '!=', '<>'),
         'COMPARISON' : ('<', '>', '<=', '>=', '==', '!=', '<>'),
@@ -1811,7 +1812,12 @@
                 if not request: break
             except (KeyboardInterrupt, EOFError):
                 break
-            request = strip(replace(request, '"', '', "'", ''))
+            request = strip(request)
+            # Make sure significant trailing quotation marks of literals don't
+            # get deleted while cleaning input
+            if (len(request) > 2 and request[0] == request[-1] in ("'", '"')
+                    and request[0] not in request[1:-1]):
+                request = request[1:-1]
             if lower(request) in ('q', 'quit'): break
             self.help(request)
 
diff --git a/Lib/pydoc_data/topics.py b/Lib/pydoc_data/topics.py
index 18d436f..5fc84a8 100644
--- a/Lib/pydoc_data/topics.py
+++ b/Lib/pydoc_data/topics.py
@@ -1,81 +1,13578 @@
 # -*- coding: utf-8 -*-
-# Autogenerated by Sphinx on Sat Dec  3 12:36:20 2016
-topics = {'assert': u'\nThe "assert" statement\n**********************\n\nAssert statements are a convenient way to insert debugging assertions\ninto a program:\n\n   assert_stmt ::= "assert" expression ["," expression]\n\nThe simple form, "assert expression", is equivalent to\n\n   if __debug__:\n       if not expression: raise AssertionError\n\nThe extended form, "assert expression1, expression2", is equivalent to\n\n   if __debug__:\n       if not expression1: raise AssertionError(expression2)\n\nThese equivalences assume that "__debug__" and "AssertionError" refer\nto the built-in variables with those names.  In the current\nimplementation, the built-in variable "__debug__" is "True" under\nnormal circumstances, "False" when optimization is requested (command\nline option -O).  The current code generator emits no code for an\nassert statement when optimization is requested at compile time.  Note\nthat it is unnecessary to include the source code for the expression\nthat failed in the error message; it will be displayed as part of the\nstack trace.\n\nAssignments to "__debug__" are illegal.  The value for the built-in\nvariable is determined when the interpreter starts.\n',
- 'assignment': u'\nAssignment statements\n*********************\n\nAssignment statements are used to (re)bind names to values and to\nmodify attributes or items of mutable objects:\n\n   assignment_stmt ::= (target_list "=")+ (expression_list | yield_expression)\n   target_list     ::= target ("," target)* [","]\n   target          ::= identifier\n              | "(" target_list ")"\n              | "[" [target_list] "]"\n              | attributeref\n              | subscription\n              | slicing\n\n(See section Primaries for the syntax definitions for the last three\nsymbols.)\n\nAn assignment statement evaluates the expression list (remember that\nthis can be a single expression or a comma-separated list, the latter\nyielding a tuple) and assigns the single resulting object to each of\nthe target lists, from left to right.\n\nAssignment is defined recursively depending on the form of the target\n(list). When a target is part of a mutable object (an attribute\nreference, subscription or slicing), the mutable object must\nultimately perform the assignment and decide about its validity, and\nmay raise an exception if the assignment is unacceptable.  The rules\nobserved by various types and the exceptions raised are given with the\ndefinition of the object types (see section The standard type\nhierarchy).\n\nAssignment of an object to a target list is recursively defined as\nfollows.\n\n* If the target list is a single target: The object is assigned to\n  that target.\n\n* If the target list is a comma-separated list of targets: The\n  object must be an iterable with the same number of items as there\n  are targets in the target list, and the items are assigned, from\n  left to right, to the corresponding targets.\n\nAssignment of an object to a single target is recursively defined as\nfollows.\n\n* If the target is an identifier (name):\n\n  * If the name does not occur in a "global" statement in the\n    current code block: the name is bound to the object in the current\n    local namespace.\n\n  * Otherwise: the name is bound to the object in the current global\n    namespace.\n\n  The name is rebound if it was already bound.  This may cause the\n  reference count for the object previously bound to the name to reach\n  zero, causing the object to be deallocated and its destructor (if it\n  has one) to be called.\n\n* If the target is a target list enclosed in parentheses or in\n  square brackets: The object must be an iterable with the same number\n  of items as there are targets in the target list, and its items are\n  assigned, from left to right, to the corresponding targets.\n\n* If the target is an attribute reference: The primary expression in\n  the reference is evaluated.  It should yield an object with\n  assignable attributes; if this is not the case, "TypeError" is\n  raised.  That object is then asked to assign the assigned object to\n  the given attribute; if it cannot perform the assignment, it raises\n  an exception (usually but not necessarily "AttributeError").\n\n  Note: If the object is a class instance and the attribute reference\n  occurs on both sides of the assignment operator, the RHS expression,\n  "a.x" can access either an instance attribute or (if no instance\n  attribute exists) a class attribute.  The LHS target "a.x" is always\n  set as an instance attribute, creating it if necessary.  Thus, the\n  two occurrences of "a.x" do not necessarily refer to the same\n  attribute: if the RHS expression refers to a class attribute, the\n  LHS creates a new instance attribute as the target of the\n  assignment:\n\n     class Cls:\n         x = 3             # class variable\n     inst = Cls()\n     inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3\n\n  This description does not necessarily apply to descriptor\n  attributes, such as properties created with "property()".\n\n* If the target is a subscription: The primary expression in the\n  reference is evaluated.  It should yield either a mutable sequence\n  object (such as a list) or a mapping object (such as a dictionary).\n  Next, the subscript expression is evaluated.\n\n  If the primary is a mutable sequence object (such as a list), the\n  subscript must yield a plain integer.  If it is negative, the\n  sequence\'s length is added to it. The resulting value must be a\n  nonnegative integer less than the sequence\'s length, and the\n  sequence is asked to assign the assigned object to its item with\n  that index.  If the index is out of range, "IndexError" is raised\n  (assignment to a subscripted sequence cannot add new items to a\n  list).\n\n  If the primary is a mapping object (such as a dictionary), the\n  subscript must have a type compatible with the mapping\'s key type,\n  and the mapping is then asked to create a key/datum pair which maps\n  the subscript to the assigned object.  This can either replace an\n  existing key/value pair with the same key value, or insert a new\n  key/value pair (if no key with the same value existed).\n\n* If the target is a slicing: The primary expression in the\n  reference is evaluated.  It should yield a mutable sequence object\n  (such as a list).  The assigned object should be a sequence object\n  of the same type.  Next, the lower and upper bound expressions are\n  evaluated, insofar they are present; defaults are zero and the\n  sequence\'s length.  The bounds should evaluate to (small) integers.\n  If either bound is negative, the sequence\'s length is added to it.\n  The resulting bounds are clipped to lie between zero and the\n  sequence\'s length, inclusive.  Finally, the sequence object is asked\n  to replace the slice with the items of the assigned sequence.  The\n  length of the slice may be different from the length of the assigned\n  sequence, thus changing the length of the target sequence, if the\n  object allows it.\n\n**CPython implementation detail:** In the current implementation, the\nsyntax for targets is taken to be the same as for expressions, and\ninvalid syntax is rejected during the code generation phase, causing\nless detailed error messages.\n\nWARNING: Although the definition of assignment implies that overlaps\nbetween the left-hand side and the right-hand side are \'safe\' (for\nexample "a, b = b, a" swaps two variables), overlaps *within* the\ncollection of assigned-to variables are not safe!  For instance, the\nfollowing program prints "[0, 2]":\n\n   x = [0, 1]\n   i = 0\n   i, x[i] = 1, 2\n   print x\n\n\nAugmented assignment statements\n===============================\n\nAugmented assignment is the combination, in a single statement, of a\nbinary operation and an assignment statement:\n\n   augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\n   augtarget                 ::= identifier | attributeref | subscription | slicing\n   augop                     ::= "+=" | "-=" | "*=" | "/=" | "//=" | "%=" | "**="\n             | ">>=" | "<<=" | "&=" | "^=" | "|="\n\n(See section Primaries for the syntax definitions for the last three\nsymbols.)\n\nAn augmented assignment evaluates the target (which, unlike normal\nassignment statements, cannot be an unpacking) and the expression\nlist, performs the binary operation specific to the type of assignment\non the two operands, and assigns the result to the original target.\nThe target is only evaluated once.\n\nAn augmented assignment expression like "x += 1" can be rewritten as\n"x = x + 1" to achieve a similar, but not exactly equal effect. In the\naugmented version, "x" is only evaluated once. Also, when possible,\nthe actual operation is performed *in-place*, meaning that rather than\ncreating a new object and assigning that to the target, the old object\nis modified instead.\n\nWith the exception of assigning to tuples and multiple targets in a\nsingle statement, the assignment done by augmented assignment\nstatements is handled the same way as normal assignments. Similarly,\nwith the exception of the possible *in-place* behavior, the binary\noperation performed by augmented assignment is the same as the normal\nbinary operations.\n\nFor targets which are attribute references, the same caveat about\nclass and instance attributes applies as for regular assignments.\n',
- 'atom-identifiers': u'\nIdentifiers (Names)\n*******************\n\nAn identifier occurring as an atom is a name.  See section Identifiers\nand keywords for lexical definition and section Naming and binding for\ndocumentation of naming and binding.\n\nWhen the name is bound to an object, evaluation of the atom yields\nthat object. When a name is not bound, an attempt to evaluate it\nraises a "NameError" exception.\n\n**Private name mangling:** When an identifier that textually occurs in\na class definition begins with two or more underscore characters and\ndoes not end in two or more underscores, it is considered a *private\nname* of that class. Private names are transformed to a longer form\nbefore code is generated for them.  The transformation inserts the\nclass name, with leading underscores removed and a single underscore\ninserted, in front of the name.  For example, the identifier "__spam"\noccurring in a class named "Ham" will be transformed to "_Ham__spam".\nThis transformation is independent of the syntactical context in which\nthe identifier is used.  If the transformed name is extremely long\n(longer than 255 characters), implementation defined truncation may\nhappen. If the class name consists only of underscores, no\ntransformation is done.\n',
- 'atom-literals': u"\nLiterals\n********\n\nPython supports string literals and various numeric literals:\n\n   literal ::= stringliteral | integer | longinteger\n               | floatnumber | imagnumber\n\nEvaluation of a literal yields an object of the given type (string,\ninteger, long integer, floating point number, complex number) with the\ngiven value.  The value may be approximated in the case of floating\npoint and imaginary (complex) literals.  See section Literals for\ndetails.\n\nAll literals correspond to immutable data types, and hence the\nobject's identity is less important than its value.  Multiple\nevaluations of literals with the same value (either the same\noccurrence in the program text or a different occurrence) may obtain\nthe same object or a different object with the same value.\n",
- 'attribute-access': u'\nCustomizing attribute access\n****************************\n\nThe following methods can be defined to customize the meaning of\nattribute access (use of, assignment to, or deletion of "x.name") for\nclass instances.\n\nobject.__getattr__(self, name)\n\n   Called when an attribute lookup has not found the attribute in the\n   usual places (i.e. it is not an instance attribute nor is it found\n   in the class tree for "self").  "name" is the attribute name. This\n   method should return the (computed) attribute value or raise an\n   "AttributeError" exception.\n\n   Note that if the attribute is found through the normal mechanism,\n   "__getattr__()" is not called.  (This is an intentional asymmetry\n   between "__getattr__()" and "__setattr__()".) This is done both for\n   efficiency reasons and because otherwise "__getattr__()" would have\n   no way to access other attributes of the instance.  Note that at\n   least for instance variables, you can fake total control by not\n   inserting any values in the instance attribute dictionary (but\n   instead inserting them in another object).  See the\n   "__getattribute__()" method below for a way to actually get total\n   control in new-style classes.\n\nobject.__setattr__(self, name, value)\n\n   Called when an attribute assignment is attempted.  This is called\n   instead of the normal mechanism (i.e. store the value in the\n   instance dictionary).  *name* is the attribute name, *value* is the\n   value to be assigned to it.\n\n   If "__setattr__()" wants to assign to an instance attribute, it\n   should not simply execute "self.name = value" --- this would cause\n   a recursive call to itself.  Instead, it should insert the value in\n   the dictionary of instance attributes, e.g., "self.__dict__[name] =\n   value".  For new-style classes, rather than accessing the instance\n   dictionary, it should call the base class method with the same\n   name, for example, "object.__setattr__(self, name, value)".\n\nobject.__delattr__(self, name)\n\n   Like "__setattr__()" but for attribute deletion instead of\n   assignment.  This should only be implemented if "del obj.name" is\n   meaningful for the object.\n\n\nMore attribute access for new-style classes\n===========================================\n\nThe following methods only apply to new-style classes.\n\nobject.__getattribute__(self, name)\n\n   Called unconditionally to implement attribute accesses for\n   instances of the class. If the class also defines "__getattr__()",\n   the latter will not be called unless "__getattribute__()" either\n   calls it explicitly or raises an "AttributeError". This method\n   should return the (computed) attribute value or raise an\n   "AttributeError" exception. In order to avoid infinite recursion in\n   this method, its implementation should always call the base class\n   method with the same name to access any attributes it needs, for\n   example, "object.__getattribute__(self, name)".\n\n   Note: This method may still be bypassed when looking up special\n     methods as the result of implicit invocation via language syntax\n     or built-in functions. See Special method lookup for new-style\n     classes.\n\n\nImplementing Descriptors\n========================\n\nThe following methods only apply when an instance of the class\ncontaining the method (a so-called *descriptor* class) appears in an\n*owner* class (the descriptor must be in either the owner\'s class\ndictionary or in the class dictionary for one of its parents).  In the\nexamples below, "the attribute" refers to the attribute whose name is\nthe key of the property in the owner class\' "__dict__".\n\nobject.__get__(self, instance, owner)\n\n   Called to get the attribute of the owner class (class attribute\n   access) or of an instance of that class (instance attribute\n   access). *owner* is always the owner class, while *instance* is the\n   instance that the attribute was accessed through, or "None" when\n   the attribute is accessed through the *owner*.  This method should\n   return the (computed) attribute value or raise an "AttributeError"\n   exception.\n\nobject.__set__(self, instance, value)\n\n   Called to set the attribute on an instance *instance* of the owner\n   class to a new value, *value*.\n\nobject.__delete__(self, instance)\n\n   Called to delete the attribute on an instance *instance* of the\n   owner class.\n\n\nInvoking Descriptors\n====================\n\nIn general, a descriptor is an object attribute with "binding\nbehavior", one whose attribute access has been overridden by methods\nin the descriptor protocol:  "__get__()", "__set__()", and\n"__delete__()". If any of those methods are defined for an object, it\nis said to be a descriptor.\n\nThe default behavior for attribute access is to get, set, or delete\nthe attribute from an object\'s dictionary. For instance, "a.x" has a\nlookup chain starting with "a.__dict__[\'x\']", then\n"type(a).__dict__[\'x\']", and continuing through the base classes of\n"type(a)" excluding metaclasses.\n\nHowever, if the looked-up value is an object defining one of the\ndescriptor methods, then Python may override the default behavior and\ninvoke the descriptor method instead.  Where this occurs in the\nprecedence chain depends on which descriptor methods were defined and\nhow they were called.  Note that descriptors are only invoked for new\nstyle objects or classes (ones that subclass "object()" or "type()").\n\nThe starting point for descriptor invocation is a binding, "a.x". How\nthe arguments are assembled depends on "a":\n\nDirect Call\n   The simplest and least common call is when user code directly\n   invokes a descriptor method:    "x.__get__(a)".\n\nInstance Binding\n   If binding to a new-style object instance, "a.x" is transformed\n   into the call: "type(a).__dict__[\'x\'].__get__(a, type(a))".\n\nClass Binding\n   If binding to a new-style class, "A.x" is transformed into the\n   call: "A.__dict__[\'x\'].__get__(None, A)".\n\nSuper Binding\n   If "a" is an instance of "super", then the binding "super(B,\n   obj).m()" searches "obj.__class__.__mro__" for the base class "A"\n   immediately preceding "B" and then invokes the descriptor with the\n   call: "A.__dict__[\'m\'].__get__(obj, obj.__class__)".\n\nFor instance bindings, the precedence of descriptor invocation depends\non the which descriptor methods are defined.  A descriptor can define\nany combination of "__get__()", "__set__()" and "__delete__()".  If it\ndoes not define "__get__()", then accessing the attribute will return\nthe descriptor object itself unless there is a value in the object\'s\ninstance dictionary.  If the descriptor defines "__set__()" and/or\n"__delete__()", it is a data descriptor; if it defines neither, it is\na non-data descriptor.  Normally, data descriptors define both\n"__get__()" and "__set__()", while non-data descriptors have just the\n"__get__()" method.  Data descriptors with "__set__()" and "__get__()"\ndefined always override a redefinition in an instance dictionary.  In\ncontrast, non-data descriptors can be overridden by instances.\n\nPython methods (including "staticmethod()" and "classmethod()") are\nimplemented as non-data descriptors.  Accordingly, instances can\nredefine and override methods.  This allows individual instances to\nacquire behaviors that differ from other instances of the same class.\n\nThe "property()" function is implemented as a data descriptor.\nAccordingly, instances cannot override the behavior of a property.\n\n\n__slots__\n=========\n\nBy default, instances of both old and new-style classes have a\ndictionary for attribute storage.  This wastes space for objects\nhaving very few instance variables.  The space consumption can become\nacute when creating large numbers of instances.\n\nThe default can be overridden by defining *__slots__* in a new-style\nclass definition.  The *__slots__* declaration takes a sequence of\ninstance variables and reserves just enough space in each instance to\nhold a value for each variable.  Space is saved because *__dict__* is\nnot created for each instance.\n\n__slots__\n\n   This class variable can be assigned a string, iterable, or sequence\n   of strings with variable names used by instances.  If defined in a\n   new-style class, *__slots__* reserves space for the declared\n   variables and prevents the automatic creation of *__dict__* and\n   *__weakref__* for each instance.\n\n   New in version 2.2.\n\nNotes on using *__slots__*\n\n* When inheriting from a class without *__slots__*, the *__dict__*\n  attribute of that class will always be accessible, so a *__slots__*\n  definition in the subclass is meaningless.\n\n* Without a *__dict__* variable, instances cannot be assigned new\n  variables not listed in the *__slots__* definition.  Attempts to\n  assign to an unlisted variable name raises "AttributeError". If\n  dynamic assignment of new variables is desired, then add\n  "\'__dict__\'" to the sequence of strings in the *__slots__*\n  declaration.\n\n  Changed in version 2.3: Previously, adding "\'__dict__\'" to the\n  *__slots__* declaration would not enable the assignment of new\n  attributes not specifically listed in the sequence of instance\n  variable names.\n\n* Without a *__weakref__* variable for each instance, classes\n  defining *__slots__* do not support weak references to its\n  instances. If weak reference support is needed, then add\n  "\'__weakref__\'" to the sequence of strings in the *__slots__*\n  declaration.\n\n  Changed in version 2.3: Previously, adding "\'__weakref__\'" to the\n  *__slots__* declaration would not enable support for weak\n  references.\n\n* *__slots__* are implemented at the class level by creating\n  descriptors (Implementing Descriptors) for each variable name.  As a\n  result, class attributes cannot be used to set default values for\n  instance variables defined by *__slots__*; otherwise, the class\n  attribute would overwrite the descriptor assignment.\n\n* The action of a *__slots__* declaration is limited to the class\n  where it is defined.  As a result, subclasses will have a *__dict__*\n  unless they also define *__slots__* (which must only contain names\n  of any *additional* slots).\n\n* If a class defines a slot also defined in a base class, the\n  instance variable defined by the base class slot is inaccessible\n  (except by retrieving its descriptor directly from the base class).\n  This renders the meaning of the program undefined.  In the future, a\n  check may be added to prevent this.\n\n* Nonempty *__slots__* does not work for classes derived from\n  "variable-length" built-in types such as "long", "str" and "tuple".\n\n* Any non-string iterable may be assigned to *__slots__*. Mappings\n  may also be used; however, in the future, special meaning may be\n  assigned to the values corresponding to each key.\n\n* *__class__* assignment works only if both classes have the same\n  *__slots__*.\n\n  Changed in version 2.6: Previously, *__class__* assignment raised an\n  error if either new or old class had *__slots__*.\n',
- 'attribute-references': u'\nAttribute references\n********************\n\nAn attribute reference is a primary followed by a period and a name:\n\n   attributeref ::= primary "." identifier\n\nThe primary must evaluate to an object of a type that supports\nattribute references, e.g., a module, list, or an instance.  This\nobject is then asked to produce the attribute whose name is the\nidentifier.  If this attribute is not available, the exception\n"AttributeError" is raised. Otherwise, the type and value of the\nobject produced is determined by the object.  Multiple evaluations of\nthe same attribute reference may yield different objects.\n',
- 'augassign': u'\nAugmented assignment statements\n*******************************\n\nAugmented assignment is the combination, in a single statement, of a\nbinary operation and an assignment statement:\n\n   augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\n   augtarget                 ::= identifier | attributeref | subscription | slicing\n   augop                     ::= "+=" | "-=" | "*=" | "/=" | "//=" | "%=" | "**="\n             | ">>=" | "<<=" | "&=" | "^=" | "|="\n\n(See section Primaries for the syntax definitions for the last three\nsymbols.)\n\nAn augmented assignment evaluates the target (which, unlike normal\nassignment statements, cannot be an unpacking) and the expression\nlist, performs the binary operation specific to the type of assignment\non the two operands, and assigns the result to the original target.\nThe target is only evaluated once.\n\nAn augmented assignment expression like "x += 1" can be rewritten as\n"x = x + 1" to achieve a similar, but not exactly equal effect. In the\naugmented version, "x" is only evaluated once. Also, when possible,\nthe actual operation is performed *in-place*, meaning that rather than\ncreating a new object and assigning that to the target, the old object\nis modified instead.\n\nWith the exception of assigning to tuples and multiple targets in a\nsingle statement, the assignment done by augmented assignment\nstatements is handled the same way as normal assignments. Similarly,\nwith the exception of the possible *in-place* behavior, the binary\noperation performed by augmented assignment is the same as the normal\nbinary operations.\n\nFor targets which are attribute references, the same caveat about\nclass and instance attributes applies as for regular assignments.\n',
- 'binary': u'\nBinary arithmetic operations\n****************************\n\nThe binary arithmetic operations have the conventional priority\nlevels.  Note that some of these operations also apply to certain non-\nnumeric types.  Apart from the power operator, there are only two\nlevels, one for multiplicative operators and one for additive\noperators:\n\n   m_expr ::= u_expr | m_expr "*" u_expr | m_expr "//" u_expr | m_expr "/" u_expr\n              | m_expr "%" u_expr\n   a_expr ::= m_expr | a_expr "+" m_expr | a_expr "-" m_expr\n\nThe "*" (multiplication) operator yields the product of its arguments.\nThe arguments must either both be numbers, or one argument must be an\ninteger (plain or long) and the other must be a sequence. In the\nformer case, the numbers are converted to a common type and then\nmultiplied together.  In the latter case, sequence repetition is\nperformed; a negative repetition factor yields an empty sequence.\n\nThe "/" (division) and "//" (floor division) operators yield the\nquotient of their arguments.  The numeric arguments are first\nconverted to a common type. Plain or long integer division yields an\ninteger of the same type; the result is that of mathematical division\nwith the \'floor\' function applied to the result. Division by zero\nraises the "ZeroDivisionError" exception.\n\nThe "%" (modulo) operator yields the remainder from the division of\nthe first argument by the second.  The numeric arguments are first\nconverted to a common type.  A zero right argument raises the\n"ZeroDivisionError" exception.  The arguments may be floating point\nnumbers, e.g., "3.14%0.7" equals "0.34" (since "3.14" equals "4*0.7 +\n0.34".)  The modulo operator always yields a result with the same sign\nas its second operand (or zero); the absolute value of the result is\nstrictly smaller than the absolute value of the second operand [2].\n\nThe integer division and modulo operators are connected by the\nfollowing identity: "x == (x/y)*y + (x%y)".  Integer division and\nmodulo are also connected with the built-in function "divmod()":\n"divmod(x, y) == (x/y, x%y)".  These identities don\'t hold for\nfloating point numbers; there similar identities hold approximately\nwhere "x/y" is replaced by "floor(x/y)" or "floor(x/y) - 1" [3].\n\nIn addition to performing the modulo operation on numbers, the "%"\noperator is also overloaded by string and unicode objects to perform\nstring formatting (also known as interpolation). The syntax for string\nformatting is described in the Python Library Reference, section\nString Formatting Operations.\n\nDeprecated since version 2.3: The floor division operator, the modulo\noperator, and the "divmod()" function are no longer defined for\ncomplex numbers.  Instead, convert to a floating point number using\nthe "abs()" function if appropriate.\n\nThe "+" (addition) operator yields the sum of its arguments. The\narguments must either both be numbers or both sequences of the same\ntype.  In the former case, the numbers are converted to a common type\nand then added together.  In the latter case, the sequences are\nconcatenated.\n\nThe "-" (subtraction) operator yields the difference of its arguments.\nThe numeric arguments are first converted to a common type.\n',
- 'bitwise': u'\nBinary bitwise operations\n*************************\n\nEach of the three bitwise operations has a different priority level:\n\n   and_expr ::= shift_expr | and_expr "&" shift_expr\n   xor_expr ::= and_expr | xor_expr "^" and_expr\n   or_expr  ::= xor_expr | or_expr "|" xor_expr\n\nThe "&" operator yields the bitwise AND of its arguments, which must\nbe plain or long integers.  The arguments are converted to a common\ntype.\n\nThe "^" operator yields the bitwise XOR (exclusive OR) of its\narguments, which must be plain or long integers.  The arguments are\nconverted to a common type.\n\nThe "|" operator yields the bitwise (inclusive) OR of its arguments,\nwhich must be plain or long integers.  The arguments are converted to\na common type.\n',
- 'bltin-code-objects': u'\nCode Objects\n************\n\nCode objects are used by the implementation to represent "pseudo-\ncompiled" executable Python code such as a function body. They differ\nfrom function objects because they don\'t contain a reference to their\nglobal execution environment.  Code objects are returned by the built-\nin "compile()" function and can be extracted from function objects\nthrough their "func_code" attribute. See also the "code" module.\n\nA code object can be executed or evaluated by passing it (instead of a\nsource string) to the "exec" statement or the built-in "eval()"\nfunction.\n\nSee The standard type hierarchy for more information.\n',
- 'bltin-ellipsis-object': u'\nThe Ellipsis Object\n*******************\n\nThis object is used by extended slice notation (see Slicings).  It\nsupports no special operations.  There is exactly one ellipsis object,\nnamed "Ellipsis" (a built-in name).\n\nIt is written as "Ellipsis".  When in a subscript, it can also be\nwritten as "...", for example "seq[...]".\n',
- 'bltin-file-objects': u'\nFile Objects\n************\n\nFile objects are implemented using C\'s "stdio" package and can be\ncreated with the built-in "open()" function.  File objects are also\nreturned by some other built-in functions and methods, such as\n"os.popen()" and "os.fdopen()" and the "makefile()" method of socket\nobjects. Temporary files can be created using the "tempfile" module,\nand high-level file operations such as copying, moving, and deleting\nfiles and directories can be achieved with the "shutil" module.\n\nWhen a file operation fails for an I/O-related reason, the exception\n"IOError" is raised.  This includes situations where the operation is\nnot defined for some reason, like "seek()" on a tty device or writing\na file opened for reading.\n\nFiles have the following methods:\n\nfile.close()\n\n   Close the file.  A closed file cannot be read or written any more.\n   Any operation which requires that the file be open will raise a\n   "ValueError" after the file has been closed.  Calling "close()"\n   more than once is allowed.\n\n   As of Python 2.5, you can avoid having to call this method\n   explicitly if you use the "with" statement.  For example, the\n   following code will automatically close *f* when the "with" block\n   is exited:\n\n      from __future__ import with_statement # This isn\'t required in Python 2.6\n\n      with open("hello.txt") as f:\n          for line in f:\n              print line,\n\n   In older versions of Python, you would have needed to do this to\n   get the same effect:\n\n      f = open("hello.txt")\n      try:\n          for line in f:\n              print line,\n      finally:\n          f.close()\n\n   Note: Not all "file-like" types in Python support use as a\n     context manager for the "with" statement.  If your code is\n     intended to work with any file-like object, you can use the\n     function "contextlib.closing()" instead of using the object\n     directly.\n\nfile.flush()\n\n   Flush the internal buffer, like "stdio"\'s "fflush()".  This may be\n   a no-op on some file-like objects.\n\n   Note: "flush()" does not necessarily write the file\'s data to\n     disk. Use "flush()" followed by "os.fsync()" to ensure this\n     behavior.\n\nfile.fileno()\n\n   Return the integer "file descriptor" that is used by the underlying\n   implementation to request I/O operations from the operating system.\n   This can be useful for other, lower level interfaces that use file\n   descriptors, such as the "fcntl" module or "os.read()" and friends.\n\n   Note: File-like objects which do not have a real file descriptor\n     should *not* provide this method!\n\nfile.isatty()\n\n   Return "True" if the file is connected to a tty(-like) device, else\n   "False".\n\n   Note: If a file-like object is not associated with a real file,\n     this method should *not* be implemented.\n\nfile.next()\n\n   A file object is its own iterator, for example "iter(f)" returns\n   *f* (unless *f* is closed).  When a file is used as an iterator,\n   typically in a "for" loop (for example, "for line in f: print\n   line.strip()"), the "next()" method is called repeatedly.  This\n   method returns the next input line, or raises "StopIteration" when\n   EOF is hit when the file is open for reading (behavior is undefined\n   when the file is open for writing).  In order to make a "for" loop\n   the most efficient way of looping over the lines of a file (a very\n   common operation), the "next()" method uses a hidden read-ahead\n   buffer.  As a consequence of using a read-ahead buffer, combining\n   "next()" with other file methods (like "readline()") does not work\n   right.  However, using "seek()" to reposition the file to an\n   absolute position will flush the read-ahead buffer.\n\n   New in version 2.3.\n\nfile.read([size])\n\n   Read at most *size* bytes from the file (less if the read hits EOF\n   before obtaining *size* bytes).  If the *size* argument is negative\n   or omitted, read all data until EOF is reached.  The bytes are\n   returned as a string object.  An empty string is returned when EOF\n   is encountered immediately.  (For certain files, like ttys, it\n   makes sense to continue reading after an EOF is hit.)  Note that\n   this method may call the underlying C function "fread()" more than\n   once in an effort to acquire as close to *size* bytes as possible.\n   Also note that when in non-blocking mode, less data than was\n   requested may be returned, even if no *size* parameter was given.\n\n   Note: This function is simply a wrapper for the underlying\n     "fread()" C function, and will behave the same in corner cases,\n     such as whether the EOF value is cached.\n\nfile.readline([size])\n\n   Read one entire line from the file.  A trailing newline character\n   is kept in the string (but may be absent when a file ends with an\n   incomplete line). [6] If the *size* argument is present and non-\n   negative, it is a maximum byte count (including the trailing\n   newline) and an incomplete line may be returned. When *size* is not\n   0, an empty string is returned *only* when EOF is encountered\n   immediately.\n\n   Note: Unlike "stdio"\'s "fgets()", the returned string contains\n     null characters ("\'\\0\'") if they occurred in the input.\n\nfile.readlines([sizehint])\n\n   Read until EOF using "readline()" and return a list containing the\n   lines thus read.  If the optional *sizehint* argument is present,\n   instead of reading up to EOF, whole lines totalling approximately\n   *sizehint* bytes (possibly after rounding up to an internal buffer\n   size) are read.  Objects implementing a file-like interface may\n   choose to ignore *sizehint* if it cannot be implemented, or cannot\n   be implemented efficiently.\n\nfile.xreadlines()\n\n   This method returns the same thing as "iter(f)".\n\n   New in version 2.1.\n\n   Deprecated since version 2.3: Use "for line in file" instead.\n\nfile.seek(offset[, whence])\n\n   Set the file\'s current position, like "stdio"\'s "fseek()". The\n   *whence* argument is optional and defaults to  "os.SEEK_SET" or "0"\n   (absolute file positioning); other values are "os.SEEK_CUR" or "1"\n   (seek relative to the current position) and "os.SEEK_END" or "2"\n   (seek relative to the file\'s end).  There is no return value.\n\n   For example, "f.seek(2, os.SEEK_CUR)" advances the position by two\n   and "f.seek(-3, os.SEEK_END)" sets the position to the third to\n   last.\n\n   Note that if the file is opened for appending (mode "\'a\'" or\n   "\'a+\'"), any "seek()" operations will be undone at the next write.\n   If the file is only opened for writing in append mode (mode "\'a\'"),\n   this method is essentially a no-op, but it remains useful for files\n   opened in append mode with reading enabled (mode "\'a+\'").  If the\n   file is opened in text mode (without "\'b\'"), only offsets returned\n   by "tell()" are legal.  Use of other offsets causes undefined\n   behavior.\n\n   Note that not all file objects are seekable.\n\n   Changed in version 2.6: Passing float values as offset has been\n   deprecated.\n\nfile.tell()\n\n   Return the file\'s current position, like "stdio"\'s "ftell()".\n\n   Note: On Windows, "tell()" can return illegal values (after an\n     "fgets()") when reading files with Unix-style line-endings. Use\n     binary mode ("\'rb\'") to circumvent this problem.\n\nfile.truncate([size])\n\n   Truncate the file\'s size.  If the optional *size* argument is\n   present, the file is truncated to (at most) that size.  The size\n   defaults to the current position. The current file position is not\n   changed.  Note that if a specified size exceeds the file\'s current\n   size, the result is platform-dependent:  possibilities include that\n   the file may remain unchanged, increase to the specified size as if\n   zero-filled, or increase to the specified size with undefined new\n   content. Availability:  Windows, many Unix variants.\n\nfile.write(str)\n\n   Write a string to the file.  There is no return value.  Due to\n   buffering, the string may not actually show up in the file until\n   the "flush()" or "close()" method is called.\n\nfile.writelines(sequence)\n\n   Write a sequence of strings to the file.  The sequence can be any\n   iterable object producing strings, typically a list of strings.\n   There is no return value. (The name is intended to match\n   "readlines()"; "writelines()" does not add line separators.)\n\nFiles support the iterator protocol.  Each iteration returns the same\nresult as "readline()", and iteration ends when the "readline()"\nmethod returns an empty string.\n\nFile objects also offer a number of other interesting attributes.\nThese are not required for file-like objects, but should be\nimplemented if they make sense for the particular object.\n\nfile.closed\n\n   bool indicating the current state of the file object.  This is a\n   read-only attribute; the "close()" method changes the value. It may\n   not be available on all file-like objects.\n\nfile.encoding\n\n   The encoding that this file uses. When Unicode strings are written\n   to a file, they will be converted to byte strings using this\n   encoding. In addition, when the file is connected to a terminal,\n   the attribute gives the encoding that the terminal is likely to use\n   (that  information might be incorrect if the user has misconfigured\n   the  terminal). The attribute is read-only and may not be present\n   on all file-like objects. It may also be "None", in which case the\n   file uses the system default encoding for converting Unicode\n   strings.\n\n   New in version 2.3.\n\nfile.errors\n\n   The Unicode error handler used along with the encoding.\n\n   New in version 2.6.\n\nfile.mode\n\n   The I/O mode for the file.  If the file was created using the\n   "open()" built-in function, this will be the value of the *mode*\n   parameter.  This is a read-only attribute and may not be present on\n   all file-like objects.\n\nfile.name\n\n   If the file object was created using "open()", the name of the\n   file. Otherwise, some string that indicates the source of the file\n   object, of the form "<...>".  This is a read-only attribute and may\n   not be present on all file-like objects.\n\nfile.newlines\n\n   If Python was built with *universal newlines* enabled (the default)\n   this read-only attribute exists, and for files opened in universal\n   newline read mode it keeps track of the types of newlines\n   encountered while reading the file. The values it can take are\n   "\'\\r\'", "\'\\n\'", "\'\\r\\n\'", "None" (unknown, no newlines read yet) or\n   a tuple containing all the newline types seen, to indicate that\n   multiple newline conventions were encountered. For files not opened\n   in universal newlines read mode the value of this attribute will be\n   "None".\n\nfile.softspace\n\n   Boolean that indicates whether a space character needs to be\n   printed before another value when using the "print" statement.\n   Classes that are trying to simulate a file object should also have\n   a writable "softspace" attribute, which should be initialized to\n   zero.  This will be automatic for most classes implemented in\n   Python (care may be needed for objects that override attribute\n   access); types implemented in C will have to provide a writable\n   "softspace" attribute.\n\n   Note: This attribute is not used to control the "print"\n     statement, but to allow the implementation of "print" to keep\n     track of its internal state.\n',
- 'bltin-null-object': u'\nThe Null Object\n***************\n\nThis object is returned by functions that don\'t explicitly return a\nvalue.  It supports no special operations.  There is exactly one null\nobject, named "None" (a built-in name).\n\nIt is written as "None".\n',
- 'bltin-type-objects': u'\nType Objects\n************\n\nType objects represent the various object types.  An object\'s type is\naccessed by the built-in function "type()".  There are no special\noperations on types.  The standard module "types" defines names for\nall standard built-in types.\n\nTypes are written like this: "<type \'int\'>".\n',
- 'booleans': u'\nBoolean operations\n******************\n\n   or_test  ::= and_test | or_test "or" and_test\n   and_test ::= not_test | and_test "and" not_test\n   not_test ::= comparison | "not" not_test\n\nIn the context of Boolean operations, and also when expressions are\nused by control flow statements, the following values are interpreted\nas false: "False", "None", numeric zero of all types, and empty\nstrings and containers (including strings, tuples, lists,\ndictionaries, sets and frozensets).  All other values are interpreted\nas true.  (See the "__nonzero__()" special method for a way to change\nthis.)\n\nThe operator "not" yields "True" if its argument is false, "False"\notherwise.\n\nThe expression "x and y" first evaluates *x*; if *x* is false, its\nvalue is returned; otherwise, *y* is evaluated and the resulting value\nis returned.\n\nThe expression "x or y" first evaluates *x*; if *x* is true, its value\nis returned; otherwise, *y* is evaluated and the resulting value is\nreturned.\n\n(Note that neither "and" nor "or" restrict the value and type they\nreturn to "False" and "True", but rather return the last evaluated\nargument. This is sometimes useful, e.g., if "s" is a string that\nshould be replaced by a default value if it is empty, the expression\n"s or \'foo\'" yields the desired value.  Because "not" has to invent a\nvalue anyway, it does not bother to return a value of the same type as\nits argument, so e.g., "not \'foo\'" yields "False", not "\'\'".)\n',
- 'break': u'\nThe "break" statement\n*********************\n\n   break_stmt ::= "break"\n\n"break" may only occur syntactically nested in a "for" or "while"\nloop, but not nested in a function or class definition within that\nloop.\n\nIt terminates the nearest enclosing loop, skipping the optional "else"\nclause if the loop has one.\n\nIf a "for" loop is terminated by "break", the loop control target\nkeeps its current value.\n\nWhen "break" passes control out of a "try" statement with a "finally"\nclause, that "finally" clause is executed before really leaving the\nloop.\n',
- 'callable-types': u'\nEmulating callable objects\n**************************\n\nobject.__call__(self[, args...])\n\n   Called when the instance is "called" as a function; if this method\n   is defined, "x(arg1, arg2, ...)" is a shorthand for\n   "x.__call__(arg1, arg2, ...)".\n',
- 'calls': u'\nCalls\n*****\n\nA call calls a callable object (e.g., a *function*) with a possibly\nempty series of *arguments*:\n\n   call                 ::= primary "(" [argument_list [","]\n            | expression genexpr_for] ")"\n   argument_list        ::= positional_arguments ["," keyword_arguments]\n                       ["," "*" expression] ["," keyword_arguments]\n                       ["," "**" expression]\n                     | keyword_arguments ["," "*" expression]\n                       ["," "**" expression]\n                     | "*" expression ["," keyword_arguments] ["," "**" expression]\n                     | "**" expression\n   positional_arguments ::= expression ("," expression)*\n   keyword_arguments    ::= keyword_item ("," keyword_item)*\n   keyword_item         ::= identifier "=" expression\n\nA trailing comma may be present after the positional and keyword\narguments but does not affect the semantics.\n\nThe primary must evaluate to a callable object (user-defined\nfunctions, built-in functions, methods of built-in objects, class\nobjects, methods of class instances, and certain class instances\nthemselves are callable; extensions may define additional callable\nobject types).  All argument expressions are evaluated before the call\nis attempted.  Please refer to section Function definitions for the\nsyntax of formal *parameter* lists.\n\nIf keyword arguments are present, they are first converted to\npositional arguments, as follows.  First, a list of unfilled slots is\ncreated for the formal parameters.  If there are N positional\narguments, they are placed in the first N slots.  Next, for each\nkeyword argument, the identifier is used to determine the\ncorresponding slot (if the identifier is the same as the first formal\nparameter name, the first slot is used, and so on).  If the slot is\nalready filled, a "TypeError" exception is raised. Otherwise, the\nvalue of the argument is placed in the slot, filling it (even if the\nexpression is "None", it fills the slot).  When all arguments have\nbeen processed, the slots that are still unfilled are filled with the\ncorresponding default value from the function definition.  (Default\nvalues are calculated, once, when the function is defined; thus, a\nmutable object such as a list or dictionary used as default value will\nbe shared by all calls that don\'t specify an argument value for the\ncorresponding slot; this should usually be avoided.)  If there are any\nunfilled slots for which no default value is specified, a "TypeError"\nexception is raised.  Otherwise, the list of filled slots is used as\nthe argument list for the call.\n\n**CPython implementation detail:** An implementation may provide\nbuilt-in functions whose positional parameters do not have names, even\nif they are \'named\' for the purpose of documentation, and which\ntherefore cannot be supplied by keyword.  In CPython, this is the case\nfor functions implemented in C that use "PyArg_ParseTuple()" to parse\ntheir arguments.\n\nIf there are more positional arguments than there are formal parameter\nslots, a "TypeError" exception is raised, unless a formal parameter\nusing the syntax "*identifier" is present; in this case, that formal\nparameter receives a tuple containing the excess positional arguments\n(or an empty tuple if there were no excess positional arguments).\n\nIf any keyword argument does not correspond to a formal parameter\nname, a "TypeError" exception is raised, unless a formal parameter\nusing the syntax "**identifier" is present; in this case, that formal\nparameter receives a dictionary containing the excess keyword\narguments (using the keywords as keys and the argument values as\ncorresponding values), or a (new) empty dictionary if there were no\nexcess keyword arguments.\n\nIf the syntax "*expression" appears in the function call, "expression"\nmust evaluate to an iterable.  Elements from this iterable are treated\nas if they were additional positional arguments; if there are\npositional arguments *x1*, ..., *xN*, and "expression" evaluates to a\nsequence *y1*, ..., *yM*, this is equivalent to a call with M+N\npositional arguments *x1*, ..., *xN*, *y1*, ..., *yM*.\n\nA consequence of this is that although the "*expression" syntax may\nappear *after* some keyword arguments, it is processed *before* the\nkeyword arguments (and the "**expression" argument, if any -- see\nbelow).  So:\n\n   >>> def f(a, b):\n   ...     print a, b\n   ...\n   >>> f(b=1, *(2,))\n   2 1\n   >>> f(a=1, *(2,))\n   Traceback (most recent call last):\n     File "<stdin>", line 1, in ?\n   TypeError: f() got multiple values for keyword argument \'a\'\n   >>> f(1, *(2,))\n   1 2\n\nIt is unusual for both keyword arguments and the "*expression" syntax\nto be used in the same call, so in practice this confusion does not\narise.\n\nIf the syntax "**expression" appears in the function call,\n"expression" must evaluate to a mapping, the contents of which are\ntreated as additional keyword arguments.  In the case of a keyword\nappearing in both "expression" and as an explicit keyword argument, a\n"TypeError" exception is raised.\n\nFormal parameters using the syntax "*identifier" or "**identifier"\ncannot be used as positional argument slots or as keyword argument\nnames.  Formal parameters using the syntax "(sublist)" cannot be used\nas keyword argument names; the outermost sublist corresponds to a\nsingle unnamed argument slot, and the argument value is assigned to\nthe sublist using the usual tuple assignment rules after all other\nparameter processing is done.\n\nA call always returns some value, possibly "None", unless it raises an\nexception.  How this value is computed depends on the type of the\ncallable object.\n\nIf it is---\n\na user-defined function:\n   The code block for the function is executed, passing it the\n   argument list.  The first thing the code block will do is bind the\n   formal parameters to the arguments; this is described in section\n   Function definitions.  When the code block executes a "return"\n   statement, this specifies the return value of the function call.\n\na built-in function or method:\n   The result is up to the interpreter; see Built-in Functions for the\n   descriptions of built-in functions and methods.\n\na class object:\n   A new instance of that class is returned.\n\na class instance method:\n   The corresponding user-defined function is called, with an argument\n   list that is one longer than the argument list of the call: the\n   instance becomes the first argument.\n\na class instance:\n   The class must define a "__call__()" method; the effect is then the\n   same as if that method was called.\n',
- 'class': u'\nClass definitions\n*****************\n\nA class definition defines a class object (see section The standard\ntype hierarchy):\n\n   classdef    ::= "class" classname [inheritance] ":" suite\n   inheritance ::= "(" [expression_list] ")"\n   classname   ::= identifier\n\nA class definition is an executable statement.  It first evaluates the\ninheritance list, if present.  Each item in the inheritance list\nshould evaluate to a class object or class type which allows\nsubclassing.  The class\'s suite is then executed in a new execution\nframe (see section Naming and binding), using a newly created local\nnamespace and the original global namespace. (Usually, the suite\ncontains only function definitions.)  When the class\'s suite finishes\nexecution, its execution frame is discarded but its local namespace is\nsaved. [4] A class object is then created using the inheritance list\nfor the base classes and the saved local namespace for the attribute\ndictionary.  The class name is bound to this class object in the\noriginal local namespace.\n\n**Programmer\'s note:** Variables defined in the class definition are\nclass variables; they are shared by all instances.  To create instance\nvariables, they can be set in a method with "self.name = value".  Both\nclass and instance variables are accessible through the notation\n""self.name"", and an instance variable hides a class variable with\nthe same name when accessed in this way. Class variables can be used\nas defaults for instance variables, but using mutable values there can\nlead to unexpected results.  For *new-style class*es, descriptors can\nbe used to create instance variables with different implementation\ndetails.\n\nClass definitions, like function definitions, may be wrapped by one or\nmore *decorator* expressions.  The evaluation rules for the decorator\nexpressions are the same as for functions.  The result must be a class\nobject, which is then bound to the class name.\n\n-[ Footnotes ]-\n\n[1] The exception is propagated to the invocation stack unless\n    there is a "finally" clause which happens to raise another\n    exception. That new exception causes the old one to be lost.\n\n[2] Currently, control "flows off the end" except in the case of\n    an exception or the execution of a "return", "continue", or\n    "break" statement.\n\n[3] A string literal appearing as the first statement in the\n    function body is transformed into the function\'s "__doc__"\n    attribute and therefore the function\'s *docstring*.\n\n[4] A string literal appearing as the first statement in the class\n    body is transformed into the namespace\'s "__doc__" item and\n    therefore the class\'s *docstring*.\n',
- 'comparisons': u'\nComparisons\n***********\n\nUnlike C, all comparison operations in Python have the same priority,\nwhich is lower than that of any arithmetic, shifting or bitwise\noperation.  Also unlike C, expressions like "a < b < c" have the\ninterpretation that is conventional in mathematics:\n\n   comparison    ::= or_expr ( comp_operator or_expr )*\n   comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "<>" | "!="\n                     | "is" ["not"] | ["not"] "in"\n\nComparisons yield boolean values: "True" or "False".\n\nComparisons can be chained arbitrarily, e.g., "x < y <= z" is\nequivalent to "x < y and y <= z", except that "y" is evaluated only\nonce (but in both cases "z" is not evaluated at all when "x < y" is\nfound to be false).\n\nFormally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*,\n*op2*, ..., *opN* are comparison operators, then "a op1 b op2 c ... y\nopN z" is equivalent to "a op1 b and b op2 c and ... y opN z", except\nthat each expression is evaluated at most once.\n\nNote that "a op1 b op2 c" doesn\'t imply any kind of comparison between\n*a* and *c*, so that, e.g., "x < y > z" is perfectly legal (though\nperhaps not pretty).\n\nThe forms "<>" and "!=" are equivalent; for consistency with C, "!="\nis preferred; where "!=" is mentioned below "<>" is also accepted.\nThe "<>" spelling is considered obsolescent.\n\nThe operators "<", ">", "==", ">=", "<=", and "!=" compare the values\nof two objects.  The objects need not have the same type. If both are\nnumbers, they are converted to a common type.  Otherwise, objects of\ndifferent types *always* compare unequal, and are ordered consistently\nbut arbitrarily. You can control comparison behavior of objects of\nnon-built-in types by defining a "__cmp__" method or rich comparison\nmethods like "__gt__", described in section Special method names.\n\n(This unusual definition of comparison was used to simplify the\ndefinition of operations like sorting and the "in" and "not in"\noperators. In the future, the comparison rules for objects of\ndifferent types are likely to change.)\n\nComparison of objects of the same type depends on the type:\n\n* Numbers are compared arithmetically.\n\n* Strings are compared lexicographically using the numeric\n  equivalents (the result of the built-in function "ord()") of their\n  characters. Unicode and 8-bit strings are fully interoperable in\n  this behavior. [4]\n\n* Tuples and lists are compared lexicographically using comparison\n  of corresponding elements.  This means that to compare equal, each\n  element must compare equal and the two sequences must be of the same\n  type and have the same length.\n\n  If not equal, the sequences are ordered the same as their first\n  differing elements.  For example, "cmp([1,2,x], [1,2,y])" returns\n  the same as "cmp(x,y)".  If the corresponding element does not\n  exist, the shorter sequence is ordered first (for example, "[1,2] <\n  [1,2,3]").\n\n* Mappings (dictionaries) compare equal if and only if their sorted\n  (key, value) lists compare equal. [5] Outcomes other than equality\n  are resolved consistently, but are not otherwise defined. [6]\n\n* Most other objects of built-in types compare unequal unless they\n  are the same object; the choice whether one object is considered\n  smaller or larger than another one is made arbitrarily but\n  consistently within one execution of a program.\n\nThe operators "in" and "not in" test for collection membership.  "x in\ns" evaluates to true if *x* is a member of the collection *s*, and\nfalse otherwise.  "x not in s" returns the negation of "x in s". The\ncollection membership test has traditionally been bound to sequences;\nan object is a member of a collection if the collection is a sequence\nand contains an element equal to that object.  However, it make sense\nfor many other object types to support membership tests without being\na sequence.  In particular, dictionaries (for keys) and sets support\nmembership testing.\n\nFor the list and tuple types, "x in y" is true if and only if there\nexists an index *i* such that either "x is y[i]" or "x == y[i]" is\ntrue.\n\nFor the Unicode and string types, "x in y" is true if and only if *x*\nis a substring of *y*.  An equivalent test is "y.find(x) != -1".\nNote, *x* and *y* need not be the same type; consequently, "u\'ab\' in\n\'abc\'" will return "True". Empty strings are always considered to be a\nsubstring of any other string, so """ in "abc"" will return "True".\n\nChanged in version 2.3: Previously, *x* was required to be a string of\nlength "1".\n\nFor user-defined classes which define the "__contains__()" method, "x\nin y" is true if and only if "y.__contains__(x)" is true.\n\nFor user-defined classes which do not define "__contains__()" but do\ndefine "__iter__()", "x in y" is true if some value "z" with "x == z"\nis produced while iterating over "y".  If an exception is raised\nduring the iteration, it is as if "in" raised that exception.\n\nLastly, the old-style iteration protocol is tried: if a class defines\n"__getitem__()", "x in y" is true if and only if there is a non-\nnegative integer index *i* such that "x == y[i]", and all lower\ninteger indices do not raise "IndexError" exception. (If any other\nexception is raised, it is as if "in" raised that exception).\n\nThe operator "not in" is defined to have the inverse true value of\n"in".\n\nThe operators "is" and "is not" test for object identity: "x is y" is\ntrue if and only if *x* and *y* are the same object.  "x is not y"\nyields the inverse truth value. [7]\n',
- 'compound': u'\nCompound statements\n*******************\n\nCompound statements contain (groups of) other statements; they affect\nor control the execution of those other statements in some way.  In\ngeneral, compound statements span multiple lines, although in simple\nincarnations a whole compound statement may be contained in one line.\n\nThe "if", "while" and "for" statements implement traditional control\nflow constructs.  "try" specifies exception handlers and/or cleanup\ncode for a group of statements.  Function and class definitions are\nalso syntactically compound statements.\n\nCompound statements consist of one or more \'clauses.\'  A clause\nconsists of a header and a \'suite.\'  The clause headers of a\nparticular compound statement are all at the same indentation level.\nEach clause header begins with a uniquely identifying keyword and ends\nwith a colon.  A suite is a group of statements controlled by a\nclause.  A suite can be one or more semicolon-separated simple\nstatements on the same line as the header, following the header\'s\ncolon, or it can be one or more indented statements on subsequent\nlines.  Only the latter form of suite can contain nested compound\nstatements; the following is illegal, mostly because it wouldn\'t be\nclear to which "if" clause a following "else" clause would belong:\n\n   if test1: if test2: print x\n\nAlso note that the semicolon binds tighter than the colon in this\ncontext, so that in the following example, either all or none of the\n"print" statements are executed:\n\n   if x < y < z: print x; print y; print z\n\nSummarizing:\n\n   compound_stmt ::= if_stmt\n                     | while_stmt\n                     | for_stmt\n                     | try_stmt\n                     | with_stmt\n                     | funcdef\n                     | classdef\n                     | decorated\n   suite         ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT\n   statement     ::= stmt_list NEWLINE | compound_stmt\n   stmt_list     ::= simple_stmt (";" simple_stmt)* [";"]\n\nNote that statements always end in a "NEWLINE" possibly followed by a\n"DEDENT". Also note that optional continuation clauses always begin\nwith a keyword that cannot start a statement, thus there are no\nambiguities (the \'dangling "else"\' problem is solved in Python by\nrequiring nested "if" statements to be indented).\n\nThe formatting of the grammar rules in the following sections places\neach clause on a separate line for clarity.\n\n\nThe "if" statement\n==================\n\nThe "if" statement is used for conditional execution:\n\n   if_stmt ::= "if" expression ":" suite\n               ( "elif" expression ":" suite )*\n               ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section Boolean operations\nfor the definition of true and false); then that suite is executed\n(and no other part of the "if" statement is executed or evaluated).\nIf all expressions are false, the suite of the "else" clause, if\npresent, is executed.\n\n\nThe "while" statement\n=====================\n\nThe "while" statement is used for repeated execution as long as an\nexpression is true:\n\n   while_stmt ::= "while" expression ":" suite\n                  ["else" ":" suite]\n\nThis repeatedly tests the expression and, if it is true, executes the\nfirst suite; if the expression is false (which may be the first time\nit is tested) the suite of the "else" clause, if present, is executed\nand the loop terminates.\n\nA "break" statement executed in the first suite terminates the loop\nwithout executing the "else" clause\'s suite.  A "continue" statement\nexecuted in the first suite skips the rest of the suite and goes back\nto testing the expression.\n\n\nThe "for" statement\n===================\n\nThe "for" statement is used to iterate over the elements of a sequence\n(such as a string, tuple or list) or other iterable object:\n\n   for_stmt ::= "for" target_list "in" expression_list ":" suite\n                ["else" ":" suite]\n\nThe expression list is evaluated once; it should yield an iterable\nobject.  An iterator is created for the result of the\n"expression_list".  The suite is then executed once for each item\nprovided by the iterator, in the order of ascending indices.  Each\nitem in turn is assigned to the target list using the standard rules\nfor assignments, and then the suite is executed.  When the items are\nexhausted (which is immediately when the sequence is empty), the suite\nin the "else" clause, if present, is executed, and the loop\nterminates.\n\nA "break" statement executed in the first suite terminates the loop\nwithout executing the "else" clause\'s suite.  A "continue" statement\nexecuted in the first suite skips the rest of the suite and continues\nwith the next item, or with the "else" clause if there was no next\nitem.\n\nThe suite may assign to the variable(s) in the target list; this does\nnot affect the next item assigned to it.\n\nThe target list is not deleted when the loop is finished, but if the\nsequence is empty, it will not have been assigned to at all by the\nloop.  Hint: the built-in function "range()" returns a sequence of\nintegers suitable to emulate the effect of Pascal\'s "for i := a to b\ndo"; e.g., "range(3)" returns the list "[0, 1, 2]".\n\nNote: There is a subtlety when the sequence is being modified by the\n  loop (this can only occur for mutable sequences, i.e. lists). An\n  internal counter is used to keep track of which item is used next,\n  and this is incremented on each iteration.  When this counter has\n  reached the length of the sequence the loop terminates.  This means\n  that if the suite deletes the current (or a previous) item from the\n  sequence, the next item will be skipped (since it gets the index of\n  the current item which has already been treated).  Likewise, if the\n  suite inserts an item in the sequence before the current item, the\n  current item will be treated again the next time through the loop.\n  This can lead to nasty bugs that can be avoided by making a\n  temporary copy using a slice of the whole sequence, e.g.,\n\n     for x in a[:]:\n         if x < 0: a.remove(x)\n\n\nThe "try" statement\n===================\n\nThe "try" statement specifies exception handlers and/or cleanup code\nfor a group of statements:\n\n   try_stmt  ::= try1_stmt | try2_stmt\n   try1_stmt ::= "try" ":" suite\n                 ("except" [expression [("as" | ",") identifier]] ":" suite)+\n                 ["else" ":" suite]\n                 ["finally" ":" suite]\n   try2_stmt ::= "try" ":" suite\n                 "finally" ":" suite\n\nChanged in version 2.5: In previous versions of Python,\n"try"..."except"..."finally" did not work. "try"..."except" had to be\nnested in "try"..."finally".\n\nThe "except" clause(s) specify one or more exception handlers. When no\nexception occurs in the "try" clause, no exception handler is\nexecuted. When an exception occurs in the "try" suite, a search for an\nexception handler is started.  This search inspects the except clauses\nin turn until one is found that matches the exception.  An expression-\nless except clause, if present, must be last; it matches any\nexception.  For an except clause with an expression, that expression\nis evaluated, and the clause matches the exception if the resulting\nobject is "compatible" with the exception.  An object is compatible\nwith an exception if it is the class or a base class of the exception\nobject, or a tuple containing an item compatible with the exception.\n\nIf no except clause matches the exception, the search for an exception\nhandler continues in the surrounding code and on the invocation stack.\n[1]\n\nIf the evaluation of an expression in the header of an except clause\nraises an exception, the original search for a handler is canceled and\na search starts for the new exception in the surrounding code and on\nthe call stack (it is treated as if the entire "try" statement raised\nthe exception).\n\nWhen a matching except clause is found, the exception is assigned to\nthe target specified in that except clause, if present, and the except\nclause\'s suite is executed.  All except clauses must have an\nexecutable block.  When the end of this block is reached, execution\ncontinues normally after the entire try statement.  (This means that\nif two nested handlers exist for the same exception, and the exception\noccurs in the try clause of the inner handler, the outer handler will\nnot handle the exception.)\n\nBefore an except clause\'s suite is executed, details about the\nexception are assigned to three variables in the "sys" module:\n"sys.exc_type" receives the object identifying the exception;\n"sys.exc_value" receives the exception\'s parameter;\n"sys.exc_traceback" receives a traceback object (see section The\nstandard type hierarchy) identifying the point in the program where\nthe exception occurred. These details are also available through the\n"sys.exc_info()" function, which returns a tuple "(exc_type,\nexc_value, exc_traceback)".  Use of the corresponding variables is\ndeprecated in favor of this function, since their use is unsafe in a\nthreaded program.  As of Python 1.5, the variables are restored to\ntheir previous values (before the call) when returning from a function\nthat handled an exception.\n\nThe optional "else" clause is executed if and when control flows off\nthe end of the "try" clause. [2] Exceptions in the "else" clause are\nnot handled by the preceding "except" clauses.\n\nIf "finally" is present, it specifies a \'cleanup\' handler.  The "try"\nclause is executed, including any "except" and "else" clauses.  If an\nexception occurs in any of the clauses and is not handled, the\nexception is temporarily saved. The "finally" clause is executed.  If\nthere is a saved exception, it is re-raised at the end of the\n"finally" clause. If the "finally" clause raises another exception or\nexecutes a "return" or "break" statement, the saved exception is\ndiscarded:\n\n   >>> def f():\n   ...     try:\n   ...         1/0\n   ...     finally:\n   ...         return 42\n   ...\n   >>> f()\n   42\n\nThe exception information is not available to the program during\nexecution of the "finally" clause.\n\nWhen a "return", "break" or "continue" statement is executed in the\n"try" suite of a "try"..."finally" statement, the "finally" clause is\nalso executed \'on the way out.\' A "continue" statement is illegal in\nthe "finally" clause. (The reason is a problem with the current\nimplementation --- this restriction may be lifted in the future).\n\nThe return value of a function is determined by the last "return"\nstatement executed.  Since the "finally" clause always executes, a\n"return" statement executed in the "finally" clause will always be the\nlast one executed:\n\n   >>> def foo():\n   ...     try:\n   ...         return \'try\'\n   ...     finally:\n   ...         return \'finally\'\n   ...\n   >>> foo()\n   \'finally\'\n\nAdditional information on exceptions can be found in section\nExceptions, and information on using the "raise" statement to generate\nexceptions may be found in section The raise statement.\n\n\nThe "with" statement\n====================\n\nNew in version 2.5.\n\nThe "with" statement is used to wrap the execution of a block with\nmethods defined by a context manager (see section With Statement\nContext Managers). This allows common "try"..."except"..."finally"\nusage patterns to be encapsulated for convenient reuse.\n\n   with_stmt ::= "with" with_item ("," with_item)* ":" suite\n   with_item ::= expression ["as" target]\n\nThe execution of the "with" statement with one "item" proceeds as\nfollows:\n\n1. The context expression (the expression given in the "with_item")\n   is evaluated to obtain a context manager.\n\n2. The context manager\'s "__exit__()" is loaded for later use.\n\n3. The context manager\'s "__enter__()" method is invoked.\n\n4. If a target was included in the "with" statement, the return\n   value from "__enter__()" is assigned to it.\n\n   Note: The "with" statement guarantees that if the "__enter__()"\n     method returns without an error, then "__exit__()" will always be\n     called. Thus, if an error occurs during the assignment to the\n     target list, it will be treated the same as an error occurring\n     within the suite would be. See step 6 below.\n\n5. The suite is executed.\n\n6. The context manager\'s "__exit__()" method is invoked. If an\n   exception caused the suite to be exited, its type, value, and\n   traceback are passed as arguments to "__exit__()". Otherwise, three\n   "None" arguments are supplied.\n\n   If the suite was exited due to an exception, and the return value\n   from the "__exit__()" method was false, the exception is reraised.\n   If the return value was true, the exception is suppressed, and\n   execution continues with the statement following the "with"\n   statement.\n\n   If the suite was exited for any reason other than an exception, the\n   return value from "__exit__()" is ignored, and execution proceeds\n   at the normal location for the kind of exit that was taken.\n\nWith more than one item, the context managers are processed as if\nmultiple "with" statements were nested:\n\n   with A() as a, B() as b:\n       suite\n\nis equivalent to\n\n   with A() as a:\n       with B() as b:\n           suite\n\nNote: In Python 2.5, the "with" statement is only allowed when the\n  "with_statement" feature has been enabled.  It is always enabled in\n  Python 2.6.\n\nChanged in version 2.7: Support for multiple context expressions.\n\nSee also:\n\n  **PEP 343** - The "with" statement\n     The specification, background, and examples for the Python "with"\n     statement.\n\n\nFunction definitions\n====================\n\nA function definition defines a user-defined function object (see\nsection The standard type hierarchy):\n\n   decorated      ::= decorators (classdef | funcdef)\n   decorators     ::= decorator+\n   decorator      ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE\n   funcdef        ::= "def" funcname "(" [parameter_list] ")" ":" suite\n   dotted_name    ::= identifier ("." identifier)*\n   parameter_list ::= (defparameter ",")*\n                      (  "*" identifier ["," "**" identifier]\n                      | "**" identifier\n                      | defparameter [","] )\n   defparameter   ::= parameter ["=" expression]\n   sublist        ::= parameter ("," parameter)* [","]\n   parameter      ::= identifier | "(" sublist ")"\n   funcname       ::= identifier\n\nA function definition is an executable statement.  Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function).  This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition.  The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object.  Multiple decorators are applied in\nnested fashion. For example, the following code:\n\n   @f1(arg)\n   @f2\n   def func(): pass\n\nis equivalent to:\n\n   def func(): pass\n   func = f1(arg)(f2(func))\n\nWhen one or more top-level *parameters* have the form *parameter* "="\n*expression*, the function is said to have "default parameter values."\nFor a parameter with a default value, the corresponding *argument* may\nbe omitted from a call, in which case the parameter\'s default value is\nsubstituted.  If a parameter has a default value, all following\nparameters must also have a default value --- this is a syntactic\nrestriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated when the function definition\nis executed.**  This means that the expression is evaluated once, when\nthe function is defined, and that the same "pre-computed" value is\nused for each call.  This is especially important to understand when a\ndefault parameter is a mutable object, such as a list or a dictionary:\nif the function modifies the object (e.g. by appending an item to a\nlist), the default value is in effect modified. This is generally not\nwhat was intended.  A way around this  is to use "None" as the\ndefault, and explicitly test for it in the body of the function, e.g.:\n\n   def whats_on_the_telly(penguin=None):\n       if penguin is None:\n           penguin = []\n       penguin.append("property of the zoo")\n       return penguin\n\nFunction call semantics are described in more detail in section Calls.\nA function call always assigns values to all parameters mentioned in\nthe parameter list, either from position arguments, from keyword\narguments, or from default values.  If the form ""*identifier"" is\npresent, it is initialized to a tuple receiving any excess positional\nparameters, defaulting to the empty tuple.  If the form\n""**identifier"" is present, it is initialized to a new dictionary\nreceiving any excess keyword arguments, defaulting to a new empty\ndictionary.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions.  This uses lambda\nexpressions, described in section Lambdas.  Note that the lambda\nexpression is merely a shorthand for a simplified function definition;\na function defined in a ""def"" statement can be passed around or\nassigned to another name just like a function defined by a lambda\nexpression.  The ""def"" form is actually more powerful since it\nallows the execution of multiple statements.\n\n**Programmer\'s note:** Functions are first-class objects.  A ""def""\nform executed inside a function definition defines a local function\nthat can be returned or passed around.  Free variables used in the\nnested function can access the local variables of the function\ncontaining the def.  See section Naming and binding for details.\n\n\nClass definitions\n=================\n\nA class definition defines a class object (see section The standard\ntype hierarchy):\n\n   classdef    ::= "class" classname [inheritance] ":" suite\n   inheritance ::= "(" [expression_list] ")"\n   classname   ::= identifier\n\nA class definition is an executable statement.  It first evaluates the\ninheritance list, if present.  Each item in the inheritance list\nshould evaluate to a class object or class type which allows\nsubclassing.  The class\'s suite is then executed in a new execution\nframe (see section Naming and binding), using a newly created local\nnamespace and the original global namespace. (Usually, the suite\ncontains only function definitions.)  When the class\'s suite finishes\nexecution, its execution frame is discarded but its local namespace is\nsaved. [4] A class object is then created using the inheritance list\nfor the base classes and the saved local namespace for the attribute\ndictionary.  The class name is bound to this class object in the\noriginal local namespace.\n\n**Programmer\'s note:** Variables defined in the class definition are\nclass variables; they are shared by all instances.  To create instance\nvariables, they can be set in a method with "self.name = value".  Both\nclass and instance variables are accessible through the notation\n""self.name"", and an instance variable hides a class variable with\nthe same name when accessed in this way. Class variables can be used\nas defaults for instance variables, but using mutable values there can\nlead to unexpected results.  For *new-style class*es, descriptors can\nbe used to create instance variables with different implementation\ndetails.\n\nClass definitions, like function definitions, may be wrapped by one or\nmore *decorator* expressions.  The evaluation rules for the decorator\nexpressions are the same as for functions.  The result must be a class\nobject, which is then bound to the class name.\n\n-[ Footnotes ]-\n\n[1] The exception is propagated to the invocation stack unless\n    there is a "finally" clause which happens to raise another\n    exception. That new exception causes the old one to be lost.\n\n[2] Currently, control "flows off the end" except in the case of\n    an exception or the execution of a "return", "continue", or\n    "break" statement.\n\n[3] A string literal appearing as the first statement in the\n    function body is transformed into the function\'s "__doc__"\n    attribute and therefore the function\'s *docstring*.\n\n[4] A string literal appearing as the first statement in the class\n    body is transformed into the namespace\'s "__doc__" item and\n    therefore the class\'s *docstring*.\n',
- 'context-managers': u'\nWith Statement Context Managers\n*******************************\n\nNew in version 2.5.\n\nA *context manager* is an object that defines the runtime context to\nbe established when executing a "with" statement. The context manager\nhandles the entry into, and the exit from, the desired runtime context\nfor the execution of the block of code.  Context managers are normally\ninvoked using the "with" statement (described in section The with\nstatement), but can also be used by directly invoking their methods.\n\nTypical uses of context managers include saving and restoring various\nkinds of global state, locking and unlocking resources, closing opened\nfiles, etc.\n\nFor more information on context managers, see Context Manager Types.\n\nobject.__enter__(self)\n\n   Enter the runtime context related to this object. The "with"\n   statement will bind this method\'s return value to the target(s)\n   specified in the "as" clause of the statement, if any.\n\nobject.__exit__(self, exc_type, exc_value, traceback)\n\n   Exit the runtime context related to this object. The parameters\n   describe the exception that caused the context to be exited. If the\n   context was exited without an exception, all three arguments will\n   be "None".\n\n   If an exception is supplied, and the method wishes to suppress the\n   exception (i.e., prevent it from being propagated), it should\n   return a true value. Otherwise, the exception will be processed\n   normally upon exit from this method.\n\n   Note that "__exit__()" methods should not reraise the passed-in\n   exception; this is the caller\'s responsibility.\n\nSee also:\n\n  **PEP 343** - The "with" statement\n     The specification, background, and examples for the Python "with"\n     statement.\n',
- 'continue': u'\nThe "continue" statement\n************************\n\n   continue_stmt ::= "continue"\n\n"continue" may only occur syntactically nested in a "for" or "while"\nloop, but not nested in a function or class definition or "finally"\nclause within that loop.  It continues with the next cycle of the\nnearest enclosing loop.\n\nWhen "continue" passes control out of a "try" statement with a\n"finally" clause, that "finally" clause is executed before really\nstarting the next loop cycle.\n',
- 'conversions': u'\nArithmetic conversions\n**********************\n\nWhen a description of an arithmetic operator below uses the phrase\n"the numeric arguments are converted to a common type," the arguments\nare coerced using the coercion rules listed at  Coercion rules.  If\nboth arguments are standard numeric types, the following coercions are\napplied:\n\n* If either argument is a complex number, the other is converted to\n  complex;\n\n* otherwise, if either argument is a floating point number, the\n  other is converted to floating point;\n\n* otherwise, if either argument is a long integer, the other is\n  converted to long integer;\n\n* otherwise, both must be plain integers and no conversion is\n  necessary.\n\nSome additional rules apply for certain operators (e.g., a string left\nargument to the \'%\' operator). Extensions can define their own\ncoercions.\n',
- 'customization': u'\nBasic customization\n*******************\n\nobject.__new__(cls[, ...])\n\n   Called to create a new instance of class *cls*.  "__new__()" is a\n   static method (special-cased so you need not declare it as such)\n   that takes the class of which an instance was requested as its\n   first argument.  The remaining arguments are those passed to the\n   object constructor expression (the call to the class).  The return\n   value of "__new__()" should be the new object instance (usually an\n   instance of *cls*).\n\n   Typical implementations create a new instance of the class by\n   invoking the superclass\'s "__new__()" method using\n   "super(currentclass, cls).__new__(cls[, ...])" with appropriate\n   arguments and then modifying the newly-created instance as\n   necessary before returning it.\n\n   If "__new__()" returns an instance of *cls*, then the new\n   instance\'s "__init__()" method will be invoked like\n   "__init__(self[, ...])", where *self* is the new instance and the\n   remaining arguments are the same as were passed to "__new__()".\n\n   If "__new__()" does not return an instance of *cls*, then the new\n   instance\'s "__init__()" method will not be invoked.\n\n   "__new__()" is intended mainly to allow subclasses of immutable\n   types (like int, str, or tuple) to customize instance creation.  It\n   is also commonly overridden in custom metaclasses in order to\n   customize class creation.\n\nobject.__init__(self[, ...])\n\n   Called after the instance has been created (by "__new__()"), but\n   before it is returned to the caller.  The arguments are those\n   passed to the class constructor expression.  If a base class has an\n   "__init__()" method, the derived class\'s "__init__()" method, if\n   any, must explicitly call it to ensure proper initialization of the\n   base class part of the instance; for example:\n   "BaseClass.__init__(self, [args...])".\n\n   Because "__new__()" and "__init__()" work together in constructing\n   objects ("__new__()" to create it, and "__init__()" to customise\n   it), no non-"None" value may be returned by "__init__()"; doing so\n   will cause a "TypeError" to be raised at runtime.\n\nobject.__del__(self)\n\n   Called when the instance is about to be destroyed.  This is also\n   called a destructor.  If a base class has a "__del__()" method, the\n   derived class\'s "__del__()" method, if any, must explicitly call it\n   to ensure proper deletion of the base class part of the instance.\n   Note that it is possible (though not recommended!) for the\n   "__del__()" method to postpone destruction of the instance by\n   creating a new reference to it.  It may then be called at a later\n   time when this new reference is deleted.  It is not guaranteed that\n   "__del__()" methods are called for objects that still exist when\n   the interpreter exits.\n\n   Note: "del x" doesn\'t directly call "x.__del__()" --- the former\n     decrements the reference count for "x" by one, and the latter is\n     only called when "x"\'s reference count reaches zero.  Some common\n     situations that may prevent the reference count of an object from\n     going to zero include: circular references between objects (e.g.,\n     a doubly-linked list or a tree data structure with parent and\n     child pointers); a reference to the object on the stack frame of\n     a function that caught an exception (the traceback stored in\n     "sys.exc_traceback" keeps the stack frame alive); or a reference\n     to the object on the stack frame that raised an unhandled\n     exception in interactive mode (the traceback stored in\n     "sys.last_traceback" keeps the stack frame alive).  The first\n     situation can only be remedied by explicitly breaking the cycles;\n     the latter two situations can be resolved by storing "None" in\n     "sys.exc_traceback" or "sys.last_traceback".  Circular references\n     which are garbage are detected when the option cycle detector is\n     enabled (it\'s on by default), but can only be cleaned up if there\n     are no Python-level "__del__()" methods involved. Refer to the\n     documentation for the "gc" module for more information about how\n     "__del__()" methods are handled by the cycle detector,\n     particularly the description of the "garbage" value.\n\n   Warning: Due to the precarious circumstances under which\n     "__del__()" methods are invoked, exceptions that occur during\n     their execution are ignored, and a warning is printed to\n     "sys.stderr" instead. Also, when "__del__()" is invoked in\n     response to a module being deleted (e.g., when execution of the\n     program is done), other globals referenced by the "__del__()"\n     method may already have been deleted or in the process of being\n     torn down (e.g. the import machinery shutting down).  For this\n     reason, "__del__()" methods should do the absolute minimum needed\n     to maintain external invariants.  Starting with version 1.5,\n     Python guarantees that globals whose name begins with a single\n     underscore are deleted from their module before other globals are\n     deleted; if no other references to such globals exist, this may\n     help in assuring that imported modules are still available at the\n     time when the "__del__()" method is called.\n\n   See also the "-R" command-line option.\n\nobject.__repr__(self)\n\n   Called by the "repr()" built-in function and by string conversions\n   (reverse quotes) to compute the "official" string representation of\n   an object.  If at all possible, this should look like a valid\n   Python expression that could be used to recreate an object with the\n   same value (given an appropriate environment).  If this is not\n   possible, a string of the form "<...some useful description...>"\n   should be returned.  The return value must be a string object. If a\n   class defines "__repr__()" but not "__str__()", then "__repr__()"\n   is also used when an "informal" string representation of instances\n   of that class is required.\n\n   This is typically used for debugging, so it is important that the\n   representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n   Called by the "str()" built-in function and by the "print"\n   statement to compute the "informal" string representation of an\n   object.  This differs from "__repr__()" in that it does not have to\n   be a valid Python expression: a more convenient or concise\n   representation may be used instead. The return value must be a\n   string object.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n   New in version 2.1.\n\n   These are the so-called "rich comparison" methods, and are called\n   for comparison operators in preference to "__cmp__()" below. The\n   correspondence between operator symbols and method names is as\n   follows: "x<y" calls "x.__lt__(y)", "x<=y" calls "x.__le__(y)",\n   "x==y" calls "x.__eq__(y)", "x!=y" and "x<>y" call "x.__ne__(y)",\n   "x>y" calls "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)".\n\n   A rich comparison method may return the singleton "NotImplemented"\n   if it does not implement the operation for a given pair of\n   arguments. By convention, "False" and "True" are returned for a\n   successful comparison. However, these methods can return any value,\n   so if the comparison operator is used in a Boolean context (e.g.,\n   in the condition of an "if" statement), Python will call "bool()"\n   on the value to determine if the result is true or false.\n\n   There are no implied relationships among the comparison operators.\n   The truth of "x==y" does not imply that "x!=y" is false.\n   Accordingly, when defining "__eq__()", one should also define\n   "__ne__()" so that the operators will behave as expected.  See the\n   paragraph on "__hash__()" for some important notes on creating\n   *hashable* objects which support custom comparison operations and\n   are usable as dictionary keys.\n\n   There are no swapped-argument versions of these methods (to be used\n   when the left argument does not support the operation but the right\n   argument does); rather, "__lt__()" and "__gt__()" are each other\'s\n   reflection, "__le__()" and "__ge__()" are each other\'s reflection,\n   and "__eq__()" and "__ne__()" are their own reflection.\n\n   Arguments to rich comparison methods are never coerced.\n\n   To automatically generate ordering operations from a single root\n   operation, see "functools.total_ordering()".\n\nobject.__cmp__(self, other)\n\n   Called by comparison operations if rich comparison (see above) is\n   not defined.  Should return a negative integer if "self < other",\n   zero if "self == other", a positive integer if "self > other".  If\n   no "__cmp__()", "__eq__()" or "__ne__()" operation is defined,\n   class instances are compared by object identity ("address").  See\n   also the description of "__hash__()" for some important notes on\n   creating *hashable* objects which support custom comparison\n   operations and are usable as dictionary keys. (Note: the\n   restriction that exceptions are not propagated by "__cmp__()" has\n   been removed since Python 1.5.)\n\nobject.__rcmp__(self, other)\n\n   Changed in version 2.1: No longer supported.\n\nobject.__hash__(self)\n\n   Called by built-in function "hash()" and for operations on members\n   of hashed collections including "set", "frozenset", and "dict".\n   "__hash__()" should return an integer.  The only required property\n   is that objects which compare equal have the same hash value; it is\n   advised to somehow mix together (e.g. using exclusive or) the hash\n   values for the components of the object that also play a part in\n   comparison of objects.\n\n   If a class does not define a "__cmp__()" or "__eq__()" method it\n   should not define a "__hash__()" operation either; if it defines\n   "__cmp__()" or "__eq__()" but not "__hash__()", its instances will\n   not be usable in hashed collections.  If a class defines mutable\n   objects and implements a "__cmp__()" or "__eq__()" method, it\n   should not implement "__hash__()", since hashable collection\n   implementations require that an object\'s hash value is immutable\n   (if the object\'s hash value changes, it will be in the wrong hash\n   bucket).\n\n   User-defined classes have "__cmp__()" and "__hash__()" methods by\n   default; with them, all objects compare unequal (except with\n   themselves) and "x.__hash__()" returns a result derived from\n   "id(x)".\n\n   Classes which inherit a "__hash__()" method from a parent class but\n   change the meaning of "__cmp__()" or "__eq__()" such that the hash\n   value returned is no longer appropriate (e.g. by switching to a\n   value-based concept of equality instead of the default identity\n   based equality) can explicitly flag themselves as being unhashable\n   by setting "__hash__ = None" in the class definition. Doing so\n   means that not only will instances of the class raise an\n   appropriate "TypeError" when a program attempts to retrieve their\n   hash value, but they will also be correctly identified as\n   unhashable when checking "isinstance(obj, collections.Hashable)"\n   (unlike classes which define their own "__hash__()" to explicitly\n   raise "TypeError").\n\n   Changed in version 2.5: "__hash__()" may now also return a long\n   integer object; the 32-bit integer is then derived from the hash of\n   that object.\n\n   Changed in version 2.6: "__hash__" may now be set to "None" to\n   explicitly flag instances of a class as unhashable.\n\nobject.__nonzero__(self)\n\n   Called to implement truth value testing and the built-in operation\n   "bool()"; should return "False" or "True", or their integer\n   equivalents "0" or "1".  When this method is not defined,\n   "__len__()" is called, if it is defined, and the object is\n   considered true if its result is nonzero. If a class defines\n   neither "__len__()" nor "__nonzero__()", all its instances are\n   considered true.\n\nobject.__unicode__(self)\n\n   Called to implement "unicode()" built-in; should return a Unicode\n   object. When this method is not defined, string conversion is\n   attempted, and the result of string conversion is converted to\n   Unicode using the system default encoding.\n',
- 'debugger': u'\n"pdb" --- The Python Debugger\n*****************************\n\n**Source code:** Lib/pdb.py\n\n======================================================================\n\nThe module "pdb" defines an interactive source code debugger for\nPython programs.  It supports setting (conditional) breakpoints and\nsingle stepping at the source line level, inspection of stack frames,\nsource code listing, and evaluation of arbitrary Python code in the\ncontext of any stack frame.  It also supports post-mortem debugging\nand can be called under program control.\n\nThe debugger is extensible --- it is actually defined as the class\n"Pdb". This is currently undocumented but easily understood by reading\nthe source.  The extension interface uses the modules "bdb" and "cmd".\n\nThe debugger\'s prompt is "(Pdb)". Typical usage to run a program under\ncontrol of the debugger is:\n\n   >>> import pdb\n   >>> import mymodule\n   >>> pdb.run(\'mymodule.test()\')\n   > <string>(0)?()\n   (Pdb) continue\n   > <string>(1)?()\n   (Pdb) continue\n   NameError: \'spam\'\n   > <string>(1)?()\n   (Pdb)\n\n"pdb.py" can also be invoked as a script to debug other scripts.  For\nexample:\n\n   python -m pdb myscript.py\n\nWhen invoked as a script, pdb will automatically enter post-mortem\ndebugging if the program being debugged exits abnormally. After post-\nmortem debugging (or after normal exit of the program), pdb will\nrestart the program. Automatic restarting preserves pdb\'s state (such\nas breakpoints) and in most cases is more useful than quitting the\ndebugger upon program\'s exit.\n\nNew in version 2.4: Restarting post-mortem behavior added.\n\nThe typical usage to break into the debugger from a running program is\nto insert\n\n   import pdb; pdb.set_trace()\n\nat the location you want to break into the debugger.  You can then\nstep through the code following this statement, and continue running\nwithout the debugger using the "c" command.\n\nThe typical usage to inspect a crashed program is:\n\n   >>> import pdb\n   >>> import mymodule\n   >>> mymodule.test()\n   Traceback (most recent call last):\n     File "<stdin>", line 1, in ?\n     File "./mymodule.py", line 4, in test\n       test2()\n     File "./mymodule.py", line 3, in test2\n       print spam\n   NameError: spam\n   >>> pdb.pm()\n   > ./mymodule.py(3)test2()\n   -> print spam\n   (Pdb)\n\nThe module defines the following functions; each enters the debugger\nin a slightly different way:\n\npdb.run(statement[, globals[, locals]])\n\n   Execute the *statement* (given as a string) under debugger control.\n   The debugger prompt appears before any code is executed; you can\n   set breakpoints and type "continue", or you can step through the\n   statement using "step" or "next" (all these commands are explained\n   below).  The optional *globals* and *locals* arguments specify the\n   environment in which the code is executed; by default the\n   dictionary of the module "__main__" is used.  (See the explanation\n   of the "exec" statement or the "eval()" built-in function.)\n\npdb.runeval(expression[, globals[, locals]])\n\n   Evaluate the *expression* (given as a string) under debugger\n   control.  When "runeval()" returns, it returns the value of the\n   expression.  Otherwise this function is similar to "run()".\n\npdb.runcall(function[, argument, ...])\n\n   Call the *function* (a function or method object, not a string)\n   with the given arguments.  When "runcall()" returns, it returns\n   whatever the function call returned.  The debugger prompt appears\n   as soon as the function is entered.\n\npdb.set_trace()\n\n   Enter the debugger at the calling stack frame.  This is useful to\n   hard-code a breakpoint at a given point in a program, even if the\n   code is not otherwise being debugged (e.g. when an assertion\n   fails).\n\npdb.post_mortem([traceback])\n\n   Enter post-mortem debugging of the given *traceback* object.  If no\n   *traceback* is given, it uses the one of the exception that is\n   currently being handled (an exception must be being handled if the\n   default is to be used).\n\npdb.pm()\n\n   Enter post-mortem debugging of the traceback found in\n   "sys.last_traceback".\n\nThe "run*" functions and "set_trace()" are aliases for instantiating\nthe "Pdb" class and calling the method of the same name.  If you want\nto access further features, you have to do this yourself:\n\nclass pdb.Pdb(completekey=\'tab\', stdin=None, stdout=None, skip=None)\n\n   "Pdb" is the debugger class.\n\n   The *completekey*, *stdin* and *stdout* arguments are passed to the\n   underlying "cmd.Cmd" class; see the description there.\n\n   The *skip* argument, if given, must be an iterable of glob-style\n   module name patterns.  The debugger will not step into frames that\n   originate in a module that matches one of these patterns. [1]\n\n   Example call to enable tracing with *skip*:\n\n      import pdb; pdb.Pdb(skip=[\'django.*\']).set_trace()\n\n   New in version 2.7: The *skip* argument.\n\n   run(statement[, globals[, locals]])\n   runeval(expression[, globals[, locals]])\n   runcall(function[, argument, ...])\n   set_trace()\n\n      See the documentation for the functions explained above.\n',
- 'del': u'\nThe "del" statement\n*******************\n\n   del_stmt ::= "del" target_list\n\nDeletion is recursively defined very similar to the way assignment is\ndefined. Rather than spelling it out in full details, here are some\nhints.\n\nDeletion of a target list recursively deletes each target, from left\nto right.\n\nDeletion of a name removes the binding of that name  from the local or\nglobal namespace, depending on whether the name occurs in a "global"\nstatement in the same code block.  If the name is unbound, a\n"NameError" exception will be raised.\n\nIt is illegal to delete a name from the local namespace if it occurs\nas a free variable in a nested block.\n\nDeletion of attribute references, subscriptions and slicings is passed\nto the primary object involved; deletion of a slicing is in general\nequivalent to assignment of an empty slice of the right type (but even\nthis is determined by the sliced object).\n',
- 'dict': u'\nDictionary displays\n*******************\n\nA dictionary display is a possibly empty series of key/datum pairs\nenclosed in curly braces:\n\n   dict_display       ::= "{" [key_datum_list | dict_comprehension] "}"\n   key_datum_list     ::= key_datum ("," key_datum)* [","]\n   key_datum          ::= expression ":" expression\n   dict_comprehension ::= expression ":" expression comp_for\n\nA dictionary display yields a new dictionary object.\n\nIf a comma-separated sequence of key/datum pairs is given, they are\nevaluated from left to right to define the entries of the dictionary:\neach key object is used as a key into the dictionary to store the\ncorresponding datum.  This means that you can specify the same key\nmultiple times in the key/datum list, and the final dictionary\'s value\nfor that key will be the last one given.\n\nA dict comprehension, in contrast to list and set comprehensions,\nneeds two expressions separated with a colon followed by the usual\n"for" and "if" clauses. When the comprehension is run, the resulting\nkey and value elements are inserted in the new dictionary in the order\nthey are produced.\n\nRestrictions on the types of the key values are listed earlier in\nsection The standard type hierarchy.  (To summarize, the key type\nshould be *hashable*, which excludes all mutable objects.)  Clashes\nbetween duplicate keys are not detected; the last datum (textually\nrightmost in the display) stored for a given key value prevails.\n',
- 'dynamic-features': u'\nInteraction with dynamic features\n*********************************\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name.  An error will be reported at compile time.\n\nIf the wild card form of import --- "import *" --- is used in a\nfunction and the function contains or is a nested block with free\nvariables, the compiler will raise a "SyntaxError".\n\nIf "exec" is used in a function and the function contains or is a\nnested block with free variables, the compiler will raise a\n"SyntaxError" unless the exec explicitly specifies the local namespace\nfor the "exec".  (In other words, "exec obj" would be illegal, but\n"exec obj in ns" would be legal.)\n\nThe "eval()", "execfile()", and "input()" functions and the "exec"\nstatement do not have access to the full environment for resolving\nnames.  Names may be resolved in the local and global namespaces of\nthe caller.  Free variables are not resolved in the nearest enclosing\nnamespace, but in the global namespace. [1] The "exec" statement and\nthe "eval()" and "execfile()" functions have optional arguments to\noverride the global and local namespace.  If only one namespace is\nspecified, it is used for both.\n',
- 'else': u'\nThe "if" statement\n******************\n\nThe "if" statement is used for conditional execution:\n\n   if_stmt ::= "if" expression ":" suite\n               ( "elif" expression ":" suite )*\n               ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section Boolean operations\nfor the definition of true and false); then that suite is executed\n(and no other part of the "if" statement is executed or evaluated).\nIf all expressions are false, the suite of the "else" clause, if\npresent, is executed.\n',
- 'exceptions': u'\nExceptions\n**********\n\nExceptions are a means of breaking out of the normal flow of control\nof a code block in order to handle errors or other exceptional\nconditions.  An exception is *raised* at the point where the error is\ndetected; it may be *handled* by the surrounding code block or by any\ncode block that directly or indirectly invoked the code block where\nthe error occurred.\n\nThe Python interpreter raises an exception when it detects a run-time\nerror (such as division by zero).  A Python program can also\nexplicitly raise an exception with the "raise" statement. Exception\nhandlers are specified with the "try" ... "except" statement.  The\n"finally" clause of such a statement can be used to specify cleanup\ncode which does not handle the exception, but is executed whether an\nexception occurred or not in the preceding code.\n\nPython uses the "termination" model of error handling: an exception\nhandler can find out what happened and continue execution at an outer\nlevel, but it cannot repair the cause of the error and retry the\nfailing operation (except by re-entering the offending piece of code\nfrom the top).\n\nWhen an exception is not handled at all, the interpreter terminates\nexecution of the program, or returns to its interactive main loop.  In\neither case, it prints a stack backtrace, except when the exception is\n"SystemExit".\n\nExceptions are identified by class instances.  The "except" clause is\nselected depending on the class of the instance: it must reference the\nclass of the instance or a base class thereof.  The instance can be\nreceived by the handler and can carry additional information about the\nexceptional condition.\n\nExceptions can also be identified by strings, in which case the\n"except" clause is selected by object identity.  An arbitrary value\ncan be raised along with the identifying string which can be passed to\nthe handler.\n\nNote: Messages to exceptions are not part of the Python API.  Their\n  contents may change from one version of Python to the next without\n  warning and should not be relied on by code which will run under\n  multiple versions of the interpreter.\n\nSee also the description of the "try" statement in section The try\nstatement and "raise" statement in section The raise statement.\n\n-[ Footnotes ]-\n\n[1] This limitation occurs because the code that is executed by\n    these operations is not available at the time the module is\n    compiled.\n',
- 'exec': u'\nThe "exec" statement\n********************\n\n   exec_stmt ::= "exec" or_expr ["in" expression ["," expression]]\n\nThis statement supports dynamic execution of Python code.  The first\nexpression should evaluate to either a Unicode string, a *Latin-1*\nencoded string, an open file object, a code object, or a tuple.  If it\nis a string, the string is parsed as a suite of Python statements\nwhich is then executed (unless a syntax error occurs). [1] If it is an\nopen file, the file is parsed until EOF and executed. If it is a code\nobject, it is simply executed.  For the interpretation of a tuple, see\nbelow.  In all cases, the code that\'s executed is expected to be valid\nas file input (see section File input).  Be aware that the "return"\nand "yield" statements may not be used outside of function definitions\neven within the context of code passed to the "exec" statement.\n\nIn all cases, if the optional parts are omitted, the code is executed\nin the current scope.  If only the first expression after "in" is\nspecified, it should be a dictionary, which will be used for both the\nglobal and the local variables.  If two expressions are given, they\nare used for the global and local variables, respectively. If\nprovided, *locals* can be any mapping object. Remember that at module\nlevel, globals and locals are the same dictionary. If two separate\nobjects are given as *globals* and *locals*, the code will be executed\nas if it were embedded in a class definition.\n\nThe first expression may also be a tuple of length 2 or 3.  In this\ncase, the optional parts must be omitted.  The form "exec(expr,\nglobals)" is equivalent to "exec expr in globals", while the form\n"exec(expr, globals, locals)" is equivalent to "exec expr in globals,\nlocals".  The tuple form of "exec" provides compatibility with Python\n3, where "exec" is a function rather than a statement.\n\nChanged in version 2.4: Formerly, *locals* was required to be a\ndictionary.\n\nAs a side effect, an implementation may insert additional keys into\nthe dictionaries given besides those corresponding to variable names\nset by the executed code.  For example, the current implementation may\nadd a reference to the dictionary of the built-in module "__builtin__"\nunder the key "__builtins__" (!).\n\n**Programmer\'s hints:** dynamic evaluation of expressions is supported\nby the built-in function "eval()".  The built-in functions "globals()"\nand "locals()" return the current global and local dictionary,\nrespectively, which may be useful to pass around for use by "exec".\n\n-[ Footnotes ]-\n\n[1] Note that the parser only accepts the Unix-style end of line\n    convention. If you are reading the code from a file, make sure to\n    use *universal newlines* mode to convert Windows or Mac-style\n    newlines.\n',
- 'execmodel': u'\nExecution model\n***************\n\n\nNaming and binding\n==================\n\n*Names* refer to objects.  Names are introduced by name binding\noperations. Each occurrence of a name in the program text refers to\nthe *binding* of that name established in the innermost function block\ncontaining the use.\n\nA *block* is a piece of Python program text that is executed as a\nunit. The following are blocks: a module, a function body, and a class\ndefinition. Each command typed interactively is a block.  A script\nfile (a file given as standard input to the interpreter or specified\non the interpreter command line the first argument) is a code block.\nA script command (a command specified on the interpreter command line\nwith the \'**-c**\' option) is a code block.  The file read by the\nbuilt-in function "execfile()" is a code block.  The string argument\npassed to the built-in function "eval()" and to the "exec" statement\nis a code block. The expression read and evaluated by the built-in\nfunction "input()" is a code block.\n\nA code block is executed in an *execution frame*.  A frame contains\nsome administrative information (used for debugging) and determines\nwhere and how execution continues after the code block\'s execution has\ncompleted.\n\nA *scope* defines the visibility of a name within a block.  If a local\nvariable is defined in a block, its scope includes that block.  If the\ndefinition occurs in a function block, the scope extends to any blocks\ncontained within the defining one, unless a contained block introduces\na different binding for the name.  The scope of names defined in a\nclass block is limited to the class block; it does not extend to the\ncode blocks of methods -- this includes generator expressions since\nthey are implemented using a function scope.  This means that the\nfollowing will fail:\n\n   class A:\n       a = 42\n       b = list(a + i for i in range(10))\n\nWhen a name is used in a code block, it is resolved using the nearest\nenclosing scope.  The set of all such scopes visible to a code block\nis called the block\'s *environment*.\n\nIf a name is bound in a block, it is a local variable of that block.\nIf a name is bound at the module level, it is a global variable.  (The\nvariables of the module code block are local and global.)  If a\nvariable is used in a code block but not defined there, it is a *free\nvariable*.\n\nWhen a name is not found at all, a "NameError" exception is raised.\nIf the name refers to a local variable that has not been bound, a\n"UnboundLocalError" exception is raised.  "UnboundLocalError" is a\nsubclass of "NameError".\n\nThe following constructs bind names: formal parameters to functions,\n"import" statements, class and function definitions (these bind the\nclass or function name in the defining block), and targets that are\nidentifiers if occurring in an assignment, "for" loop header, in the\nsecond position of an "except" clause header or after "as" in a "with"\nstatement.  The "import" statement of the form "from ... import *"\nbinds all names defined in the imported module, except those beginning\nwith an underscore.  This form may only be used at the module level.\n\nA target occurring in a "del" statement is also considered bound for\nthis purpose (though the actual semantics are to unbind the name).  It\nis illegal to unbind a name that is referenced by an enclosing scope;\nthe compiler will report a "SyntaxError".\n\nEach assignment or import statement occurs within a block defined by a\nclass or function definition or at the module level (the top-level\ncode block).\n\nIf a name binding operation occurs anywhere within a code block, all\nuses of the name within the block are treated as references to the\ncurrent block.  This can lead to errors when a name is used within a\nblock before it is bound. This rule is subtle.  Python lacks\ndeclarations and allows name binding operations to occur anywhere\nwithin a code block.  The local variables of a code block can be\ndetermined by scanning the entire text of the block for name binding\noperations.\n\nIf the global statement occurs within a block, all uses of the name\nspecified in the statement refer to the binding of that name in the\ntop-level namespace. Names are resolved in the top-level namespace by\nsearching the global namespace, i.e. the namespace of the module\ncontaining the code block, and the builtins namespace, the namespace\nof the module "__builtin__".  The global namespace is searched first.\nIf the name is not found there, the builtins namespace is searched.\nThe global statement must precede all uses of the name.\n\nThe builtins namespace associated with the execution of a code block\nis actually found by looking up the name "__builtins__" in its global\nnamespace; this should be a dictionary or a module (in the latter case\nthe module\'s dictionary is used).  By default, when in the "__main__"\nmodule, "__builtins__" is the built-in module "__builtin__" (note: no\n\'s\'); when in any other module, "__builtins__" is an alias for the\ndictionary of the "__builtin__" module itself.  "__builtins__" can be\nset to a user-created dictionary to create a weak form of restricted\nexecution.\n\n**CPython implementation detail:** Users should not touch\n"__builtins__"; it is strictly an implementation detail.  Users\nwanting to override values in the builtins namespace should "import"\nthe "__builtin__" (no \'s\') module and modify its attributes\nappropriately.\n\nThe namespace for a module is automatically created the first time a\nmodule is imported.  The main module for a script is always called\n"__main__".\n\nThe "global" statement has the same scope as a name binding operation\nin the same block.  If the nearest enclosing scope for a free variable\ncontains a global statement, the free variable is treated as a global.\n\nA class definition is an executable statement that may use and define\nnames. These references follow the normal rules for name resolution.\nThe namespace of the class definition becomes the attribute dictionary\nof the class.  Names defined at the class scope are not visible in\nmethods.\n\n\nInteraction with dynamic features\n---------------------------------\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name.  An error will be reported at compile time.\n\nIf the wild card form of import --- "import *" --- is used in a\nfunction and the function contains or is a nested block with free\nvariables, the compiler will raise a "SyntaxError".\n\nIf "exec" is used in a function and the function contains or is a\nnested block with free variables, the compiler will raise a\n"SyntaxError" unless the exec explicitly specifies the local namespace\nfor the "exec".  (In other words, "exec obj" would be illegal, but\n"exec obj in ns" would be legal.)\n\nThe "eval()", "execfile()", and "input()" functions and the "exec"\nstatement do not have access to the full environment for resolving\nnames.  Names may be resolved in the local and global namespaces of\nthe caller.  Free variables are not resolved in the nearest enclosing\nnamespace, but in the global namespace. [1] The "exec" statement and\nthe "eval()" and "execfile()" functions have optional arguments to\noverride the global and local namespace.  If only one namespace is\nspecified, it is used for both.\n\n\nExceptions\n==========\n\nExceptions are a means of breaking out of the normal flow of control\nof a code block in order to handle errors or other exceptional\nconditions.  An exception is *raised* at the point where the error is\ndetected; it may be *handled* by the surrounding code block or by any\ncode block that directly or indirectly invoked the code block where\nthe error occurred.\n\nThe Python interpreter raises an exception when it detects a run-time\nerror (such as division by zero).  A Python program can also\nexplicitly raise an exception with the "raise" statement. Exception\nhandlers are specified with the "try" ... "except" statement.  The\n"finally" clause of such a statement can be used to specify cleanup\ncode which does not handle the exception, but is executed whether an\nexception occurred or not in the preceding code.\n\nPython uses the "termination" model of error handling: an exception\nhandler can find out what happened and continue execution at an outer\nlevel, but it cannot repair the cause of the error and retry the\nfailing operation (except by re-entering the offending piece of code\nfrom the top).\n\nWhen an exception is not handled at all, the interpreter terminates\nexecution of the program, or returns to its interactive main loop.  In\neither case, it prints a stack backtrace, except when the exception is\n"SystemExit".\n\nExceptions are identified by class instances.  The "except" clause is\nselected depending on the class of the instance: it must reference the\nclass of the instance or a base class thereof.  The instance can be\nreceived by the handler and can carry additional information about the\nexceptional condition.\n\nExceptions can also be identified by strings, in which case the\n"except" clause is selected by object identity.  An arbitrary value\ncan be raised along with the identifying string which can be passed to\nthe handler.\n\nNote: Messages to exceptions are not part of the Python API.  Their\n  contents may change from one version of Python to the next without\n  warning and should not be relied on by code which will run under\n  multiple versions of the interpreter.\n\nSee also the description of the "try" statement in section The try\nstatement and "raise" statement in section The raise statement.\n\n-[ Footnotes ]-\n\n[1] This limitation occurs because the code that is executed by\n    these operations is not available at the time the module is\n    compiled.\n',
- 'exprlists': u'\nExpression lists\n****************\n\n   expression_list ::= expression ( "," expression )* [","]\n\nAn expression list containing at least one comma yields a tuple.  The\nlength of the tuple is the number of expressions in the list.  The\nexpressions are evaluated from left to right.\n\nThe trailing comma is required only to create a single tuple (a.k.a. a\n*singleton*); it is optional in all other cases.  A single expression\nwithout a trailing comma doesn\'t create a tuple, but rather yields the\nvalue of that expression. (To create an empty tuple, use an empty pair\nof parentheses: "()".)\n',
- 'floating': u'\nFloating point literals\n***********************\n\nFloating point literals are described by the following lexical\ndefinitions:\n\n   floatnumber   ::= pointfloat | exponentfloat\n   pointfloat    ::= [intpart] fraction | intpart "."\n   exponentfloat ::= (intpart | pointfloat) exponent\n   intpart       ::= digit+\n   fraction      ::= "." digit+\n   exponent      ::= ("e" | "E") ["+" | "-"] digit+\n\nNote that the integer and exponent parts of floating point numbers can\nlook like octal integers, but are interpreted using radix 10.  For\nexample, "077e010" is legal, and denotes the same number as "77e10".\nThe allowed range of floating point literals is implementation-\ndependent. Some examples of floating point literals:\n\n   3.14    10.    .001    1e100    3.14e-10    0e0\n\nNote that numeric literals do not include a sign; a phrase like "-1"\nis actually an expression composed of the unary operator "-" and the\nliteral "1".\n',
- 'for': u'\nThe "for" statement\n*******************\n\nThe "for" statement is used to iterate over the elements of a sequence\n(such as a string, tuple or list) or other iterable object:\n\n   for_stmt ::= "for" target_list "in" expression_list ":" suite\n                ["else" ":" suite]\n\nThe expression list is evaluated once; it should yield an iterable\nobject.  An iterator is created for the result of the\n"expression_list".  The suite is then executed once for each item\nprovided by the iterator, in the order of ascending indices.  Each\nitem in turn is assigned to the target list using the standard rules\nfor assignments, and then the suite is executed.  When the items are\nexhausted (which is immediately when the sequence is empty), the suite\nin the "else" clause, if present, is executed, and the loop\nterminates.\n\nA "break" statement executed in the first suite terminates the loop\nwithout executing the "else" clause\'s suite.  A "continue" statement\nexecuted in the first suite skips the rest of the suite and continues\nwith the next item, or with the "else" clause if there was no next\nitem.\n\nThe suite may assign to the variable(s) in the target list; this does\nnot affect the next item assigned to it.\n\nThe target list is not deleted when the loop is finished, but if the\nsequence is empty, it will not have been assigned to at all by the\nloop.  Hint: the built-in function "range()" returns a sequence of\nintegers suitable to emulate the effect of Pascal\'s "for i := a to b\ndo"; e.g., "range(3)" returns the list "[0, 1, 2]".\n\nNote: There is a subtlety when the sequence is being modified by the\n  loop (this can only occur for mutable sequences, i.e. lists). An\n  internal counter is used to keep track of which item is used next,\n  and this is incremented on each iteration.  When this counter has\n  reached the length of the sequence the loop terminates.  This means\n  that if the suite deletes the current (or a previous) item from the\n  sequence, the next item will be skipped (since it gets the index of\n  the current item which has already been treated).  Likewise, if the\n  suite inserts an item in the sequence before the current item, the\n  current item will be treated again the next time through the loop.\n  This can lead to nasty bugs that can be avoided by making a\n  temporary copy using a slice of the whole sequence, e.g.,\n\n     for x in a[:]:\n         if x < 0: a.remove(x)\n',
- 'formatstrings': u'\nFormat String Syntax\n********************\n\nThe "str.format()" method and the "Formatter" class share the same\nsyntax for format strings (although in the case of "Formatter",\nsubclasses can define their own format string syntax).\n\nFormat strings contain "replacement fields" surrounded by curly braces\n"{}". Anything that is not contained in braces is considered literal\ntext, which is copied unchanged to the output.  If you need to include\na brace character in the literal text, it can be escaped by doubling:\n"{{" and "}}".\n\nThe grammar for a replacement field is as follows:\n\n      replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"\n      field_name        ::= arg_name ("." attribute_name | "[" element_index "]")*\n      arg_name          ::= [identifier | integer]\n      attribute_name    ::= identifier\n      element_index     ::= integer | index_string\n      index_string      ::= <any source character except "]"> +\n      conversion        ::= "r" | "s"\n      format_spec       ::= <described in the next section>\n\nIn less formal terms, the replacement field can start with a\n*field_name* that specifies the object whose value is to be formatted\nand inserted into the output instead of the replacement field. The\n*field_name* is optionally followed by a  *conversion* field, which is\npreceded by an exclamation point "\'!\'", and a *format_spec*, which is\npreceded by a colon "\':\'".  These specify a non-default format for the\nreplacement value.\n\nSee also the Format Specification Mini-Language section.\n\nThe *field_name* itself begins with an *arg_name* that is either a\nnumber or a keyword.  If it\'s a number, it refers to a positional\nargument, and if it\'s a keyword, it refers to a named keyword\nargument.  If the numerical arg_names in a format string are 0, 1, 2,\n... in sequence, they can all be omitted (not just some) and the\nnumbers 0, 1, 2, ... will be automatically inserted in that order.\nBecause *arg_name* is not quote-delimited, it is not possible to\nspecify arbitrary dictionary keys (e.g., the strings "\'10\'" or\n"\':-]\'") within a format string. The *arg_name* can be followed by any\nnumber of index or attribute expressions. An expression of the form\n"\'.name\'" selects the named attribute using "getattr()", while an\nexpression of the form "\'[index]\'" does an index lookup using\n"__getitem__()".\n\nChanged in version 2.7: The positional argument specifiers can be\nomitted, so "\'{} {}\'" is equivalent to "\'{0} {1}\'".\n\nSome simple format string examples:\n\n   "First, thou shalt count to {0}"  # References first positional argument\n   "Bring me a {}"                   # Implicitly references the first positional argument\n   "From {} to {}"                   # Same as "From {0} to {1}"\n   "My quest is {name}"              # References keyword argument \'name\'\n   "Weight in tons {0.weight}"       # \'weight\' attribute of first positional arg\n   "Units destroyed: {players[0]}"   # First element of keyword argument \'players\'.\n\nThe *conversion* field causes a type coercion before formatting.\nNormally, the job of formatting a value is done by the "__format__()"\nmethod of the value itself.  However, in some cases it is desirable to\nforce a type to be formatted as a string, overriding its own\ndefinition of formatting.  By converting the value to a string before\ncalling "__format__()", the normal formatting logic is bypassed.\n\nTwo conversion flags are currently supported: "\'!s\'" which calls\n"str()" on the value, and "\'!r\'" which calls "repr()".\n\nSome examples:\n\n   "Harold\'s a clever {0!s}"        # Calls str() on the argument first\n   "Bring out the holy {name!r}"    # Calls repr() on the argument first\n\nThe *format_spec* field contains a specification of how the value\nshould be presented, including such details as field width, alignment,\npadding, decimal precision and so on.  Each value type can define its\nown "formatting mini-language" or interpretation of the *format_spec*.\n\nMost built-in types support a common formatting mini-language, which\nis described in the next section.\n\nA *format_spec* field can also include nested replacement fields\nwithin it. These nested replacement fields may contain a field name,\nconversion flag and format specification, but deeper nesting is not\nallowed.  The replacement fields within the format_spec are\nsubstituted before the *format_spec* string is interpreted. This\nallows the formatting of a value to be dynamically specified.\n\nSee the Format examples section for some examples.\n\n\nFormat Specification Mini-Language\n==================================\n\n"Format specifications" are used within replacement fields contained\nwithin a format string to define how individual values are presented\n(see Format String Syntax).  They can also be passed directly to the\nbuilt-in "format()" function.  Each formattable type may define how\nthe format specification is to be interpreted.\n\nMost built-in types implement the following options for format\nspecifications, although some of the formatting options are only\nsupported by the numeric types.\n\nA general convention is that an empty format string ("""") produces\nthe same result as if you had called "str()" on the value. A non-empty\nformat string typically modifies the result.\n\nThe general form of a *standard format specifier* is:\n\n   format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type]\n   fill        ::= <any character>\n   align       ::= "<" | ">" | "=" | "^"\n   sign        ::= "+" | "-" | " "\n   width       ::= integer\n   precision   ::= integer\n   type        ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"\n\nIf a valid *align* value is specified, it can be preceded by a *fill*\ncharacter that can be any character and defaults to a space if\nomitted. It is not possible to use a literal curly brace (""{"" or\n""}"") as the *fill* character when using the "str.format()" method.\nHowever, it is possible to insert a curly brace with a nested\nreplacement field.  This limitation doesn\'t affect the "format()"\nfunction.\n\nThe meaning of the various alignment options is as follows:\n\n   +-----------+------------------------------------------------------------+\n   | Option    | Meaning                                                    |\n   +===========+============================================================+\n   | "\'<\'"     | Forces the field to be left-aligned within the available   |\n   |           | space (this is the default for most objects).              |\n   +-----------+------------------------------------------------------------+\n   | "\'>\'"     | Forces the field to be right-aligned within the available  |\n   |           | space (this is the default for numbers).                   |\n   +-----------+------------------------------------------------------------+\n   | "\'=\'"     | Forces the padding to be placed after the sign (if any)    |\n   |           | but before the digits.  This is used for printing fields   |\n   |           | in the form \'+000000120\'. This alignment option is only    |\n   |           | valid for numeric types.  It becomes the default when \'0\'  |\n   |           | immediately precedes the field width.                      |\n   +-----------+------------------------------------------------------------+\n   | "\'^\'"     | Forces the field to be centered within the available       |\n   |           | space.                                                     |\n   +-----------+------------------------------------------------------------+\n\nNote that unless a minimum field width is defined, the field width\nwill always be the same size as the data to fill it, so that the\nalignment option has no meaning in this case.\n\nThe *sign* option is only valid for number types, and can be one of\nthe following:\n\n   +-----------+------------------------------------------------------------+\n   | Option    | Meaning                                                    |\n   +===========+============================================================+\n   | "\'+\'"     | indicates that a sign should be used for both positive as  |\n   |           | well as negative numbers.                                  |\n   +-----------+------------------------------------------------------------+\n   | "\'-\'"     | indicates that a sign should be used only for negative     |\n   |           | numbers (this is the default behavior).                    |\n   +-----------+------------------------------------------------------------+\n   | space     | indicates that a leading space should be used on positive  |\n   |           | numbers, and a minus sign on negative numbers.             |\n   +-----------+------------------------------------------------------------+\n\nThe "\'#\'" option is only valid for integers, and only for binary,\noctal, or hexadecimal output.  If present, it specifies that the\noutput will be prefixed by "\'0b\'", "\'0o\'", or "\'0x\'", respectively.\n\nThe "\',\'" option signals the use of a comma for a thousands separator.\nFor a locale aware separator, use the "\'n\'" integer presentation type\ninstead.\n\nChanged in version 2.7: Added the "\',\'" option (see also **PEP 378**).\n\n*width* is a decimal integer defining the minimum field width.  If not\nspecified, then the field width will be determined by the content.\n\nWhen no explicit alignment is given, preceding the *width* field by a\nzero ("\'0\'") character enables sign-aware zero-padding for numeric\ntypes.  This is equivalent to a *fill* character of "\'0\'" with an\n*alignment* type of "\'=\'".\n\nThe *precision* is a decimal number indicating how many digits should\nbe displayed after the decimal point for a floating point value\nformatted with "\'f\'" and "\'F\'", or before and after the decimal point\nfor a floating point value formatted with "\'g\'" or "\'G\'".  For non-\nnumber types the field indicates the maximum field size - in other\nwords, how many characters will be used from the field content. The\n*precision* is not allowed for integer values.\n\nFinally, the *type* determines how the data should be presented.\n\nThe available string presentation types are:\n\n   +-----------+------------------------------------------------------------+\n   | Type      | Meaning                                                    |\n   +===========+============================================================+\n   | "\'s\'"     | String format. This is the default type for strings and    |\n   |           | may be omitted.                                            |\n   +-----------+------------------------------------------------------------+\n   | None      | The same as "\'s\'".                                         |\n   +-----------+------------------------------------------------------------+\n\nThe available integer presentation types are:\n\n   +-----------+------------------------------------------------------------+\n   | Type      | Meaning                                                    |\n   +===========+============================================================+\n   | "\'b\'"     | Binary format. Outputs the number in base 2.               |\n   +-----------+------------------------------------------------------------+\n   | "\'c\'"     | Character. Converts the integer to the corresponding       |\n   |           | unicode character before printing.                         |\n   +-----------+------------------------------------------------------------+\n   | "\'d\'"     | Decimal Integer. Outputs the number in base 10.            |\n   +-----------+------------------------------------------------------------+\n   | "\'o\'"     | Octal format. Outputs the number in base 8.                |\n   +-----------+------------------------------------------------------------+\n   | "\'x\'"     | Hex format. Outputs the number in base 16, using lower-    |\n   |           | case letters for the digits above 9.                       |\n   +-----------+------------------------------------------------------------+\n   | "\'X\'"     | Hex format. Outputs the number in base 16, using upper-    |\n   |           | case letters for the digits above 9.                       |\n   +-----------+------------------------------------------------------------+\n   | "\'n\'"     | Number. This is the same as "\'d\'", except that it uses the |\n   |           | current locale setting to insert the appropriate number    |\n   |           | separator characters.                                      |\n   +-----------+------------------------------------------------------------+\n   | None      | The same as "\'d\'".                                         |\n   +-----------+------------------------------------------------------------+\n\nIn addition to the above presentation types, integers can be formatted\nwith the floating point presentation types listed below (except "\'n\'"\nand "None"). When doing so, "float()" is used to convert the integer\nto a floating point number before formatting.\n\nThe available presentation types for floating point and decimal values\nare:\n\n   +-----------+------------------------------------------------------------+\n   | Type      | Meaning                                                    |\n   +===========+============================================================+\n   | "\'e\'"     | Exponent notation. Prints the number in scientific         |\n   |           | notation using the letter \'e\' to indicate the exponent.    |\n   |           | The default precision is "6".                              |\n   +-----------+------------------------------------------------------------+\n   | "\'E\'"     | Exponent notation. Same as "\'e\'" except it uses an upper   |\n   |           | case \'E\' as the separator character.                       |\n   +-----------+------------------------------------------------------------+\n   | "\'f\'"     | Fixed point. Displays the number as a fixed-point number.  |\n   |           | The default precision is "6".                              |\n   +-----------+------------------------------------------------------------+\n   | "\'F\'"     | Fixed point. Same as "\'f\'".                                |\n   +-----------+------------------------------------------------------------+\n   | "\'g\'"     | General format.  For a given precision "p >= 1", this      |\n   |           | rounds the number to "p" significant digits and then       |\n   |           | formats the result in either fixed-point format or in      |\n   |           | scientific notation, depending on its magnitude.  The      |\n   |           | precise rules are as follows: suppose that the result      |\n   |           | formatted with presentation type "\'e\'" and precision "p-1" |\n   |           | would have exponent "exp".  Then if "-4 <= exp < p", the   |\n   |           | number is formatted with presentation type "\'f\'" and       |\n   |           | precision "p-1-exp".  Otherwise, the number is formatted   |\n   |           | with presentation type "\'e\'" and precision "p-1". In both  |\n   |           | cases insignificant trailing zeros are removed from the    |\n   |           | significand, and the decimal point is also removed if      |\n   |           | there are no remaining digits following it.  Positive and  |\n   |           | negative infinity, positive and negative zero, and nans,   |\n   |           | are formatted as "inf", "-inf", "0", "-0" and "nan"        |\n   |           | respectively, regardless of the precision.  A precision of |\n   |           | "0" is treated as equivalent to a precision of "1". The    |\n   |           | default precision is "6".                                  |\n   +-----------+------------------------------------------------------------+\n   | "\'G\'"     | General format. Same as "\'g\'" except switches to "\'E\'" if  |\n   |           | the number gets too large. The representations of infinity |\n   |           | and NaN are uppercased, too.                               |\n   +-----------+------------------------------------------------------------+\n   | "\'n\'"     | Number. This is the same as "\'g\'", except that it uses the |\n   |           | current locale setting to insert the appropriate number    |\n   |           | separator characters.                                      |\n   +-----------+------------------------------------------------------------+\n   | "\'%\'"     | Percentage. Multiplies the number by 100 and displays in   |\n   |           | fixed ("\'f\'") format, followed by a percent sign.          |\n   +-----------+------------------------------------------------------------+\n   | None      | The same as "\'g\'".                                         |\n   +-----------+------------------------------------------------------------+\n\n\nFormat examples\n===============\n\nThis section contains examples of the "str.format()" syntax and\ncomparison with the old "%"-formatting.\n\nIn most of the cases the syntax is similar to the old "%"-formatting,\nwith the addition of the "{}" and with ":" used instead of "%". For\nexample, "\'%03.2f\'" can be translated to "\'{:03.2f}\'".\n\nThe new format syntax also supports new and different options, shown\nin the follow examples.\n\nAccessing arguments by position:\n\n   >>> \'{0}, {1}, {2}\'.format(\'a\', \'b\', \'c\')\n   \'a, b, c\'\n   >>> \'{}, {}, {}\'.format(\'a\', \'b\', \'c\')  # 2.7+ only\n   \'a, b, c\'\n   >>> \'{2}, {1}, {0}\'.format(\'a\', \'b\', \'c\')\n   \'c, b, a\'\n   >>> \'{2}, {1}, {0}\'.format(*\'abc\')      # unpacking argument sequence\n   \'c, b, a\'\n   >>> \'{0}{1}{0}\'.format(\'abra\', \'cad\')   # arguments\' indices can be repeated\n   \'abracadabra\'\n\nAccessing arguments by name:\n\n   >>> \'Coordinates: {latitude}, {longitude}\'.format(latitude=\'37.24N\', longitude=\'-115.81W\')\n   \'Coordinates: 37.24N, -115.81W\'\n   >>> coord = {\'latitude\': \'37.24N\', \'longitude\': \'-115.81W\'}\n   >>> \'Coordinates: {latitude}, {longitude}\'.format(**coord)\n   \'Coordinates: 37.24N, -115.81W\'\n\nAccessing arguments\' attributes:\n\n   >>> c = 3-5j\n   >>> (\'The complex number {0} is formed from the real part {0.real} \'\n   ...  \'and the imaginary part {0.imag}.\').format(c)\n   \'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.\'\n   >>> class Point(object):\n   ...     def __init__(self, x, y):\n   ...         self.x, self.y = x, y\n   ...     def __str__(self):\n   ...         return \'Point({self.x}, {self.y})\'.format(self=self)\n   ...\n   >>> str(Point(4, 2))\n   \'Point(4, 2)\'\n\nAccessing arguments\' items:\n\n   >>> coord = (3, 5)\n   >>> \'X: {0[0]};  Y: {0[1]}\'.format(coord)\n   \'X: 3;  Y: 5\'\n\nReplacing "%s" and "%r":\n\n   >>> "repr() shows quotes: {!r}; str() doesn\'t: {!s}".format(\'test1\', \'test2\')\n   "repr() shows quotes: \'test1\'; str() doesn\'t: test2"\n\nAligning the text and specifying a width:\n\n   >>> \'{:<30}\'.format(\'left aligned\')\n   \'left aligned                  \'\n   >>> \'{:>30}\'.format(\'right aligned\')\n   \'                 right aligned\'\n   >>> \'{:^30}\'.format(\'centered\')\n   \'           centered           \'\n   >>> \'{:*^30}\'.format(\'centered\')  # use \'*\' as a fill char\n   \'***********centered***********\'\n\nReplacing "%+f", "%-f", and "% f" and specifying a sign:\n\n   >>> \'{:+f}; {:+f}\'.format(3.14, -3.14)  # show it always\n   \'+3.140000; -3.140000\'\n   >>> \'{: f}; {: f}\'.format(3.14, -3.14)  # show a space for positive numbers\n   \' 3.140000; -3.140000\'\n   >>> \'{:-f}; {:-f}\'.format(3.14, -3.14)  # show only the minus -- same as \'{:f}; {:f}\'\n   \'3.140000; -3.140000\'\n\nReplacing "%x" and "%o" and converting the value to different bases:\n\n   >>> # format also supports binary numbers\n   >>> "int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42)\n   \'int: 42;  hex: 2a;  oct: 52;  bin: 101010\'\n   >>> # with 0x, 0o, or 0b as prefix:\n   >>> "int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}".format(42)\n   \'int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010\'\n\nUsing the comma as a thousands separator:\n\n   >>> \'{:,}\'.format(1234567890)\n   \'1,234,567,890\'\n\nExpressing a percentage:\n\n   >>> points = 19.5\n   >>> total = 22\n   >>> \'Correct answers: {:.2%}\'.format(points/total)\n   \'Correct answers: 88.64%\'\n\nUsing type-specific formatting:\n\n   >>> import datetime\n   >>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)\n   >>> \'{:%Y-%m-%d %H:%M:%S}\'.format(d)\n   \'2010-07-04 12:15:58\'\n\nNesting arguments and more complex examples:\n\n   >>> for align, text in zip(\'<^>\', [\'left\', \'center\', \'right\']):\n   ...     \'{0:{fill}{align}16}\'.format(text, fill=align, align=align)\n   ...\n   \'left<<<<<<<<<<<<\'\n   \'^^^^^center^^^^^\'\n   \'>>>>>>>>>>>right\'\n   >>>\n   >>> octets = [192, 168, 0, 1]\n   >>> \'{:02X}{:02X}{:02X}{:02X}\'.format(*octets)\n   \'C0A80001\'\n   >>> int(_, 16)\n   3232235521\n   >>>\n   >>> width = 5\n   >>> for num in range(5,12):\n   ...     for base in \'dXob\':\n   ...         print \'{0:{width}{base}}\'.format(num, base=base, width=width),\n   ...     print\n   ...\n       5     5     5   101\n       6     6     6   110\n       7     7     7   111\n       8     8    10  1000\n       9     9    11  1001\n      10     A    12  1010\n      11     B    13  1011\n',
- 'function': u'\nFunction definitions\n********************\n\nA function definition defines a user-defined function object (see\nsection The standard type hierarchy):\n\n   decorated      ::= decorators (classdef | funcdef)\n   decorators     ::= decorator+\n   decorator      ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE\n   funcdef        ::= "def" funcname "(" [parameter_list] ")" ":" suite\n   dotted_name    ::= identifier ("." identifier)*\n   parameter_list ::= (defparameter ",")*\n                      (  "*" identifier ["," "**" identifier]\n                      | "**" identifier\n                      | defparameter [","] )\n   defparameter   ::= parameter ["=" expression]\n   sublist        ::= parameter ("," parameter)* [","]\n   parameter      ::= identifier | "(" sublist ")"\n   funcname       ::= identifier\n\nA function definition is an executable statement.  Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function).  This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition.  The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object.  Multiple decorators are applied in\nnested fashion. For example, the following code:\n\n   @f1(arg)\n   @f2\n   def func(): pass\n\nis equivalent to:\n\n   def func(): pass\n   func = f1(arg)(f2(func))\n\nWhen one or more top-level *parameters* have the form *parameter* "="\n*expression*, the function is said to have "default parameter values."\nFor a parameter with a default value, the corresponding *argument* may\nbe omitted from a call, in which case the parameter\'s default value is\nsubstituted.  If a parameter has a default value, all following\nparameters must also have a default value --- this is a syntactic\nrestriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated when the function definition\nis executed.**  This means that the expression is evaluated once, when\nthe function is defined, and that the same "pre-computed" value is\nused for each call.  This is especially important to understand when a\ndefault parameter is a mutable object, such as a list or a dictionary:\nif the function modifies the object (e.g. by appending an item to a\nlist), the default value is in effect modified. This is generally not\nwhat was intended.  A way around this  is to use "None" as the\ndefault, and explicitly test for it in the body of the function, e.g.:\n\n   def whats_on_the_telly(penguin=None):\n       if penguin is None:\n           penguin = []\n       penguin.append("property of the zoo")\n       return penguin\n\nFunction call semantics are described in more detail in section Calls.\nA function call always assigns values to all parameters mentioned in\nthe parameter list, either from position arguments, from keyword\narguments, or from default values.  If the form ""*identifier"" is\npresent, it is initialized to a tuple receiving any excess positional\nparameters, defaulting to the empty tuple.  If the form\n""**identifier"" is present, it is initialized to a new dictionary\nreceiving any excess keyword arguments, defaulting to a new empty\ndictionary.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions.  This uses lambda\nexpressions, described in section Lambdas.  Note that the lambda\nexpression is merely a shorthand for a simplified function definition;\na function defined in a ""def"" statement can be passed around or\nassigned to another name just like a function defined by a lambda\nexpression.  The ""def"" form is actually more powerful since it\nallows the execution of multiple statements.\n\n**Programmer\'s note:** Functions are first-class objects.  A ""def""\nform executed inside a function definition defines a local function\nthat can be returned or passed around.  Free variables used in the\nnested function can access the local variables of the function\ncontaining the def.  See section Naming and binding for details.\n',
- 'global': u'\nThe "global" statement\n**********************\n\n   global_stmt ::= "global" identifier ("," identifier)*\n\nThe "global" statement is a declaration which holds for the entire\ncurrent code block.  It means that the listed identifiers are to be\ninterpreted as globals.  It would be impossible to assign to a global\nvariable without "global", although free variables may refer to\nglobals without being declared global.\n\nNames listed in a "global" statement must not be used in the same code\nblock textually preceding that "global" statement.\n\nNames listed in a "global" statement must not be defined as formal\nparameters or in a "for" loop control target, "class" definition,\nfunction definition, or "import" statement.\n\n**CPython implementation detail:** The current implementation does not\nenforce the latter two restrictions, but programs should not abuse\nthis freedom, as future implementations may enforce them or silently\nchange the meaning of the program.\n\n**Programmer\'s note:** the "global" is a directive to the parser.  It\napplies only to code parsed at the same time as the "global"\nstatement. In particular, a "global" statement contained in an "exec"\nstatement does not affect the code block *containing* the "exec"\nstatement, and code contained in an "exec" statement is unaffected by\n"global" statements in the code containing the "exec" statement.  The\nsame applies to the "eval()", "execfile()" and "compile()" functions.\n',
- 'id-classes': u'\nReserved classes of identifiers\n*******************************\n\nCertain classes of identifiers (besides keywords) have special\nmeanings.  These classes are identified by the patterns of leading and\ntrailing underscore characters:\n\n"_*"\n   Not imported by "from module import *".  The special identifier "_"\n   is used in the interactive interpreter to store the result of the\n   last evaluation; it is stored in the "__builtin__" module.  When\n   not in interactive mode, "_" has no special meaning and is not\n   defined. See section The import statement.\n\n   Note: The name "_" is often used in conjunction with\n     internationalization; refer to the documentation for the\n     "gettext" module for more information on this convention.\n\n"__*__"\n   System-defined names. These names are defined by the interpreter\n   and its implementation (including the standard library).  Current\n   system names are discussed in the Special method names section and\n   elsewhere.  More will likely be defined in future versions of\n   Python.  *Any* use of "__*__" names, in any context, that does not\n   follow explicitly documented use, is subject to breakage without\n   warning.\n\n"__*"\n   Class-private names.  Names in this category, when used within the\n   context of a class definition, are re-written to use a mangled form\n   to help avoid name clashes between "private" attributes of base and\n   derived classes. See section Identifiers (Names).\n',
- 'identifiers': u'\nIdentifiers and keywords\n************************\n\nIdentifiers (also referred to as *names*) are described by the\nfollowing lexical definitions:\n\n   identifier ::= (letter|"_") (letter | digit | "_")*\n   letter     ::= lowercase | uppercase\n   lowercase  ::= "a"..."z"\n   uppercase  ::= "A"..."Z"\n   digit      ::= "0"..."9"\n\nIdentifiers are unlimited in length.  Case is significant.\n\n\nKeywords\n========\n\nThe following identifiers are used as reserved words, or *keywords* of\nthe language, and cannot be used as ordinary identifiers.  They must\nbe spelled exactly as written here:\n\n   and       del       from      not       while\n   as        elif      global    or        with\n   assert    else      if        pass      yield\n   break     except    import    print\n   class     exec      in        raise\n   continue  finally   is        return\n   def       for       lambda    try\n\nChanged in version 2.4: "None" became a constant and is now recognized\nby the compiler as a name for the built-in object "None".  Although it\nis not a keyword, you cannot assign a different object to it.\n\nChanged in version 2.5: Using "as" and "with" as identifiers triggers\na warning.  To use them as keywords, enable the "with_statement"\nfuture feature .\n\nChanged in version 2.6: "as" and "with" are full keywords.\n\n\nReserved classes of identifiers\n===============================\n\nCertain classes of identifiers (besides keywords) have special\nmeanings.  These classes are identified by the patterns of leading and\ntrailing underscore characters:\n\n"_*"\n   Not imported by "from module import *".  The special identifier "_"\n   is used in the interactive interpreter to store the result of the\n   last evaluation; it is stored in the "__builtin__" module.  When\n   not in interactive mode, "_" has no special meaning and is not\n   defined. See section The import statement.\n\n   Note: The name "_" is often used in conjunction with\n     internationalization; refer to the documentation for the\n     "gettext" module for more information on this convention.\n\n"__*__"\n   System-defined names. These names are defined by the interpreter\n   and its implementation (including the standard library).  Current\n   system names are discussed in the Special method names section and\n   elsewhere.  More will likely be defined in future versions of\n   Python.  *Any* use of "__*__" names, in any context, that does not\n   follow explicitly documented use, is subject to breakage without\n   warning.\n\n"__*"\n   Class-private names.  Names in this category, when used within the\n   context of a class definition, are re-written to use a mangled form\n   to help avoid name clashes between "private" attributes of base and\n   derived classes. See section Identifiers (Names).\n',
- 'if': u'\nThe "if" statement\n******************\n\nThe "if" statement is used for conditional execution:\n\n   if_stmt ::= "if" expression ":" suite\n               ( "elif" expression ":" suite )*\n               ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section Boolean operations\nfor the definition of true and false); then that suite is executed\n(and no other part of the "if" statement is executed or evaluated).\nIf all expressions are false, the suite of the "else" clause, if\npresent, is executed.\n',
- 'imaginary': u'\nImaginary literals\n******************\n\nImaginary literals are described by the following lexical definitions:\n\n   imagnumber ::= (floatnumber | intpart) ("j" | "J")\n\nAn imaginary literal yields a complex number with a real part of 0.0.\nComplex numbers are represented as a pair of floating point numbers\nand have the same restrictions on their range.  To create a complex\nnumber with a nonzero real part, add a floating point number to it,\ne.g., "(3+4j)".  Some examples of imaginary literals:\n\n   3.14j   10.j    10j     .001j   1e100j  3.14e-10j\n',
- 'import': u'\nThe "import" statement\n**********************\n\n   import_stmt     ::= "import" module ["as" name] ( "," module ["as" name] )*\n                   | "from" relative_module "import" identifier ["as" name]\n                   ( "," identifier ["as" name] )*\n                   | "from" relative_module "import" "(" identifier ["as" name]\n                   ( "," identifier ["as" name] )* [","] ")"\n                   | "from" module "import" "*"\n   module          ::= (identifier ".")* identifier\n   relative_module ::= "."* module | "."+\n   name            ::= identifier\n\nImport statements are executed in two steps: (1) find a module, and\ninitialize it if necessary; (2) define a name or names in the local\nnamespace (of the scope where the "import" statement occurs). The\nstatement comes in two forms differing on whether it uses the "from"\nkeyword. The first form (without "from") repeats these steps for each\nidentifier in the list. The form with "from" performs step (1) once,\nand then performs step (2) repeatedly.\n\nTo understand how step (1) occurs, one must first understand how\nPython handles hierarchical naming of modules. To help organize\nmodules and provide a hierarchy in naming, Python has a concept of\npackages. A package can contain other packages and modules while\nmodules cannot contain other modules or packages. From a file system\nperspective, packages are directories and modules are files.\n\nOnce the name of the module is known (unless otherwise specified, the\nterm "module" will refer to both packages and modules), searching for\nthe module or package can begin. The first place checked is\n"sys.modules", the cache of all modules that have been imported\npreviously. If the module is found there then it is used in step (2)\nof import.\n\nIf the module is not found in the cache, then "sys.meta_path" is\nsearched (the specification for "sys.meta_path" can be found in **PEP\n302**). The object is a list of *finder* objects which are queried in\norder as to whether they know how to load the module by calling their\n"find_module()" method with the name of the module. If the module\nhappens to be contained within a package (as denoted by the existence\nof a dot in the name), then a second argument to "find_module()" is\ngiven as the value of the "__path__" attribute from the parent package\n(everything up to the last dot in the name of the module being\nimported). If a finder can find the module it returns a *loader*\n(discussed later) or returns "None".\n\nIf none of the finders on "sys.meta_path" are able to find the module\nthen some implicitly defined finders are queried. Implementations of\nPython vary in what implicit meta path finders are defined. The one\nthey all do define, though, is one that handles "sys.path_hooks",\n"sys.path_importer_cache", and "sys.path".\n\nThe implicit finder searches for the requested module in the "paths"\nspecified in one of two places ("paths" do not have to be file system\npaths). If the module being imported is supposed to be contained\nwithin a package then the second argument passed to "find_module()",\n"__path__" on the parent package, is used as the source of paths. If\nthe module is not contained in a package then "sys.path" is used as\nthe source of paths.\n\nOnce the source of paths is chosen it is iterated over to find a\nfinder that can handle that path. The dict at\n"sys.path_importer_cache" caches finders for paths and is checked for\na finder. If the path does not have a finder cached then\n"sys.path_hooks" is searched by calling each object in the list with a\nsingle argument of the path, returning a finder or raises\n"ImportError". If a finder is returned then it is cached in\n"sys.path_importer_cache" and then used for that path entry. If no\nfinder can be found but the path exists then a value of "None" is\nstored in "sys.path_importer_cache" to signify that an implicit, file-\nbased finder that handles modules stored as individual files should be\nused for that path. If the path does not exist then a finder which\nalways returns "None" is placed in the cache for the path.\n\nIf no finder can find the module then "ImportError" is raised.\nOtherwise some finder returned a loader whose "load_module()" method\nis called with the name of the module to load (see **PEP 302** for the\noriginal definition of loaders). A loader has several responsibilities\nto perform on a module it loads. First, if the module already exists\nin "sys.modules" (a possibility if the loader is called outside of the\nimport machinery) then it is to use that module for initialization and\nnot a new module. But if the module does not exist in "sys.modules"\nthen it is to be added to that dict before initialization begins. If\nan error occurs during loading of the module and it was added to\n"sys.modules" it is to be removed from the dict. If an error occurs\nbut the module was already in "sys.modules" it is left in the dict.\n\nThe loader must set several attributes on the module. "__name__" is to\nbe set to the name of the module. "__file__" is to be the "path" to\nthe file unless the module is built-in (and thus listed in\n"sys.builtin_module_names") in which case the attribute is not set. If\nwhat is being imported is a package then "__path__" is to be set to a\nlist of paths to be searched when looking for modules and packages\ncontained within the package being imported. "__package__" is optional\nbut should be set to the name of package that contains the module or\npackage (the empty string is used for module not contained in a\npackage). "__loader__" is also optional but should be set to the\nloader object that is loading the module.\n\nIf an error occurs during loading then the loader raises "ImportError"\nif some other exception is not already being propagated. Otherwise the\nloader returns the module that was loaded and initialized.\n\nWhen step (1) finishes without raising an exception, step (2) can\nbegin.\n\nThe first form of "import" statement binds the module name in the\nlocal namespace to the module object, and then goes on to import the\nnext identifier, if any.  If the module name is followed by "as", the\nname following "as" is used as the local name for the module.\n\nThe "from" form does not bind the module name: it goes through the\nlist of identifiers, looks each one of them up in the module found in\nstep (1), and binds the name in the local namespace to the object thus\nfound.  As with the first form of "import", an alternate local name\ncan be supplied by specifying ""as" localname".  If a name is not\nfound, "ImportError" is raised.  If the list of identifiers is\nreplaced by a star ("\'*\'"), all public names defined in the module are\nbound in the local namespace of the "import" statement..\n\nThe *public names* defined by a module are determined by checking the\nmodule\'s namespace for a variable named "__all__"; if defined, it must\nbe a sequence of strings which are names defined or imported by that\nmodule.  The names given in "__all__" are all considered public and\nare required to exist.  If "__all__" is not defined, the set of public\nnames includes all names found in the module\'s namespace which do not\nbegin with an underscore character ("\'_\'"). "__all__" should contain\nthe entire public API. It is intended to avoid accidentally exporting\nitems that are not part of the API (such as library modules which were\nimported and used within the module).\n\nThe "from" form with "*" may only occur in a module scope.  If the\nwild card form of import --- "import *" --- is used in a function and\nthe function contains or is a nested block with free variables, the\ncompiler will raise a "SyntaxError".\n\nWhen specifying what module to import you do not have to specify the\nabsolute name of the module. When a module or package is contained\nwithin another package it is possible to make a relative import within\nthe same top package without having to mention the package name. By\nusing leading dots in the specified module or package after "from" you\ncan specify how high to traverse up the current package hierarchy\nwithout specifying exact names. One leading dot means the current\npackage where the module making the import exists. Two dots means up\none package level. Three dots is up two levels, etc. So if you execute\n"from . import mod" from a module in the "pkg" package then you will\nend up importing "pkg.mod". If you execute "from ..subpkg2 import mod"\nfrom within "pkg.subpkg1" you will import "pkg.subpkg2.mod". The\nspecification for relative imports is contained within **PEP 328**.\n\n"importlib.import_module()" is provided to support applications that\ndetermine which modules need to be loaded dynamically.\n\n\nFuture statements\n=================\n\nA *future statement* is a directive to the compiler that a particular\nmodule should be compiled using syntax or semantics that will be\navailable in a specified future release of Python.  The future\nstatement is intended to ease migration to future versions of Python\nthat introduce incompatible changes to the language.  It allows use of\nthe new features on a per-module basis before the release in which the\nfeature becomes standard.\n\n   future_statement ::= "from" "__future__" "import" feature ["as" name]\n                        ("," feature ["as" name])*\n                        | "from" "__future__" "import" "(" feature ["as" name]\n                        ("," feature ["as" name])* [","] ")"\n   feature          ::= identifier\n   name             ::= identifier\n\nA future statement must appear near the top of the module.  The only\nlines that can appear before a future statement are:\n\n* the module docstring (if any),\n\n* comments,\n\n* blank lines, and\n\n* other future statements.\n\nThe features recognized by Python 2.6 are "unicode_literals",\n"print_function", "absolute_import", "division", "generators",\n"nested_scopes" and "with_statement".  "generators", "with_statement",\n"nested_scopes" are redundant in Python version 2.6 and above because\nthey are always enabled.\n\nA future statement is recognized and treated specially at compile\ntime: Changes to the semantics of core constructs are often\nimplemented by generating different code.  It may even be the case\nthat a new feature introduces new incompatible syntax (such as a new\nreserved word), in which case the compiler may need to parse the\nmodule differently.  Such decisions cannot be pushed off until\nruntime.\n\nFor any given release, the compiler knows which feature names have\nbeen defined, and raises a compile-time error if a future statement\ncontains a feature not known to it.\n\nThe direct runtime semantics are the same as for any import statement:\nthere is a standard module "__future__", described later, and it will\nbe imported in the usual way at the time the future statement is\nexecuted.\n\nThe interesting runtime semantics depend on the specific feature\nenabled by the future statement.\n\nNote that there is nothing special about the statement:\n\n   import __future__ [as name]\n\nThat is not a future statement; it\'s an ordinary import statement with\nno special semantics or syntax restrictions.\n\nCode compiled by an "exec" statement or calls to the built-in\nfunctions "compile()" and "execfile()" that occur in a module "M"\ncontaining a future statement will, by default, use the new  syntax or\nsemantics associated with the future statement.  This can, starting\nwith Python 2.2 be controlled by optional arguments to "compile()" ---\nsee the documentation of that function for details.\n\nA future statement typed at an interactive interpreter prompt will\ntake effect for the rest of the interpreter session.  If an\ninterpreter is started with the "-i" option, is passed a script name\nto execute, and the script includes a future statement, it will be in\neffect in the interactive session started after the script is\nexecuted.\n\nSee also:\n\n  **PEP 236** - Back to the __future__\n     The original proposal for the __future__ mechanism.\n',
- 'in': u'\nComparisons\n***********\n\nUnlike C, all comparison operations in Python have the same priority,\nwhich is lower than that of any arithmetic, shifting or bitwise\noperation.  Also unlike C, expressions like "a < b < c" have the\ninterpretation that is conventional in mathematics:\n\n   comparison    ::= or_expr ( comp_operator or_expr )*\n   comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "<>" | "!="\n                     | "is" ["not"] | ["not"] "in"\n\nComparisons yield boolean values: "True" or "False".\n\nComparisons can be chained arbitrarily, e.g., "x < y <= z" is\nequivalent to "x < y and y <= z", except that "y" is evaluated only\nonce (but in both cases "z" is not evaluated at all when "x < y" is\nfound to be false).\n\nFormally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*,\n*op2*, ..., *opN* are comparison operators, then "a op1 b op2 c ... y\nopN z" is equivalent to "a op1 b and b op2 c and ... y opN z", except\nthat each expression is evaluated at most once.\n\nNote that "a op1 b op2 c" doesn\'t imply any kind of comparison between\n*a* and *c*, so that, e.g., "x < y > z" is perfectly legal (though\nperhaps not pretty).\n\nThe forms "<>" and "!=" are equivalent; for consistency with C, "!="\nis preferred; where "!=" is mentioned below "<>" is also accepted.\nThe "<>" spelling is considered obsolescent.\n\nThe operators "<", ">", "==", ">=", "<=", and "!=" compare the values\nof two objects.  The objects need not have the same type. If both are\nnumbers, they are converted to a common type.  Otherwise, objects of\ndifferent types *always* compare unequal, and are ordered consistently\nbut arbitrarily. You can control comparison behavior of objects of\nnon-built-in types by defining a "__cmp__" method or rich comparison\nmethods like "__gt__", described in section Special method names.\n\n(This unusual definition of comparison was used to simplify the\ndefinition of operations like sorting and the "in" and "not in"\noperators. In the future, the comparison rules for objects of\ndifferent types are likely to change.)\n\nComparison of objects of the same type depends on the type:\n\n* Numbers are compared arithmetically.\n\n* Strings are compared lexicographically using the numeric\n  equivalents (the result of the built-in function "ord()") of their\n  characters. Unicode and 8-bit strings are fully interoperable in\n  this behavior. [4]\n\n* Tuples and lists are compared lexicographically using comparison\n  of corresponding elements.  This means that to compare equal, each\n  element must compare equal and the two sequences must be of the same\n  type and have the same length.\n\n  If not equal, the sequences are ordered the same as their first\n  differing elements.  For example, "cmp([1,2,x], [1,2,y])" returns\n  the same as "cmp(x,y)".  If the corresponding element does not\n  exist, the shorter sequence is ordered first (for example, "[1,2] <\n  [1,2,3]").\n\n* Mappings (dictionaries) compare equal if and only if their sorted\n  (key, value) lists compare equal. [5] Outcomes other than equality\n  are resolved consistently, but are not otherwise defined. [6]\n\n* Most other objects of built-in types compare unequal unless they\n  are the same object; the choice whether one object is considered\n  smaller or larger than another one is made arbitrarily but\n  consistently within one execution of a program.\n\nThe operators "in" and "not in" test for collection membership.  "x in\ns" evaluates to true if *x* is a member of the collection *s*, and\nfalse otherwise.  "x not in s" returns the negation of "x in s". The\ncollection membership test has traditionally been bound to sequences;\nan object is a member of a collection if the collection is a sequence\nand contains an element equal to that object.  However, it make sense\nfor many other object types to support membership tests without being\na sequence.  In particular, dictionaries (for keys) and sets support\nmembership testing.\n\nFor the list and tuple types, "x in y" is true if and only if there\nexists an index *i* such that either "x is y[i]" or "x == y[i]" is\ntrue.\n\nFor the Unicode and string types, "x in y" is true if and only if *x*\nis a substring of *y*.  An equivalent test is "y.find(x) != -1".\nNote, *x* and *y* need not be the same type; consequently, "u\'ab\' in\n\'abc\'" will return "True". Empty strings are always considered to be a\nsubstring of any other string, so """ in "abc"" will return "True".\n\nChanged in version 2.3: Previously, *x* was required to be a string of\nlength "1".\n\nFor user-defined classes which define the "__contains__()" method, "x\nin y" is true if and only if "y.__contains__(x)" is true.\n\nFor user-defined classes which do not define "__contains__()" but do\ndefine "__iter__()", "x in y" is true if some value "z" with "x == z"\nis produced while iterating over "y".  If an exception is raised\nduring the iteration, it is as if "in" raised that exception.\n\nLastly, the old-style iteration protocol is tried: if a class defines\n"__getitem__()", "x in y" is true if and only if there is a non-\nnegative integer index *i* such that "x == y[i]", and all lower\ninteger indices do not raise "IndexError" exception. (If any other\nexception is raised, it is as if "in" raised that exception).\n\nThe operator "not in" is defined to have the inverse true value of\n"in".\n\nThe operators "is" and "is not" test for object identity: "x is y" is\ntrue if and only if *x* and *y* are the same object.  "x is not y"\nyields the inverse truth value. [7]\n',
- 'integers': u'\nInteger and long integer literals\n*********************************\n\nInteger and long integer literals are described by the following\nlexical definitions:\n\n   longinteger    ::= integer ("l" | "L")\n   integer        ::= decimalinteger | octinteger | hexinteger | bininteger\n   decimalinteger ::= nonzerodigit digit* | "0"\n   octinteger     ::= "0" ("o" | "O") octdigit+ | "0" octdigit+\n   hexinteger     ::= "0" ("x" | "X") hexdigit+\n   bininteger     ::= "0" ("b" | "B") bindigit+\n   nonzerodigit   ::= "1"..."9"\n   octdigit       ::= "0"..."7"\n   bindigit       ::= "0" | "1"\n   hexdigit       ::= digit | "a"..."f" | "A"..."F"\n\nAlthough both lower case "\'l\'" and upper case "\'L\'" are allowed as\nsuffix for long integers, it is strongly recommended to always use\n"\'L\'", since the letter "\'l\'" looks too much like the digit "\'1\'".\n\nPlain integer literals that are above the largest representable plain\ninteger (e.g., 2147483647 when using 32-bit arithmetic) are accepted\nas if they were long integers instead. [1]  There is no limit for long\ninteger literals apart from what can be stored in available memory.\n\nSome examples of plain integer literals (first row) and long integer\nliterals (second and third rows):\n\n   7     2147483647                        0177\n   3L    79228162514264337593543950336L    0377L   0x100000000L\n         79228162514264337593543950336             0xdeadbeef\n',
- 'lambda': u'\nLambdas\n*******\n\n   lambda_expr     ::= "lambda" [parameter_list]: expression\n   old_lambda_expr ::= "lambda" [parameter_list]: old_expression\n\nLambda expressions (sometimes called lambda forms) have the same\nsyntactic position as expressions.  They are a shorthand to create\nanonymous functions; the expression "lambda arguments: expression"\nyields a function object.  The unnamed object behaves like a function\nobject defined with\n\n   def name(arguments):\n       return expression\n\nSee section Function definitions for the syntax of parameter lists.\nNote that functions created with lambda expressions cannot contain\nstatements.\n',
- 'lists': u'\nList displays\n*************\n\nA list display is a possibly empty series of expressions enclosed in\nsquare brackets:\n\n   list_display        ::= "[" [expression_list | list_comprehension] "]"\n   list_comprehension  ::= expression list_for\n   list_for            ::= "for" target_list "in" old_expression_list [list_iter]\n   old_expression_list ::= old_expression [("," old_expression)+ [","]]\n   old_expression      ::= or_test | old_lambda_expr\n   list_iter           ::= list_for | list_if\n   list_if             ::= "if" old_expression [list_iter]\n\nA list display yields a new list object.  Its contents are specified\nby providing either a list of expressions or a list comprehension.\nWhen a comma-separated list of expressions is supplied, its elements\nare evaluated from left to right and placed into the list object in\nthat order.  When a list comprehension is supplied, it consists of a\nsingle expression followed by at least one "for" clause and zero or\nmore "for" or "if" clauses.  In this case, the elements of the new\nlist are those that would be produced by considering each of the "for"\nor "if" clauses a block, nesting from left to right, and evaluating\nthe expression to produce a list element each time the innermost block\nis reached [1].\n',
- 'naming': u'\nNaming and binding\n******************\n\n*Names* refer to objects.  Names are introduced by name binding\noperations. Each occurrence of a name in the program text refers to\nthe *binding* of that name established in the innermost function block\ncontaining the use.\n\nA *block* is a piece of Python program text that is executed as a\nunit. The following are blocks: a module, a function body, and a class\ndefinition. Each command typed interactively is a block.  A script\nfile (a file given as standard input to the interpreter or specified\non the interpreter command line the first argument) is a code block.\nA script command (a command specified on the interpreter command line\nwith the \'**-c**\' option) is a code block.  The file read by the\nbuilt-in function "execfile()" is a code block.  The string argument\npassed to the built-in function "eval()" and to the "exec" statement\nis a code block. The expression read and evaluated by the built-in\nfunction "input()" is a code block.\n\nA code block is executed in an *execution frame*.  A frame contains\nsome administrative information (used for debugging) and determines\nwhere and how execution continues after the code block\'s execution has\ncompleted.\n\nA *scope* defines the visibility of a name within a block.  If a local\nvariable is defined in a block, its scope includes that block.  If the\ndefinition occurs in a function block, the scope extends to any blocks\ncontained within the defining one, unless a contained block introduces\na different binding for the name.  The scope of names defined in a\nclass block is limited to the class block; it does not extend to the\ncode blocks of methods -- this includes generator expressions since\nthey are implemented using a function scope.  This means that the\nfollowing will fail:\n\n   class A:\n       a = 42\n       b = list(a + i for i in range(10))\n\nWhen a name is used in a code block, it is resolved using the nearest\nenclosing scope.  The set of all such scopes visible to a code block\nis called the block\'s *environment*.\n\nIf a name is bound in a block, it is a local variable of that block.\nIf a name is bound at the module level, it is a global variable.  (The\nvariables of the module code block are local and global.)  If a\nvariable is used in a code block but not defined there, it is a *free\nvariable*.\n\nWhen a name is not found at all, a "NameError" exception is raised.\nIf the name refers to a local variable that has not been bound, a\n"UnboundLocalError" exception is raised.  "UnboundLocalError" is a\nsubclass of "NameError".\n\nThe following constructs bind names: formal parameters to functions,\n"import" statements, class and function definitions (these bind the\nclass or function name in the defining block), and targets that are\nidentifiers if occurring in an assignment, "for" loop header, in the\nsecond position of an "except" clause header or after "as" in a "with"\nstatement.  The "import" statement of the form "from ... import *"\nbinds all names defined in the imported module, except those beginning\nwith an underscore.  This form may only be used at the module level.\n\nA target occurring in a "del" statement is also considered bound for\nthis purpose (though the actual semantics are to unbind the name).  It\nis illegal to unbind a name that is referenced by an enclosing scope;\nthe compiler will report a "SyntaxError".\n\nEach assignment or import statement occurs within a block defined by a\nclass or function definition or at the module level (the top-level\ncode block).\n\nIf a name binding operation occurs anywhere within a code block, all\nuses of the name within the block are treated as references to the\ncurrent block.  This can lead to errors when a name is used within a\nblock before it is bound. This rule is subtle.  Python lacks\ndeclarations and allows name binding operations to occur anywhere\nwithin a code block.  The local variables of a code block can be\ndetermined by scanning the entire text of the block for name binding\noperations.\n\nIf the global statement occurs within a block, all uses of the name\nspecified in the statement refer to the binding of that name in the\ntop-level namespace. Names are resolved in the top-level namespace by\nsearching the global namespace, i.e. the namespace of the module\ncontaining the code block, and the builtins namespace, the namespace\nof the module "__builtin__".  The global namespace is searched first.\nIf the name is not found there, the builtins namespace is searched.\nThe global statement must precede all uses of the name.\n\nThe builtins namespace associated with the execution of a code block\nis actually found by looking up the name "__builtins__" in its global\nnamespace; this should be a dictionary or a module (in the latter case\nthe module\'s dictionary is used).  By default, when in the "__main__"\nmodule, "__builtins__" is the built-in module "__builtin__" (note: no\n\'s\'); when in any other module, "__builtins__" is an alias for the\ndictionary of the "__builtin__" module itself.  "__builtins__" can be\nset to a user-created dictionary to create a weak form of restricted\nexecution.\n\n**CPython implementation detail:** Users should not touch\n"__builtins__"; it is strictly an implementation detail.  Users\nwanting to override values in the builtins namespace should "import"\nthe "__builtin__" (no \'s\') module and modify its attributes\nappropriately.\n\nThe namespace for a module is automatically created the first time a\nmodule is imported.  The main module for a script is always called\n"__main__".\n\nThe "global" statement has the same scope as a name binding operation\nin the same block.  If the nearest enclosing scope for a free variable\ncontains a global statement, the free variable is treated as a global.\n\nA class definition is an executable statement that may use and define\nnames. These references follow the normal rules for name resolution.\nThe namespace of the class definition becomes the attribute dictionary\nof the class.  Names defined at the class scope are not visible in\nmethods.\n\n\nInteraction with dynamic features\n=================================\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name.  An error will be reported at compile time.\n\nIf the wild card form of import --- "import *" --- is used in a\nfunction and the function contains or is a nested block with free\nvariables, the compiler will raise a "SyntaxError".\n\nIf "exec" is used in a function and the function contains or is a\nnested block with free variables, the compiler will raise a\n"SyntaxError" unless the exec explicitly specifies the local namespace\nfor the "exec".  (In other words, "exec obj" would be illegal, but\n"exec obj in ns" would be legal.)\n\nThe "eval()", "execfile()", and "input()" functions and the "exec"\nstatement do not have access to the full environment for resolving\nnames.  Names may be resolved in the local and global namespaces of\nthe caller.  Free variables are not resolved in the nearest enclosing\nnamespace, but in the global namespace. [1] The "exec" statement and\nthe "eval()" and "execfile()" functions have optional arguments to\noverride the global and local namespace.  If only one namespace is\nspecified, it is used for both.\n',
- 'numbers': u'\nNumeric literals\n****************\n\nThere are four types of numeric literals: plain integers, long\nintegers, floating point numbers, and imaginary numbers.  There are no\ncomplex literals (complex numbers can be formed by adding a real\nnumber and an imaginary number).\n\nNote that numeric literals do not include a sign; a phrase like "-1"\nis actually an expression composed of the unary operator \'"-"\' and the\nliteral "1".\n',
- 'numeric-types': u'\nEmulating numeric types\n***********************\n\nThe following methods can be defined to emulate numeric objects.\nMethods corresponding to operations that are not supported by the\nparticular kind of number implemented (e.g., bitwise operations for\nnon-integral numbers) should be left undefined.\n\nobject.__add__(self, other)\nobject.__sub__(self, other)\nobject.__mul__(self, other)\nobject.__floordiv__(self, other)\nobject.__mod__(self, other)\nobject.__divmod__(self, other)\nobject.__pow__(self, other[, modulo])\nobject.__lshift__(self, other)\nobject.__rshift__(self, other)\nobject.__and__(self, other)\nobject.__xor__(self, other)\nobject.__or__(self, other)\n\n   These methods are called to implement the binary arithmetic\n   operations ("+", "-", "*", "//", "%", "divmod()", "pow()", "**",\n   "<<", ">>", "&", "^", "|").  For instance, to evaluate the\n   expression "x + y", where *x* is an instance of a class that has an\n   "__add__()" method, "x.__add__(y)" is called.  The "__divmod__()"\n   method should be the equivalent to using "__floordiv__()" and\n   "__mod__()"; it should not be related to "__truediv__()" (described\n   below).  Note that "__pow__()" should be defined to accept an\n   optional third argument if the ternary version of the built-in\n   "pow()" function is to be supported.\n\n   If one of those methods does not support the operation with the\n   supplied arguments, it should return "NotImplemented".\n\nobject.__div__(self, other)\nobject.__truediv__(self, other)\n\n   The division operator ("/") is implemented by these methods.  The\n   "__truediv__()" method is used when "__future__.division" is in\n   effect, otherwise "__div__()" is used.  If only one of these two\n   methods is defined, the object will not support division in the\n   alternate context; "TypeError" will be raised instead.\n\nobject.__radd__(self, other)\nobject.__rsub__(self, other)\nobject.__rmul__(self, other)\nobject.__rdiv__(self, other)\nobject.__rtruediv__(self, other)\nobject.__rfloordiv__(self, other)\nobject.__rmod__(self, other)\nobject.__rdivmod__(self, other)\nobject.__rpow__(self, other)\nobject.__rlshift__(self, other)\nobject.__rrshift__(self, other)\nobject.__rand__(self, other)\nobject.__rxor__(self, other)\nobject.__ror__(self, other)\n\n   These methods are called to implement the binary arithmetic\n   operations ("+", "-", "*", "/", "%", "divmod()", "pow()", "**",\n   "<<", ">>", "&", "^", "|") with reflected (swapped) operands.\n   These functions are only called if the left operand does not\n   support the corresponding operation and the operands are of\n   different types. [2] For instance, to evaluate the expression "x -\n   y", where *y* is an instance of a class that has an "__rsub__()"\n   method, "y.__rsub__(x)" is called if "x.__sub__(y)" returns\n   *NotImplemented*.\n\n   Note that ternary "pow()" will not try calling "__rpow__()" (the\n   coercion rules would become too complicated).\n\n   Note: If the right operand\'s type is a subclass of the left\n     operand\'s type and that subclass provides the reflected method\n     for the operation, this method will be called before the left\n     operand\'s non-reflected method.  This behavior allows subclasses\n     to override their ancestors\' operations.\n\nobject.__iadd__(self, other)\nobject.__isub__(self, other)\nobject.__imul__(self, other)\nobject.__idiv__(self, other)\nobject.__itruediv__(self, other)\nobject.__ifloordiv__(self, other)\nobject.__imod__(self, other)\nobject.__ipow__(self, other[, modulo])\nobject.__ilshift__(self, other)\nobject.__irshift__(self, other)\nobject.__iand__(self, other)\nobject.__ixor__(self, other)\nobject.__ior__(self, other)\n\n   These methods are called to implement the augmented arithmetic\n   assignments ("+=", "-=", "*=", "/=", "//=", "%=", "**=", "<<=",\n   ">>=", "&=", "^=", "|=").  These methods should attempt to do the\n   operation in-place (modifying *self*) and return the result (which\n   could be, but does not have to be, *self*).  If a specific method\n   is not defined, the augmented assignment falls back to the normal\n   methods.  For instance, to execute the statement "x += y", where\n   *x* is an instance of a class that has an "__iadd__()" method,\n   "x.__iadd__(y)" is called.  If *x* is an instance of a class that\n   does not define a "__iadd__()" method, "x.__add__(y)" and\n   "y.__radd__(x)" are considered, as with the evaluation of "x + y".\n\nobject.__neg__(self)\nobject.__pos__(self)\nobject.__abs__(self)\nobject.__invert__(self)\n\n   Called to implement the unary arithmetic operations ("-", "+",\n   "abs()" and "~").\n\nobject.__complex__(self)\nobject.__int__(self)\nobject.__long__(self)\nobject.__float__(self)\n\n   Called to implement the built-in functions "complex()", "int()",\n   "long()", and "float()".  Should return a value of the appropriate\n   type.\n\nobject.__oct__(self)\nobject.__hex__(self)\n\n   Called to implement the built-in functions "oct()" and "hex()".\n   Should return a string value.\n\nobject.__index__(self)\n\n   Called to implement "operator.index()".  Also called whenever\n   Python needs an integer object (such as in slicing).  Must return\n   an integer (int or long).\n\n   New in version 2.5.\n\nobject.__coerce__(self, other)\n\n   Called to implement "mixed-mode" numeric arithmetic.  Should either\n   return a 2-tuple containing *self* and *other* converted to a\n   common numeric type, or "None" if conversion is impossible.  When\n   the common type would be the type of "other", it is sufficient to\n   return "None", since the interpreter will also ask the other object\n   to attempt a coercion (but sometimes, if the implementation of the\n   other type cannot be changed, it is useful to do the conversion to\n   the other type here).  A return value of "NotImplemented" is\n   equivalent to returning "None".\n',
- 'objects': u'\nObjects, values and types\n*************************\n\n*Objects* are Python\'s abstraction for data.  All data in a Python\nprogram is represented by objects or by relations between objects. (In\na sense, and in conformance to Von Neumann\'s model of a "stored\nprogram computer," code is also represented by objects.)\n\nEvery object has an identity, a type and a value.  An object\'s\n*identity* never changes once it has been created; you may think of it\nas the object\'s address in memory.  The \'"is"\' operator compares the\nidentity of two objects; the "id()" function returns an integer\nrepresenting its identity (currently implemented as its address). An\nobject\'s *type* is also unchangeable. [1] An object\'s type determines\nthe operations that the object supports (e.g., "does it have a\nlength?") and also defines the possible values for objects of that\ntype.  The "type()" function returns an object\'s type (which is an\nobject itself).  The *value* of some objects can change.  Objects\nwhose value can change are said to be *mutable*; objects whose value\nis unchangeable once they are created are called *immutable*. (The\nvalue of an immutable container object that contains a reference to a\nmutable object can change when the latter\'s value is changed; however\nthe container is still considered immutable, because the collection of\nobjects it contains cannot be changed.  So, immutability is not\nstrictly the same as having an unchangeable value, it is more subtle.)\nAn object\'s mutability is determined by its type; for instance,\nnumbers, strings and tuples are immutable, while dictionaries and\nlists are mutable.\n\nObjects are never explicitly destroyed; however, when they become\nunreachable they may be garbage-collected.  An implementation is\nallowed to postpone garbage collection or omit it altogether --- it is\na matter of implementation quality how garbage collection is\nimplemented, as long as no objects are collected that are still\nreachable.\n\n**CPython implementation detail:** CPython currently uses a reference-\ncounting scheme with (optional) delayed detection of cyclically linked\ngarbage, which collects most objects as soon as they become\nunreachable, but is not guaranteed to collect garbage containing\ncircular references.  See the documentation of the "gc" module for\ninformation on controlling the collection of cyclic garbage. Other\nimplementations act differently and CPython may change. Do not depend\non immediate finalization of objects when they become unreachable (ex:\nalways close files).\n\nNote that the use of the implementation\'s tracing or debugging\nfacilities may keep objects alive that would normally be collectable.\nAlso note that catching an exception with a \'"try"..."except"\'\nstatement may keep objects alive.\n\nSome objects contain references to "external" resources such as open\nfiles or windows.  It is understood that these resources are freed\nwhen the object is garbage-collected, but since garbage collection is\nnot guaranteed to happen, such objects also provide an explicit way to\nrelease the external resource, usually a "close()" method. Programs\nare strongly recommended to explicitly close such objects.  The\n\'"try"..."finally"\' statement provides a convenient way to do this.\n\nSome objects contain references to other objects; these are called\n*containers*. Examples of containers are tuples, lists and\ndictionaries.  The references are part of a container\'s value.  In\nmost cases, when we talk about the value of a container, we imply the\nvalues, not the identities of the contained objects; however, when we\ntalk about the mutability of a container, only the identities of the\nimmediately contained objects are implied.  So, if an immutable\ncontainer (like a tuple) contains a reference to a mutable object, its\nvalue changes if that mutable object is changed.\n\nTypes affect almost all aspects of object behavior.  Even the\nimportance of object identity is affected in some sense: for immutable\ntypes, operations that compute new values may actually return a\nreference to any existing object with the same type and value, while\nfor mutable objects this is not allowed.  E.g., after "a = 1; b = 1",\n"a" and "b" may or may not refer to the same object with the value\none, depending on the implementation, but after "c = []; d = []", "c"\nand "d" are guaranteed to refer to two different, unique, newly\ncreated empty lists. (Note that "c = d = []" assigns the same object\nto both "c" and "d".)\n',
- 'operator-summary': u'\nOperator precedence\n*******************\n\nThe following table summarizes the operator precedences in Python,\nfrom lowest precedence (least binding) to highest precedence (most\nbinding). Operators in the same box have the same precedence.  Unless\nthe syntax is explicitly given, operators are binary.  Operators in\nthe same box group left to right (except for comparisons, including\ntests, which all have the same precedence and chain from left to right\n--- see section Comparisons --- and exponentiation, which groups from\nright to left).\n\n+-------------------------------------------------+---------------------------------------+\n| Operator                                        | Description                           |\n+=================================================+=======================================+\n| "lambda"                                        | Lambda expression                     |\n+-------------------------------------------------+---------------------------------------+\n| "if" -- "else"                                  | Conditional expression                |\n+-------------------------------------------------+---------------------------------------+\n| "or"                                            | Boolean OR                            |\n+-------------------------------------------------+---------------------------------------+\n| "and"                                           | Boolean AND                           |\n+-------------------------------------------------+---------------------------------------+\n| "not" "x"                                       | Boolean NOT                           |\n+-------------------------------------------------+---------------------------------------+\n| "in", "not in", "is", "is not", "<", "<=", ">", | Comparisons, including membership     |\n| ">=", "<>", "!=", "=="                          | tests and identity tests              |\n+-------------------------------------------------+---------------------------------------+\n| "|"                                             | Bitwise OR                            |\n+-------------------------------------------------+---------------------------------------+\n| "^"                                             | Bitwise XOR                           |\n+-------------------------------------------------+---------------------------------------+\n| "&"                                             | Bitwise AND                           |\n+-------------------------------------------------+---------------------------------------+\n| "<<", ">>"                                      | Shifts                                |\n+-------------------------------------------------+---------------------------------------+\n| "+", "-"                                        | Addition and subtraction              |\n+-------------------------------------------------+---------------------------------------+\n| "*", "/", "//", "%"                             | Multiplication, division, remainder   |\n|                                                 | [8]                                   |\n+-------------------------------------------------+---------------------------------------+\n| "+x", "-x", "~x"                                | Positive, negative, bitwise NOT       |\n+-------------------------------------------------+---------------------------------------+\n| "**"                                            | Exponentiation [9]                    |\n+-------------------------------------------------+---------------------------------------+\n| "x[index]", "x[index:index]",                   | Subscription, slicing, call,          |\n| "x(arguments...)", "x.attribute"                | attribute reference                   |\n+-------------------------------------------------+---------------------------------------+\n| "(expressions...)", "[expressions...]", "{key:  | Binding or tuple display, list        |\n| value...}", "`expressions...`"                  | display, dictionary display, string   |\n|                                                 | conversion                            |\n+-------------------------------------------------+---------------------------------------+\n\n-[ Footnotes ]-\n\n[1] In Python 2.3 and later releases, a list comprehension "leaks"\n    the control variables of each "for" it contains into the\n    containing scope.  However, this behavior is deprecated, and\n    relying on it will not work in Python 3.\n\n[2] While "abs(x%y) < abs(y)" is true mathematically, for floats\n    it may not be true numerically due to roundoff.  For example, and\n    assuming a platform on which a Python float is an IEEE 754 double-\n    precision number, in order that "-1e-100 % 1e100" have the same\n    sign as "1e100", the computed result is "-1e-100 + 1e100", which\n    is numerically exactly equal to "1e100".  The function\n    "math.fmod()" returns a result whose sign matches the sign of the\n    first argument instead, and so returns "-1e-100" in this case.\n    Which approach is more appropriate depends on the application.\n\n[3] If x is very close to an exact integer multiple of y, it\'s\n    possible for "floor(x/y)" to be one larger than "(x-x%y)/y" due to\n    rounding.  In such cases, Python returns the latter result, in\n    order to preserve that "divmod(x,y)[0] * y + x % y" be very close\n    to "x".\n\n[4] While comparisons between unicode strings make sense at the\n    byte level, they may be counter-intuitive to users. For example,\n    the strings "u"\\u00C7"" and "u"\\u0043\\u0327"" compare differently,\n    even though they both represent the same unicode character (LATIN\n    CAPITAL LETTER C WITH CEDILLA). To compare strings in a human\n    recognizable way, compare using "unicodedata.normalize()".\n\n[5] The implementation computes this efficiently, without\n    constructing lists or sorting.\n\n[6] Earlier versions of Python used lexicographic comparison of\n    the sorted (key, value) lists, but this was very expensive for the\n    common case of comparing for equality.  An even earlier version of\n    Python compared dictionaries by identity only, but this caused\n    surprises because people expected to be able to test a dictionary\n    for emptiness by comparing it to "{}".\n\n[7] Due to automatic garbage-collection, free lists, and the\n    dynamic nature of descriptors, you may notice seemingly unusual\n    behaviour in certain uses of the "is" operator, like those\n    involving comparisons between instance methods, or constants.\n    Check their documentation for more info.\n\n[8] The "%" operator is also used for string formatting; the same\n    precedence applies.\n\n[9] The power operator "**" binds less tightly than an arithmetic\n    or bitwise unary operator on its right, that is, "2**-1" is "0.5".\n',
- 'pass': u'\nThe "pass" statement\n********************\n\n   pass_stmt ::= "pass"\n\n"pass" is a null operation --- when it is executed, nothing happens.\nIt is useful as a placeholder when a statement is required\nsyntactically, but no code needs to be executed, for example:\n\n   def f(arg): pass    # a function that does nothing (yet)\n\n   class C: pass       # a class with no methods (yet)\n',
- 'power': u'\nThe power operator\n******************\n\nThe power operator binds more tightly than unary operators on its\nleft; it binds less tightly than unary operators on its right.  The\nsyntax is:\n\n   power ::= primary ["**" u_expr]\n\nThus, in an unparenthesized sequence of power and unary operators, the\noperators are evaluated from right to left (this does not constrain\nthe evaluation order for the operands): "-1**2" results in "-1".\n\nThe power operator has the same semantics as the built-in "pow()"\nfunction, when called with two arguments: it yields its left argument\nraised to the power of its right argument.  The numeric arguments are\nfirst converted to a common type.  The result type is that of the\narguments after coercion.\n\nWith mixed operand types, the coercion rules for binary arithmetic\noperators apply. For int and long int operands, the result has the\nsame type as the operands (after coercion) unless the second argument\nis negative; in that case, all arguments are converted to float and a\nfloat result is delivered. For example, "10**2" returns "100", but\n"10**-2" returns "0.01". (This last feature was added in Python 2.2.\nIn Python 2.1 and before, if both arguments were of integer types and\nthe second argument was negative, an exception was raised).\n\nRaising "0.0" to a negative power results in a "ZeroDivisionError".\nRaising a negative number to a fractional power results in a\n"ValueError".\n',
- 'print': u'\nThe "print" statement\n*********************\n\n   print_stmt ::= "print" ([expression ("," expression)* [","]]\n                  | ">>" expression [("," expression)+ [","]])\n\n"print" evaluates each expression in turn and writes the resulting\nobject to standard output (see below).  If an object is not a string,\nit is first converted to a string using the rules for string\nconversions.  The (resulting or original) string is then written.  A\nspace is written before each object is (converted and) written, unless\nthe output system believes it is positioned at the beginning of a\nline.  This is the case (1) when no characters have yet been written\nto standard output, (2) when the last character written to standard\noutput is a whitespace character except "\' \'", or (3) when the last\nwrite operation on standard output was not a "print" statement. (In\nsome cases it may be functional to write an empty string to standard\noutput for this reason.)\n\nNote: Objects which act like file objects but which are not the\n  built-in file objects often do not properly emulate this aspect of\n  the file object\'s behavior, so it is best not to rely on this.\n\nA "\'\\n\'" character is written at the end, unless the "print" statement\nends with a comma.  This is the only action if the statement contains\njust the keyword "print".\n\nStandard output is defined as the file object named "stdout" in the\nbuilt-in module "sys".  If no such object exists, or if it does not\nhave a "write()" method, a "RuntimeError" exception is raised.\n\n"print" also has an extended form, defined by the second portion of\nthe syntax described above. This form is sometimes referred to as\n""print" chevron." In this form, the first expression after the ">>"\nmust evaluate to a "file-like" object, specifically an object that has\na "write()" method as described above.  With this extended form, the\nsubsequent expressions are printed to this file object.  If the first\nexpression evaluates to "None", then "sys.stdout" is used as the file\nfor output.\n',
- 'raise': u'\nThe "raise" statement\n*********************\n\n   raise_stmt ::= "raise" [expression ["," expression ["," expression]]]\n\nIf no expressions are present, "raise" re-raises the last exception\nthat was active in the current scope.  If no exception is active in\nthe current scope, a "TypeError" exception is raised indicating that\nthis is an error (if running under IDLE, a "Queue.Empty" exception is\nraised instead).\n\nOtherwise, "raise" evaluates the expressions to get three objects,\nusing "None" as the value of omitted expressions.  The first two\nobjects are used to determine the *type* and *value* of the exception.\n\nIf the first object is an instance, the type of the exception is the\nclass of the instance, the instance itself is the value, and the\nsecond object must be "None".\n\nIf the first object is a class, it becomes the type of the exception.\nThe second object is used to determine the exception value: If it is\nan instance of the class, the instance becomes the exception value. If\nthe second object is a tuple, it is used as the argument list for the\nclass constructor; if it is "None", an empty argument list is used,\nand any other object is treated as a single argument to the\nconstructor.  The instance so created by calling the constructor is\nused as the exception value.\n\nIf a third object is present and not "None", it must be a traceback\nobject (see section The standard type hierarchy), and it is\nsubstituted instead of the current location as the place where the\nexception occurred.  If the third object is present and not a\ntraceback object or "None", a "TypeError" exception is raised.  The\nthree-expression form of "raise" is useful to re-raise an exception\ntransparently in an except clause, but "raise" with no expressions\nshould be preferred if the exception to be re-raised was the most\nrecently active exception in the current scope.\n\nAdditional information on exceptions can be found in section\nExceptions, and information about handling exceptions is in section\nThe try statement.\n',
- 'return': u'\nThe "return" statement\n**********************\n\n   return_stmt ::= "return" [expression_list]\n\n"return" may only occur syntactically nested in a function definition,\nnot within a nested class definition.\n\nIf an expression list is present, it is evaluated, else "None" is\nsubstituted.\n\n"return" leaves the current function call with the expression list (or\n"None") as return value.\n\nWhen "return" passes control out of a "try" statement with a "finally"\nclause, that "finally" clause is executed before really leaving the\nfunction.\n\nIn a generator function, the "return" statement is not allowed to\ninclude an "expression_list".  In that context, a bare "return"\nindicates that the generator is done and will cause "StopIteration" to\nbe raised.\n',
- 'sequence-types': u'\nEmulating container types\n*************************\n\nThe following methods can be defined to implement container objects.\nContainers usually are sequences (such as lists or tuples) or mappings\n(like dictionaries), but can represent other containers as well.  The\nfirst set of methods is used either to emulate a sequence or to\nemulate a mapping; the difference is that for a sequence, the\nallowable keys should be the integers *k* for which "0 <= k < N" where\n*N* is the length of the sequence, or slice objects, which define a\nrange of items. (For backwards compatibility, the method\n"__getslice__()" (see below) can also be defined to handle simple, but\nnot extended slices.) It is also recommended that mappings provide the\nmethods "keys()", "values()", "items()", "has_key()", "get()",\n"clear()", "setdefault()", "iterkeys()", "itervalues()",\n"iteritems()", "pop()", "popitem()", "copy()", and "update()" behaving\nsimilar to those for Python\'s standard dictionary objects.  The\n"UserDict" module provides a "DictMixin" class to help create those\nmethods from a base set of "__getitem__()", "__setitem__()",\n"__delitem__()", and "keys()". Mutable sequences should provide\nmethods "append()", "count()", "index()", "extend()", "insert()",\n"pop()", "remove()", "reverse()" and "sort()", like Python standard\nlist objects.  Finally, sequence types should implement addition\n(meaning concatenation) and multiplication (meaning repetition) by\ndefining the methods "__add__()", "__radd__()", "__iadd__()",\n"__mul__()", "__rmul__()" and "__imul__()" described below; they\nshould not define "__coerce__()" or other numerical operators.  It is\nrecommended that both mappings and sequences implement the\n"__contains__()" method to allow efficient use of the "in" operator;\nfor mappings, "in" should be equivalent of "has_key()"; for sequences,\nit should search through the values.  It is further recommended that\nboth mappings and sequences implement the "__iter__()" method to allow\nefficient iteration through the container; for mappings, "__iter__()"\nshould be the same as "iterkeys()"; for sequences, it should iterate\nthrough the values.\n\nobject.__len__(self)\n\n   Called to implement the built-in function "len()".  Should return\n   the length of the object, an integer ">=" 0.  Also, an object that\n   doesn\'t define a "__nonzero__()" method and whose "__len__()"\n   method returns zero is considered to be false in a Boolean context.\n\nobject.__getitem__(self, key)\n\n   Called to implement evaluation of "self[key]". For sequence types,\n   the accepted keys should be integers and slice objects.  Note that\n   the special interpretation of negative indexes (if the class wishes\n   to emulate a sequence type) is up to the "__getitem__()" method. If\n   *key* is of an inappropriate type, "TypeError" may be raised; if of\n   a value outside the set of indexes for the sequence (after any\n   special interpretation of negative values), "IndexError" should be\n   raised. For mapping types, if *key* is missing (not in the\n   container), "KeyError" should be raised.\n\n   Note: "for" loops expect that an "IndexError" will be raised for\n     illegal indexes to allow proper detection of the end of the\n     sequence.\n\nobject.__missing__(self, key)\n\n   Called by "dict"."__getitem__()" to implement "self[key]" for dict\n   subclasses when key is not in the dictionary.\n\nobject.__setitem__(self, key, value)\n\n   Called to implement assignment to "self[key]".  Same note as for\n   "__getitem__()".  This should only be implemented for mappings if\n   the objects support changes to the values for keys, or if new keys\n   can be added, or for sequences if elements can be replaced.  The\n   same exceptions should be raised for improper *key* values as for\n   the "__getitem__()" method.\n\nobject.__delitem__(self, key)\n\n   Called to implement deletion of "self[key]".  Same note as for\n   "__getitem__()".  This should only be implemented for mappings if\n   the objects support removal of keys, or for sequences if elements\n   can be removed from the sequence.  The same exceptions should be\n   raised for improper *key* values as for the "__getitem__()" method.\n\nobject.__iter__(self)\n\n   This method is called when an iterator is required for a container.\n   This method should return a new iterator object that can iterate\n   over all the objects in the container.  For mappings, it should\n   iterate over the keys of the container, and should also be made\n   available as the method "iterkeys()".\n\n   Iterator objects also need to implement this method; they are\n   required to return themselves.  For more information on iterator\n   objects, see Iterator Types.\n\nobject.__reversed__(self)\n\n   Called (if present) by the "reversed()" built-in to implement\n   reverse iteration.  It should return a new iterator object that\n   iterates over all the objects in the container in reverse order.\n\n   If the "__reversed__()" method is not provided, the "reversed()"\n   built-in will fall back to using the sequence protocol ("__len__()"\n   and "__getitem__()").  Objects that support the sequence protocol\n   should only provide "__reversed__()" if they can provide an\n   implementation that is more efficient than the one provided by\n   "reversed()".\n\n   New in version 2.6.\n\nThe membership test operators ("in" and "not in") are normally\nimplemented as an iteration through a sequence.  However, container\nobjects can supply the following special method with a more efficient\nimplementation, which also does not require the object be a sequence.\n\nobject.__contains__(self, item)\n\n   Called to implement membership test operators.  Should return true\n   if *item* is in *self*, false otherwise.  For mapping objects, this\n   should consider the keys of the mapping rather than the values or\n   the key-item pairs.\n\n   For objects that don\'t define "__contains__()", the membership test\n   first tries iteration via "__iter__()", then the old sequence\n   iteration protocol via "__getitem__()", see this section in the\n   language reference.\n',
- 'shifting': u'\nShifting operations\n*******************\n\nThe shifting operations have lower priority than the arithmetic\noperations:\n\n   shift_expr ::= a_expr | shift_expr ( "<<" | ">>" ) a_expr\n\nThese operators accept plain or long integers as arguments.  The\narguments are converted to a common type.  They shift the first\nargument to the left or right by the number of bits given by the\nsecond argument.\n\nA right shift by *n* bits is defined as division by "pow(2, n)".  A\nleft shift by *n* bits is defined as multiplication with "pow(2, n)".\nNegative shift counts raise a "ValueError" exception.\n\nNote: In the current implementation, the right-hand operand is\n  required to be at most "sys.maxsize".  If the right-hand operand is\n  larger than "sys.maxsize" an "OverflowError" exception is raised.\n',
- 'slicings': u'\nSlicings\n********\n\nA slicing selects a range of items in a sequence object (e.g., a\nstring, tuple or list).  Slicings may be used as expressions or as\ntargets in assignment or "del" statements.  The syntax for a slicing:\n\n   slicing          ::= simple_slicing | extended_slicing\n   simple_slicing   ::= primary "[" short_slice "]"\n   extended_slicing ::= primary "[" slice_list "]"\n   slice_list       ::= slice_item ("," slice_item)* [","]\n   slice_item       ::= expression | proper_slice | ellipsis\n   proper_slice     ::= short_slice | long_slice\n   short_slice      ::= [lower_bound] ":" [upper_bound]\n   long_slice       ::= short_slice ":" [stride]\n   lower_bound      ::= expression\n   upper_bound      ::= expression\n   stride           ::= expression\n   ellipsis         ::= "..."\n\nThere is ambiguity in the formal syntax here: anything that looks like\nan expression list also looks like a slice list, so any subscription\ncan be interpreted as a slicing.  Rather than further complicating the\nsyntax, this is disambiguated by defining that in this case the\ninterpretation as a subscription takes priority over the\ninterpretation as a slicing (this is the case if the slice list\ncontains no proper slice nor ellipses).  Similarly, when the slice\nlist has exactly one short slice and no trailing comma, the\ninterpretation as a simple slicing takes priority over that as an\nextended slicing.\n\nThe semantics for a simple slicing are as follows.  The primary must\nevaluate to a sequence object.  The lower and upper bound expressions,\nif present, must evaluate to plain integers; defaults are zero and the\n"sys.maxint", respectively.  If either bound is negative, the\nsequence\'s length is added to it.  The slicing now selects all items\nwith index *k* such that "i <= k < j" where *i* and *j* are the\nspecified lower and upper bounds.  This may be an empty sequence.  It\nis not an error if *i* or *j* lie outside the range of valid indexes\n(such items don\'t exist so they aren\'t selected).\n\nThe semantics for an extended slicing are as follows.  The primary\nmust evaluate to a mapping object, and it is indexed with a key that\nis constructed from the slice list, as follows.  If the slice list\ncontains at least one comma, the key is a tuple containing the\nconversion of the slice items; otherwise, the conversion of the lone\nslice item is the key.  The conversion of a slice item that is an\nexpression is that expression.  The conversion of an ellipsis slice\nitem is the built-in "Ellipsis" object.  The conversion of a proper\nslice is a slice object (see section The standard type hierarchy)\nwhose "start", "stop" and "step" attributes are the values of the\nexpressions given as lower bound, upper bound and stride,\nrespectively, substituting "None" for missing expressions.\n',
- 'specialattrs': u'\nSpecial Attributes\n******************\n\nThe implementation adds a few special read-only attributes to several\nobject types, where they are relevant.  Some of these are not reported\nby the "dir()" built-in function.\n\nobject.__dict__\n\n   A dictionary or other mapping object used to store an object\'s\n   (writable) attributes.\n\nobject.__methods__\n\n   Deprecated since version 2.2: Use the built-in function "dir()" to\n   get a list of an object\'s attributes. This attribute is no longer\n   available.\n\nobject.__members__\n\n   Deprecated since version 2.2: Use the built-in function "dir()" to\n   get a list of an object\'s attributes. This attribute is no longer\n   available.\n\ninstance.__class__\n\n   The class to which a class instance belongs.\n\nclass.__bases__\n\n   The tuple of base classes of a class object.\n\ndefinition.__name__\n\n   The name of the class, type, function, method, descriptor, or\n   generator instance.\n\nThe following attributes are only supported by *new-style class*es.\n\nclass.__mro__\n\n   This attribute is a tuple of classes that are considered when\n   looking for base classes during method resolution.\n\nclass.mro()\n\n   This method can be overridden by a metaclass to customize the\n   method resolution order for its instances.  It is called at class\n   instantiation, and its result is stored in "__mro__".\n\nclass.__subclasses__()\n\n   Each new-style class keeps a list of weak references to its\n   immediate subclasses.  This method returns a list of all those\n   references still alive. Example:\n\n      >>> int.__subclasses__()\n      [<type \'bool\'>]\n\n-[ Footnotes ]-\n\n[1] Additional information on these special methods may be found\n    in the Python Reference Manual (Basic customization).\n\n[2] As a consequence, the list "[1, 2]" is considered equal to\n    "[1.0, 2.0]", and similarly for tuples.\n\n[3] They must have since the parser can\'t tell the type of the\n    operands.\n\n[4] Cased characters are those with general category property\n    being one of "Lu" (Letter, uppercase), "Ll" (Letter, lowercase),\n    or "Lt" (Letter, titlecase).\n\n[5] To format only a tuple you should therefore provide a\n    singleton tuple whose only element is the tuple to be formatted.\n\n[6] The advantage of leaving the newline on is that returning an\n    empty string is then an unambiguous EOF indication.  It is also\n    possible (in cases where it might matter, for example, if you want\n    to make an exact copy of a file while scanning its lines) to tell\n    whether the last line of a file ended in a newline or not (yes\n    this happens!).\n',
- 'specialnames': u'\nSpecial method names\n********************\n\nA class can implement certain operations that are invoked by special\nsyntax (such as arithmetic operations or subscripting and slicing) by\ndefining methods with special names. This is Python\'s approach to\n*operator overloading*, allowing classes to define their own behavior\nwith respect to language operators.  For instance, if a class defines\na method named "__getitem__()", and "x" is an instance of this class,\nthen "x[i]" is roughly equivalent to "x.__getitem__(i)" for old-style\nclasses and "type(x).__getitem__(x, i)" for new-style classes.  Except\nwhere mentioned, attempts to execute an operation raise an exception\nwhen no appropriate method is defined (typically "AttributeError" or\n"TypeError").\n\nWhen implementing a class that emulates any built-in type, it is\nimportant that the emulation only be implemented to the degree that it\nmakes sense for the object being modelled.  For example, some\nsequences may work well with retrieval of individual elements, but\nextracting a slice may not make sense.  (One example of this is the\n"NodeList" interface in the W3C\'s Document Object Model.)\n\n\nBasic customization\n===================\n\nobject.__new__(cls[, ...])\n\n   Called to create a new instance of class *cls*.  "__new__()" is a\n   static method (special-cased so you need not declare it as such)\n   that takes the class of which an instance was requested as its\n   first argument.  The remaining arguments are those passed to the\n   object constructor expression (the call to the class).  The return\n   value of "__new__()" should be the new object instance (usually an\n   instance of *cls*).\n\n   Typical implementations create a new instance of the class by\n   invoking the superclass\'s "__new__()" method using\n   "super(currentclass, cls).__new__(cls[, ...])" with appropriate\n   arguments and then modifying the newly-created instance as\n   necessary before returning it.\n\n   If "__new__()" returns an instance of *cls*, then the new\n   instance\'s "__init__()" method will be invoked like\n   "__init__(self[, ...])", where *self* is the new instance and the\n   remaining arguments are the same as were passed to "__new__()".\n\n   If "__new__()" does not return an instance of *cls*, then the new\n   instance\'s "__init__()" method will not be invoked.\n\n   "__new__()" is intended mainly to allow subclasses of immutable\n   types (like int, str, or tuple) to customize instance creation.  It\n   is also commonly overridden in custom metaclasses in order to\n   customize class creation.\n\nobject.__init__(self[, ...])\n\n   Called after the instance has been created (by "__new__()"), but\n   before it is returned to the caller.  The arguments are those\n   passed to the class constructor expression.  If a base class has an\n   "__init__()" method, the derived class\'s "__init__()" method, if\n   any, must explicitly call it to ensure proper initialization of the\n   base class part of the instance; for example:\n   "BaseClass.__init__(self, [args...])".\n\n   Because "__new__()" and "__init__()" work together in constructing\n   objects ("__new__()" to create it, and "__init__()" to customise\n   it), no non-"None" value may be returned by "__init__()"; doing so\n   will cause a "TypeError" to be raised at runtime.\n\nobject.__del__(self)\n\n   Called when the instance is about to be destroyed.  This is also\n   called a destructor.  If a base class has a "__del__()" method, the\n   derived class\'s "__del__()" method, if any, must explicitly call it\n   to ensure proper deletion of the base class part of the instance.\n   Note that it is possible (though not recommended!) for the\n   "__del__()" method to postpone destruction of the instance by\n   creating a new reference to it.  It may then be called at a later\n   time when this new reference is deleted.  It is not guaranteed that\n   "__del__()" methods are called for objects that still exist when\n   the interpreter exits.\n\n   Note: "del x" doesn\'t directly call "x.__del__()" --- the former\n     decrements the reference count for "x" by one, and the latter is\n     only called when "x"\'s reference count reaches zero.  Some common\n     situations that may prevent the reference count of an object from\n     going to zero include: circular references between objects (e.g.,\n     a doubly-linked list or a tree data structure with parent and\n     child pointers); a reference to the object on the stack frame of\n     a function that caught an exception (the traceback stored in\n     "sys.exc_traceback" keeps the stack frame alive); or a reference\n     to the object on the stack frame that raised an unhandled\n     exception in interactive mode (the traceback stored in\n     "sys.last_traceback" keeps the stack frame alive).  The first\n     situation can only be remedied by explicitly breaking the cycles;\n     the latter two situations can be resolved by storing "None" in\n     "sys.exc_traceback" or "sys.last_traceback".  Circular references\n     which are garbage are detected when the option cycle detector is\n     enabled (it\'s on by default), but can only be cleaned up if there\n     are no Python-level "__del__()" methods involved. Refer to the\n     documentation for the "gc" module for more information about how\n     "__del__()" methods are handled by the cycle detector,\n     particularly the description of the "garbage" value.\n\n   Warning: Due to the precarious circumstances under which\n     "__del__()" methods are invoked, exceptions that occur during\n     their execution are ignored, and a warning is printed to\n     "sys.stderr" instead. Also, when "__del__()" is invoked in\n     response to a module being deleted (e.g., when execution of the\n     program is done), other globals referenced by the "__del__()"\n     method may already have been deleted or in the process of being\n     torn down (e.g. the import machinery shutting down).  For this\n     reason, "__del__()" methods should do the absolute minimum needed\n     to maintain external invariants.  Starting with version 1.5,\n     Python guarantees that globals whose name begins with a single\n     underscore are deleted from their module before other globals are\n     deleted; if no other references to such globals exist, this may\n     help in assuring that imported modules are still available at the\n     time when the "__del__()" method is called.\n\n   See also the "-R" command-line option.\n\nobject.__repr__(self)\n\n   Called by the "repr()" built-in function and by string conversions\n   (reverse quotes) to compute the "official" string representation of\n   an object.  If at all possible, this should look like a valid\n   Python expression that could be used to recreate an object with the\n   same value (given an appropriate environment).  If this is not\n   possible, a string of the form "<...some useful description...>"\n   should be returned.  The return value must be a string object. If a\n   class defines "__repr__()" but not "__str__()", then "__repr__()"\n   is also used when an "informal" string representation of instances\n   of that class is required.\n\n   This is typically used for debugging, so it is important that the\n   representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n   Called by the "str()" built-in function and by the "print"\n   statement to compute the "informal" string representation of an\n   object.  This differs from "__repr__()" in that it does not have to\n   be a valid Python expression: a more convenient or concise\n   representation may be used instead. The return value must be a\n   string object.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n   New in version 2.1.\n\n   These are the so-called "rich comparison" methods, and are called\n   for comparison operators in preference to "__cmp__()" below. The\n   correspondence between operator symbols and method names is as\n   follows: "x<y" calls "x.__lt__(y)", "x<=y" calls "x.__le__(y)",\n   "x==y" calls "x.__eq__(y)", "x!=y" and "x<>y" call "x.__ne__(y)",\n   "x>y" calls "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)".\n\n   A rich comparison method may return the singleton "NotImplemented"\n   if it does not implement the operation for a given pair of\n   arguments. By convention, "False" and "True" are returned for a\n   successful comparison. However, these methods can return any value,\n   so if the comparison operator is used in a Boolean context (e.g.,\n   in the condition of an "if" statement), Python will call "bool()"\n   on the value to determine if the result is true or false.\n\n   There are no implied relationships among the comparison operators.\n   The truth of "x==y" does not imply that "x!=y" is false.\n   Accordingly, when defining "__eq__()", one should also define\n   "__ne__()" so that the operators will behave as expected.  See the\n   paragraph on "__hash__()" for some important notes on creating\n   *hashable* objects which support custom comparison operations and\n   are usable as dictionary keys.\n\n   There are no swapped-argument versions of these methods (to be used\n   when the left argument does not support the operation but the right\n   argument does); rather, "__lt__()" and "__gt__()" are each other\'s\n   reflection, "__le__()" and "__ge__()" are each other\'s reflection,\n   and "__eq__()" and "__ne__()" are their own reflection.\n\n   Arguments to rich comparison methods are never coerced.\n\n   To automatically generate ordering operations from a single root\n   operation, see "functools.total_ordering()".\n\nobject.__cmp__(self, other)\n\n   Called by comparison operations if rich comparison (see above) is\n   not defined.  Should return a negative integer if "self < other",\n   zero if "self == other", a positive integer if "self > other".  If\n   no "__cmp__()", "__eq__()" or "__ne__()" operation is defined,\n   class instances are compared by object identity ("address").  See\n   also the description of "__hash__()" for some important notes on\n   creating *hashable* objects which support custom comparison\n   operations and are usable as dictionary keys. (Note: the\n   restriction that exceptions are not propagated by "__cmp__()" has\n   been removed since Python 1.5.)\n\nobject.__rcmp__(self, other)\n\n   Changed in version 2.1: No longer supported.\n\nobject.__hash__(self)\n\n   Called by built-in function "hash()" and for operations on members\n   of hashed collections including "set", "frozenset", and "dict".\n   "__hash__()" should return an integer.  The only required property\n   is that objects which compare equal have the same hash value; it is\n   advised to somehow mix together (e.g. using exclusive or) the hash\n   values for the components of the object that also play a part in\n   comparison of objects.\n\n   If a class does not define a "__cmp__()" or "__eq__()" method it\n   should not define a "__hash__()" operation either; if it defines\n   "__cmp__()" or "__eq__()" but not "__hash__()", its instances will\n   not be usable in hashed collections.  If a class defines mutable\n   objects and implements a "__cmp__()" or "__eq__()" method, it\n   should not implement "__hash__()", since hashable collection\n   implementations require that an object\'s hash value is immutable\n   (if the object\'s hash value changes, it will be in the wrong hash\n   bucket).\n\n   User-defined classes have "__cmp__()" and "__hash__()" methods by\n   default; with them, all objects compare unequal (except with\n   themselves) and "x.__hash__()" returns a result derived from\n   "id(x)".\n\n   Classes which inherit a "__hash__()" method from a parent class but\n   change the meaning of "__cmp__()" or "__eq__()" such that the hash\n   value returned is no longer appropriate (e.g. by switching to a\n   value-based concept of equality instead of the default identity\n   based equality) can explicitly flag themselves as being unhashable\n   by setting "__hash__ = None" in the class definition. Doing so\n   means that not only will instances of the class raise an\n   appropriate "TypeError" when a program attempts to retrieve their\n   hash value, but they will also be correctly identified as\n   unhashable when checking "isinstance(obj, collections.Hashable)"\n   (unlike classes which define their own "__hash__()" to explicitly\n   raise "TypeError").\n\n   Changed in version 2.5: "__hash__()" may now also return a long\n   integer object; the 32-bit integer is then derived from the hash of\n   that object.\n\n   Changed in version 2.6: "__hash__" may now be set to "None" to\n   explicitly flag instances of a class as unhashable.\n\nobject.__nonzero__(self)\n\n   Called to implement truth value testing and the built-in operation\n   "bool()"; should return "False" or "True", or their integer\n   equivalents "0" or "1".  When this method is not defined,\n   "__len__()" is called, if it is defined, and the object is\n   considered true if its result is nonzero. If a class defines\n   neither "__len__()" nor "__nonzero__()", all its instances are\n   considered true.\n\nobject.__unicode__(self)\n\n   Called to implement "unicode()" built-in; should return a Unicode\n   object. When this method is not defined, string conversion is\n   attempted, and the result of string conversion is converted to\n   Unicode using the system default encoding.\n\n\nCustomizing attribute access\n============================\n\nThe following methods can be defined to customize the meaning of\nattribute access (use of, assignment to, or deletion of "x.name") for\nclass instances.\n\nobject.__getattr__(self, name)\n\n   Called when an attribute lookup has not found the attribute in the\n   usual places (i.e. it is not an instance attribute nor is it found\n   in the class tree for "self").  "name" is the attribute name. This\n   method should return the (computed) attribute value or raise an\n   "AttributeError" exception.\n\n   Note that if the attribute is found through the normal mechanism,\n   "__getattr__()" is not called.  (This is an intentional asymmetry\n   between "__getattr__()" and "__setattr__()".) This is done both for\n   efficiency reasons and because otherwise "__getattr__()" would have\n   no way to access other attributes of the instance.  Note that at\n   least for instance variables, you can fake total control by not\n   inserting any values in the instance attribute dictionary (but\n   instead inserting them in another object).  See the\n   "__getattribute__()" method below for a way to actually get total\n   control in new-style classes.\n\nobject.__setattr__(self, name, value)\n\n   Called when an attribute assignment is attempted.  This is called\n   instead of the normal mechanism (i.e. store the value in the\n   instance dictionary).  *name* is the attribute name, *value* is the\n   value to be assigned to it.\n\n   If "__setattr__()" wants to assign to an instance attribute, it\n   should not simply execute "self.name = value" --- this would cause\n   a recursive call to itself.  Instead, it should insert the value in\n   the dictionary of instance attributes, e.g., "self.__dict__[name] =\n   value".  For new-style classes, rather than accessing the instance\n   dictionary, it should call the base class method with the same\n   name, for example, "object.__setattr__(self, name, value)".\n\nobject.__delattr__(self, name)\n\n   Like "__setattr__()" but for attribute deletion instead of\n   assignment.  This should only be implemented if "del obj.name" is\n   meaningful for the object.\n\n\nMore attribute access for new-style classes\n-------------------------------------------\n\nThe following methods only apply to new-style classes.\n\nobject.__getattribute__(self, name)\n\n   Called unconditionally to implement attribute accesses for\n   instances of the class. If the class also defines "__getattr__()",\n   the latter will not be called unless "__getattribute__()" either\n   calls it explicitly or raises an "AttributeError". This method\n   should return the (computed) attribute value or raise an\n   "AttributeError" exception. In order to avoid infinite recursion in\n   this method, its implementation should always call the base class\n   method with the same name to access any attributes it needs, for\n   example, "object.__getattribute__(self, name)".\n\n   Note: This method may still be bypassed when looking up special\n     methods as the result of implicit invocation via language syntax\n     or built-in functions. See Special method lookup for new-style\n     classes.\n\n\nImplementing Descriptors\n------------------------\n\nThe following methods only apply when an instance of the class\ncontaining the method (a so-called *descriptor* class) appears in an\n*owner* class (the descriptor must be in either the owner\'s class\ndictionary or in the class dictionary for one of its parents).  In the\nexamples below, "the attribute" refers to the attribute whose name is\nthe key of the property in the owner class\' "__dict__".\n\nobject.__get__(self, instance, owner)\n\n   Called to get the attribute of the owner class (class attribute\n   access) or of an instance of that class (instance attribute\n   access). *owner* is always the owner class, while *instance* is the\n   instance that the attribute was accessed through, or "None" when\n   the attribute is accessed through the *owner*.  This method should\n   return the (computed) attribute value or raise an "AttributeError"\n   exception.\n\nobject.__set__(self, instance, value)\n\n   Called to set the attribute on an instance *instance* of the owner\n   class to a new value, *value*.\n\nobject.__delete__(self, instance)\n\n   Called to delete the attribute on an instance *instance* of the\n   owner class.\n\n\nInvoking Descriptors\n--------------------\n\nIn general, a descriptor is an object attribute with "binding\nbehavior", one whose attribute access has been overridden by methods\nin the descriptor protocol:  "__get__()", "__set__()", and\n"__delete__()". If any of those methods are defined for an object, it\nis said to be a descriptor.\n\nThe default behavior for attribute access is to get, set, or delete\nthe attribute from an object\'s dictionary. For instance, "a.x" has a\nlookup chain starting with "a.__dict__[\'x\']", then\n"type(a).__dict__[\'x\']", and continuing through the base classes of\n"type(a)" excluding metaclasses.\n\nHowever, if the looked-up value is an object defining one of the\ndescriptor methods, then Python may override the default behavior and\ninvoke the descriptor method instead.  Where this occurs in the\nprecedence chain depends on which descriptor methods were defined and\nhow they were called.  Note that descriptors are only invoked for new\nstyle objects or classes (ones that subclass "object()" or "type()").\n\nThe starting point for descriptor invocation is a binding, "a.x". How\nthe arguments are assembled depends on "a":\n\nDirect Call\n   The simplest and least common call is when user code directly\n   invokes a descriptor method:    "x.__get__(a)".\n\nInstance Binding\n   If binding to a new-style object instance, "a.x" is transformed\n   into the call: "type(a).__dict__[\'x\'].__get__(a, type(a))".\n\nClass Binding\n   If binding to a new-style class, "A.x" is transformed into the\n   call: "A.__dict__[\'x\'].__get__(None, A)".\n\nSuper Binding\n   If "a" is an instance of "super", then the binding "super(B,\n   obj).m()" searches "obj.__class__.__mro__" for the base class "A"\n   immediately preceding "B" and then invokes the descriptor with the\n   call: "A.__dict__[\'m\'].__get__(obj, obj.__class__)".\n\nFor instance bindings, the precedence of descriptor invocation depends\non the which descriptor methods are defined.  A descriptor can define\nany combination of "__get__()", "__set__()" and "__delete__()".  If it\ndoes not define "__get__()", then accessing the attribute will return\nthe descriptor object itself unless there is a value in the object\'s\ninstance dictionary.  If the descriptor defines "__set__()" and/or\n"__delete__()", it is a data descriptor; if it defines neither, it is\na non-data descriptor.  Normally, data descriptors define both\n"__get__()" and "__set__()", while non-data descriptors have just the\n"__get__()" method.  Data descriptors with "__set__()" and "__get__()"\ndefined always override a redefinition in an instance dictionary.  In\ncontrast, non-data descriptors can be overridden by instances.\n\nPython methods (including "staticmethod()" and "classmethod()") are\nimplemented as non-data descriptors.  Accordingly, instances can\nredefine and override methods.  This allows individual instances to\nacquire behaviors that differ from other instances of the same class.\n\nThe "property()" function is implemented as a data descriptor.\nAccordingly, instances cannot override the behavior of a property.\n\n\n__slots__\n---------\n\nBy default, instances of both old and new-style classes have a\ndictionary for attribute storage.  This wastes space for objects\nhaving very few instance variables.  The space consumption can become\nacute when creating large numbers of instances.\n\nThe default can be overridden by defining *__slots__* in a new-style\nclass definition.  The *__slots__* declaration takes a sequence of\ninstance variables and reserves just enough space in each instance to\nhold a value for each variable.  Space is saved because *__dict__* is\nnot created for each instance.\n\n__slots__\n\n   This class variable can be assigned a string, iterable, or sequence\n   of strings with variable names used by instances.  If defined in a\n   new-style class, *__slots__* reserves space for the declared\n   variables and prevents the automatic creation of *__dict__* and\n   *__weakref__* for each instance.\n\n   New in version 2.2.\n\nNotes on using *__slots__*\n\n* When inheriting from a class without *__slots__*, the *__dict__*\n  attribute of that class will always be accessible, so a *__slots__*\n  definition in the subclass is meaningless.\n\n* Without a *__dict__* variable, instances cannot be assigned new\n  variables not listed in the *__slots__* definition.  Attempts to\n  assign to an unlisted variable name raises "AttributeError". If\n  dynamic assignment of new variables is desired, then add\n  "\'__dict__\'" to the sequence of strings in the *__slots__*\n  declaration.\n\n  Changed in version 2.3: Previously, adding "\'__dict__\'" to the\n  *__slots__* declaration would not enable the assignment of new\n  attributes not specifically listed in the sequence of instance\n  variable names.\n\n* Without a *__weakref__* variable for each instance, classes\n  defining *__slots__* do not support weak references to its\n  instances. If weak reference support is needed, then add\n  "\'__weakref__\'" to the sequence of strings in the *__slots__*\n  declaration.\n\n  Changed in version 2.3: Previously, adding "\'__weakref__\'" to the\n  *__slots__* declaration would not enable support for weak\n  references.\n\n* *__slots__* are implemented at the class level by creating\n  descriptors (Implementing Descriptors) for each variable name.  As a\n  result, class attributes cannot be used to set default values for\n  instance variables defined by *__slots__*; otherwise, the class\n  attribute would overwrite the descriptor assignment.\n\n* The action of a *__slots__* declaration is limited to the class\n  where it is defined.  As a result, subclasses will have a *__dict__*\n  unless they also define *__slots__* (which must only contain names\n  of any *additional* slots).\n\n* If a class defines a slot also defined in a base class, the\n  instance variable defined by the base class slot is inaccessible\n  (except by retrieving its descriptor directly from the base class).\n  This renders the meaning of the program undefined.  In the future, a\n  check may be added to prevent this.\n\n* Nonempty *__slots__* does not work for classes derived from\n  "variable-length" built-in types such as "long", "str" and "tuple".\n\n* Any non-string iterable may be assigned to *__slots__*. Mappings\n  may also be used; however, in the future, special meaning may be\n  assigned to the values corresponding to each key.\n\n* *__class__* assignment works only if both classes have the same\n  *__slots__*.\n\n  Changed in version 2.6: Previously, *__class__* assignment raised an\n  error if either new or old class had *__slots__*.\n\n\nCustomizing class creation\n==========================\n\nBy default, new-style classes are constructed using "type()". A class\ndefinition is read into a separate namespace and the value of class\nname is bound to the result of "type(name, bases, dict)".\n\nWhen the class definition is read, if *__metaclass__* is defined then\nthe callable assigned to it will be called instead of "type()". This\nallows classes or functions to be written which monitor or alter the\nclass creation process:\n\n* Modifying the class dictionary prior to the class being created.\n\n* Returning an instance of another class -- essentially performing\n  the role of a factory function.\n\nThese steps will have to be performed in the metaclass\'s "__new__()"\nmethod -- "type.__new__()" can then be called from this method to\ncreate a class with different properties.  This example adds a new\nelement to the class dictionary before creating the class:\n\n   class metacls(type):\n       def __new__(mcs, name, bases, dict):\n           dict[\'foo\'] = \'metacls was here\'\n           return type.__new__(mcs, name, bases, dict)\n\nYou can of course also override other class methods (or add new\nmethods); for example defining a custom "__call__()" method in the\nmetaclass allows custom behavior when the class is called, e.g. not\nalways creating a new instance.\n\n__metaclass__\n\n   This variable can be any callable accepting arguments for "name",\n   "bases", and "dict".  Upon class creation, the callable is used\n   instead of the built-in "type()".\n\n   New in version 2.2.\n\nThe appropriate metaclass is determined by the following precedence\nrules:\n\n* If "dict[\'__metaclass__\']" exists, it is used.\n\n* Otherwise, if there is at least one base class, its metaclass is\n  used (this looks for a *__class__* attribute first and if not found,\n  uses its type).\n\n* Otherwise, if a global variable named __metaclass__ exists, it is\n  used.\n\n* Otherwise, the old-style, classic metaclass (types.ClassType) is\n  used.\n\nThe potential uses for metaclasses are boundless. Some ideas that have\nbeen explored including logging, interface checking, automatic\ndelegation, automatic property creation, proxies, frameworks, and\nautomatic resource locking/synchronization.\n\n\nCustomizing instance and subclass checks\n========================================\n\nNew in version 2.6.\n\nThe following methods are used to override the default behavior of the\n"isinstance()" and "issubclass()" built-in functions.\n\nIn particular, the metaclass "abc.ABCMeta" implements these methods in\norder to allow the addition of Abstract Base Classes (ABCs) as\n"virtual base classes" to any class or type (including built-in\ntypes), including other ABCs.\n\nclass.__instancecheck__(self, instance)\n\n   Return true if *instance* should be considered a (direct or\n   indirect) instance of *class*. If defined, called to implement\n   "isinstance(instance, class)".\n\nclass.__subclasscheck__(self, subclass)\n\n   Return true if *subclass* should be considered a (direct or\n   indirect) subclass of *class*.  If defined, called to implement\n   "issubclass(subclass, class)".\n\nNote that these methods are looked up on the type (metaclass) of a\nclass.  They cannot be defined as class methods in the actual class.\nThis is consistent with the lookup of special methods that are called\non instances, only in this case the instance is itself a class.\n\nSee also:\n\n  **PEP 3119** - Introducing Abstract Base Classes\n     Includes the specification for customizing "isinstance()" and\n     "issubclass()" behavior through "__instancecheck__()" and\n     "__subclasscheck__()", with motivation for this functionality in\n     the context of adding Abstract Base Classes (see the "abc"\n     module) to the language.\n\n\nEmulating callable objects\n==========================\n\nobject.__call__(self[, args...])\n\n   Called when the instance is "called" as a function; if this method\n   is defined, "x(arg1, arg2, ...)" is a shorthand for\n   "x.__call__(arg1, arg2, ...)".\n\n\nEmulating container types\n=========================\n\nThe following methods can be defined to implement container objects.\nContainers usually are sequences (such as lists or tuples) or mappings\n(like dictionaries), but can represent other containers as well.  The\nfirst set of methods is used either to emulate a sequence or to\nemulate a mapping; the difference is that for a sequence, the\nallowable keys should be the integers *k* for which "0 <= k < N" where\n*N* is the length of the sequence, or slice objects, which define a\nrange of items. (For backwards compatibility, the method\n"__getslice__()" (see below) can also be defined to handle simple, but\nnot extended slices.) It is also recommended that mappings provide the\nmethods "keys()", "values()", "items()", "has_key()", "get()",\n"clear()", "setdefault()", "iterkeys()", "itervalues()",\n"iteritems()", "pop()", "popitem()", "copy()", and "update()" behaving\nsimilar to those for Python\'s standard dictionary objects.  The\n"UserDict" module provides a "DictMixin" class to help create those\nmethods from a base set of "__getitem__()", "__setitem__()",\n"__delitem__()", and "keys()". Mutable sequences should provide\nmethods "append()", "count()", "index()", "extend()", "insert()",\n"pop()", "remove()", "reverse()" and "sort()", like Python standard\nlist objects.  Finally, sequence types should implement addition\n(meaning concatenation) and multiplication (meaning repetition) by\ndefining the methods "__add__()", "__radd__()", "__iadd__()",\n"__mul__()", "__rmul__()" and "__imul__()" described below; they\nshould not define "__coerce__()" or other numerical operators.  It is\nrecommended that both mappings and sequences implement the\n"__contains__()" method to allow efficient use of the "in" operator;\nfor mappings, "in" should be equivalent of "has_key()"; for sequences,\nit should search through the values.  It is further recommended that\nboth mappings and sequences implement the "__iter__()" method to allow\nefficient iteration through the container; for mappings, "__iter__()"\nshould be the same as "iterkeys()"; for sequences, it should iterate\nthrough the values.\n\nobject.__len__(self)\n\n   Called to implement the built-in function "len()".  Should return\n   the length of the object, an integer ">=" 0.  Also, an object that\n   doesn\'t define a "__nonzero__()" method and whose "__len__()"\n   method returns zero is considered to be false in a Boolean context.\n\nobject.__getitem__(self, key)\n\n   Called to implement evaluation of "self[key]". For sequence types,\n   the accepted keys should be integers and slice objects.  Note that\n   the special interpretation of negative indexes (if the class wishes\n   to emulate a sequence type) is up to the "__getitem__()" method. If\n   *key* is of an inappropriate type, "TypeError" may be raised; if of\n   a value outside the set of indexes for the sequence (after any\n   special interpretation of negative values), "IndexError" should be\n   raised. For mapping types, if *key* is missing (not in the\n   container), "KeyError" should be raised.\n\n   Note: "for" loops expect that an "IndexError" will be raised for\n     illegal indexes to allow proper detection of the end of the\n     sequence.\n\nobject.__missing__(self, key)\n\n   Called by "dict"."__getitem__()" to implement "self[key]" for dict\n   subclasses when key is not in the dictionary.\n\nobject.__setitem__(self, key, value)\n\n   Called to implement assignment to "self[key]".  Same note as for\n   "__getitem__()".  This should only be implemented for mappings if\n   the objects support changes to the values for keys, or if new keys\n   can be added, or for sequences if elements can be replaced.  The\n   same exceptions should be raised for improper *key* values as for\n   the "__getitem__()" method.\n\nobject.__delitem__(self, key)\n\n   Called to implement deletion of "self[key]".  Same note as for\n   "__getitem__()".  This should only be implemented for mappings if\n   the objects support removal of keys, or for sequences if elements\n   can be removed from the sequence.  The same exceptions should be\n   raised for improper *key* values as for the "__getitem__()" method.\n\nobject.__iter__(self)\n\n   This method is called when an iterator is required for a container.\n   This method should return a new iterator object that can iterate\n   over all the objects in the container.  For mappings, it should\n   iterate over the keys of the container, and should also be made\n   available as the method "iterkeys()".\n\n   Iterator objects also need to implement this method; they are\n   required to return themselves.  For more information on iterator\n   objects, see Iterator Types.\n\nobject.__reversed__(self)\n\n   Called (if present) by the "reversed()" built-in to implement\n   reverse iteration.  It should return a new iterator object that\n   iterates over all the objects in the container in reverse order.\n\n   If the "__reversed__()" method is not provided, the "reversed()"\n   built-in will fall back to using the sequence protocol ("__len__()"\n   and "__getitem__()").  Objects that support the sequence protocol\n   should only provide "__reversed__()" if they can provide an\n   implementation that is more efficient than the one provided by\n   "reversed()".\n\n   New in version 2.6.\n\nThe membership test operators ("in" and "not in") are normally\nimplemented as an iteration through a sequence.  However, container\nobjects can supply the following special method with a more efficient\nimplementation, which also does not require the object be a sequence.\n\nobject.__contains__(self, item)\n\n   Called to implement membership test operators.  Should return true\n   if *item* is in *self*, false otherwise.  For mapping objects, this\n   should consider the keys of the mapping rather than the values or\n   the key-item pairs.\n\n   For objects that don\'t define "__contains__()", the membership test\n   first tries iteration via "__iter__()", then the old sequence\n   iteration protocol via "__getitem__()", see this section in the\n   language reference.\n\n\nAdditional methods for emulation of sequence types\n==================================================\n\nThe following optional methods can be defined to further emulate\nsequence objects.  Immutable sequences methods should at most only\ndefine "__getslice__()"; mutable sequences might define all three\nmethods.\n\nobject.__getslice__(self, i, j)\n\n   Deprecated since version 2.0: Support slice objects as parameters\n   to the "__getitem__()" method. (However, built-in types in CPython\n   currently still implement "__getslice__()".  Therefore, you have to\n   override it in derived classes when implementing slicing.)\n\n   Called to implement evaluation of "self[i:j]". The returned object\n   should be of the same type as *self*.  Note that missing *i* or *j*\n   in the slice expression are replaced by zero or "sys.maxsize",\n   respectively.  If negative indexes are used in the slice, the\n   length of the sequence is added to that index. If the instance does\n   not implement the "__len__()" method, an "AttributeError" is\n   raised. No guarantee is made that indexes adjusted this way are not\n   still negative.  Indexes which are greater than the length of the\n   sequence are not modified. If no "__getslice__()" is found, a slice\n   object is created instead, and passed to "__getitem__()" instead.\n\nobject.__setslice__(self, i, j, sequence)\n\n   Called to implement assignment to "self[i:j]". Same notes for *i*\n   and *j* as for "__getslice__()".\n\n   This method is deprecated. If no "__setslice__()" is found, or for\n   extended slicing of the form "self[i:j:k]", a slice object is\n   created, and passed to "__setitem__()", instead of "__setslice__()"\n   being called.\n\nobject.__delslice__(self, i, j)\n\n   Called to implement deletion of "self[i:j]". Same notes for *i* and\n   *j* as for "__getslice__()". This method is deprecated. If no\n   "__delslice__()" is found, or for extended slicing of the form\n   "self[i:j:k]", a slice object is created, and passed to\n   "__delitem__()", instead of "__delslice__()" being called.\n\nNotice that these methods are only invoked when a single slice with a\nsingle colon is used, and the slice method is available.  For slice\noperations involving extended slice notation, or in absence of the\nslice methods, "__getitem__()", "__setitem__()" or "__delitem__()" is\ncalled with a slice object as argument.\n\nThe following example demonstrate how to make your program or module\ncompatible with earlier versions of Python (assuming that methods\n"__getitem__()", "__setitem__()" and "__delitem__()" support slice\nobjects as arguments):\n\n   class MyClass:\n       ...\n       def __getitem__(self, index):\n           ...\n       def __setitem__(self, index, value):\n           ...\n       def __delitem__(self, index):\n           ...\n\n       if sys.version_info < (2, 0):\n           # They won\'t be defined if version is at least 2.0 final\n\n           def __getslice__(self, i, j):\n               return self[max(0, i):max(0, j):]\n           def __setslice__(self, i, j, seq):\n               self[max(0, i):max(0, j):] = seq\n           def __delslice__(self, i, j):\n               del self[max(0, i):max(0, j):]\n       ...\n\nNote the calls to "max()"; these are necessary because of the handling\nof negative indices before the "__*slice__()" methods are called.\nWhen negative indexes are used, the "__*item__()" methods receive them\nas provided, but the "__*slice__()" methods get a "cooked" form of the\nindex values.  For each negative index value, the length of the\nsequence is added to the index before calling the method (which may\nstill result in a negative index); this is the customary handling of\nnegative indexes by the built-in sequence types, and the "__*item__()"\nmethods are expected to do this as well.  However, since they should\nalready be doing that, negative indexes cannot be passed in; they must\nbe constrained to the bounds of the sequence before being passed to\nthe "__*item__()" methods. Calling "max(0, i)" conveniently returns\nthe proper value.\n\n\nEmulating numeric types\n=======================\n\nThe following methods can be defined to emulate numeric objects.\nMethods corresponding to operations that are not supported by the\nparticular kind of number implemented (e.g., bitwise operations for\nnon-integral numbers) should be left undefined.\n\nobject.__add__(self, other)\nobject.__sub__(self, other)\nobject.__mul__(self, other)\nobject.__floordiv__(self, other)\nobject.__mod__(self, other)\nobject.__divmod__(self, other)\nobject.__pow__(self, other[, modulo])\nobject.__lshift__(self, other)\nobject.__rshift__(self, other)\nobject.__and__(self, other)\nobject.__xor__(self, other)\nobject.__or__(self, other)\n\n   These methods are called to implement the binary arithmetic\n   operations ("+", "-", "*", "//", "%", "divmod()", "pow()", "**",\n   "<<", ">>", "&", "^", "|").  For instance, to evaluate the\n   expression "x + y", where *x* is an instance of a class that has an\n   "__add__()" method, "x.__add__(y)" is called.  The "__divmod__()"\n   method should be the equivalent to using "__floordiv__()" and\n   "__mod__()"; it should not be related to "__truediv__()" (described\n   below).  Note that "__pow__()" should be defined to accept an\n   optional third argument if the ternary version of the built-in\n   "pow()" function is to be supported.\n\n   If one of those methods does not support the operation with the\n   supplied arguments, it should return "NotImplemented".\n\nobject.__div__(self, other)\nobject.__truediv__(self, other)\n\n   The division operator ("/") is implemented by these methods.  The\n   "__truediv__()" method is used when "__future__.division" is in\n   effect, otherwise "__div__()" is used.  If only one of these two\n   methods is defined, the object will not support division in the\n   alternate context; "TypeError" will be raised instead.\n\nobject.__radd__(self, other)\nobject.__rsub__(self, other)\nobject.__rmul__(self, other)\nobject.__rdiv__(self, other)\nobject.__rtruediv__(self, other)\nobject.__rfloordiv__(self, other)\nobject.__rmod__(self, other)\nobject.__rdivmod__(self, other)\nobject.__rpow__(self, other)\nobject.__rlshift__(self, other)\nobject.__rrshift__(self, other)\nobject.__rand__(self, other)\nobject.__rxor__(self, other)\nobject.__ror__(self, other)\n\n   These methods are called to implement the binary arithmetic\n   operations ("+", "-", "*", "/", "%", "divmod()", "pow()", "**",\n   "<<", ">>", "&", "^", "|") with reflected (swapped) operands.\n   These functions are only called if the left operand does not\n   support the corresponding operation and the operands are of\n   different types. [2] For instance, to evaluate the expression "x -\n   y", where *y* is an instance of a class that has an "__rsub__()"\n   method, "y.__rsub__(x)" is called if "x.__sub__(y)" returns\n   *NotImplemented*.\n\n   Note that ternary "pow()" will not try calling "__rpow__()" (the\n   coercion rules would become too complicated).\n\n   Note: If the right operand\'s type is a subclass of the left\n     operand\'s type and that subclass provides the reflected method\n     for the operation, this method will be called before the left\n     operand\'s non-reflected method.  This behavior allows subclasses\n     to override their ancestors\' operations.\n\nobject.__iadd__(self, other)\nobject.__isub__(self, other)\nobject.__imul__(self, other)\nobject.__idiv__(self, other)\nobject.__itruediv__(self, other)\nobject.__ifloordiv__(self, other)\nobject.__imod__(self, other)\nobject.__ipow__(self, other[, modulo])\nobject.__ilshift__(self, other)\nobject.__irshift__(self, other)\nobject.__iand__(self, other)\nobject.__ixor__(self, other)\nobject.__ior__(self, other)\n\n   These methods are called to implement the augmented arithmetic\n   assignments ("+=", "-=", "*=", "/=", "//=", "%=", "**=", "<<=",\n   ">>=", "&=", "^=", "|=").  These methods should attempt to do the\n   operation in-place (modifying *self*) and return the result (which\n   could be, but does not have to be, *self*).  If a specific method\n   is not defined, the augmented assignment falls back to the normal\n   methods.  For instance, to execute the statement "x += y", where\n   *x* is an instance of a class that has an "__iadd__()" method,\n   "x.__iadd__(y)" is called.  If *x* is an instance of a class that\n   does not define a "__iadd__()" method, "x.__add__(y)" and\n   "y.__radd__(x)" are considered, as with the evaluation of "x + y".\n\nobject.__neg__(self)\nobject.__pos__(self)\nobject.__abs__(self)\nobject.__invert__(self)\n\n   Called to implement the unary arithmetic operations ("-", "+",\n   "abs()" and "~").\n\nobject.__complex__(self)\nobject.__int__(self)\nobject.__long__(self)\nobject.__float__(self)\n\n   Called to implement the built-in functions "complex()", "int()",\n   "long()", and "float()".  Should return a value of the appropriate\n   type.\n\nobject.__oct__(self)\nobject.__hex__(self)\n\n   Called to implement the built-in functions "oct()" and "hex()".\n   Should return a string value.\n\nobject.__index__(self)\n\n   Called to implement "operator.index()".  Also called whenever\n   Python needs an integer object (such as in slicing).  Must return\n   an integer (int or long).\n\n   New in version 2.5.\n\nobject.__coerce__(self, other)\n\n   Called to implement "mixed-mode" numeric arithmetic.  Should either\n   return a 2-tuple containing *self* and *other* converted to a\n   common numeric type, or "None" if conversion is impossible.  When\n   the common type would be the type of "other", it is sufficient to\n   return "None", since the interpreter will also ask the other object\n   to attempt a coercion (but sometimes, if the implementation of the\n   other type cannot be changed, it is useful to do the conversion to\n   the other type here).  A return value of "NotImplemented" is\n   equivalent to returning "None".\n\n\nCoercion rules\n==============\n\nThis section used to document the rules for coercion.  As the language\nhas evolved, the coercion rules have become hard to document\nprecisely; documenting what one version of one particular\nimplementation does is undesirable.  Instead, here are some informal\nguidelines regarding coercion.  In Python 3, coercion will not be\nsupported.\n\n* If the left operand of a % operator is a string or Unicode object,\n  no coercion takes place and the string formatting operation is\n  invoked instead.\n\n* It is no longer recommended to define a coercion operation. Mixed-\n  mode operations on types that don\'t define coercion pass the\n  original arguments to the operation.\n\n* New-style classes (those derived from "object") never invoke the\n  "__coerce__()" method in response to a binary operator; the only\n  time "__coerce__()" is invoked is when the built-in function\n  "coerce()" is called.\n\n* For most intents and purposes, an operator that returns\n  "NotImplemented" is treated the same as one that is not implemented\n  at all.\n\n* Below, "__op__()" and "__rop__()" are used to signify the generic\n  method names corresponding to an operator; "__iop__()" is used for\n  the corresponding in-place operator.  For example, for the operator\n  \'"+"\', "__add__()" and "__radd__()" are used for the left and right\n  variant of the binary operator, and "__iadd__()" for the in-place\n  variant.\n\n* For objects *x* and *y*, first "x.__op__(y)" is tried.  If this is\n  not implemented or returns "NotImplemented", "y.__rop__(x)" is\n  tried.  If this is also not implemented or returns "NotImplemented",\n  a "TypeError" exception is raised.  But see the following exception:\n\n* Exception to the previous item: if the left operand is an instance\n  of a built-in type or a new-style class, and the right operand is an\n  instance of a proper subclass of that type or class and overrides\n  the base\'s "__rop__()" method, the right operand\'s "__rop__()"\n  method is tried *before* the left operand\'s "__op__()" method.\n\n  This is done so that a subclass can completely override binary\n  operators. Otherwise, the left operand\'s "__op__()" method would\n  always accept the right operand: when an instance of a given class\n  is expected, an instance of a subclass of that class is always\n  acceptable.\n\n* When either operand type defines a coercion, this coercion is\n  called before that type\'s "__op__()" or "__rop__()" method is\n  called, but no sooner.  If the coercion returns an object of a\n  different type for the operand whose coercion is invoked, part of\n  the process is redone using the new object.\n\n* When an in-place operator (like \'"+="\') is used, if the left\n  operand implements "__iop__()", it is invoked without any coercion.\n  When the operation falls back to "__op__()" and/or "__rop__()", the\n  normal coercion rules apply.\n\n* In "x + y", if *x* is a sequence that implements sequence\n  concatenation, sequence concatenation is invoked.\n\n* In "x * y", if one operand is a sequence that implements sequence\n  repetition, and the other is an integer ("int" or "long"), sequence\n  repetition is invoked.\n\n* Rich comparisons (implemented by methods "__eq__()" and so on)\n  never use coercion.  Three-way comparison (implemented by\n  "__cmp__()") does use coercion under the same conditions as other\n  binary operations use it.\n\n* In the current implementation, the built-in numeric types "int",\n  "long", "float", and "complex" do not use coercion. All these types\n  implement a "__coerce__()" method, for use by the built-in\n  "coerce()" function.\n\n  Changed in version 2.7: The complex type no longer makes implicit\n  calls to the "__coerce__()" method for mixed-type binary arithmetic\n  operations.\n\n\nWith Statement Context Managers\n===============================\n\nNew in version 2.5.\n\nA *context manager* is an object that defines the runtime context to\nbe established when executing a "with" statement. The context manager\nhandles the entry into, and the exit from, the desired runtime context\nfor the execution of the block of code.  Context managers are normally\ninvoked using the "with" statement (described in section The with\nstatement), but can also be used by directly invoking their methods.\n\nTypical uses of context managers include saving and restoring various\nkinds of global state, locking and unlocking resources, closing opened\nfiles, etc.\n\nFor more information on context managers, see Context Manager Types.\n\nobject.__enter__(self)\n\n   Enter the runtime context related to this object. The "with"\n   statement will bind this method\'s return value to the target(s)\n   specified in the "as" clause of the statement, if any.\n\nobject.__exit__(self, exc_type, exc_value, traceback)\n\n   Exit the runtime context related to this object. The parameters\n   describe the exception that caused the context to be exited. If the\n   context was exited without an exception, all three arguments will\n   be "None".\n\n   If an exception is supplied, and the method wishes to suppress the\n   exception (i.e., prevent it from being propagated), it should\n   return a true value. Otherwise, the exception will be processed\n   normally upon exit from this method.\n\n   Note that "__exit__()" methods should not reraise the passed-in\n   exception; this is the caller\'s responsibility.\n\nSee also:\n\n  **PEP 343** - The "with" statement\n     The specification, background, and examples for the Python "with"\n     statement.\n\n\nSpecial method lookup for old-style classes\n===========================================\n\nFor old-style classes, special methods are always looked up in exactly\nthe same way as any other method or attribute. This is the case\nregardless of whether the method is being looked up explicitly as in\n"x.__getitem__(i)" or implicitly as in "x[i]".\n\nThis behaviour means that special methods may exhibit different\nbehaviour for different instances of a single old-style class if the\nappropriate special attributes are set differently:\n\n   >>> class C:\n   ...     pass\n   ...\n   >>> c1 = C()\n   >>> c2 = C()\n   >>> c1.__len__ = lambda: 5\n   >>> c2.__len__ = lambda: 9\n   >>> len(c1)\n   5\n   >>> len(c2)\n   9\n\n\nSpecial method lookup for new-style classes\n===========================================\n\nFor new-style classes, implicit invocations of special methods are\nonly guaranteed to work correctly if defined on an object\'s type, not\nin the object\'s instance dictionary.  That behaviour is the reason why\nthe following code raises an exception (unlike the equivalent example\nwith old-style classes):\n\n   >>> class C(object):\n   ...     pass\n   ...\n   >>> c = C()\n   >>> c.__len__ = lambda: 5\n   >>> len(c)\n   Traceback (most recent call last):\n     File "<stdin>", line 1, in <module>\n   TypeError: object of type \'C\' has no len()\n\nThe rationale behind this behaviour lies with a number of special\nmethods such as "__hash__()" and "__repr__()" that are implemented by\nall objects, including type objects. If the implicit lookup of these\nmethods used the conventional lookup process, they would fail when\ninvoked on the type object itself:\n\n   >>> 1 .__hash__() == hash(1)\n   True\n   >>> int.__hash__() == hash(int)\n   Traceback (most recent call last):\n     File "<stdin>", line 1, in <module>\n   TypeError: descriptor \'__hash__\' of \'int\' object needs an argument\n\nIncorrectly attempting to invoke an unbound method of a class in this\nway is sometimes referred to as \'metaclass confusion\', and is avoided\nby bypassing the instance when looking up special methods:\n\n   >>> type(1).__hash__(1) == hash(1)\n   True\n   >>> type(int).__hash__(int) == hash(int)\n   True\n\nIn addition to bypassing any instance attributes in the interest of\ncorrectness, implicit special method lookup generally also bypasses\nthe "__getattribute__()" method even of the object\'s metaclass:\n\n   >>> class Meta(type):\n   ...    def __getattribute__(*args):\n   ...       print "Metaclass getattribute invoked"\n   ...       return type.__getattribute__(*args)\n   ...\n   >>> class C(object):\n   ...     __metaclass__ = Meta\n   ...     def __len__(self):\n   ...         return 10\n   ...     def __getattribute__(*args):\n   ...         print "Class getattribute invoked"\n   ...         return object.__getattribute__(*args)\n   ...\n   >>> c = C()\n   >>> c.__len__()                 # Explicit lookup via instance\n   Class getattribute invoked\n   10\n   >>> type(c).__len__(c)          # Explicit lookup via type\n   Metaclass getattribute invoked\n   10\n   >>> len(c)                      # Implicit lookup\n   10\n\nBypassing the "__getattribute__()" machinery in this fashion provides\nsignificant scope for speed optimisations within the interpreter, at\nthe cost of some flexibility in the handling of special methods (the\nspecial method *must* be set on the class object itself in order to be\nconsistently invoked by the interpreter).\n\n-[ Footnotes ]-\n\n[1] It *is* possible in some cases to change an object\'s type,\n    under certain controlled conditions. It generally isn\'t a good\n    idea though, since it can lead to some very strange behaviour if\n    it is handled incorrectly.\n\n[2] For operands of the same type, it is assumed that if the non-\n    reflected method (such as "__add__()") fails the operation is not\n    supported, which is why the reflected method is not called.\n',
- 'string-methods': u'\nString Methods\n**************\n\nBelow are listed the string methods which both 8-bit strings and\nUnicode objects support.  Some of them are also available on\n"bytearray" objects.\n\nIn addition, Python\'s strings support the sequence type methods\ndescribed in the Sequence Types --- str, unicode, list, tuple,\nbytearray, buffer, xrange section. To output formatted strings use\ntemplate strings or the "%" operator described in the String\nFormatting Operations section. Also, see the "re" module for string\nfunctions based on regular expressions.\n\nstr.capitalize()\n\n   Return a copy of the string with its first character capitalized\n   and the rest lowercased.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.center(width[, fillchar])\n\n   Return centered in a string of length *width*. Padding is done\n   using the specified *fillchar* (default is a space).\n\n   Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.count(sub[, start[, end]])\n\n   Return the number of non-overlapping occurrences of substring *sub*\n   in the range [*start*, *end*].  Optional arguments *start* and\n   *end* are interpreted as in slice notation.\n\nstr.decode([encoding[, errors]])\n\n   Decodes the string using the codec registered for *encoding*.\n   *encoding* defaults to the default string encoding.  *errors* may\n   be given to set a different error handling scheme.  The default is\n   "\'strict\'", meaning that encoding errors raise "UnicodeError".\n   Other possible values are "\'ignore\'", "\'replace\'" and any other\n   name registered via "codecs.register_error()", see section Codec\n   Base Classes.\n\n   New in version 2.2.\n\n   Changed in version 2.3: Support for other error handling schemes\n   added.\n\n   Changed in version 2.7: Support for keyword arguments added.\n\nstr.encode([encoding[, errors]])\n\n   Return an encoded version of the string.  Default encoding is the\n   current default string encoding.  *errors* may be given to set a\n   different error handling scheme.  The default for *errors* is\n   "\'strict\'", meaning that encoding errors raise a "UnicodeError".\n   Other possible values are "\'ignore\'", "\'replace\'",\n   "\'xmlcharrefreplace\'", "\'backslashreplace\'" and any other name\n   registered via "codecs.register_error()", see section Codec Base\n   Classes. For a list of possible encodings, see section Standard\n   Encodings.\n\n   New in version 2.0.\n\n   Changed in version 2.3: Support for "\'xmlcharrefreplace\'" and\n   "\'backslashreplace\'" and other error handling schemes added.\n\n   Changed in version 2.7: Support for keyword arguments added.\n\nstr.endswith(suffix[, start[, end]])\n\n   Return "True" if the string ends with the specified *suffix*,\n   otherwise return "False".  *suffix* can also be a tuple of suffixes\n   to look for.  With optional *start*, test beginning at that\n   position.  With optional *end*, stop comparing at that position.\n\n   Changed in version 2.5: Accept tuples as *suffix*.\n\nstr.expandtabs([tabsize])\n\n   Return a copy of the string where all tab characters are replaced\n   by one or more spaces, depending on the current column and the\n   given tab size.  Tab positions occur every *tabsize* characters\n   (default is 8, giving tab positions at columns 0, 8, 16 and so on).\n   To expand the string, the current column is set to zero and the\n   string is examined character by character.  If the character is a\n   tab ("\\t"), one or more space characters are inserted in the result\n   until the current column is equal to the next tab position. (The\n   tab character itself is not copied.)  If the character is a newline\n   ("\\n") or return ("\\r"), it is copied and the current column is\n   reset to zero.  Any other character is copied unchanged and the\n   current column is incremented by one regardless of how the\n   character is represented when printed.\n\n   >>> \'01\\t012\\t0123\\t01234\'.expandtabs()\n   \'01      012     0123    01234\'\n   >>> \'01\\t012\\t0123\\t01234\'.expandtabs(4)\n   \'01  012 0123    01234\'\n\nstr.find(sub[, start[, end]])\n\n   Return the lowest index in the string where substring *sub* is\n   found within the slice "s[start:end]".  Optional arguments *start*\n   and *end* are interpreted as in slice notation.  Return "-1" if\n   *sub* is not found.\n\n   Note: The "find()" method should be used only if you need to know\n     the position of *sub*.  To check if *sub* is a substring or not,\n     use the "in" operator:\n\n        >>> \'Py\' in \'Python\'\n        True\n\nstr.format(*args, **kwargs)\n\n   Perform a string formatting operation.  The string on which this\n   method is called can contain literal text or replacement fields\n   delimited by braces "{}".  Each replacement field contains either\n   the numeric index of a positional argument, or the name of a\n   keyword argument.  Returns a copy of the string where each\n   replacement field is replaced with the string value of the\n   corresponding argument.\n\n   >>> "The sum of 1 + 2 is {0}".format(1+2)\n   \'The sum of 1 + 2 is 3\'\n\n   See Format String Syntax for a description of the various\n   formatting options that can be specified in format strings.\n\n   This method of string formatting is the new standard in Python 3,\n   and should be preferred to the "%" formatting described in String\n   Formatting Operations in new code.\n\n   New in version 2.6.\n\nstr.index(sub[, start[, end]])\n\n   Like "find()", but raise "ValueError" when the substring is not\n   found.\n\nstr.isalnum()\n\n   Return true if all characters in the string are alphanumeric and\n   there is at least one character, false otherwise.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.isalpha()\n\n   Return true if all characters in the string are alphabetic and\n   there is at least one character, false otherwise.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.isdigit()\n\n   Return true if all characters in the string are digits and there is\n   at least one character, false otherwise.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.islower()\n\n   Return true if all cased characters [4] in the string are lowercase\n   and there is at least one cased character, false otherwise.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.isspace()\n\n   Return true if there are only whitespace characters in the string\n   and there is at least one character, false otherwise.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.istitle()\n\n   Return true if the string is a titlecased string and there is at\n   least one character, for example uppercase characters may only\n   follow uncased characters and lowercase characters only cased ones.\n   Return false otherwise.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.isupper()\n\n   Return true if all cased characters [4] in the string are uppercase\n   and there is at least one cased character, false otherwise.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.join(iterable)\n\n   Return a string which is the concatenation of the strings in the\n   *iterable* *iterable*.  The separator between elements is the\n   string providing this method.\n\nstr.ljust(width[, fillchar])\n\n   Return the string left justified in a string of length *width*.\n   Padding is done using the specified *fillchar* (default is a\n   space).  The original string is returned if *width* is less than or\n   equal to "len(s)".\n\n   Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.lower()\n\n   Return a copy of the string with all the cased characters [4]\n   converted to lowercase.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.lstrip([chars])\n\n   Return a copy of the string with leading characters removed.  The\n   *chars* argument is a string specifying the set of characters to be\n   removed.  If omitted or "None", the *chars* argument defaults to\n   removing whitespace.  The *chars* argument is not a prefix; rather,\n   all combinations of its values are stripped:\n\n   >>> \'   spacious   \'.lstrip()\n   \'spacious   \'\n   >>> \'www.example.com\'.lstrip(\'cmowz.\')\n   \'example.com\'\n\n   Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.partition(sep)\n\n   Split the string at the first occurrence of *sep*, and return a\n   3-tuple containing the part before the separator, the separator\n   itself, and the part after the separator.  If the separator is not\n   found, return a 3-tuple containing the string itself, followed by\n   two empty strings.\n\n   New in version 2.5.\n\nstr.replace(old, new[, count])\n\n   Return a copy of the string with all occurrences of substring *old*\n   replaced by *new*.  If the optional argument *count* is given, only\n   the first *count* occurrences are replaced.\n\nstr.rfind(sub[, start[, end]])\n\n   Return the highest index in the string where substring *sub* is\n   found, such that *sub* is contained within "s[start:end]".\n   Optional arguments *start* and *end* are interpreted as in slice\n   notation.  Return "-1" on failure.\n\nstr.rindex(sub[, start[, end]])\n\n   Like "rfind()" but raises "ValueError" when the substring *sub* is\n   not found.\n\nstr.rjust(width[, fillchar])\n\n   Return the string right justified in a string of length *width*.\n   Padding is done using the specified *fillchar* (default is a\n   space). The original string is returned if *width* is less than or\n   equal to "len(s)".\n\n   Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.rpartition(sep)\n\n   Split the string at the last occurrence of *sep*, and return a\n   3-tuple containing the part before the separator, the separator\n   itself, and the part after the separator.  If the separator is not\n   found, return a 3-tuple containing two empty strings, followed by\n   the string itself.\n\n   New in version 2.5.\n\nstr.rsplit([sep[, maxsplit]])\n\n   Return a list of the words in the string, using *sep* as the\n   delimiter string. If *maxsplit* is given, at most *maxsplit* splits\n   are done, the *rightmost* ones.  If *sep* is not specified or\n   "None", any whitespace string is a separator.  Except for splitting\n   from the right, "rsplit()" behaves like "split()" which is\n   described in detail below.\n\n   New in version 2.4.\n\nstr.rstrip([chars])\n\n   Return a copy of the string with trailing characters removed.  The\n   *chars* argument is a string specifying the set of characters to be\n   removed.  If omitted or "None", the *chars* argument defaults to\n   removing whitespace.  The *chars* argument is not a suffix; rather,\n   all combinations of its values are stripped:\n\n   >>> \'   spacious   \'.rstrip()\n   \'   spacious\'\n   >>> \'mississippi\'.rstrip(\'ipz\')\n   \'mississ\'\n\n   Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.split([sep[, maxsplit]])\n\n   Return a list of the words in the string, using *sep* as the\n   delimiter string.  If *maxsplit* is given, at most *maxsplit*\n   splits are done (thus, the list will have at most "maxsplit+1"\n   elements).  If *maxsplit* is not specified or "-1", then there is\n   no limit on the number of splits (all possible splits are made).\n\n   If *sep* is given, consecutive delimiters are not grouped together\n   and are deemed to delimit empty strings (for example,\n   "\'1,,2\'.split(\',\')" returns "[\'1\', \'\', \'2\']").  The *sep* argument\n   may consist of multiple characters (for example,\n   "\'1<>2<>3\'.split(\'<>\')" returns "[\'1\', \'2\', \'3\']"). Splitting an\n   empty string with a specified separator returns "[\'\']".\n\n   If *sep* is not specified or is "None", a different splitting\n   algorithm is applied: runs of consecutive whitespace are regarded\n   as a single separator, and the result will contain no empty strings\n   at the start or end if the string has leading or trailing\n   whitespace.  Consequently, splitting an empty string or a string\n   consisting of just whitespace with a "None" separator returns "[]".\n\n   For example, "\' 1  2   3  \'.split()" returns "[\'1\', \'2\', \'3\']", and\n   "\'  1  2   3  \'.split(None, 1)" returns "[\'1\', \'2   3  \']".\n\nstr.splitlines([keepends])\n\n   Return a list of the lines in the string, breaking at line\n   boundaries. This method uses the *universal newlines* approach to\n   splitting lines. Line breaks are not included in the resulting list\n   unless *keepends* is given and true.\n\n   Python recognizes ""\\r"", ""\\n"", and ""\\r\\n"" as line boundaries\n   for 8-bit strings.\n\n   For example:\n\n      >>> \'ab c\\n\\nde fg\\rkl\\r\\n\'.splitlines()\n      [\'ab c\', \'\', \'de fg\', \'kl\']\n      >>> \'ab c\\n\\nde fg\\rkl\\r\\n\'.splitlines(True)\n      [\'ab c\\n\', \'\\n\', \'de fg\\r\', \'kl\\r\\n\']\n\n   Unlike "split()" when a delimiter string *sep* is given, this\n   method returns an empty list for the empty string, and a terminal\n   line break does not result in an extra line:\n\n      >>> "".splitlines()\n      []\n      >>> "One line\\n".splitlines()\n      [\'One line\']\n\n   For comparison, "split(\'\\n\')" gives:\n\n      >>> \'\'.split(\'\\n\')\n      [\'\']\n      >>> \'Two lines\\n\'.split(\'\\n\')\n      [\'Two lines\', \'\']\n\nunicode.splitlines([keepends])\n\n   Return a list of the lines in the string, like "str.splitlines()".\n   However, the Unicode method splits on the following line\n   boundaries, which are a superset of the *universal newlines*\n   recognized for 8-bit strings.\n\n   +-------------------------+-------------------------------+\n   | Representation          | Description                   |\n   +=========================+===============================+\n   | "\\n"                    | Line Feed                     |\n   +-------------------------+-------------------------------+\n   | "\\r"                    | Carriage Return               |\n   +-------------------------+-------------------------------+\n   | "\\r\\n"                  | Carriage Return + Line Feed   |\n   +-------------------------+-------------------------------+\n   | "\\v" or "\\x0b"          | Line Tabulation               |\n   +-------------------------+-------------------------------+\n   | "\\f" or "\\x0c"          | Form Feed                     |\n   +-------------------------+-------------------------------+\n   | "\\x1c"                  | File Separator                |\n   +-------------------------+-------------------------------+\n   | "\\x1d"                  | Group Separator               |\n   +-------------------------+-------------------------------+\n   | "\\x1e"                  | Record Separator              |\n   +-------------------------+-------------------------------+\n   | "\\x85"                  | Next Line (C1 Control Code)   |\n   +-------------------------+-------------------------------+\n   | "\\u2028"                | Line Separator                |\n   +-------------------------+-------------------------------+\n   | "\\u2029"                | Paragraph Separator           |\n   +-------------------------+-------------------------------+\n\n   Changed in version 2.7: "\\v" and "\\f" added to list of line\n   boundaries.\n\nstr.startswith(prefix[, start[, end]])\n\n   Return "True" if string starts with the *prefix*, otherwise return\n   "False". *prefix* can also be a tuple of prefixes to look for.\n   With optional *start*, test string beginning at that position.\n   With optional *end*, stop comparing string at that position.\n\n   Changed in version 2.5: Accept tuples as *prefix*.\n\nstr.strip([chars])\n\n   Return a copy of the string with the leading and trailing\n   characters removed. The *chars* argument is a string specifying the\n   set of characters to be removed. If omitted or "None", the *chars*\n   argument defaults to removing whitespace. The *chars* argument is\n   not a prefix or suffix; rather, all combinations of its values are\n   stripped:\n\n   >>> \'   spacious   \'.strip()\n   \'spacious\'\n   >>> \'www.example.com\'.strip(\'cmowz.\')\n   \'example\'\n\n   Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.swapcase()\n\n   Return a copy of the string with uppercase characters converted to\n   lowercase and vice versa.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.title()\n\n   Return a titlecased version of the string where words start with an\n   uppercase character and the remaining characters are lowercase.\n\n   The algorithm uses a simple language-independent definition of a\n   word as groups of consecutive letters.  The definition works in\n   many contexts but it means that apostrophes in contractions and\n   possessives form word boundaries, which may not be the desired\n   result:\n\n      >>> "they\'re bill\'s friends from the UK".title()\n      "They\'Re Bill\'S Friends From The Uk"\n\n   A workaround for apostrophes can be constructed using regular\n   expressions:\n\n      >>> import re\n      >>> def titlecase(s):\n      ...     return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n      ...                   lambda mo: mo.group(0)[0].upper() +\n      ...                              mo.group(0)[1:].lower(),\n      ...                   s)\n      ...\n      >>> titlecase("they\'re bill\'s friends.")\n      "They\'re Bill\'s Friends."\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.translate(table[, deletechars])\n\n   Return a copy of the string where all characters occurring in the\n   optional argument *deletechars* are removed, and the remaining\n   characters have been mapped through the given translation table,\n   which must be a string of length 256.\n\n   You can use the "maketrans()" helper function in the "string"\n   module to create a translation table. For string objects, set the\n   *table* argument to "None" for translations that only delete\n   characters:\n\n   >>> \'read this short text\'.translate(None, \'aeiou\')\n   \'rd ths shrt txt\'\n\n   New in version 2.6: Support for a "None" *table* argument.\n\n   For Unicode objects, the "translate()" method does not accept the\n   optional *deletechars* argument.  Instead, it returns a copy of the\n   *s* where all characters have been mapped through the given\n   translation table which must be a mapping of Unicode ordinals to\n   Unicode ordinals, Unicode strings or "None". Unmapped characters\n   are left untouched. Characters mapped to "None" are deleted.  Note,\n   a more flexible approach is to create a custom character mapping\n   codec using the "codecs" module (see "encodings.cp1251" for an\n   example).\n\nstr.upper()\n\n   Return a copy of the string with all the cased characters [4]\n   converted to uppercase.  Note that "str.upper().isupper()" might be\n   "False" if "s" contains uncased characters or if the Unicode\n   category of the resulting character(s) is not "Lu" (Letter,\n   uppercase), but e.g. "Lt" (Letter, titlecase).\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.zfill(width)\n\n   Return the numeric string left filled with zeros in a string of\n   length *width*.  A sign prefix is handled correctly.  The original\n   string is returned if *width* is less than or equal to "len(s)".\n\n   New in version 2.2.2.\n\nThe following methods are present only on unicode objects:\n\nunicode.isnumeric()\n\n   Return "True" if there are only numeric characters in S, "False"\n   otherwise. Numeric characters include digit characters, and all\n   characters that have the Unicode numeric value property, e.g.\n   U+2155, VULGAR FRACTION ONE FIFTH.\n\nunicode.isdecimal()\n\n   Return "True" if there are only decimal characters in S, "False"\n   otherwise. Decimal characters include digit characters, and all\n   characters that can be used to form decimal-radix numbers, e.g.\n   U+0660, ARABIC-INDIC DIGIT ZERO.\n',
- 'strings': u'\nString literals\n***************\n\nString literals are described by the following lexical definitions:\n\n   stringliteral   ::= [stringprefix](shortstring | longstring)\n   stringprefix    ::= "r" | "u" | "ur" | "R" | "U" | "UR" | "Ur" | "uR"\n                    | "b" | "B" | "br" | "Br" | "bR" | "BR"\n   shortstring     ::= "\'" shortstringitem* "\'" | \'"\' shortstringitem* \'"\'\n   longstring      ::= "\'\'\'" longstringitem* "\'\'\'"\n                  | \'"""\' longstringitem* \'"""\'\n   shortstringitem ::= shortstringchar | escapeseq\n   longstringitem  ::= longstringchar | escapeseq\n   shortstringchar ::= <any source character except "\\" or newline or the quote>\n   longstringchar  ::= <any source character except "\\">\n   escapeseq       ::= "\\" <any ASCII character>\n\nOne syntactic restriction not indicated by these productions is that\nwhitespace is not allowed between the "stringprefix" and the rest of\nthe string literal. The source character set is defined by the\nencoding declaration; it is ASCII if no encoding declaration is given\nin the source file; see section Encoding declarations.\n\nIn plain English: String literals can be enclosed in matching single\nquotes ("\'") or double quotes (""").  They can also be enclosed in\nmatching groups of three single or double quotes (these are generally\nreferred to as *triple-quoted strings*).  The backslash ("\\")\ncharacter is used to escape characters that otherwise have a special\nmeaning, such as newline, backslash itself, or the quote character.\nString literals may optionally be prefixed with a letter "\'r\'" or\n"\'R\'"; such strings are called *raw strings* and use different rules\nfor interpreting backslash escape sequences.  A prefix of "\'u\'" or\n"\'U\'" makes the string a Unicode string.  Unicode strings use the\nUnicode character set as defined by the Unicode Consortium and ISO\n10646.  Some additional escape sequences, described below, are\navailable in Unicode strings. A prefix of "\'b\'" or "\'B\'" is ignored in\nPython 2; it indicates that the literal should become a bytes literal\nin Python 3 (e.g. when code is automatically converted with 2to3).  A\n"\'u\'" or "\'b\'" prefix may be followed by an "\'r\'" prefix.\n\nIn triple-quoted strings, unescaped newlines and quotes are allowed\n(and are retained), except that three unescaped quotes in a row\nterminate the string.  (A "quote" is the character used to open the\nstring, i.e. either "\'" or """.)\n\nUnless an "\'r\'" or "\'R\'" prefix is present, escape sequences in\nstrings are interpreted according to rules similar to those used by\nStandard C.  The recognized escape sequences are:\n\n+-------------------+-----------------------------------+---------+\n| Escape Sequence   | Meaning                           | Notes   |\n+===================+===================================+=========+\n| "\\newline"        | Ignored                           |         |\n+-------------------+-----------------------------------+---------+\n| "\\\\"              | Backslash ("\\")                   |         |\n+-------------------+-----------------------------------+---------+\n| "\\\'"              | Single quote ("\'")                |         |\n+-------------------+-----------------------------------+---------+\n| "\\""              | Double quote (""")                |         |\n+-------------------+-----------------------------------+---------+\n| "\\a"              | ASCII Bell (BEL)                  |         |\n+-------------------+-----------------------------------+---------+\n| "\\b"              | ASCII Backspace (BS)              |         |\n+-------------------+-----------------------------------+---------+\n| "\\f"              | ASCII Formfeed (FF)               |         |\n+-------------------+-----------------------------------+---------+\n| "\\n"              | ASCII Linefeed (LF)               |         |\n+-------------------+-----------------------------------+---------+\n| "\\N{name}"        | Character named *name* in the     |         |\n|                   | Unicode database (Unicode only)   |         |\n+-------------------+-----------------------------------+---------+\n| "\\r"              | ASCII Carriage Return (CR)        |         |\n+-------------------+-----------------------------------+---------+\n| "\\t"              | ASCII Horizontal Tab (TAB)        |         |\n+-------------------+-----------------------------------+---------+\n| "\\uxxxx"          | Character with 16-bit hex value   | (1)     |\n|                   | *xxxx* (Unicode only)             |         |\n+-------------------+-----------------------------------+---------+\n| "\\Uxxxxxxxx"      | Character with 32-bit hex value   | (2)     |\n|                   | *xxxxxxxx* (Unicode only)         |         |\n+-------------------+-----------------------------------+---------+\n| "\\v"              | ASCII Vertical Tab (VT)           |         |\n+-------------------+-----------------------------------+---------+\n| "\\ooo"            | Character with octal value *ooo*  | (3,5)   |\n+-------------------+-----------------------------------+---------+\n| "\\xhh"            | Character with hex value *hh*     | (4,5)   |\n+-------------------+-----------------------------------+---------+\n\nNotes:\n\n1. Individual code units which form parts of a surrogate pair can\n   be encoded using this escape sequence.\n\n2. Any Unicode character can be encoded this way, but characters\n   outside the Basic Multilingual Plane (BMP) will be encoded using a\n   surrogate pair if Python is compiled to use 16-bit code units (the\n   default).\n\n3. As in Standard C, up to three octal digits are accepted.\n\n4. Unlike in Standard C, exactly two hex digits are required.\n\n5. In a string literal, hexadecimal and octal escapes denote the\n   byte with the given value; it is not necessary that the byte\n   encodes a character in the source character set. In a Unicode\n   literal, these escapes denote a Unicode character with the given\n   value.\n\nUnlike Standard C, all unrecognized escape sequences are left in the\nstring unchanged, i.e., *the backslash is left in the string*.  (This\nbehavior is useful when debugging: if an escape sequence is mistyped,\nthe resulting output is more easily recognized as broken.)  It is also\nimportant to note that the escape sequences marked as "(Unicode only)"\nin the table above fall into the category of unrecognized escapes for\nnon-Unicode string literals.\n\nWhen an "\'r\'" or "\'R\'" prefix is present, a character following a\nbackslash is included in the string without change, and *all\nbackslashes are left in the string*.  For example, the string literal\n"r"\\n"" consists of two characters: a backslash and a lowercase "\'n\'".\nString quotes can be escaped with a backslash, but the backslash\nremains in the string; for example, "r"\\""" is a valid string literal\nconsisting of two characters: a backslash and a double quote; "r"\\""\nis not a valid string literal (even a raw string cannot end in an odd\nnumber of backslashes).  Specifically, *a raw string cannot end in a\nsingle backslash* (since the backslash would escape the following\nquote character).  Note also that a single backslash followed by a\nnewline is interpreted as those two characters as part of the string,\n*not* as a line continuation.\n\nWhen an "\'r\'" or "\'R\'" prefix is used in conjunction with a "\'u\'" or\n"\'U\'" prefix, then the "\\uXXXX" and "\\UXXXXXXXX" escape sequences are\nprocessed while  *all other backslashes are left in the string*. For\nexample, the string literal "ur"\\u0062\\n"" consists of three Unicode\ncharacters: \'LATIN SMALL LETTER B\', \'REVERSE SOLIDUS\', and \'LATIN\nSMALL LETTER N\'. Backslashes can be escaped with a preceding\nbackslash; however, both remain in the string.  As a result, "\\uXXXX"\nescape sequences are only recognized when there are an odd number of\nbackslashes.\n',
- 'subscriptions': u'\nSubscriptions\n*************\n\nA subscription selects an item of a sequence (string, tuple or list)\nor mapping (dictionary) object:\n\n   subscription ::= primary "[" expression_list "]"\n\nThe primary must evaluate to an object of a sequence or mapping type.\n\nIf the primary is a mapping, the expression list must evaluate to an\nobject whose value is one of the keys of the mapping, and the\nsubscription selects the value in the mapping that corresponds to that\nkey.  (The expression list is a tuple except if it has exactly one\nitem.)\n\nIf the primary is a sequence, the expression (list) must evaluate to a\nplain integer.  If this value is negative, the length of the sequence\nis added to it (so that, e.g., "x[-1]" selects the last item of "x".)\nThe resulting value must be a nonnegative integer less than the number\nof items in the sequence, and the subscription selects the item whose\nindex is that value (counting from zero).\n\nA string\'s items are characters.  A character is not a separate data\ntype but a string of exactly one character.\n',
- 'truth': u'\nTruth Value Testing\n*******************\n\nAny object can be tested for truth value, for use in an "if" or\n"while" condition or as operand of the Boolean operations below. The\nfollowing values are considered false:\n\n* "None"\n\n* "False"\n\n* zero of any numeric type, for example, "0", "0L", "0.0", "0j".\n\n* any empty sequence, for example, "\'\'", "()", "[]".\n\n* any empty mapping, for example, "{}".\n\n* instances of user-defined classes, if the class defines a\n  "__nonzero__()" or "__len__()" method, when that method returns the\n  integer zero or "bool" value "False". [1]\n\nAll other values are considered true --- so objects of many types are\nalways true.\n\nOperations and built-in functions that have a Boolean result always\nreturn "0" or "False" for false and "1" or "True" for true, unless\notherwise stated. (Important exception: the Boolean operations "or"\nand "and" always return one of their operands.)\n',
- 'try': u'\nThe "try" statement\n*******************\n\nThe "try" statement specifies exception handlers and/or cleanup code\nfor a group of statements:\n\n   try_stmt  ::= try1_stmt | try2_stmt\n   try1_stmt ::= "try" ":" suite\n                 ("except" [expression [("as" | ",") identifier]] ":" suite)+\n                 ["else" ":" suite]\n                 ["finally" ":" suite]\n   try2_stmt ::= "try" ":" suite\n                 "finally" ":" suite\n\nChanged in version 2.5: In previous versions of Python,\n"try"..."except"..."finally" did not work. "try"..."except" had to be\nnested in "try"..."finally".\n\nThe "except" clause(s) specify one or more exception handlers. When no\nexception occurs in the "try" clause, no exception handler is\nexecuted. When an exception occurs in the "try" suite, a search for an\nexception handler is started.  This search inspects the except clauses\nin turn until one is found that matches the exception.  An expression-\nless except clause, if present, must be last; it matches any\nexception.  For an except clause with an expression, that expression\nis evaluated, and the clause matches the exception if the resulting\nobject is "compatible" with the exception.  An object is compatible\nwith an exception if it is the class or a base class of the exception\nobject, or a tuple containing an item compatible with the exception.\n\nIf no except clause matches the exception, the search for an exception\nhandler continues in the surrounding code and on the invocation stack.\n[1]\n\nIf the evaluation of an expression in the header of an except clause\nraises an exception, the original search for a handler is canceled and\na search starts for the new exception in the surrounding code and on\nthe call stack (it is treated as if the entire "try" statement raised\nthe exception).\n\nWhen a matching except clause is found, the exception is assigned to\nthe target specified in that except clause, if present, and the except\nclause\'s suite is executed.  All except clauses must have an\nexecutable block.  When the end of this block is reached, execution\ncontinues normally after the entire try statement.  (This means that\nif two nested handlers exist for the same exception, and the exception\noccurs in the try clause of the inner handler, the outer handler will\nnot handle the exception.)\n\nBefore an except clause\'s suite is executed, details about the\nexception are assigned to three variables in the "sys" module:\n"sys.exc_type" receives the object identifying the exception;\n"sys.exc_value" receives the exception\'s parameter;\n"sys.exc_traceback" receives a traceback object (see section The\nstandard type hierarchy) identifying the point in the program where\nthe exception occurred. These details are also available through the\n"sys.exc_info()" function, which returns a tuple "(exc_type,\nexc_value, exc_traceback)".  Use of the corresponding variables is\ndeprecated in favor of this function, since their use is unsafe in a\nthreaded program.  As of Python 1.5, the variables are restored to\ntheir previous values (before the call) when returning from a function\nthat handled an exception.\n\nThe optional "else" clause is executed if and when control flows off\nthe end of the "try" clause. [2] Exceptions in the "else" clause are\nnot handled by the preceding "except" clauses.\n\nIf "finally" is present, it specifies a \'cleanup\' handler.  The "try"\nclause is executed, including any "except" and "else" clauses.  If an\nexception occurs in any of the clauses and is not handled, the\nexception is temporarily saved. The "finally" clause is executed.  If\nthere is a saved exception, it is re-raised at the end of the\n"finally" clause. If the "finally" clause raises another exception or\nexecutes a "return" or "break" statement, the saved exception is\ndiscarded:\n\n   >>> def f():\n   ...     try:\n   ...         1/0\n   ...     finally:\n   ...         return 42\n   ...\n   >>> f()\n   42\n\nThe exception information is not available to the program during\nexecution of the "finally" clause.\n\nWhen a "return", "break" or "continue" statement is executed in the\n"try" suite of a "try"..."finally" statement, the "finally" clause is\nalso executed \'on the way out.\' A "continue" statement is illegal in\nthe "finally" clause. (The reason is a problem with the current\nimplementation --- this restriction may be lifted in the future).\n\nThe return value of a function is determined by the last "return"\nstatement executed.  Since the "finally" clause always executes, a\n"return" statement executed in the "finally" clause will always be the\nlast one executed:\n\n   >>> def foo():\n   ...     try:\n   ...         return \'try\'\n   ...     finally:\n   ...         return \'finally\'\n   ...\n   >>> foo()\n   \'finally\'\n\nAdditional information on exceptions can be found in section\nExceptions, and information on using the "raise" statement to generate\nexceptions may be found in section The raise statement.\n',
- 'types': u'\nThe standard type hierarchy\n***************************\n\nBelow is a list of the types that are built into Python.  Extension\nmodules (written in C, Java, or other languages, depending on the\nimplementation) can define additional types.  Future versions of\nPython may add types to the type hierarchy (e.g., rational numbers,\nefficiently stored arrays of integers, etc.).\n\nSome of the type descriptions below contain a paragraph listing\n\'special attributes.\'  These are attributes that provide access to the\nimplementation and are not intended for general use.  Their definition\nmay change in the future.\n\nNone\n   This type has a single value.  There is a single object with this\n   value. This object is accessed through the built-in name "None". It\n   is used to signify the absence of a value in many situations, e.g.,\n   it is returned from functions that don\'t explicitly return\n   anything. Its truth value is false.\n\nNotImplemented\n   This type has a single value.  There is a single object with this\n   value. This object is accessed through the built-in name\n   "NotImplemented". Numeric methods and rich comparison methods may\n   return this value if they do not implement the operation for the\n   operands provided.  (The interpreter will then try the reflected\n   operation, or some other fallback, depending on the operator.)  Its\n   truth value is true.\n\nEllipsis\n   This type has a single value.  There is a single object with this\n   value. This object is accessed through the built-in name\n   "Ellipsis". It is used to indicate the presence of the "..." syntax\n   in a slice.  Its truth value is true.\n\n"numbers.Number"\n   These are created by numeric literals and returned as results by\n   arithmetic operators and arithmetic built-in functions.  Numeric\n   objects are immutable; once created their value never changes.\n   Python numbers are of course strongly related to mathematical\n   numbers, but subject to the limitations of numerical representation\n   in computers.\n\n   Python distinguishes between integers, floating point numbers, and\n   complex numbers:\n\n   "numbers.Integral"\n      These represent elements from the mathematical set of integers\n      (positive and negative).\n\n      There are three types of integers:\n\n      Plain integers\n         These represent numbers in the range -2147483648 through\n         2147483647. (The range may be larger on machines with a\n         larger natural word size, but not smaller.)  When the result\n         of an operation would fall outside this range, the result is\n         normally returned as a long integer (in some cases, the\n         exception "OverflowError" is raised instead).  For the\n         purpose of shift and mask operations, integers are assumed to\n         have a binary, 2\'s complement notation using 32 or more bits,\n         and hiding no bits from the user (i.e., all 4294967296\n         different bit patterns correspond to different values).\n\n      Long integers\n         These represent numbers in an unlimited range, subject to\n         available (virtual) memory only.  For the purpose of shift\n         and mask operations, a binary representation is assumed, and\n         negative numbers are represented in a variant of 2\'s\n         complement which gives the illusion of an infinite string of\n         sign bits extending to the left.\n\n      Booleans\n         These represent the truth values False and True.  The two\n         objects representing the values "False" and "True" are the\n         only Boolean objects. The Boolean type is a subtype of plain\n         integers, and Boolean values behave like the values 0 and 1,\n         respectively, in almost all contexts, the exception being\n         that when converted to a string, the strings ""False"" or\n         ""True"" are returned, respectively.\n\n      The rules for integer representation are intended to give the\n      most meaningful interpretation of shift and mask operations\n      involving negative integers and the least surprises when\n      switching between the plain and long integer domains.  Any\n      operation, if it yields a result in the plain integer domain,\n      will yield the same result in the long integer domain or when\n      using mixed operands.  The switch between domains is transparent\n      to the programmer.\n\n   "numbers.Real" ("float")\n      These represent machine-level double precision floating point\n      numbers. You are at the mercy of the underlying machine\n      architecture (and C or Java implementation) for the accepted\n      range and handling of overflow. Python does not support single-\n      precision floating point numbers; the savings in processor and\n      memory usage that are usually the reason for using these are\n      dwarfed by the overhead of using objects in Python, so there is\n      no reason to complicate the language with two kinds of floating\n      point numbers.\n\n   "numbers.Complex"\n      These represent complex numbers as a pair of machine-level\n      double precision floating point numbers.  The same caveats apply\n      as for floating point numbers. The real and imaginary parts of a\n      complex number "z" can be retrieved through the read-only\n      attributes "z.real" and "z.imag".\n\nSequences\n   These represent finite ordered sets indexed by non-negative\n   numbers. The built-in function "len()" returns the number of items\n   of a sequence. When the length of a sequence is *n*, the index set\n   contains the numbers 0, 1, ..., *n*-1.  Item *i* of sequence *a* is\n   selected by "a[i]".\n\n   Sequences also support slicing: "a[i:j]" selects all items with\n   index *k* such that *i* "<=" *k* "<" *j*.  When used as an\n   expression, a slice is a sequence of the same type.  This implies\n   that the index set is renumbered so that it starts at 0.\n\n   Some sequences also support "extended slicing" with a third "step"\n   parameter: "a[i:j:k]" selects all items of *a* with index *x* where\n   "x = i + n*k", *n* ">=" "0" and *i* "<=" *x* "<" *j*.\n\n   Sequences are distinguished according to their mutability:\n\n   Immutable sequences\n      An object of an immutable sequence type cannot change once it is\n      created.  (If the object contains references to other objects,\n      these other objects may be mutable and may be changed; however,\n      the collection of objects directly referenced by an immutable\n      object cannot change.)\n\n      The following types are immutable sequences:\n\n      Strings\n         The items of a string are characters.  There is no separate\n         character type; a character is represented by a string of one\n         item. Characters represent (at least) 8-bit bytes.  The\n         built-in functions "chr()" and "ord()" convert between\n         characters and nonnegative integers representing the byte\n         values.  Bytes with the values 0--127 usually represent the\n         corresponding ASCII values, but the interpretation of values\n         is up to the program.  The string data type is also used to\n         represent arrays of bytes, e.g., to hold data read from a\n         file.\n\n         (On systems whose native character set is not ASCII, strings\n         may use EBCDIC in their internal representation, provided the\n         functions "chr()" and "ord()" implement a mapping between\n         ASCII and EBCDIC, and string comparison preserves the ASCII\n         order. Or perhaps someone can propose a better rule?)\n\n      Unicode\n         The items of a Unicode object are Unicode code units.  A\n         Unicode code unit is represented by a Unicode object of one\n         item and can hold either a 16-bit or 32-bit value\n         representing a Unicode ordinal (the maximum value for the\n         ordinal is given in "sys.maxunicode", and depends on how\n         Python is configured at compile time).  Surrogate pairs may\n         be present in the Unicode object, and will be reported as two\n         separate items.  The built-in functions "unichr()" and\n         "ord()" convert between code units and nonnegative integers\n         representing the Unicode ordinals as defined in the Unicode\n         Standard 3.0. Conversion from and to other encodings are\n         possible through the Unicode method "encode()" and the built-\n         in function "unicode()".\n\n      Tuples\n         The items of a tuple are arbitrary Python objects. Tuples of\n         two or more items are formed by comma-separated lists of\n         expressions.  A tuple of one item (a \'singleton\') can be\n         formed by affixing a comma to an expression (an expression by\n         itself does not create a tuple, since parentheses must be\n         usable for grouping of expressions).  An empty tuple can be\n         formed by an empty pair of parentheses.\n\n   Mutable sequences\n      Mutable sequences can be changed after they are created.  The\n      subscription and slicing notations can be used as the target of\n      assignment and "del" (delete) statements.\n\n      There are currently two intrinsic mutable sequence types:\n\n      Lists\n         The items of a list are arbitrary Python objects.  Lists are\n         formed by placing a comma-separated list of expressions in\n         square brackets. (Note that there are no special cases needed\n         to form lists of length 0 or 1.)\n\n      Byte Arrays\n         A bytearray object is a mutable array. They are created by\n         the built-in "bytearray()" constructor.  Aside from being\n         mutable (and hence unhashable), byte arrays otherwise provide\n         the same interface and functionality as immutable bytes\n         objects.\n\n      The extension module "array" provides an additional example of a\n      mutable sequence type.\n\nSet types\n   These represent unordered, finite sets of unique, immutable\n   objects. As such, they cannot be indexed by any subscript. However,\n   they can be iterated over, and the built-in function "len()"\n   returns the number of items in a set. Common uses for sets are fast\n   membership testing, removing duplicates from a sequence, and\n   computing mathematical operations such as intersection, union,\n   difference, and symmetric difference.\n\n   For set elements, the same immutability rules apply as for\n   dictionary keys. Note that numeric types obey the normal rules for\n   numeric comparison: if two numbers compare equal (e.g., "1" and\n   "1.0"), only one of them can be contained in a set.\n\n   There are currently two intrinsic set types:\n\n   Sets\n      These represent a mutable set. They are created by the built-in\n      "set()" constructor and can be modified afterwards by several\n      methods, such as "add()".\n\n   Frozen sets\n      These represent an immutable set.  They are created by the\n      built-in "frozenset()" constructor.  As a frozenset is immutable\n      and *hashable*, it can be used again as an element of another\n      set, or as a dictionary key.\n\nMappings\n   These represent finite sets of objects indexed by arbitrary index\n   sets. The subscript notation "a[k]" selects the item indexed by "k"\n   from the mapping "a"; this can be used in expressions and as the\n   target of assignments or "del" statements. The built-in function\n   "len()" returns the number of items in a mapping.\n\n   There is currently a single intrinsic mapping type:\n\n   Dictionaries\n      These represent finite sets of objects indexed by nearly\n      arbitrary values.  The only types of values not acceptable as\n      keys are values containing lists or dictionaries or other\n      mutable types that are compared by value rather than by object\n      identity, the reason being that the efficient implementation of\n      dictionaries requires a key\'s hash value to remain constant.\n      Numeric types used for keys obey the normal rules for numeric\n      comparison: if two numbers compare equal (e.g., "1" and "1.0")\n      then they can be used interchangeably to index the same\n      dictionary entry.\n\n      Dictionaries are mutable; they can be created by the "{...}"\n      notation (see section Dictionary displays).\n\n      The extension modules "dbm", "gdbm", and "bsddb" provide\n      additional examples of mapping types.\n\nCallable types\n   These are the types to which the function call operation (see\n   section Calls) can be applied:\n\n   User-defined functions\n      A user-defined function object is created by a function\n      definition (see section Function definitions).  It should be\n      called with an argument list containing the same number of items\n      as the function\'s formal parameter list.\n\n      Special attributes:\n\n      +-------------------------+---------------------------------+-------------+\n      | Attribute               | Meaning                         |             |\n      +=========================+=================================+=============+\n      | "__doc__" "func_doc"    | The function\'s documentation    | Writable    |\n      |                         | string, or "None" if            |             |\n      |                         | unavailable.                    |             |\n      +-------------------------+---------------------------------+-------------+\n      | "__name__" "func_name"  | The function\'s name             | Writable    |\n      +-------------------------+---------------------------------+-------------+\n      | "__module__"            | The name of the module the      | Writable    |\n      |                         | function was defined in, or     |             |\n      |                         | "None" if unavailable.          |             |\n      +-------------------------+---------------------------------+-------------+\n      | "__defaults__"          | A tuple containing default      | Writable    |\n      | "func_defaults"         | argument values for those       |             |\n      |                         | arguments that have defaults,   |             |\n      |                         | or "None" if no arguments have  |             |\n      |                         | a default value.                |             |\n      +-------------------------+---------------------------------+-------------+\n      | "__code__" "func_code"  | The code object representing    | Writable    |\n      |                         | the compiled function body.     |             |\n      +-------------------------+---------------------------------+-------------+\n      | "__globals__"           | A reference to the dictionary   | Read-only   |\n      | "func_globals"          | that holds the function\'s       |             |\n      |                         | global variables --- the global |             |\n      |                         | namespace of the module in      |             |\n      |                         | which the function was defined. |             |\n      +-------------------------+---------------------------------+-------------+\n      | "__dict__" "func_dict"  | The namespace supporting        | Writable    |\n      |                         | arbitrary function attributes.  |             |\n      +-------------------------+---------------------------------+-------------+\n      | "__closure__"           | "None" or a tuple of cells that | Read-only   |\n      | "func_closure"          | contain bindings for the        |             |\n      |                         | function\'s free variables.      |             |\n      +-------------------------+---------------------------------+-------------+\n\n      Most of the attributes labelled "Writable" check the type of the\n      assigned value.\n\n      Changed in version 2.4: "func_name" is now writable.\n\n      Changed in version 2.6: The double-underscore attributes\n      "__closure__", "__code__", "__defaults__", and "__globals__"\n      were introduced as aliases for the corresponding "func_*"\n      attributes for forwards compatibility with Python 3.\n\n      Function objects also support getting and setting arbitrary\n      attributes, which can be used, for example, to attach metadata\n      to functions.  Regular attribute dot-notation is used to get and\n      set such attributes. *Note that the current implementation only\n      supports function attributes on user-defined functions. Function\n      attributes on built-in functions may be supported in the\n      future.*\n\n      Additional information about a function\'s definition can be\n      retrieved from its code object; see the description of internal\n      types below.\n\n   User-defined methods\n      A user-defined method object combines a class, a class instance\n      (or "None") and any callable object (normally a user-defined\n      function).\n\n      Special read-only attributes: "im_self" is the class instance\n      object, "im_func" is the function object; "im_class" is the\n      class of "im_self" for bound methods or the class that asked for\n      the method for unbound methods; "__doc__" is the method\'s\n      documentation (same as "im_func.__doc__"); "__name__" is the\n      method name (same as "im_func.__name__"); "__module__" is the\n      name of the module the method was defined in, or "None" if\n      unavailable.\n\n      Changed in version 2.2: "im_self" used to refer to the class\n      that defined the method.\n\n      Changed in version 2.6: For Python 3 forward-compatibility,\n      "im_func" is also available as "__func__", and "im_self" as\n      "__self__".\n\n      Methods also support accessing (but not setting) the arbitrary\n      function attributes on the underlying function object.\n\n      User-defined method objects may be created when getting an\n      attribute of a class (perhaps via an instance of that class), if\n      that attribute is a user-defined function object, an unbound\n      user-defined method object, or a class method object. When the\n      attribute is a user-defined method object, a new method object\n      is only created if the class from which it is being retrieved is\n      the same as, or a derived class of, the class stored in the\n      original method object; otherwise, the original method object is\n      used as it is.\n\n      When a user-defined method object is created by retrieving a\n      user-defined function object from a class, its "im_self"\n      attribute is "None" and the method object is said to be unbound.\n      When one is created by retrieving a user-defined function object\n      from a class via one of its instances, its "im_self" attribute\n      is the instance, and the method object is said to be bound. In\n      either case, the new method\'s "im_class" attribute is the class\n      from which the retrieval takes place, and its "im_func"\n      attribute is the original function object.\n\n      When a user-defined method object is created by retrieving\n      another method object from a class or instance, the behaviour is\n      the same as for a function object, except that the "im_func"\n      attribute of the new instance is not the original method object\n      but its "im_func" attribute.\n\n      When a user-defined method object is created by retrieving a\n      class method object from a class or instance, its "im_self"\n      attribute is the class itself, and its "im_func" attribute is\n      the function object underlying the class method.\n\n      When an unbound user-defined method object is called, the\n      underlying function ("im_func") is called, with the restriction\n      that the first argument must be an instance of the proper class\n      ("im_class") or of a derived class thereof.\n\n      When a bound user-defined method object is called, the\n      underlying function ("im_func") is called, inserting the class\n      instance ("im_self") in front of the argument list.  For\n      instance, when "C" is a class which contains a definition for a\n      function "f()", and "x" is an instance of "C", calling "x.f(1)"\n      is equivalent to calling "C.f(x, 1)".\n\n      When a user-defined method object is derived from a class method\n      object, the "class instance" stored in "im_self" will actually\n      be the class itself, so that calling either "x.f(1)" or "C.f(1)"\n      is equivalent to calling "f(C,1)" where "f" is the underlying\n      function.\n\n      Note that the transformation from function object to (unbound or\n      bound) method object happens each time the attribute is\n      retrieved from the class or instance. In some cases, a fruitful\n      optimization is to assign the attribute to a local variable and\n      call that local variable. Also notice that this transformation\n      only happens for user-defined functions; other callable objects\n      (and all non-callable objects) are retrieved without\n      transformation.  It is also important to note that user-defined\n      functions which are attributes of a class instance are not\n      converted to bound methods; this *only* happens when the\n      function is an attribute of the class.\n\n   Generator functions\n      A function or method which uses the "yield" statement (see\n      section The yield statement) is called a *generator function*.\n      Such a function, when called, always returns an iterator object\n      which can be used to execute the body of the function:  calling\n      the iterator\'s "next()" method will cause the function to\n      execute until it provides a value using the "yield" statement.\n      When the function executes a "return" statement or falls off the\n      end, a "StopIteration" exception is raised and the iterator will\n      have reached the end of the set of values to be returned.\n\n   Built-in functions\n      A built-in function object is a wrapper around a C function.\n      Examples of built-in functions are "len()" and "math.sin()"\n      ("math" is a standard built-in module). The number and type of\n      the arguments are determined by the C function. Special read-\n      only attributes: "__doc__" is the function\'s documentation\n      string, or "None" if unavailable; "__name__" is the function\'s\n      name; "__self__" is set to "None" (but see the next item);\n      "__module__" is the name of the module the function was defined\n      in or "None" if unavailable.\n\n   Built-in methods\n      This is really a different disguise of a built-in function, this\n      time containing an object passed to the C function as an\n      implicit extra argument.  An example of a built-in method is\n      "alist.append()", assuming *alist* is a list object. In this\n      case, the special read-only attribute "__self__" is set to the\n      object denoted by *alist*.\n\n   Class Types\n      Class types, or "new-style classes," are callable.  These\n      objects normally act as factories for new instances of\n      themselves, but variations are possible for class types that\n      override "__new__()".  The arguments of the call are passed to\n      "__new__()" and, in the typical case, to "__init__()" to\n      initialize the new instance.\n\n   Classic Classes\n      Class objects are described below.  When a class object is\n      called, a new class instance (also described below) is created\n      and returned.  This implies a call to the class\'s "__init__()"\n      method if it has one.  Any arguments are passed on to the\n      "__init__()" method.  If there is no "__init__()" method, the\n      class must be called without arguments.\n\n   Class instances\n      Class instances are described below.  Class instances are\n      callable only when the class has a "__call__()" method;\n      "x(arguments)" is a shorthand for "x.__call__(arguments)".\n\nModules\n   Modules are imported by the "import" statement (see section The\n   import statement). A module object has a namespace implemented by a\n   dictionary object (this is the dictionary referenced by the\n   func_globals attribute of functions defined in the module).\n   Attribute references are translated to lookups in this dictionary,\n   e.g., "m.x" is equivalent to "m.__dict__["x"]". A module object\n   does not contain the code object used to initialize the module\n   (since it isn\'t needed once the initialization is done).\n\n   Attribute assignment updates the module\'s namespace dictionary,\n   e.g., "m.x = 1" is equivalent to "m.__dict__["x"] = 1".\n\n   Special read-only attribute: "__dict__" is the module\'s namespace\n   as a dictionary object.\n\n   **CPython implementation detail:** Because of the way CPython\n   clears module dictionaries, the module dictionary will be cleared\n   when the module falls out of scope even if the dictionary still has\n   live references.  To avoid this, copy the dictionary or keep the\n   module around while using its dictionary directly.\n\n   Predefined (writable) attributes: "__name__" is the module\'s name;\n   "__doc__" is the module\'s documentation string, or "None" if\n   unavailable; "__file__" is the pathname of the file from which the\n   module was loaded, if it was loaded from a file. The "__file__"\n   attribute is not present for C modules that are statically linked\n   into the interpreter; for extension modules loaded dynamically from\n   a shared library, it is the pathname of the shared library file.\n\nClasses\n   Both class types (new-style classes) and class objects (old-\n   style/classic classes) are typically created by class definitions\n   (see section Class definitions).  A class has a namespace\n   implemented by a dictionary object. Class attribute references are\n   translated to lookups in this dictionary, e.g., "C.x" is translated\n   to "C.__dict__["x"]" (although for new-style classes in particular\n   there are a number of hooks which allow for other means of locating\n   attributes). When the attribute name is not found there, the\n   attribute search continues in the base classes.  For old-style\n   classes, the search is depth-first, left-to-right in the order of\n   occurrence in the base class list. New-style classes use the more\n   complex C3 method resolution order which behaves correctly even in\n   the presence of \'diamond\' inheritance structures where there are\n   multiple inheritance paths leading back to a common ancestor.\n   Additional details on the C3 MRO used by new-style classes can be\n   found in the documentation accompanying the 2.3 release at\n   https://www.python.org/download/releases/2.3/mro/.\n\n   When a class attribute reference (for class "C", say) would yield a\n   user-defined function object or an unbound user-defined method\n   object whose associated class is either "C" or one of its base\n   classes, it is transformed into an unbound user-defined method\n   object whose "im_class" attribute is "C". When it would yield a\n   class method object, it is transformed into a bound user-defined\n   method object whose "im_self" attribute is "C".  When it would\n   yield a static method object, it is transformed into the object\n   wrapped by the static method object. See section Implementing\n   Descriptors for another way in which attributes retrieved from a\n   class may differ from those actually contained in its "__dict__"\n   (note that only new-style classes support descriptors).\n\n   Class attribute assignments update the class\'s dictionary, never\n   the dictionary of a base class.\n\n   A class object can be called (see above) to yield a class instance\n   (see below).\n\n   Special attributes: "__name__" is the class name; "__module__" is\n   the module name in which the class was defined; "__dict__" is the\n   dictionary containing the class\'s namespace; "__bases__" is a tuple\n   (possibly empty or a singleton) containing the base classes, in the\n   order of their occurrence in the base class list; "__doc__" is the\n   class\'s documentation string, or "None" if undefined.\n\nClass instances\n   A class instance is created by calling a class object (see above).\n   A class instance has a namespace implemented as a dictionary which\n   is the first place in which attribute references are searched.\n   When an attribute is not found there, and the instance\'s class has\n   an attribute by that name, the search continues with the class\n   attributes.  If a class attribute is found that is a user-defined\n   function object or an unbound user-defined method object whose\n   associated class is the class (call it "C") of the instance for\n   which the attribute reference was initiated or one of its bases, it\n   is transformed into a bound user-defined method object whose\n   "im_class" attribute is "C" and whose "im_self" attribute is the\n   instance. Static method and class method objects are also\n   transformed, as if they had been retrieved from class "C"; see\n   above under "Classes". See section Implementing Descriptors for\n   another way in which attributes of a class retrieved via its\n   instances may differ from the objects actually stored in the\n   class\'s "__dict__". If no class attribute is found, and the\n   object\'s class has a "__getattr__()" method, that is called to\n   satisfy the lookup.\n\n   Attribute assignments and deletions update the instance\'s\n   dictionary, never a class\'s dictionary.  If the class has a\n   "__setattr__()" or "__delattr__()" method, this is called instead\n   of updating the instance dictionary directly.\n\n   Class instances can pretend to be numbers, sequences, or mappings\n   if they have methods with certain special names.  See section\n   Special method names.\n\n   Special attributes: "__dict__" is the attribute dictionary;\n   "__class__" is the instance\'s class.\n\nFiles\n   A file object represents an open file.  File objects are created by\n   the "open()" built-in function, and also by "os.popen()",\n   "os.fdopen()", and the "makefile()" method of socket objects (and\n   perhaps by other functions or methods provided by extension\n   modules).  The objects "sys.stdin", "sys.stdout" and "sys.stderr"\n   are initialized to file objects corresponding to the interpreter\'s\n   standard input, output and error streams.  See File Objects for\n   complete documentation of file objects.\n\nInternal types\n   A few types used internally by the interpreter are exposed to the\n   user. Their definitions may change with future versions of the\n   interpreter, but they are mentioned here for completeness.\n\n   Code objects\n      Code objects represent *byte-compiled* executable Python code,\n      or *bytecode*. The difference between a code object and a\n      function object is that the function object contains an explicit\n      reference to the function\'s globals (the module in which it was\n      defined), while a code object contains no context; also the\n      default argument values are stored in the function object, not\n      in the code object (because they represent values calculated at\n      run-time).  Unlike function objects, code objects are immutable\n      and contain no references (directly or indirectly) to mutable\n      objects.\n\n      Special read-only attributes: "co_name" gives the function name;\n      "co_argcount" is the number of positional arguments (including\n      arguments with default values); "co_nlocals" is the number of\n      local variables used by the function (including arguments);\n      "co_varnames" is a tuple containing the names of the local\n      variables (starting with the argument names); "co_cellvars" is a\n      tuple containing the names of local variables that are\n      referenced by nested functions; "co_freevars" is a tuple\n      containing the names of free variables; "co_code" is a string\n      representing the sequence of bytecode instructions; "co_consts"\n      is a tuple containing the literals used by the bytecode;\n      "co_names" is a tuple containing the names used by the bytecode;\n      "co_filename" is the filename from which the code was compiled;\n      "co_firstlineno" is the first line number of the function;\n      "co_lnotab" is a string encoding the mapping from bytecode\n      offsets to line numbers (for details see the source code of the\n      interpreter); "co_stacksize" is the required stack size\n      (including local variables); "co_flags" is an integer encoding a\n      number of flags for the interpreter.\n\n      The following flag bits are defined for "co_flags": bit "0x04"\n      is set if the function uses the "*arguments" syntax to accept an\n      arbitrary number of positional arguments; bit "0x08" is set if\n      the function uses the "**keywords" syntax to accept arbitrary\n      keyword arguments; bit "0x20" is set if the function is a\n      generator.\n\n      Future feature declarations ("from __future__ import division")\n      also use bits in "co_flags" to indicate whether a code object\n      was compiled with a particular feature enabled: bit "0x2000" is\n      set if the function was compiled with future division enabled;\n      bits "0x10" and "0x1000" were used in earlier versions of\n      Python.\n\n      Other bits in "co_flags" are reserved for internal use.\n\n      If a code object represents a function, the first item in\n      "co_consts" is the documentation string of the function, or\n      "None" if undefined.\n\n   Frame objects\n      Frame objects represent execution frames.  They may occur in\n      traceback objects (see below).\n\n      Special read-only attributes: "f_back" is to the previous stack\n      frame (towards the caller), or "None" if this is the bottom\n      stack frame; "f_code" is the code object being executed in this\n      frame; "f_locals" is the dictionary used to look up local\n      variables; "f_globals" is used for global variables;\n      "f_builtins" is used for built-in (intrinsic) names;\n      "f_restricted" is a flag indicating whether the function is\n      executing in restricted execution mode; "f_lasti" gives the\n      precise instruction (this is an index into the bytecode string\n      of the code object).\n\n      Special writable attributes: "f_trace", if not "None", is a\n      function called at the start of each source code line (this is\n      used by the debugger); "f_exc_type", "f_exc_value",\n      "f_exc_traceback" represent the last exception raised in the\n      parent frame provided another exception was ever raised in the\n      current frame (in all other cases they are "None"); "f_lineno"\n      is the current line number of the frame --- writing to this from\n      within a trace function jumps to the given line (only for the\n      bottom-most frame).  A debugger can implement a Jump command\n      (aka Set Next Statement) by writing to f_lineno.\n\n   Traceback objects\n      Traceback objects represent a stack trace of an exception.  A\n      traceback object is created when an exception occurs.  When the\n      search for an exception handler unwinds the execution stack, at\n      each unwound level a traceback object is inserted in front of\n      the current traceback.  When an exception handler is entered,\n      the stack trace is made available to the program. (See section\n      The try statement.) It is accessible as "sys.exc_traceback", and\n      also as the third item of the tuple returned by\n      "sys.exc_info()".  The latter is the preferred interface, since\n      it works correctly when the program is using multiple threads.\n      When the program contains no suitable handler, the stack trace\n      is written (nicely formatted) to the standard error stream; if\n      the interpreter is interactive, it is also made available to the\n      user as "sys.last_traceback".\n\n      Special read-only attributes: "tb_next" is the next level in the\n      stack trace (towards the frame where the exception occurred), or\n      "None" if there is no next level; "tb_frame" points to the\n      execution frame of the current level; "tb_lineno" gives the line\n      number where the exception occurred; "tb_lasti" indicates the\n      precise instruction.  The line number and last instruction in\n      the traceback may differ from the line number of its frame\n      object if the exception occurred in a "try" statement with no\n      matching except clause or with a finally clause.\n\n   Slice objects\n      Slice objects are used to represent slices when *extended slice\n      syntax* is used. This is a slice using two colons, or multiple\n      slices or ellipses separated by commas, e.g., "a[i:j:step]",\n      "a[i:j, k:l]", or "a[..., i:j]".  They are also created by the\n      built-in "slice()" function.\n\n      Special read-only attributes: "start" is the lower bound; "stop"\n      is the upper bound; "step" is the step value; each is "None" if\n      omitted.  These attributes can have any type.\n\n      Slice objects support one method:\n\n      slice.indices(self, length)\n\n         This method takes a single integer argument *length* and\n         computes information about the extended slice that the slice\n         object would describe if applied to a sequence of *length*\n         items.  It returns a tuple of three integers; respectively\n         these are the *start* and *stop* indices and the *step* or\n         stride length of the slice. Missing or out-of-bounds indices\n         are handled in a manner consistent with regular slices.\n\n         New in version 2.3.\n\n   Static method objects\n      Static method objects provide a way of defeating the\n      transformation of function objects to method objects described\n      above. A static method object is a wrapper around any other\n      object, usually a user-defined method object. When a static\n      method object is retrieved from a class or a class instance, the\n      object actually returned is the wrapped object, which is not\n      subject to any further transformation. Static method objects are\n      not themselves callable, although the objects they wrap usually\n      are. Static method objects are created by the built-in\n      "staticmethod()" constructor.\n\n   Class method objects\n      A class method object, like a static method object, is a wrapper\n      around another object that alters the way in which that object\n      is retrieved from classes and class instances. The behaviour of\n      class method objects upon such retrieval is described above,\n      under "User-defined methods". Class method objects are created\n      by the built-in "classmethod()" constructor.\n',
- 'typesfunctions': u'\nFunctions\n*********\n\nFunction objects are created by function definitions.  The only\noperation on a function object is to call it: "func(argument-list)".\n\nThere are really two flavors of function objects: built-in functions\nand user-defined functions.  Both support the same operation (to call\nthe function), but the implementation is different, hence the\ndifferent object types.\n\nSee Function definitions for more information.\n',
- 'typesmapping': u'\nMapping Types --- "dict"\n************************\n\nA *mapping* object maps *hashable* values to arbitrary objects.\nMappings are mutable objects.  There is currently only one standard\nmapping type, the *dictionary*.  (For other containers see the built\nin "list", "set", and "tuple" classes, and the "collections" module.)\n\nA dictionary\'s keys are *almost* arbitrary values.  Values that are\nnot *hashable*, that is, values containing lists, dictionaries or\nother mutable types (that are compared by value rather than by object\nidentity) may not be used as keys.  Numeric types used for keys obey\nthe normal rules for numeric comparison: if two numbers compare equal\n(such as "1" and "1.0") then they can be used interchangeably to index\nthe same dictionary entry.  (Note however, that since computers store\nfloating-point numbers as approximations it is usually unwise to use\nthem as dictionary keys.)\n\nDictionaries can be created by placing a comma-separated list of "key:\nvalue" pairs within braces, for example: "{\'jack\': 4098, \'sjoerd\':\n4127}" or "{4098: \'jack\', 4127: \'sjoerd\'}", or by the "dict"\nconstructor.\n\nclass dict(**kwarg)\nclass dict(mapping, **kwarg)\nclass dict(iterable, **kwarg)\n\n   Return a new dictionary initialized from an optional positional\n   argument and a possibly empty set of keyword arguments.\n\n   If no positional argument is given, an empty dictionary is created.\n   If a positional argument is given and it is a mapping object, a\n   dictionary is created with the same key-value pairs as the mapping\n   object.  Otherwise, the positional argument must be an *iterable*\n   object.  Each item in the iterable must itself be an iterable with\n   exactly two objects.  The first object of each item becomes a key\n   in the new dictionary, and the second object the corresponding\n   value.  If a key occurs more than once, the last value for that key\n   becomes the corresponding value in the new dictionary.\n\n   If keyword arguments are given, the keyword arguments and their\n   values are added to the dictionary created from the positional\n   argument.  If a key being added is already present, the value from\n   the keyword argument replaces the value from the positional\n   argument.\n\n   To illustrate, the following examples all return a dictionary equal\n   to "{"one": 1, "two": 2, "three": 3}":\n\n      >>> a = dict(one=1, two=2, three=3)\n      >>> b = {\'one\': 1, \'two\': 2, \'three\': 3}\n      >>> c = dict(zip([\'one\', \'two\', \'three\'], [1, 2, 3]))\n      >>> d = dict([(\'two\', 2), (\'one\', 1), (\'three\', 3)])\n      >>> e = dict({\'three\': 3, \'one\': 1, \'two\': 2})\n      >>> a == b == c == d == e\n      True\n\n   Providing keyword arguments as in the first example only works for\n   keys that are valid Python identifiers.  Otherwise, any valid keys\n   can be used.\n\n   New in version 2.2.\n\n   Changed in version 2.3: Support for building a dictionary from\n   keyword arguments added.\n\n   These are the operations that dictionaries support (and therefore,\n   custom mapping types should support too):\n\n   len(d)\n\n      Return the number of items in the dictionary *d*.\n\n   d[key]\n\n      Return the item of *d* with key *key*.  Raises a "KeyError" if\n      *key* is not in the map.\n\n      If a subclass of dict defines a method "__missing__()" and *key*\n      is not present, the "d[key]" operation calls that method with\n      the key *key* as argument.  The "d[key]" operation then returns\n      or raises whatever is returned or raised by the\n      "__missing__(key)" call. No other operations or methods invoke\n      "__missing__()". If "__missing__()" is not defined, "KeyError"\n      is raised. "__missing__()" must be a method; it cannot be an\n      instance variable:\n\n         >>> class Counter(dict):\n         ...     def __missing__(self, key):\n         ...         return 0\n         >>> c = Counter()\n         >>> c[\'red\']\n         0\n         >>> c[\'red\'] += 1\n         >>> c[\'red\']\n         1\n\n      The example above shows part of the implementation of\n      "collections.Counter".  A different "__missing__" method is used\n      by "collections.defaultdict".\n\n      New in version 2.5: Recognition of __missing__ methods of dict\n      subclasses.\n\n   d[key] = value\n\n      Set "d[key]" to *value*.\n\n   del d[key]\n\n      Remove "d[key]" from *d*.  Raises a "KeyError" if *key* is not\n      in the map.\n\n   key in d\n\n      Return "True" if *d* has a key *key*, else "False".\n\n      New in version 2.2.\n\n   key not in d\n\n      Equivalent to "not key in d".\n\n      New in version 2.2.\n\n   iter(d)\n\n      Return an iterator over the keys of the dictionary.  This is a\n      shortcut for "iterkeys()".\n\n   clear()\n\n      Remove all items from the dictionary.\n\n   copy()\n\n      Return a shallow copy of the dictionary.\n\n   fromkeys(seq[, value])\n\n      Create a new dictionary with keys from *seq* and values set to\n      *value*.\n\n      "fromkeys()" is a class method that returns a new dictionary.\n      *value* defaults to "None".\n\n      New in version 2.3.\n\n   get(key[, default])\n\n      Return the value for *key* if *key* is in the dictionary, else\n      *default*. If *default* is not given, it defaults to "None", so\n      that this method never raises a "KeyError".\n\n   has_key(key)\n\n      Test for the presence of *key* in the dictionary.  "has_key()"\n      is deprecated in favor of "key in d".\n\n   items()\n\n      Return a copy of the dictionary\'s list of "(key, value)" pairs.\n\n      **CPython implementation detail:** Keys and values are listed in\n      an arbitrary order which is non-random, varies across Python\n      implementations, and depends on the dictionary\'s history of\n      insertions and deletions.\n\n      If "items()", "keys()", "values()", "iteritems()", "iterkeys()",\n      and "itervalues()" are called with no intervening modifications\n      to the dictionary, the lists will directly correspond.  This\n      allows the creation of "(value, key)" pairs using "zip()":\n      "pairs = zip(d.values(), d.keys())".  The same relationship\n      holds for the "iterkeys()" and "itervalues()" methods: "pairs =\n      zip(d.itervalues(), d.iterkeys())" provides the same value for\n      "pairs". Another way to create the same list is "pairs = [(v, k)\n      for (k, v) in d.iteritems()]".\n\n   iteritems()\n\n      Return an iterator over the dictionary\'s "(key, value)" pairs.\n      See the note for "dict.items()".\n\n      Using "iteritems()" while adding or deleting entries in the\n      dictionary may raise a "RuntimeError" or fail to iterate over\n      all entries.\n\n      New in version 2.2.\n\n   iterkeys()\n\n      Return an iterator over the dictionary\'s keys.  See the note for\n      "dict.items()".\n\n      Using "iterkeys()" while adding or deleting entries in the\n      dictionary may raise a "RuntimeError" or fail to iterate over\n      all entries.\n\n      New in version 2.2.\n\n   itervalues()\n\n      Return an iterator over the dictionary\'s values.  See the note\n      for "dict.items()".\n\n      Using "itervalues()" while adding or deleting entries in the\n      dictionary may raise a "RuntimeError" or fail to iterate over\n      all entries.\n\n      New in version 2.2.\n\n   keys()\n\n      Return a copy of the dictionary\'s list of keys.  See the note\n      for "dict.items()".\n\n   pop(key[, default])\n\n      If *key* is in the dictionary, remove it and return its value,\n      else return *default*.  If *default* is not given and *key* is\n      not in the dictionary, a "KeyError" is raised.\n\n      New in version 2.3.\n\n   popitem()\n\n      Remove and return an arbitrary "(key, value)" pair from the\n      dictionary.\n\n      "popitem()" is useful to destructively iterate over a\n      dictionary, as often used in set algorithms.  If the dictionary\n      is empty, calling "popitem()" raises a "KeyError".\n\n   setdefault(key[, default])\n\n      If *key* is in the dictionary, return its value.  If not, insert\n      *key* with a value of *default* and return *default*.  *default*\n      defaults to "None".\n\n   update([other])\n\n      Update the dictionary with the key/value pairs from *other*,\n      overwriting existing keys.  Return "None".\n\n      "update()" accepts either another dictionary object or an\n      iterable of key/value pairs (as tuples or other iterables of\n      length two).  If keyword arguments are specified, the dictionary\n      is then updated with those key/value pairs: "d.update(red=1,\n      blue=2)".\n\n      Changed in version 2.4: Allowed the argument to be an iterable\n      of key/value pairs and allowed keyword arguments.\n\n   values()\n\n      Return a copy of the dictionary\'s list of values.  See the note\n      for "dict.items()".\n\n   viewitems()\n\n      Return a new view of the dictionary\'s items ("(key, value)"\n      pairs).  See below for documentation of view objects.\n\n      New in version 2.7.\n\n   viewkeys()\n\n      Return a new view of the dictionary\'s keys.  See below for\n      documentation of view objects.\n\n      New in version 2.7.\n\n   viewvalues()\n\n      Return a new view of the dictionary\'s values.  See below for\n      documentation of view objects.\n\n      New in version 2.7.\n\n   Dictionaries compare equal if and only if they have the same "(key,\n   value)" pairs.\n\n\nDictionary view objects\n=======================\n\nThe objects returned by "dict.viewkeys()", "dict.viewvalues()" and\n"dict.viewitems()" are *view objects*.  They provide a dynamic view on\nthe dictionary\'s entries, which means that when the dictionary\nchanges, the view reflects these changes.\n\nDictionary views can be iterated over to yield their respective data,\nand support membership tests:\n\nlen(dictview)\n\n   Return the number of entries in the dictionary.\n\niter(dictview)\n\n   Return an iterator over the keys, values or items (represented as\n   tuples of "(key, value)") in the dictionary.\n\n   Keys and values are iterated over in an arbitrary order which is\n   non-random, varies across Python implementations, and depends on\n   the dictionary\'s history of insertions and deletions. If keys,\n   values and items views are iterated over with no intervening\n   modifications to the dictionary, the order of items will directly\n   correspond.  This allows the creation of "(value, key)" pairs using\n   "zip()": "pairs = zip(d.values(), d.keys())".  Another way to\n   create the same list is "pairs = [(v, k) for (k, v) in d.items()]".\n\n   Iterating views while adding or deleting entries in the dictionary\n   may raise a "RuntimeError" or fail to iterate over all entries.\n\nx in dictview\n\n   Return "True" if *x* is in the underlying dictionary\'s keys, values\n   or items (in the latter case, *x* should be a "(key, value)"\n   tuple).\n\nKeys views are set-like since their entries are unique and hashable.\nIf all values are hashable, so that (key, value) pairs are unique and\nhashable, then the items view is also set-like.  (Values views are not\ntreated as set-like since the entries are generally not unique.)  Then\nthese set operations are available ("other" refers either to another\nview or a set):\n\ndictview & other\n\n   Return the intersection of the dictview and the other object as a\n   new set.\n\ndictview | other\n\n   Return the union of the dictview and the other object as a new set.\n\ndictview - other\n\n   Return the difference between the dictview and the other object\n   (all elements in *dictview* that aren\'t in *other*) as a new set.\n\ndictview ^ other\n\n   Return the symmetric difference (all elements either in *dictview*\n   or *other*, but not in both) of the dictview and the other object\n   as a new set.\n\nAn example of dictionary view usage:\n\n   >>> dishes = {\'eggs\': 2, \'sausage\': 1, \'bacon\': 1, \'spam\': 500}\n   >>> keys = dishes.viewkeys()\n   >>> values = dishes.viewvalues()\n\n   >>> # iteration\n   >>> n = 0\n   >>> for val in values:\n   ...     n += val\n   >>> print(n)\n   504\n\n   >>> # keys and values are iterated over in the same order\n   >>> list(keys)\n   [\'eggs\', \'bacon\', \'sausage\', \'spam\']\n   >>> list(values)\n   [2, 1, 1, 500]\n\n   >>> # view objects are dynamic and reflect dict changes\n   >>> del dishes[\'eggs\']\n   >>> del dishes[\'sausage\']\n   >>> list(keys)\n   [\'spam\', \'bacon\']\n\n   >>> # set operations\n   >>> keys & {\'eggs\', \'bacon\', \'salad\'}\n   {\'bacon\'}\n',
- 'typesmethods': u'\nMethods\n*******\n\nMethods are functions that are called using the attribute notation.\nThere are two flavors: built-in methods (such as "append()" on lists)\nand class instance methods.  Built-in methods are described with the\ntypes that support them.\n\nThe implementation adds two special read-only attributes to class\ninstance methods: "m.im_self" is the object on which the method\noperates, and "m.im_func" is the function implementing the method.\nCalling "m(arg-1, arg-2, ..., arg-n)" is completely equivalent to\ncalling "m.im_func(m.im_self, arg-1, arg-2, ..., arg-n)".\n\nClass instance methods are either *bound* or *unbound*, referring to\nwhether the method was accessed through an instance or a class,\nrespectively.  When a method is unbound, its "im_self" attribute will\nbe "None" and if called, an explicit "self" object must be passed as\nthe first argument.  In this case, "self" must be an instance of the\nunbound method\'s class (or a subclass of that class), otherwise a\n"TypeError" is raised.\n\nLike function objects, methods objects support getting arbitrary\nattributes. However, since method attributes are actually stored on\nthe underlying function object ("meth.im_func"), setting method\nattributes on either bound or unbound methods is disallowed.\nAttempting to set an attribute on a method results in an\n"AttributeError" being raised.  In order to set a method attribute,\nyou need to explicitly set it on the underlying function object:\n\n   >>> class C:\n   ...     def method(self):\n   ...         pass\n   ...\n   >>> c = C()\n   >>> c.method.whoami = \'my name is method\'  # can\'t set on the method\n   Traceback (most recent call last):\n     File "<stdin>", line 1, in <module>\n   AttributeError: \'instancemethod\' object has no attribute \'whoami\'\n   >>> c.method.im_func.whoami = \'my name is method\'\n   >>> c.method.whoami\n   \'my name is method\'\n\nSee The standard type hierarchy for more information.\n',
- 'typesmodules': u'\nModules\n*******\n\nThe only special operation on a module is attribute access: "m.name",\nwhere *m* is a module and *name* accesses a name defined in *m*\'s\nsymbol table. Module attributes can be assigned to.  (Note that the\n"import" statement is not, strictly speaking, an operation on a module\nobject; "import foo" does not require a module object named *foo* to\nexist, rather it requires an (external) *definition* for a module\nnamed *foo* somewhere.)\n\nA special attribute of every module is "__dict__". This is the\ndictionary containing the module\'s symbol table. Modifying this\ndictionary will actually change the module\'s symbol table, but direct\nassignment to the "__dict__" attribute is not possible (you can write\n"m.__dict__[\'a\'] = 1", which defines "m.a" to be "1", but you can\'t\nwrite "m.__dict__ = {}").  Modifying "__dict__" directly is not\nrecommended.\n\nModules built into the interpreter are written like this: "<module\n\'sys\' (built-in)>".  If loaded from a file, they are written as\n"<module \'os\' from \'/usr/local/lib/pythonX.Y/os.pyc\'>".\n',
- 'typesseq': u'\nSequence Types --- "str", "unicode", "list", "tuple", "bytearray", "buffer", "xrange"\n*************************************************************************************\n\nThere are seven sequence types: strings, Unicode strings, lists,\ntuples, bytearrays, buffers, and xrange objects.\n\nFor other containers see the built in "dict" and "set" classes, and\nthe "collections" module.\n\nString literals are written in single or double quotes: "\'xyzzy\'",\n""frobozz"".  See String literals for more about string literals.\nUnicode strings are much like strings, but are specified in the syntax\nusing a preceding "\'u\'" character: "u\'abc\'", "u"def"". In addition to\nthe functionality described here, there are also string-specific\nmethods described in the String Methods section. Lists are constructed\nwith square brackets, separating items with commas: "[a, b, c]".\nTuples are constructed by the comma operator (not within square\nbrackets), with or without enclosing parentheses, but an empty tuple\nmust have the enclosing parentheses, such as "a, b, c" or "()".  A\nsingle item tuple must have a trailing comma, such as "(d,)".\n\nBytearray objects are created with the built-in function\n"bytearray()".\n\nBuffer objects are not directly supported by Python syntax, but can be\ncreated by calling the built-in function "buffer()".  They don\'t\nsupport concatenation or repetition.\n\nObjects of type xrange are similar to buffers in that there is no\nspecific syntax to create them, but they are created using the\n"xrange()" function.  They don\'t support slicing, concatenation or\nrepetition, and using "in", "not in", "min()" or "max()" on them is\ninefficient.\n\nMost sequence types support the following operations.  The "in" and\n"not in" operations have the same priorities as the comparison\noperations.  The "+" and "*" operations have the same priority as the\ncorresponding numeric operations. [3] Additional methods are provided\nfor Mutable Sequence Types.\n\nThis table lists the sequence operations sorted in ascending priority.\nIn the table, *s* and *t* are sequences of the same type; *n*, *i* and\n*j* are integers:\n\n+--------------------+----------------------------------+------------+\n| Operation          | Result                           | Notes      |\n+====================+==================================+============+\n| "x in s"           | "True" if an item of *s* is      | (1)        |\n|                    | equal to *x*, else "False"       |            |\n+--------------------+----------------------------------+------------+\n| "x not in s"       | "False" if an item of *s* is     | (1)        |\n|                    | equal to *x*, else "True"        |            |\n+--------------------+----------------------------------+------------+\n| "s + t"            | the concatenation of *s* and *t* | (6)        |\n+--------------------+----------------------------------+------------+\n| "s * n, n * s"     | equivalent to adding *s* to      | (2)        |\n|                    | itself *n* times                 |            |\n+--------------------+----------------------------------+------------+\n| "s[i]"             | *i*th item of *s*, origin 0      | (3)        |\n+--------------------+----------------------------------+------------+\n| "s[i:j]"           | slice of *s* from *i* to *j*     | (3)(4)     |\n+--------------------+----------------------------------+------------+\n| "s[i:j:k]"         | slice of *s* from *i* to *j*     | (3)(5)     |\n|                    | with step *k*                    |            |\n+--------------------+----------------------------------+------------+\n| "len(s)"           | length of *s*                    |            |\n+--------------------+----------------------------------+------------+\n| "min(s)"           | smallest item of *s*             |            |\n+--------------------+----------------------------------+------------+\n| "max(s)"           | largest item of *s*              |            |\n+--------------------+----------------------------------+------------+\n| "s.index(x)"       | index of the first occurrence of |            |\n|                    | *x* in *s*                       |            |\n+--------------------+----------------------------------+------------+\n| "s.count(x)"       | total number of occurrences of   |            |\n|                    | *x* in *s*                       |            |\n+--------------------+----------------------------------+------------+\n\nSequence types also support comparisons. In particular, tuples and\nlists are compared lexicographically by comparing corresponding\nelements. This means that to compare equal, every element must compare\nequal and the two sequences must be of the same type and have the same\nlength. (For full details see Comparisons in the language reference.)\n\nNotes:\n\n1. When *s* is a string or Unicode string object the "in" and "not\n   in" operations act like a substring test.  In Python versions\n   before 2.3, *x* had to be a string of length 1. In Python 2.3 and\n   beyond, *x* may be a string of any length.\n\n2. Values of *n* less than "0" are treated as "0" (which yields an\n   empty sequence of the same type as *s*).  Note that items in the\n   sequence *s* are not copied; they are referenced multiple times.\n   This often haunts new Python programmers; consider:\n\n   >>> lists = [[]] * 3\n   >>> lists\n   [[], [], []]\n   >>> lists[0].append(3)\n   >>> lists\n   [[3], [3], [3]]\n\n   What has happened is that "[[]]" is a one-element list containing\n   an empty list, so all three elements of "[[]] * 3" are references\n   to this single empty list.  Modifying any of the elements of\n   "lists" modifies this single list. You can create a list of\n   different lists this way:\n\n   >>> lists = [[] for i in range(3)]\n   >>> lists[0].append(3)\n   >>> lists[1].append(5)\n   >>> lists[2].append(7)\n   >>> lists\n   [[3], [5], [7]]\n\n   Further explanation is available in the FAQ entry How do I create a\n   multidimensional list?.\n\n3. If *i* or *j* is negative, the index is relative to the end of\n   the string: "len(s) + i" or "len(s) + j" is substituted.  But note\n   that "-0" is still "0".\n\n4. The slice of *s* from *i* to *j* is defined as the sequence of\n   items with index *k* such that "i <= k < j".  If *i* or *j* is\n   greater than "len(s)", use "len(s)".  If *i* is omitted or "None",\n   use "0".  If *j* is omitted or "None", use "len(s)".  If *i* is\n   greater than or equal to *j*, the slice is empty.\n\n5. The slice of *s* from *i* to *j* with step *k* is defined as the\n   sequence of items with index  "x = i + n*k" such that "0 <= n <\n   (j-i)/k".  In other words, the indices are "i", "i+k", "i+2*k",\n   "i+3*k" and so on, stopping when *j* is reached (but never\n   including *j*).  If *i* or *j* is greater than "len(s)", use\n   "len(s)".  If *i* or *j* are omitted or "None", they become "end"\n   values (which end depends on the sign of *k*).  Note, *k* cannot be\n   zero. If *k* is "None", it is treated like "1".\n\n6. **CPython implementation detail:** If *s* and *t* are both\n   strings, some Python implementations such as CPython can usually\n   perform an in-place optimization for assignments of the form "s = s\n   + t" or "s += t".  When applicable, this optimization makes\n   quadratic run-time much less likely.  This optimization is both\n   version and implementation dependent.  For performance sensitive\n   code, it is preferable to use the "str.join()" method which assures\n   consistent linear concatenation performance across versions and\n   implementations.\n\n   Changed in version 2.4: Formerly, string concatenation never\n   occurred in-place.\n\n\nString Methods\n==============\n\nBelow are listed the string methods which both 8-bit strings and\nUnicode objects support.  Some of them are also available on\n"bytearray" objects.\n\nIn addition, Python\'s strings support the sequence type methods\ndescribed in the Sequence Types --- str, unicode, list, tuple,\nbytearray, buffer, xrange section. To output formatted strings use\ntemplate strings or the "%" operator described in the String\nFormatting Operations section. Also, see the "re" module for string\nfunctions based on regular expressions.\n\nstr.capitalize()\n\n   Return a copy of the string with its first character capitalized\n   and the rest lowercased.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.center(width[, fillchar])\n\n   Return centered in a string of length *width*. Padding is done\n   using the specified *fillchar* (default is a space).\n\n   Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.count(sub[, start[, end]])\n\n   Return the number of non-overlapping occurrences of substring *sub*\n   in the range [*start*, *end*].  Optional arguments *start* and\n   *end* are interpreted as in slice notation.\n\nstr.decode([encoding[, errors]])\n\n   Decodes the string using the codec registered for *encoding*.\n   *encoding* defaults to the default string encoding.  *errors* may\n   be given to set a different error handling scheme.  The default is\n   "\'strict\'", meaning that encoding errors raise "UnicodeError".\n   Other possible values are "\'ignore\'", "\'replace\'" and any other\n   name registered via "codecs.register_error()", see section Codec\n   Base Classes.\n\n   New in version 2.2.\n\n   Changed in version 2.3: Support for other error handling schemes\n   added.\n\n   Changed in version 2.7: Support for keyword arguments added.\n\nstr.encode([encoding[, errors]])\n\n   Return an encoded version of the string.  Default encoding is the\n   current default string encoding.  *errors* may be given to set a\n   different error handling scheme.  The default for *errors* is\n   "\'strict\'", meaning that encoding errors raise a "UnicodeError".\n   Other possible values are "\'ignore\'", "\'replace\'",\n   "\'xmlcharrefreplace\'", "\'backslashreplace\'" and any other name\n   registered via "codecs.register_error()", see section Codec Base\n   Classes. For a list of possible encodings, see section Standard\n   Encodings.\n\n   New in version 2.0.\n\n   Changed in version 2.3: Support for "\'xmlcharrefreplace\'" and\n   "\'backslashreplace\'" and other error handling schemes added.\n\n   Changed in version 2.7: Support for keyword arguments added.\n\nstr.endswith(suffix[, start[, end]])\n\n   Return "True" if the string ends with the specified *suffix*,\n   otherwise return "False".  *suffix* can also be a tuple of suffixes\n   to look for.  With optional *start*, test beginning at that\n   position.  With optional *end*, stop comparing at that position.\n\n   Changed in version 2.5: Accept tuples as *suffix*.\n\nstr.expandtabs([tabsize])\n\n   Return a copy of the string where all tab characters are replaced\n   by one or more spaces, depending on the current column and the\n   given tab size.  Tab positions occur every *tabsize* characters\n   (default is 8, giving tab positions at columns 0, 8, 16 and so on).\n   To expand the string, the current column is set to zero and the\n   string is examined character by character.  If the character is a\n   tab ("\\t"), one or more space characters are inserted in the result\n   until the current column is equal to the next tab position. (The\n   tab character itself is not copied.)  If the character is a newline\n   ("\\n") or return ("\\r"), it is copied and the current column is\n   reset to zero.  Any other character is copied unchanged and the\n   current column is incremented by one regardless of how the\n   character is represented when printed.\n\n   >>> \'01\\t012\\t0123\\t01234\'.expandtabs()\n   \'01      012     0123    01234\'\n   >>> \'01\\t012\\t0123\\t01234\'.expandtabs(4)\n   \'01  012 0123    01234\'\n\nstr.find(sub[, start[, end]])\n\n   Return the lowest index in the string where substring *sub* is\n   found within the slice "s[start:end]".  Optional arguments *start*\n   and *end* are interpreted as in slice notation.  Return "-1" if\n   *sub* is not found.\n\n   Note: The "find()" method should be used only if you need to know\n     the position of *sub*.  To check if *sub* is a substring or not,\n     use the "in" operator:\n\n        >>> \'Py\' in \'Python\'\n        True\n\nstr.format(*args, **kwargs)\n\n   Perform a string formatting operation.  The string on which this\n   method is called can contain literal text or replacement fields\n   delimited by braces "{}".  Each replacement field contains either\n   the numeric index of a positional argument, or the name of a\n   keyword argument.  Returns a copy of the string where each\n   replacement field is replaced with the string value of the\n   corresponding argument.\n\n   >>> "The sum of 1 + 2 is {0}".format(1+2)\n   \'The sum of 1 + 2 is 3\'\n\n   See Format String Syntax for a description of the various\n   formatting options that can be specified in format strings.\n\n   This method of string formatting is the new standard in Python 3,\n   and should be preferred to the "%" formatting described in String\n   Formatting Operations in new code.\n\n   New in version 2.6.\n\nstr.index(sub[, start[, end]])\n\n   Like "find()", but raise "ValueError" when the substring is not\n   found.\n\nstr.isalnum()\n\n   Return true if all characters in the string are alphanumeric and\n   there is at least one character, false otherwise.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.isalpha()\n\n   Return true if all characters in the string are alphabetic and\n   there is at least one character, false otherwise.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.isdigit()\n\n   Return true if all characters in the string are digits and there is\n   at least one character, false otherwise.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.islower()\n\n   Return true if all cased characters [4] in the string are lowercase\n   and there is at least one cased character, false otherwise.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.isspace()\n\n   Return true if there are only whitespace characters in the string\n   and there is at least one character, false otherwise.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.istitle()\n\n   Return true if the string is a titlecased string and there is at\n   least one character, for example uppercase characters may only\n   follow uncased characters and lowercase characters only cased ones.\n   Return false otherwise.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.isupper()\n\n   Return true if all cased characters [4] in the string are uppercase\n   and there is at least one cased character, false otherwise.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.join(iterable)\n\n   Return a string which is the concatenation of the strings in the\n   *iterable* *iterable*.  The separator between elements is the\n   string providing this method.\n\nstr.ljust(width[, fillchar])\n\n   Return the string left justified in a string of length *width*.\n   Padding is done using the specified *fillchar* (default is a\n   space).  The original string is returned if *width* is less than or\n   equal to "len(s)".\n\n   Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.lower()\n\n   Return a copy of the string with all the cased characters [4]\n   converted to lowercase.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.lstrip([chars])\n\n   Return a copy of the string with leading characters removed.  The\n   *chars* argument is a string specifying the set of characters to be\n   removed.  If omitted or "None", the *chars* argument defaults to\n   removing whitespace.  The *chars* argument is not a prefix; rather,\n   all combinations of its values are stripped:\n\n   >>> \'   spacious   \'.lstrip()\n   \'spacious   \'\n   >>> \'www.example.com\'.lstrip(\'cmowz.\')\n   \'example.com\'\n\n   Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.partition(sep)\n\n   Split the string at the first occurrence of *sep*, and return a\n   3-tuple containing the part before the separator, the separator\n   itself, and the part after the separator.  If the separator is not\n   found, return a 3-tuple containing the string itself, followed by\n   two empty strings.\n\n   New in version 2.5.\n\nstr.replace(old, new[, count])\n\n   Return a copy of the string with all occurrences of substring *old*\n   replaced by *new*.  If the optional argument *count* is given, only\n   the first *count* occurrences are replaced.\n\nstr.rfind(sub[, start[, end]])\n\n   Return the highest index in the string where substring *sub* is\n   found, such that *sub* is contained within "s[start:end]".\n   Optional arguments *start* and *end* are interpreted as in slice\n   notation.  Return "-1" on failure.\n\nstr.rindex(sub[, start[, end]])\n\n   Like "rfind()" but raises "ValueError" when the substring *sub* is\n   not found.\n\nstr.rjust(width[, fillchar])\n\n   Return the string right justified in a string of length *width*.\n   Padding is done using the specified *fillchar* (default is a\n   space). The original string is returned if *width* is less than or\n   equal to "len(s)".\n\n   Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.rpartition(sep)\n\n   Split the string at the last occurrence of *sep*, and return a\n   3-tuple containing the part before the separator, the separator\n   itself, and the part after the separator.  If the separator is not\n   found, return a 3-tuple containing two empty strings, followed by\n   the string itself.\n\n   New in version 2.5.\n\nstr.rsplit([sep[, maxsplit]])\n\n   Return a list of the words in the string, using *sep* as the\n   delimiter string. If *maxsplit* is given, at most *maxsplit* splits\n   are done, the *rightmost* ones.  If *sep* is not specified or\n   "None", any whitespace string is a separator.  Except for splitting\n   from the right, "rsplit()" behaves like "split()" which is\n   described in detail below.\n\n   New in version 2.4.\n\nstr.rstrip([chars])\n\n   Return a copy of the string with trailing characters removed.  The\n   *chars* argument is a string specifying the set of characters to be\n   removed.  If omitted or "None", the *chars* argument defaults to\n   removing whitespace.  The *chars* argument is not a suffix; rather,\n   all combinations of its values are stripped:\n\n   >>> \'   spacious   \'.rstrip()\n   \'   spacious\'\n   >>> \'mississippi\'.rstrip(\'ipz\')\n   \'mississ\'\n\n   Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.split([sep[, maxsplit]])\n\n   Return a list of the words in the string, using *sep* as the\n   delimiter string.  If *maxsplit* is given, at most *maxsplit*\n   splits are done (thus, the list will have at most "maxsplit+1"\n   elements).  If *maxsplit* is not specified or "-1", then there is\n   no limit on the number of splits (all possible splits are made).\n\n   If *sep* is given, consecutive delimiters are not grouped together\n   and are deemed to delimit empty strings (for example,\n   "\'1,,2\'.split(\',\')" returns "[\'1\', \'\', \'2\']").  The *sep* argument\n   may consist of multiple characters (for example,\n   "\'1<>2<>3\'.split(\'<>\')" returns "[\'1\', \'2\', \'3\']"). Splitting an\n   empty string with a specified separator returns "[\'\']".\n\n   If *sep* is not specified or is "None", a different splitting\n   algorithm is applied: runs of consecutive whitespace are regarded\n   as a single separator, and the result will contain no empty strings\n   at the start or end if the string has leading or trailing\n   whitespace.  Consequently, splitting an empty string or a string\n   consisting of just whitespace with a "None" separator returns "[]".\n\n   For example, "\' 1  2   3  \'.split()" returns "[\'1\', \'2\', \'3\']", and\n   "\'  1  2   3  \'.split(None, 1)" returns "[\'1\', \'2   3  \']".\n\nstr.splitlines([keepends])\n\n   Return a list of the lines in the string, breaking at line\n   boundaries. This method uses the *universal newlines* approach to\n   splitting lines. Line breaks are not included in the resulting list\n   unless *keepends* is given and true.\n\n   Python recognizes ""\\r"", ""\\n"", and ""\\r\\n"" as line boundaries\n   for 8-bit strings.\n\n   For example:\n\n      >>> \'ab c\\n\\nde fg\\rkl\\r\\n\'.splitlines()\n      [\'ab c\', \'\', \'de fg\', \'kl\']\n      >>> \'ab c\\n\\nde fg\\rkl\\r\\n\'.splitlines(True)\n      [\'ab c\\n\', \'\\n\', \'de fg\\r\', \'kl\\r\\n\']\n\n   Unlike "split()" when a delimiter string *sep* is given, this\n   method returns an empty list for the empty string, and a terminal\n   line break does not result in an extra line:\n\n      >>> "".splitlines()\n      []\n      >>> "One line\\n".splitlines()\n      [\'One line\']\n\n   For comparison, "split(\'\\n\')" gives:\n\n      >>> \'\'.split(\'\\n\')\n      [\'\']\n      >>> \'Two lines\\n\'.split(\'\\n\')\n      [\'Two lines\', \'\']\n\nunicode.splitlines([keepends])\n\n   Return a list of the lines in the string, like "str.splitlines()".\n   However, the Unicode method splits on the following line\n   boundaries, which are a superset of the *universal newlines*\n   recognized for 8-bit strings.\n\n   +-------------------------+-------------------------------+\n   | Representation          | Description                   |\n   +=========================+===============================+\n   | "\\n"                    | Line Feed                     |\n   +-------------------------+-------------------------------+\n   | "\\r"                    | Carriage Return               |\n   +-------------------------+-------------------------------+\n   | "\\r\\n"                  | Carriage Return + Line Feed   |\n   +-------------------------+-------------------------------+\n   | "\\v" or "\\x0b"          | Line Tabulation               |\n   +-------------------------+-------------------------------+\n   | "\\f" or "\\x0c"          | Form Feed                     |\n   +-------------------------+-------------------------------+\n   | "\\x1c"                  | File Separator                |\n   +-------------------------+-------------------------------+\n   | "\\x1d"                  | Group Separator               |\n   +-------------------------+-------------------------------+\n   | "\\x1e"                  | Record Separator              |\n   +-------------------------+-------------------------------+\n   | "\\x85"                  | Next Line (C1 Control Code)   |\n   +-------------------------+-------------------------------+\n   | "\\u2028"                | Line Separator                |\n   +-------------------------+-------------------------------+\n   | "\\u2029"                | Paragraph Separator           |\n   +-------------------------+-------------------------------+\n\n   Changed in version 2.7: "\\v" and "\\f" added to list of line\n   boundaries.\n\nstr.startswith(prefix[, start[, end]])\n\n   Return "True" if string starts with the *prefix*, otherwise return\n   "False". *prefix* can also be a tuple of prefixes to look for.\n   With optional *start*, test string beginning at that position.\n   With optional *end*, stop comparing string at that position.\n\n   Changed in version 2.5: Accept tuples as *prefix*.\n\nstr.strip([chars])\n\n   Return a copy of the string with the leading and trailing\n   characters removed. The *chars* argument is a string specifying the\n   set of characters to be removed. If omitted or "None", the *chars*\n   argument defaults to removing whitespace. The *chars* argument is\n   not a prefix or suffix; rather, all combinations of its values are\n   stripped:\n\n   >>> \'   spacious   \'.strip()\n   \'spacious\'\n   >>> \'www.example.com\'.strip(\'cmowz.\')\n   \'example\'\n\n   Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.swapcase()\n\n   Return a copy of the string with uppercase characters converted to\n   lowercase and vice versa.\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.title()\n\n   Return a titlecased version of the string where words start with an\n   uppercase character and the remaining characters are lowercase.\n\n   The algorithm uses a simple language-independent definition of a\n   word as groups of consecutive letters.  The definition works in\n   many contexts but it means that apostrophes in contractions and\n   possessives form word boundaries, which may not be the desired\n   result:\n\n      >>> "they\'re bill\'s friends from the UK".title()\n      "They\'Re Bill\'S Friends From The Uk"\n\n   A workaround for apostrophes can be constructed using regular\n   expressions:\n\n      >>> import re\n      >>> def titlecase(s):\n      ...     return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n      ...                   lambda mo: mo.group(0)[0].upper() +\n      ...                              mo.group(0)[1:].lower(),\n      ...                   s)\n      ...\n      >>> titlecase("they\'re bill\'s friends.")\n      "They\'re Bill\'s Friends."\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.translate(table[, deletechars])\n\n   Return a copy of the string where all characters occurring in the\n   optional argument *deletechars* are removed, and the remaining\n   characters have been mapped through the given translation table,\n   which must be a string of length 256.\n\n   You can use the "maketrans()" helper function in the "string"\n   module to create a translation table. For string objects, set the\n   *table* argument to "None" for translations that only delete\n   characters:\n\n   >>> \'read this short text\'.translate(None, \'aeiou\')\n   \'rd ths shrt txt\'\n\n   New in version 2.6: Support for a "None" *table* argument.\n\n   For Unicode objects, the "translate()" method does not accept the\n   optional *deletechars* argument.  Instead, it returns a copy of the\n   *s* where all characters have been mapped through the given\n   translation table which must be a mapping of Unicode ordinals to\n   Unicode ordinals, Unicode strings or "None". Unmapped characters\n   are left untouched. Characters mapped to "None" are deleted.  Note,\n   a more flexible approach is to create a custom character mapping\n   codec using the "codecs" module (see "encodings.cp1251" for an\n   example).\n\nstr.upper()\n\n   Return a copy of the string with all the cased characters [4]\n   converted to uppercase.  Note that "str.upper().isupper()" might be\n   "False" if "s" contains uncased characters or if the Unicode\n   category of the resulting character(s) is not "Lu" (Letter,\n   uppercase), but e.g. "Lt" (Letter, titlecase).\n\n   For 8-bit strings, this method is locale-dependent.\n\nstr.zfill(width)\n\n   Return the numeric string left filled with zeros in a string of\n   length *width*.  A sign prefix is handled correctly.  The original\n   string is returned if *width* is less than or equal to "len(s)".\n\n   New in version 2.2.2.\n\nThe following methods are present only on unicode objects:\n\nunicode.isnumeric()\n\n   Return "True" if there are only numeric characters in S, "False"\n   otherwise. Numeric characters include digit characters, and all\n   characters that have the Unicode numeric value property, e.g.\n   U+2155, VULGAR FRACTION ONE FIFTH.\n\nunicode.isdecimal()\n\n   Return "True" if there are only decimal characters in S, "False"\n   otherwise. Decimal characters include digit characters, and all\n   characters that can be used to form decimal-radix numbers, e.g.\n   U+0660, ARABIC-INDIC DIGIT ZERO.\n\n\nString Formatting Operations\n============================\n\nString and Unicode objects have one unique built-in operation: the "%"\noperator (modulo).  This is also known as the string *formatting* or\n*interpolation* operator.  Given "format % values" (where *format* is\na string or Unicode object), "%" conversion specifications in *format*\nare replaced with zero or more elements of *values*.  The effect is\nsimilar to the using "sprintf()" in the C language.  If *format* is a\nUnicode object, or if any of the objects being converted using the\n"%s" conversion are Unicode objects, the result will also be a Unicode\nobject.\n\nIf *format* requires a single argument, *values* may be a single non-\ntuple object. [5]  Otherwise, *values* must be a tuple with exactly\nthe number of items specified by the format string, or a single\nmapping object (for example, a dictionary).\n\nA conversion specifier contains two or more characters and has the\nfollowing components, which must occur in this order:\n\n1. The "\'%\'" character, which marks the start of the specifier.\n\n2. Mapping key (optional), consisting of a parenthesised sequence\n   of characters (for example, "(somename)").\n\n3. Conversion flags (optional), which affect the result of some\n   conversion types.\n\n4. Minimum field width (optional).  If specified as an "\'*\'"\n   (asterisk), the actual width is read from the next element of the\n   tuple in *values*, and the object to convert comes after the\n   minimum field width and optional precision.\n\n5. Precision (optional), given as a "\'.\'" (dot) followed by the\n   precision.  If specified as "\'*\'" (an asterisk), the actual width\n   is read from the next element of the tuple in *values*, and the\n   value to convert comes after the precision.\n\n6. Length modifier (optional).\n\n7. Conversion type.\n\nWhen the right argument is a dictionary (or other mapping type), then\nthe formats in the string *must* include a parenthesised mapping key\ninto that dictionary inserted immediately after the "\'%\'" character.\nThe mapping key selects the value to be formatted from the mapping.\nFor example:\n\n>>> print \'%(language)s has %(number)03d quote types.\' % \\\n...       {"language": "Python", "number": 2}\nPython has 002 quote types.\n\nIn this case no "*" specifiers may occur in a format (since they\nrequire a sequential parameter list).\n\nThe conversion flag characters are:\n\n+-----------+-----------------------------------------------------------------------+\n| Flag      | Meaning                                                               |\n+===========+=======================================================================+\n| "\'#\'"     | The value conversion will use the "alternate form" (where defined     |\n|           | below).                                                               |\n+-----------+-----------------------------------------------------------------------+\n| "\'0\'"     | The conversion will be zero padded for numeric values.                |\n+-----------+-----------------------------------------------------------------------+\n| "\'-\'"     | The converted value is left adjusted (overrides the "\'0\'" conversion  |\n|           | if both are given).                                                   |\n+-----------+-----------------------------------------------------------------------+\n| "\' \'"     | (a space) A blank should be left before a positive number (or empty   |\n|           | string) produced by a signed conversion.                              |\n+-----------+-----------------------------------------------------------------------+\n| "\'+\'"     | A sign character ("\'+\'" or "\'-\'") will precede the conversion         |\n|           | (overrides a "space" flag).                                           |\n+-----------+-----------------------------------------------------------------------+\n\nA length modifier ("h", "l", or "L") may be present, but is ignored as\nit is not necessary for Python -- so e.g. "%ld" is identical to "%d".\n\nThe conversion types are:\n\n+--------------+-------------------------------------------------------+---------+\n| Conversion   | Meaning                                               | Notes   |\n+==============+=======================================================+=========+\n| "\'d\'"        | Signed integer decimal.                               |         |\n+--------------+-------------------------------------------------------+---------+\n| "\'i\'"        | Signed integer decimal.                               |         |\n+--------------+-------------------------------------------------------+---------+\n| "\'o\'"        | Signed octal value.                                   | (1)     |\n+--------------+-------------------------------------------------------+---------+\n| "\'u\'"        | Obsolete type -- it is identical to "\'d\'".            | (7)     |\n+--------------+-------------------------------------------------------+---------+\n| "\'x\'"        | Signed hexadecimal (lowercase).                       | (2)     |\n+--------------+-------------------------------------------------------+---------+\n| "\'X\'"        | Signed hexadecimal (uppercase).                       | (2)     |\n+--------------+-------------------------------------------------------+---------+\n| "\'e\'"        | Floating point exponential format (lowercase).        | (3)     |\n+--------------+-------------------------------------------------------+---------+\n| "\'E\'"        | Floating point exponential format (uppercase).        | (3)     |\n+--------------+-------------------------------------------------------+---------+\n| "\'f\'"        | Floating point decimal format.                        | (3)     |\n+--------------+-------------------------------------------------------+---------+\n| "\'F\'"        | Floating point decimal format.                        | (3)     |\n+--------------+-------------------------------------------------------+---------+\n| "\'g\'"        | Floating point format. Uses lowercase exponential     | (4)     |\n|              | format if exponent is less than -4 or not less than   |         |\n|              | precision, decimal format otherwise.                  |         |\n+--------------+-------------------------------------------------------+---------+\n| "\'G\'"        | Floating point format. Uses uppercase exponential     | (4)     |\n|              | format if exponent is less than -4 or not less than   |         |\n|              | precision, decimal format otherwise.                  |         |\n+--------------+-------------------------------------------------------+---------+\n| "\'c\'"        | Single character (accepts integer or single character |         |\n|              | string).                                              |         |\n+--------------+-------------------------------------------------------+---------+\n| "\'r\'"        | String (converts any Python object using repr()).     | (5)     |\n+--------------+-------------------------------------------------------+---------+\n| "\'s\'"        | String (converts any Python object using "str()").    | (6)     |\n+--------------+-------------------------------------------------------+---------+\n| "\'%\'"        | No argument is converted, results in a "\'%\'"          |         |\n|              | character in the result.                              |         |\n+--------------+-------------------------------------------------------+---------+\n\nNotes:\n\n1. The alternate form causes a leading zero ("\'0\'") to be inserted\n   between left-hand padding and the formatting of the number if the\n   leading character of the result is not already a zero.\n\n2. The alternate form causes a leading "\'0x\'" or "\'0X\'" (depending\n   on whether the "\'x\'" or "\'X\'" format was used) to be inserted\n   between left-hand padding and the formatting of the number if the\n   leading character of the result is not already a zero.\n\n3. The alternate form causes the result to always contain a decimal\n   point, even if no digits follow it.\n\n   The precision determines the number of digits after the decimal\n   point and defaults to 6.\n\n4. The alternate form causes the result to always contain a decimal\n   point, and trailing zeroes are not removed as they would otherwise\n   be.\n\n   The precision determines the number of significant digits before\n   and after the decimal point and defaults to 6.\n\n5. The "%r" conversion was added in Python 2.0.\n\n   The precision determines the maximal number of characters used.\n\n6. If the object or format provided is a "unicode" string, the\n   resulting string will also be "unicode".\n\n   The precision determines the maximal number of characters used.\n\n7. See **PEP 237**.\n\nSince Python strings have an explicit length, "%s" conversions do not\nassume that "\'\\0\'" is the end of the string.\n\nChanged in version 2.7: "%f" conversions for numbers whose absolute\nvalue is over 1e50 are no longer replaced by "%g" conversions.\n\nAdditional string operations are defined in standard modules "string"\nand "re".\n\n\nXRange Type\n===========\n\nThe "xrange" type is an immutable sequence which is commonly used for\nlooping.  The advantage of the "xrange" type is that an "xrange"\nobject will always take the same amount of memory, no matter the size\nof the range it represents.  There are no consistent performance\nadvantages.\n\nXRange objects have very little behavior: they only support indexing,\niteration, and the "len()" function.\n\n\nMutable Sequence Types\n======================\n\nList and "bytearray" objects support additional operations that allow\nin-place modification of the object. Other mutable sequence types\n(when added to the language) should also support these operations.\nStrings and tuples are immutable sequence types: such objects cannot\nbe modified once created. The following operations are defined on\nmutable sequence types (where *x* is an arbitrary object):\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation                      | Result                           | Notes                 |\n+================================+==================================+=======================+\n| "s[i] = x"                     | item *i* of *s* is replaced by   |                       |\n|                                | *x*                              |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s[i:j] = t"                   | slice of *s* from *i* to *j* is  |                       |\n|                                | replaced by the contents of the  |                       |\n|                                | iterable *t*                     |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "del s[i:j]"                   | same as "s[i:j] = []"            |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s[i:j:k] = t"                 | the elements of "s[i:j:k]" are   | (1)                   |\n|                                | replaced by those of *t*         |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "del s[i:j:k]"                 | removes the elements of          |                       |\n|                                | "s[i:j:k]" from the list         |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.append(x)"                  | same as "s[len(s):len(s)] = [x]" | (2)                   |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.extend(t)" or "s += t"      | for the most part the same as    | (3)                   |\n|                                | "s[len(s):len(s)] = t"           |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s *= n"                       | updates *s* with its contents    | (11)                  |\n|                                | repeated *n* times               |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.count(x)"                   | return number of *i*\'s for which |                       |\n|                                | "s[i] == x"                      |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.index(x[, i[, j]])"         | return smallest *k* such that    | (4)                   |\n|                                | "s[k] == x" and "i <= k < j"     |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.insert(i, x)"               | same as "s[i:i] = [x]"           | (5)                   |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.pop([i])"                   | same as "x = s[i]; del s[i];     | (6)                   |\n|                                | return x"                        |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.remove(x)"                  | same as "del s[s.index(x)]"      | (4)                   |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.reverse()"                  | reverses the items of *s* in     | (7)                   |\n|                                | place                            |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.sort([cmp[, key[,           | sort the items of *s* in place   | (7)(8)(9)(10)         |\n| reverse]]])"                   |                                  |                       |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is  replacing.\n\n2. The C implementation of Python has historically accepted\n   multiple parameters and implicitly joined them into a tuple; this\n   no longer works in Python 2.0.  Use of this misfeature has been\n   deprecated since Python 1.4.\n\n3. *t* can be any iterable object.\n\n4. Raises "ValueError" when *x* is not found in *s*. When a\n   negative index is passed as the second or third parameter to the\n   "index()" method, the list length is added, as for slice indices.\n   If it is still negative, it is truncated to zero, as for slice\n   indices.\n\n   Changed in version 2.3: Previously, "index()" didn\'t have arguments\n   for specifying start and stop positions.\n\n5. When a negative index is passed as the first parameter to the\n   "insert()" method, the list length is added, as for slice indices.\n   If it is still negative, it is truncated to zero, as for slice\n   indices.\n\n   Changed in version 2.3: Previously, all negative indices were\n   truncated to zero.\n\n6. The "pop()" method\'s optional argument *i* defaults to "-1", so\n   that by default the last item is removed and returned.\n\n7. The "sort()" and "reverse()" methods modify the list in place\n   for economy of space when sorting or reversing a large list.  To\n   remind you that they operate by side effect, they don\'t return the\n   sorted or reversed list.\n\n8. The "sort()" method takes optional arguments for controlling the\n   comparisons.\n\n   *cmp* specifies a custom comparison function of two arguments (list\n   items) which should return a negative, zero or positive number\n   depending on whether the first argument is considered smaller than,\n   equal to, or larger than the second argument: "cmp=lambda x,y:\n   cmp(x.lower(), y.lower())".  The default value is "None".\n\n   *key* specifies a function of one argument that is used to extract\n   a comparison key from each list element: "key=str.lower".  The\n   default value is "None".\n\n   *reverse* is a boolean value.  If set to "True", then the list\n   elements are sorted as if each comparison were reversed.\n\n   In general, the *key* and *reverse* conversion processes are much\n   faster than specifying an equivalent *cmp* function.  This is\n   because *cmp* is called multiple times for each list element while\n   *key* and *reverse* touch each element only once.  Use\n   "functools.cmp_to_key()" to convert an old-style *cmp* function to\n   a *key* function.\n\n   Changed in version 2.3: Support for "None" as an equivalent to\n   omitting *cmp* was added.\n\n   Changed in version 2.4: Support for *key* and *reverse* was added.\n\n9. Starting with Python 2.3, the "sort()" method is guaranteed to\n   be stable.  A sort is stable if it guarantees not to change the\n   relative order of elements that compare equal --- this is helpful\n   for sorting in multiple passes (for example, sort by department,\n   then by salary grade).\n\n10. **CPython implementation detail:** While a list is being\n    sorted, the effect of attempting to mutate, or even inspect, the\n    list is undefined.  The C implementation of Python 2.3 and newer\n    makes the list appear empty for the duration, and raises\n    "ValueError" if it can detect that the list has been mutated\n    during a sort.\n\n11. The value *n* is an integer, or an object implementing\n    "__index__()".  Zero and negative values of *n* clear the\n    sequence.  Items in the sequence are not copied; they are\n    referenced multiple times, as explained for "s * n" under Sequence\n    Types --- str, unicode, list, tuple, bytearray, buffer, xrange.\n',
- 'typesseq-mutable': u'\nMutable Sequence Types\n**********************\n\nList and "bytearray" objects support additional operations that allow\nin-place modification of the object. Other mutable sequence types\n(when added to the language) should also support these operations.\nStrings and tuples are immutable sequence types: such objects cannot\nbe modified once created. The following operations are defined on\nmutable sequence types (where *x* is an arbitrary object):\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation                      | Result                           | Notes                 |\n+================================+==================================+=======================+\n| "s[i] = x"                     | item *i* of *s* is replaced by   |                       |\n|                                | *x*                              |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s[i:j] = t"                   | slice of *s* from *i* to *j* is  |                       |\n|                                | replaced by the contents of the  |                       |\n|                                | iterable *t*                     |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "del s[i:j]"                   | same as "s[i:j] = []"            |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s[i:j:k] = t"                 | the elements of "s[i:j:k]" are   | (1)                   |\n|                                | replaced by those of *t*         |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "del s[i:j:k]"                 | removes the elements of          |                       |\n|                                | "s[i:j:k]" from the list         |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.append(x)"                  | same as "s[len(s):len(s)] = [x]" | (2)                   |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.extend(t)" or "s += t"      | for the most part the same as    | (3)                   |\n|                                | "s[len(s):len(s)] = t"           |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s *= n"                       | updates *s* with its contents    | (11)                  |\n|                                | repeated *n* times               |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.count(x)"                   | return number of *i*\'s for which |                       |\n|                                | "s[i] == x"                      |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.index(x[, i[, j]])"         | return smallest *k* such that    | (4)                   |\n|                                | "s[k] == x" and "i <= k < j"     |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.insert(i, x)"               | same as "s[i:i] = [x]"           | (5)                   |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.pop([i])"                   | same as "x = s[i]; del s[i];     | (6)                   |\n|                                | return x"                        |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.remove(x)"                  | same as "del s[s.index(x)]"      | (4)                   |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.reverse()"                  | reverses the items of *s* in     | (7)                   |\n|                                | place                            |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.sort([cmp[, key[,           | sort the items of *s* in place   | (7)(8)(9)(10)         |\n| reverse]]])"                   |                                  |                       |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is  replacing.\n\n2. The C implementation of Python has historically accepted\n   multiple parameters and implicitly joined them into a tuple; this\n   no longer works in Python 2.0.  Use of this misfeature has been\n   deprecated since Python 1.4.\n\n3. *t* can be any iterable object.\n\n4. Raises "ValueError" when *x* is not found in *s*. When a\n   negative index is passed as the second or third parameter to the\n   "index()" method, the list length is added, as for slice indices.\n   If it is still negative, it is truncated to zero, as for slice\n   indices.\n\n   Changed in version 2.3: Previously, "index()" didn\'t have arguments\n   for specifying start and stop positions.\n\n5. When a negative index is passed as the first parameter to the\n   "insert()" method, the list length is added, as for slice indices.\n   If it is still negative, it is truncated to zero, as for slice\n   indices.\n\n   Changed in version 2.3: Previously, all negative indices were\n   truncated to zero.\n\n6. The "pop()" method\'s optional argument *i* defaults to "-1", so\n   that by default the last item is removed and returned.\n\n7. The "sort()" and "reverse()" methods modify the list in place\n   for economy of space when sorting or reversing a large list.  To\n   remind you that they operate by side effect, they don\'t return the\n   sorted or reversed list.\n\n8. The "sort()" method takes optional arguments for controlling the\n   comparisons.\n\n   *cmp* specifies a custom comparison function of two arguments (list\n   items) which should return a negative, zero or positive number\n   depending on whether the first argument is considered smaller than,\n   equal to, or larger than the second argument: "cmp=lambda x,y:\n   cmp(x.lower(), y.lower())".  The default value is "None".\n\n   *key* specifies a function of one argument that is used to extract\n   a comparison key from each list element: "key=str.lower".  The\n   default value is "None".\n\n   *reverse* is a boolean value.  If set to "True", then the list\n   elements are sorted as if each comparison were reversed.\n\n   In general, the *key* and *reverse* conversion processes are much\n   faster than specifying an equivalent *cmp* function.  This is\n   because *cmp* is called multiple times for each list element while\n   *key* and *reverse* touch each element only once.  Use\n   "functools.cmp_to_key()" to convert an old-style *cmp* function to\n   a *key* function.\n\n   Changed in version 2.3: Support for "None" as an equivalent to\n   omitting *cmp* was added.\n\n   Changed in version 2.4: Support for *key* and *reverse* was added.\n\n9. Starting with Python 2.3, the "sort()" method is guaranteed to\n   be stable.  A sort is stable if it guarantees not to change the\n   relative order of elements that compare equal --- this is helpful\n   for sorting in multiple passes (for example, sort by department,\n   then by salary grade).\n\n10. **CPython implementation detail:** While a list is being\n    sorted, the effect of attempting to mutate, or even inspect, the\n    list is undefined.  The C implementation of Python 2.3 and newer\n    makes the list appear empty for the duration, and raises\n    "ValueError" if it can detect that the list has been mutated\n    during a sort.\n\n11. The value *n* is an integer, or an object implementing\n    "__index__()".  Zero and negative values of *n* clear the\n    sequence.  Items in the sequence are not copied; they are\n    referenced multiple times, as explained for "s * n" under Sequence\n    Types --- str, unicode, list, tuple, bytearray, buffer, xrange.\n',
- 'unary': u'\nUnary arithmetic and bitwise operations\n***************************************\n\nAll unary arithmetic and bitwise operations have the same priority:\n\n   u_expr ::= power | "-" u_expr | "+" u_expr | "~" u_expr\n\nThe unary "-" (minus) operator yields the negation of its numeric\nargument.\n\nThe unary "+" (plus) operator yields its numeric argument unchanged.\n\nThe unary "~" (invert) operator yields the bitwise inversion of its\nplain or long integer argument.  The bitwise inversion of "x" is\ndefined as "-(x+1)".  It only applies to integral numbers.\n\nIn all three cases, if the argument does not have the proper type, a\n"TypeError" exception is raised.\n',
- 'while': u'\nThe "while" statement\n*********************\n\nThe "while" statement is used for repeated execution as long as an\nexpression is true:\n\n   while_stmt ::= "while" expression ":" suite\n                  ["else" ":" suite]\n\nThis repeatedly tests the expression and, if it is true, executes the\nfirst suite; if the expression is false (which may be the first time\nit is tested) the suite of the "else" clause, if present, is executed\nand the loop terminates.\n\nA "break" statement executed in the first suite terminates the loop\nwithout executing the "else" clause\'s suite.  A "continue" statement\nexecuted in the first suite skips the rest of the suite and goes back\nto testing the expression.\n',
- 'with': u'\nThe "with" statement\n********************\n\nNew in version 2.5.\n\nThe "with" statement is used to wrap the execution of a block with\nmethods defined by a context manager (see section With Statement\nContext Managers). This allows common "try"..."except"..."finally"\nusage patterns to be encapsulated for convenient reuse.\n\n   with_stmt ::= "with" with_item ("," with_item)* ":" suite\n   with_item ::= expression ["as" target]\n\nThe execution of the "with" statement with one "item" proceeds as\nfollows:\n\n1. The context expression (the expression given in the "with_item")\n   is evaluated to obtain a context manager.\n\n2. The context manager\'s "__exit__()" is loaded for later use.\n\n3. The context manager\'s "__enter__()" method is invoked.\n\n4. If a target was included in the "with" statement, the return\n   value from "__enter__()" is assigned to it.\n\n   Note: The "with" statement guarantees that if the "__enter__()"\n     method returns without an error, then "__exit__()" will always be\n     called. Thus, if an error occurs during the assignment to the\n     target list, it will be treated the same as an error occurring\n     within the suite would be. See step 6 below.\n\n5. The suite is executed.\n\n6. The context manager\'s "__exit__()" method is invoked. If an\n   exception caused the suite to be exited, its type, value, and\n   traceback are passed as arguments to "__exit__()". Otherwise, three\n   "None" arguments are supplied.\n\n   If the suite was exited due to an exception, and the return value\n   from the "__exit__()" method was false, the exception is reraised.\n   If the return value was true, the exception is suppressed, and\n   execution continues with the statement following the "with"\n   statement.\n\n   If the suite was exited for any reason other than an exception, the\n   return value from "__exit__()" is ignored, and execution proceeds\n   at the normal location for the kind of exit that was taken.\n\nWith more than one item, the context managers are processed as if\nmultiple "with" statements were nested:\n\n   with A() as a, B() as b:\n       suite\n\nis equivalent to\n\n   with A() as a:\n       with B() as b:\n           suite\n\nNote: In Python 2.5, the "with" statement is only allowed when the\n  "with_statement" feature has been enabled.  It is always enabled in\n  Python 2.6.\n\nChanged in version 2.7: Support for multiple context expressions.\n\nSee also:\n\n  **PEP 343** - The "with" statement\n     The specification, background, and examples for the Python "with"\n     statement.\n',
- 'yield': u'\nThe "yield" statement\n*********************\n\n   yield_stmt ::= yield_expression\n\nThe "yield" statement is only used when defining a generator function,\nand is only used in the body of the generator function. Using a\n"yield" statement in a function definition is sufficient to cause that\ndefinition to create a generator function instead of a normal\nfunction.\n\nWhen a generator function is called, it returns an iterator known as a\ngenerator iterator, or more commonly, a generator.  The body of the\ngenerator function is executed by calling the generator\'s "next()"\nmethod repeatedly until it raises an exception.\n\nWhen a "yield" statement is executed, the state of the generator is\nfrozen and the value of "expression_list" is returned to "next()"\'s\ncaller.  By "frozen" we mean that all local state is retained,\nincluding the current bindings of local variables, the instruction\npointer, and the internal evaluation stack: enough information is\nsaved so that the next time "next()" is invoked, the function can\nproceed exactly as if the "yield" statement were just another external\ncall.\n\nAs of Python version 2.5, the "yield" statement is now allowed in the\n"try" clause of a "try" ...  "finally" construct.  If the generator is\nnot resumed before it is finalized (by reaching a zero reference count\nor by being garbage collected), the generator-iterator\'s "close()"\nmethod will be called, allowing any pending "finally" clauses to\nexecute.\n\nFor full details of "yield" semantics, refer to the Yield expressions\nsection.\n\nNote: In Python 2.2, the "yield" statement was only allowed when the\n  "generators" feature has been enabled.  This "__future__" import\n  statement was used to enable the feature:\n\n     from __future__ import generators\n\nSee also:\n\n  **PEP 255** - Simple Generators\n     The proposal for adding generators and the "yield" statement to\n     Python.\n\n  **PEP 342** - Coroutines via Enhanced Generators\n     The proposal that, among other generator enhancements, proposed\n     allowing "yield" to appear inside a "try" ... "finally" block.\n'}
+# Autogenerated by Sphinx on Sat Aug 26 11:16:28 2017
+topics = {'assert': '\n'
+           'The "assert" statement\n'
+           '**********************\n'
+           '\n'
+           'Assert statements are a convenient way to insert debugging '
+           'assertions\n'
+           'into a program:\n'
+           '\n'
+           '   assert_stmt ::= "assert" expression ["," expression]\n'
+           '\n'
+           'The simple form, "assert expression", is equivalent to\n'
+           '\n'
+           '   if __debug__:\n'
+           '       if not expression: raise AssertionError\n'
+           '\n'
+           'The extended form, "assert expression1, expression2", is '
+           'equivalent to\n'
+           '\n'
+           '   if __debug__:\n'
+           '       if not expression1: raise AssertionError(expression2)\n'
+           '\n'
+           'These equivalences assume that "__debug__" and "AssertionError" '
+           'refer\n'
+           'to the built-in variables with those names.  In the current\n'
+           'implementation, the built-in variable "__debug__" is "True" under\n'
+           'normal circumstances, "False" when optimization is requested '
+           '(command\n'
+           'line option -O).  The current code generator emits no code for an\n'
+           'assert statement when optimization is requested at compile time.  '
+           'Note\n'
+           'that it is unnecessary to include the source code for the '
+           'expression\n'
+           'that failed in the error message; it will be displayed as part of '
+           'the\n'
+           'stack trace.\n'
+           '\n'
+           'Assignments to "__debug__" are illegal.  The value for the '
+           'built-in\n'
+           'variable is determined when the interpreter starts.\n',
+ 'assignment': '\n'
+               'Assignment statements\n'
+               '*********************\n'
+               '\n'
+               'Assignment statements are used to (re)bind names to values and '
+               'to\n'
+               'modify attributes or items of mutable objects:\n'
+               '\n'
+               '   assignment_stmt ::= (target_list "=")+ (expression_list | '
+               'yield_expression)\n'
+               '   target_list     ::= target ("," target)* [","]\n'
+               '   target          ::= identifier\n'
+               '              | "(" target_list ")"\n'
+               '              | "[" [target_list] "]"\n'
+               '              | attributeref\n'
+               '              | subscription\n'
+               '              | slicing\n'
+               '\n'
+               '(See section Primaries for the syntax definitions for the last '
+               'three\n'
+               'symbols.)\n'
+               '\n'
+               'An assignment statement evaluates the expression list '
+               '(remember that\n'
+               'this can be a single expression or a comma-separated list, the '
+               'latter\n'
+               'yielding a tuple) and assigns the single resulting object to '
+               'each of\n'
+               'the target lists, from left to right.\n'
+               '\n'
+               'Assignment is defined recursively depending on the form of the '
+               'target\n'
+               '(list). When a target is part of a mutable object (an '
+               'attribute\n'
+               'reference, subscription or slicing), the mutable object must\n'
+               'ultimately perform the assignment and decide about its '
+               'validity, and\n'
+               'may raise an exception if the assignment is unacceptable.  The '
+               'rules\n'
+               'observed by various types and the exceptions raised are given '
+               'with the\n'
+               'definition of the object types (see section The standard type\n'
+               'hierarchy).\n'
+               '\n'
+               'Assignment of an object to a target list is recursively '
+               'defined as\n'
+               'follows.\n'
+               '\n'
+               '* If the target list is a single target: The object is '
+               'assigned to\n'
+               '  that target.\n'
+               '\n'
+               '* If the target list is a comma-separated list of targets: '
+               'The\n'
+               '  object must be an iterable with the same number of items as '
+               'there\n'
+               '  are targets in the target list, and the items are assigned, '
+               'from\n'
+               '  left to right, to the corresponding targets.\n'
+               '\n'
+               'Assignment of an object to a single target is recursively '
+               'defined as\n'
+               'follows.\n'
+               '\n'
+               '* If the target is an identifier (name):\n'
+               '\n'
+               '  * If the name does not occur in a "global" statement in the\n'
+               '    current code block: the name is bound to the object in the '
+               'current\n'
+               '    local namespace.\n'
+               '\n'
+               '  * Otherwise: the name is bound to the object in the current '
+               'global\n'
+               '    namespace.\n'
+               '\n'
+               '  The name is rebound if it was already bound.  This may cause '
+               'the\n'
+               '  reference count for the object previously bound to the name '
+               'to reach\n'
+               '  zero, causing the object to be deallocated and its '
+               'destructor (if it\n'
+               '  has one) to be called.\n'
+               '\n'
+               '* If the target is a target list enclosed in parentheses or '
+               'in\n'
+               '  square brackets: The object must be an iterable with the '
+               'same number\n'
+               '  of items as there are targets in the target list, and its '
+               'items are\n'
+               '  assigned, from left to right, to the corresponding targets.\n'
+               '\n'
+               '* If the target is an attribute reference: The primary '
+               'expression in\n'
+               '  the reference is evaluated.  It should yield an object with\n'
+               '  assignable attributes; if this is not the case, "TypeError" '
+               'is\n'
+               '  raised.  That object is then asked to assign the assigned '
+               'object to\n'
+               '  the given attribute; if it cannot perform the assignment, it '
+               'raises\n'
+               '  an exception (usually but not necessarily '
+               '"AttributeError").\n'
+               '\n'
+               '  Note: If the object is a class instance and the attribute '
+               'reference\n'
+               '  occurs on both sides of the assignment operator, the RHS '
+               'expression,\n'
+               '  "a.x" can access either an instance attribute or (if no '
+               'instance\n'
+               '  attribute exists) a class attribute.  The LHS target "a.x" '
+               'is always\n'
+               '  set as an instance attribute, creating it if necessary.  '
+               'Thus, the\n'
+               '  two occurrences of "a.x" do not necessarily refer to the '
+               'same\n'
+               '  attribute: if the RHS expression refers to a class '
+               'attribute, the\n'
+               '  LHS creates a new instance attribute as the target of the\n'
+               '  assignment:\n'
+               '\n'
+               '     class Cls:\n'
+               '         x = 3             # class variable\n'
+               '     inst = Cls()\n'
+               '     inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x '
+               'as 3\n'
+               '\n'
+               '  This description does not necessarily apply to descriptor\n'
+               '  attributes, such as properties created with "property()".\n'
+               '\n'
+               '* If the target is a subscription: The primary expression in '
+               'the\n'
+               '  reference is evaluated.  It should yield either a mutable '
+               'sequence\n'
+               '  object (such as a list) or a mapping object (such as a '
+               'dictionary).\n'
+               '  Next, the subscript expression is evaluated.\n'
+               '\n'
+               '  If the primary is a mutable sequence object (such as a '
+               'list), the\n'
+               '  subscript must yield a plain integer.  If it is negative, '
+               'the\n'
+               "  sequence's length is added to it. The resulting value must "
+               'be a\n'
+               "  nonnegative integer less than the sequence's length, and "
+               'the\n'
+               '  sequence is asked to assign the assigned object to its item '
+               'with\n'
+               '  that index.  If the index is out of range, "IndexError" is '
+               'raised\n'
+               '  (assignment to a subscripted sequence cannot add new items '
+               'to a\n'
+               '  list).\n'
+               '\n'
+               '  If the primary is a mapping object (such as a dictionary), '
+               'the\n'
+               "  subscript must have a type compatible with the mapping's key "
+               'type,\n'
+               '  and the mapping is then asked to create a key/datum pair '
+               'which maps\n'
+               '  the subscript to the assigned object.  This can either '
+               'replace an\n'
+               '  existing key/value pair with the same key value, or insert a '
+               'new\n'
+               '  key/value pair (if no key with the same value existed).\n'
+               '\n'
+               '* If the target is a slicing: The primary expression in the\n'
+               '  reference is evaluated.  It should yield a mutable sequence '
+               'object\n'
+               '  (such as a list).  The assigned object should be a sequence '
+               'object\n'
+               '  of the same type.  Next, the lower and upper bound '
+               'expressions are\n'
+               '  evaluated, insofar they are present; defaults are zero and '
+               'the\n'
+               "  sequence's length.  The bounds should evaluate to (small) "
+               'integers.\n'
+               "  If either bound is negative, the sequence's length is added "
+               'to it.\n'
+               '  The resulting bounds are clipped to lie between zero and '
+               'the\n'
+               "  sequence's length, inclusive.  Finally, the sequence object "
+               'is asked\n'
+               '  to replace the slice with the items of the assigned '
+               'sequence.  The\n'
+               '  length of the slice may be different from the length of the '
+               'assigned\n'
+               '  sequence, thus changing the length of the target sequence, '
+               'if the\n'
+               '  object allows it.\n'
+               '\n'
+               '**CPython implementation detail:** In the current '
+               'implementation, the\n'
+               'syntax for targets is taken to be the same as for expressions, '
+               'and\n'
+               'invalid syntax is rejected during the code generation phase, '
+               'causing\n'
+               'less detailed error messages.\n'
+               '\n'
+               'WARNING: Although the definition of assignment implies that '
+               'overlaps\n'
+               "between the left-hand side and the right-hand side are 'safe' "
+               '(for\n'
+               'example "a, b = b, a" swaps two variables), overlaps *within* '
+               'the\n'
+               'collection of assigned-to variables are not safe!  For '
+               'instance, the\n'
+               'following program prints "[0, 2]":\n'
+               '\n'
+               '   x = [0, 1]\n'
+               '   i = 0\n'
+               '   i, x[i] = 1, 2\n'
+               '   print x\n'
+               '\n'
+               '\n'
+               'Augmented assignment statements\n'
+               '===============================\n'
+               '\n'
+               'Augmented assignment is the combination, in a single '
+               'statement, of a\n'
+               'binary operation and an assignment statement:\n'
+               '\n'
+               '   augmented_assignment_stmt ::= augtarget augop '
+               '(expression_list | yield_expression)\n'
+               '   augtarget                 ::= identifier | attributeref | '
+               'subscription | slicing\n'
+               '   augop                     ::= "+=" | "-=" | "*=" | "/=" | '
+               '"//=" | "%=" | "**="\n'
+               '             | ">>=" | "<<=" | "&=" | "^=" | "|="\n'
+               '\n'
+               '(See section Primaries for the syntax definitions for the last '
+               'three\n'
+               'symbols.)\n'
+               '\n'
+               'An augmented assignment evaluates the target (which, unlike '
+               'normal\n'
+               'assignment statements, cannot be an unpacking) and the '
+               'expression\n'
+               'list, performs the binary operation specific to the type of '
+               'assignment\n'
+               'on the two operands, and assigns the result to the original '
+               'target.\n'
+               'The target is only evaluated once.\n'
+               '\n'
+               'An augmented assignment expression like "x += 1" can be '
+               'rewritten as\n'
+               '"x = x + 1" to achieve a similar, but not exactly equal '
+               'effect. In the\n'
+               'augmented version, "x" is only evaluated once. Also, when '
+               'possible,\n'
+               'the actual operation is performed *in-place*, meaning that '
+               'rather than\n'
+               'creating a new object and assigning that to the target, the '
+               'old object\n'
+               'is modified instead.\n'
+               '\n'
+               'With the exception of assigning to tuples and multiple targets '
+               'in a\n'
+               'single statement, the assignment done by augmented assignment\n'
+               'statements is handled the same way as normal assignments. '
+               'Similarly,\n'
+               'with the exception of the possible *in-place* behavior, the '
+               'binary\n'
+               'operation performed by augmented assignment is the same as the '
+               'normal\n'
+               'binary operations.\n'
+               '\n'
+               'For targets which are attribute references, the same caveat '
+               'about\n'
+               'class and instance attributes applies as for regular '
+               'assignments.\n',
+ 'atom-identifiers': '\n'
+                     'Identifiers (Names)\n'
+                     '*******************\n'
+                     '\n'
+                     'An identifier occurring as an atom is a name.  See '
+                     'section Identifiers\n'
+                     'and keywords for lexical definition and section Naming '
+                     'and binding for\n'
+                     'documentation of naming and binding.\n'
+                     '\n'
+                     'When the name is bound to an object, evaluation of the '
+                     'atom yields\n'
+                     'that object. When a name is not bound, an attempt to '
+                     'evaluate it\n'
+                     'raises a "NameError" exception.\n'
+                     '\n'
+                     '**Private name mangling:** When an identifier that '
+                     'textually occurs in\n'
+                     'a class definition begins with two or more underscore '
+                     'characters and\n'
+                     'does not end in two or more underscores, it is '
+                     'considered a *private\n'
+                     'name* of that class. Private names are transformed to a '
+                     'longer form\n'
+                     'before code is generated for them.  The transformation '
+                     'inserts the\n'
+                     'class name, with leading underscores removed and a '
+                     'single underscore\n'
+                     'inserted, in front of the name.  For example, the '
+                     'identifier "__spam"\n'
+                     'occurring in a class named "Ham" will be transformed to '
+                     '"_Ham__spam".\n'
+                     'This transformation is independent of the syntactical '
+                     'context in which\n'
+                     'the identifier is used.  If the transformed name is '
+                     'extremely long\n'
+                     '(longer than 255 characters), implementation defined '
+                     'truncation may\n'
+                     'happen. If the class name consists only of underscores, '
+                     'no\n'
+                     'transformation is done.\n',
+ 'atom-literals': '\n'
+                  'Literals\n'
+                  '********\n'
+                  '\n'
+                  'Python supports string literals and various numeric '
+                  'literals:\n'
+                  '\n'
+                  '   literal ::= stringliteral | integer | longinteger\n'
+                  '               | floatnumber | imagnumber\n'
+                  '\n'
+                  'Evaluation of a literal yields an object of the given type '
+                  '(string,\n'
+                  'integer, long integer, floating point number, complex '
+                  'number) with the\n'
+                  'given value.  The value may be approximated in the case of '
+                  'floating\n'
+                  'point and imaginary (complex) literals.  See section '
+                  'Literals for\n'
+                  'details.\n'
+                  '\n'
+                  'All literals correspond to immutable data types, and hence '
+                  'the\n'
+                  "object's identity is less important than its value.  "
+                  'Multiple\n'
+                  'evaluations of literals with the same value (either the '
+                  'same\n'
+                  'occurrence in the program text or a different occurrence) '
+                  'may obtain\n'
+                  'the same object or a different object with the same '
+                  'value.\n',
+ 'attribute-access': '\n'
+                     'Customizing attribute access\n'
+                     '****************************\n'
+                     '\n'
+                     'The following methods can be defined to customize the '
+                     'meaning of\n'
+                     'attribute access (use of, assignment to, or deletion of '
+                     '"x.name") for\n'
+                     'class instances.\n'
+                     '\n'
+                     'object.__getattr__(self, name)\n'
+                     '\n'
+                     '   Called when an attribute lookup has not found the '
+                     'attribute in the\n'
+                     '   usual places (i.e. it is not an instance attribute '
+                     'nor is it found\n'
+                     '   in the class tree for "self").  "name" is the '
+                     'attribute name. This\n'
+                     '   method should return the (computed) attribute value '
+                     'or raise an\n'
+                     '   "AttributeError" exception.\n'
+                     '\n'
+                     '   Note that if the attribute is found through the '
+                     'normal mechanism,\n'
+                     '   "__getattr__()" is not called.  (This is an '
+                     'intentional asymmetry\n'
+                     '   between "__getattr__()" and "__setattr__()".) This is '
+                     'done both for\n'
+                     '   efficiency reasons and because otherwise '
+                     '"__getattr__()" would have\n'
+                     '   no way to access other attributes of the instance.  '
+                     'Note that at\n'
+                     '   least for instance variables, you can fake total '
+                     'control by not\n'
+                     '   inserting any values in the instance attribute '
+                     'dictionary (but\n'
+                     '   instead inserting them in another object).  See the\n'
+                     '   "__getattribute__()" method below for a way to '
+                     'actually get total\n'
+                     '   control in new-style classes.\n'
+                     '\n'
+                     'object.__setattr__(self, name, value)\n'
+                     '\n'
+                     '   Called when an attribute assignment is attempted.  '
+                     'This is called\n'
+                     '   instead of the normal mechanism (i.e. store the value '
+                     'in the\n'
+                     '   instance dictionary).  *name* is the attribute name, '
+                     '*value* is the\n'
+                     '   value to be assigned to it.\n'
+                     '\n'
+                     '   If "__setattr__()" wants to assign to an instance '
+                     'attribute, it\n'
+                     '   should not simply execute "self.name = value" --- '
+                     'this would cause\n'
+                     '   a recursive call to itself.  Instead, it should '
+                     'insert the value in\n'
+                     '   the dictionary of instance attributes, e.g., '
+                     '"self.__dict__[name] =\n'
+                     '   value".  For new-style classes, rather than accessing '
+                     'the instance\n'
+                     '   dictionary, it should call the base class method with '
+                     'the same\n'
+                     '   name, for example, "object.__setattr__(self, name, '
+                     'value)".\n'
+                     '\n'
+                     'object.__delattr__(self, name)\n'
+                     '\n'
+                     '   Like "__setattr__()" but for attribute deletion '
+                     'instead of\n'
+                     '   assignment.  This should only be implemented if "del '
+                     'obj.name" is\n'
+                     '   meaningful for the object.\n'
+                     '\n'
+                     '\n'
+                     'More attribute access for new-style classes\n'
+                     '===========================================\n'
+                     '\n'
+                     'The following methods only apply to new-style classes.\n'
+                     '\n'
+                     'object.__getattribute__(self, name)\n'
+                     '\n'
+                     '   Called unconditionally to implement attribute '
+                     'accesses for\n'
+                     '   instances of the class. If the class also defines '
+                     '"__getattr__()",\n'
+                     '   the latter will not be called unless '
+                     '"__getattribute__()" either\n'
+                     '   calls it explicitly or raises an "AttributeError". '
+                     'This method\n'
+                     '   should return the (computed) attribute value or raise '
+                     'an\n'
+                     '   "AttributeError" exception. In order to avoid '
+                     'infinite recursion in\n'
+                     '   this method, its implementation should always call '
+                     'the base class\n'
+                     '   method with the same name to access any attributes it '
+                     'needs, for\n'
+                     '   example, "object.__getattribute__(self, name)".\n'
+                     '\n'
+                     '   Note: This method may still be bypassed when looking '
+                     'up special\n'
+                     '     methods as the result of implicit invocation via '
+                     'language syntax\n'
+                     '     or built-in functions. See Special method lookup '
+                     'for new-style\n'
+                     '     classes.\n'
+                     '\n'
+                     '\n'
+                     'Implementing Descriptors\n'
+                     '========================\n'
+                     '\n'
+                     'The following methods only apply when an instance of the '
+                     'class\n'
+                     'containing the method (a so-called *descriptor* class) '
+                     'appears in an\n'
+                     '*owner* class (the descriptor must be in either the '
+                     "owner's class\n"
+                     'dictionary or in the class dictionary for one of its '
+                     'parents).  In the\n'
+                     'examples below, "the attribute" refers to the attribute '
+                     'whose name is\n'
+                     "the key of the property in the owner class' "
+                     '"__dict__".\n'
+                     '\n'
+                     'object.__get__(self, instance, owner)\n'
+                     '\n'
+                     '   Called to get the attribute of the owner class (class '
+                     'attribute\n'
+                     '   access) or of an instance of that class (instance '
+                     'attribute\n'
+                     '   access). *owner* is always the owner class, while '
+                     '*instance* is the\n'
+                     '   instance that the attribute was accessed through, or '
+                     '"None" when\n'
+                     '   the attribute is accessed through the *owner*.  This '
+                     'method should\n'
+                     '   return the (computed) attribute value or raise an '
+                     '"AttributeError"\n'
+                     '   exception.\n'
+                     '\n'
+                     'object.__set__(self, instance, value)\n'
+                     '\n'
+                     '   Called to set the attribute on an instance *instance* '
+                     'of the owner\n'
+                     '   class to a new value, *value*.\n'
+                     '\n'
+                     'object.__delete__(self, instance)\n'
+                     '\n'
+                     '   Called to delete the attribute on an instance '
+                     '*instance* of the\n'
+                     '   owner class.\n'
+                     '\n'
+                     '\n'
+                     'Invoking Descriptors\n'
+                     '====================\n'
+                     '\n'
+                     'In general, a descriptor is an object attribute with '
+                     '"binding\n'
+                     'behavior", one whose attribute access has been '
+                     'overridden by methods\n'
+                     'in the descriptor protocol:  "__get__()", "__set__()", '
+                     'and\n'
+                     '"__delete__()". If any of those methods are defined for '
+                     'an object, it\n'
+                     'is said to be a descriptor.\n'
+                     '\n'
+                     'The default behavior for attribute access is to get, '
+                     'set, or delete\n'
+                     "the attribute from an object's dictionary. For instance, "
+                     '"a.x" has a\n'
+                     'lookup chain starting with "a.__dict__[\'x\']", then\n'
+                     '"type(a).__dict__[\'x\']", and continuing through the '
+                     'base classes of\n'
+                     '"type(a)" excluding metaclasses.\n'
+                     '\n'
+                     'However, if the looked-up value is an object defining '
+                     'one of the\n'
+                     'descriptor methods, then Python may override the default '
+                     'behavior and\n'
+                     'invoke the descriptor method instead.  Where this occurs '
+                     'in the\n'
+                     'precedence chain depends on which descriptor methods '
+                     'were defined and\n'
+                     'how they were called.  Note that descriptors are only '
+                     'invoked for new\n'
+                     'style objects or classes (ones that subclass "object()" '
+                     'or "type()").\n'
+                     '\n'
+                     'The starting point for descriptor invocation is a '
+                     'binding, "a.x". How\n'
+                     'the arguments are assembled depends on "a":\n'
+                     '\n'
+                     'Direct Call\n'
+                     '   The simplest and least common call is when user code '
+                     'directly\n'
+                     '   invokes a descriptor method:    "x.__get__(a)".\n'
+                     '\n'
+                     'Instance Binding\n'
+                     '   If binding to a new-style object instance, "a.x" is '
+                     'transformed\n'
+                     '   into the call: "type(a).__dict__[\'x\'].__get__(a, '
+                     'type(a))".\n'
+                     '\n'
+                     'Class Binding\n'
+                     '   If binding to a new-style class, "A.x" is transformed '
+                     'into the\n'
+                     '   call: "A.__dict__[\'x\'].__get__(None, A)".\n'
+                     '\n'
+                     'Super Binding\n'
+                     '   If "a" is an instance of "super", then the binding '
+                     '"super(B,\n'
+                     '   obj).m()" searches "obj.__class__.__mro__" for the '
+                     'base class "A"\n'
+                     '   immediately preceding "B" and then invokes the '
+                     'descriptor with the\n'
+                     '   call: "A.__dict__[\'m\'].__get__(obj, '
+                     'obj.__class__)".\n'
+                     '\n'
+                     'For instance bindings, the precedence of descriptor '
+                     'invocation depends\n'
+                     'on the which descriptor methods are defined.  A '
+                     'descriptor can define\n'
+                     'any combination of "__get__()", "__set__()" and '
+                     '"__delete__()".  If it\n'
+                     'does not define "__get__()", then accessing the '
+                     'attribute will return\n'
+                     'the descriptor object itself unless there is a value in '
+                     "the object's\n"
+                     'instance dictionary.  If the descriptor defines '
+                     '"__set__()" and/or\n'
+                     '"__delete__()", it is a data descriptor; if it defines '
+                     'neither, it is\n'
+                     'a non-data descriptor.  Normally, data descriptors '
+                     'define both\n'
+                     '"__get__()" and "__set__()", while non-data descriptors '
+                     'have just the\n'
+                     '"__get__()" method.  Data descriptors with "__set__()" '
+                     'and "__get__()"\n'
+                     'defined always override a redefinition in an instance '
+                     'dictionary.  In\n'
+                     'contrast, non-data descriptors can be overridden by '
+                     'instances.\n'
+                     '\n'
+                     'Python methods (including "staticmethod()" and '
+                     '"classmethod()") are\n'
+                     'implemented as non-data descriptors.  Accordingly, '
+                     'instances can\n'
+                     'redefine and override methods.  This allows individual '
+                     'instances to\n'
+                     'acquire behaviors that differ from other instances of '
+                     'the same class.\n'
+                     '\n'
+                     'The "property()" function is implemented as a data '
+                     'descriptor.\n'
+                     'Accordingly, instances cannot override the behavior of a '
+                     'property.\n'
+                     '\n'
+                     '\n'
+                     '__slots__\n'
+                     '=========\n'
+                     '\n'
+                     'By default, instances of both old and new-style classes '
+                     'have a\n'
+                     'dictionary for attribute storage.  This wastes space for '
+                     'objects\n'
+                     'having very few instance variables.  The space '
+                     'consumption can become\n'
+                     'acute when creating large numbers of instances.\n'
+                     '\n'
+                     'The default can be overridden by defining *__slots__* in '
+                     'a new-style\n'
+                     'class definition.  The *__slots__* declaration takes a '
+                     'sequence of\n'
+                     'instance variables and reserves just enough space in '
+                     'each instance to\n'
+                     'hold a value for each variable.  Space is saved because '
+                     '*__dict__* is\n'
+                     'not created for each instance.\n'
+                     '\n'
+                     '__slots__\n'
+                     '\n'
+                     '   This class variable can be assigned a string, '
+                     'iterable, or sequence\n'
+                     '   of strings with variable names used by instances.  If '
+                     'defined in a\n'
+                     '   new-style class, *__slots__* reserves space for the '
+                     'declared\n'
+                     '   variables and prevents the automatic creation of '
+                     '*__dict__* and\n'
+                     '   *__weakref__* for each instance.\n'
+                     '\n'
+                     '   New in version 2.2.\n'
+                     '\n'
+                     'Notes on using *__slots__*\n'
+                     '\n'
+                     '* When inheriting from a class without *__slots__*, the '
+                     '*__dict__*\n'
+                     '  attribute of that class will always be accessible, so '
+                     'a *__slots__*\n'
+                     '  definition in the subclass is meaningless.\n'
+                     '\n'
+                     '* Without a *__dict__* variable, instances cannot be '
+                     'assigned new\n'
+                     '  variables not listed in the *__slots__* definition.  '
+                     'Attempts to\n'
+                     '  assign to an unlisted variable name raises '
+                     '"AttributeError". If\n'
+                     '  dynamic assignment of new variables is desired, then '
+                     'add\n'
+                     '  "\'__dict__\'" to the sequence of strings in the '
+                     '*__slots__*\n'
+                     '  declaration.\n'
+                     '\n'
+                     '  Changed in version 2.3: Previously, adding '
+                     '"\'__dict__\'" to the\n'
+                     '  *__slots__* declaration would not enable the '
+                     'assignment of new\n'
+                     '  attributes not specifically listed in the sequence of '
+                     'instance\n'
+                     '  variable names.\n'
+                     '\n'
+                     '* Without a *__weakref__* variable for each instance, '
+                     'classes\n'
+                     '  defining *__slots__* do not support weak references to '
+                     'its\n'
+                     '  instances. If weak reference support is needed, then '
+                     'add\n'
+                     '  "\'__weakref__\'" to the sequence of strings in the '
+                     '*__slots__*\n'
+                     '  declaration.\n'
+                     '\n'
+                     '  Changed in version 2.3: Previously, adding '
+                     '"\'__weakref__\'" to the\n'
+                     '  *__slots__* declaration would not enable support for '
+                     'weak\n'
+                     '  references.\n'
+                     '\n'
+                     '* *__slots__* are implemented at the class level by '
+                     'creating\n'
+                     '  descriptors (Implementing Descriptors) for each '
+                     'variable name.  As a\n'
+                     '  result, class attributes cannot be used to set default '
+                     'values for\n'
+                     '  instance variables defined by *__slots__*; otherwise, '
+                     'the class\n'
+                     '  attribute would overwrite the descriptor assignment.\n'
+                     '\n'
+                     '* The action of a *__slots__* declaration is limited to '
+                     'the class\n'
+                     '  where it is defined.  As a result, subclasses will '
+                     'have a *__dict__*\n'
+                     '  unless they also define *__slots__* (which must only '
+                     'contain names\n'
+                     '  of any *additional* slots).\n'
+                     '\n'
+                     '* If a class defines a slot also defined in a base '
+                     'class, the\n'
+                     '  instance variable defined by the base class slot is '
+                     'inaccessible\n'
+                     '  (except by retrieving its descriptor directly from the '
+                     'base class).\n'
+                     '  This renders the meaning of the program undefined.  In '
+                     'the future, a\n'
+                     '  check may be added to prevent this.\n'
+                     '\n'
+                     '* Nonempty *__slots__* does not work for classes derived '
+                     'from\n'
+                     '  "variable-length" built-in types such as "long", "str" '
+                     'and "tuple".\n'
+                     '\n'
+                     '* Any non-string iterable may be assigned to '
+                     '*__slots__*. Mappings\n'
+                     '  may also be used; however, in the future, special '
+                     'meaning may be\n'
+                     '  assigned to the values corresponding to each key.\n'
+                     '\n'
+                     '* *__class__* assignment works only if both classes have '
+                     'the same\n'
+                     '  *__slots__*.\n'
+                     '\n'
+                     '  Changed in version 2.6: Previously, *__class__* '
+                     'assignment raised an\n'
+                     '  error if either new or old class had *__slots__*.\n',
+ 'attribute-references': '\n'
+                         'Attribute references\n'
+                         '********************\n'
+                         '\n'
+                         'An attribute reference is a primary followed by a '
+                         'period and a name:\n'
+                         '\n'
+                         '   attributeref ::= primary "." identifier\n'
+                         '\n'
+                         'The primary must evaluate to an object of a type '
+                         'that supports\n'
+                         'attribute references, e.g., a module, list, or an '
+                         'instance.  This\n'
+                         'object is then asked to produce the attribute whose '
+                         'name is the\n'
+                         'identifier.  If this attribute is not available, the '
+                         'exception\n'
+                         '"AttributeError" is raised. Otherwise, the type and '
+                         'value of the\n'
+                         'object produced is determined by the object.  '
+                         'Multiple evaluations of\n'
+                         'the same attribute reference may yield different '
+                         'objects.\n',
+ 'augassign': '\n'
+              'Augmented assignment statements\n'
+              '*******************************\n'
+              '\n'
+              'Augmented assignment is the combination, in a single statement, '
+              'of a\n'
+              'binary operation and an assignment statement:\n'
+              '\n'
+              '   augmented_assignment_stmt ::= augtarget augop '
+              '(expression_list | yield_expression)\n'
+              '   augtarget                 ::= identifier | attributeref | '
+              'subscription | slicing\n'
+              '   augop                     ::= "+=" | "-=" | "*=" | "/=" | '
+              '"//=" | "%=" | "**="\n'
+              '             | ">>=" | "<<=" | "&=" | "^=" | "|="\n'
+              '\n'
+              '(See section Primaries for the syntax definitions for the last '
+              'three\n'
+              'symbols.)\n'
+              '\n'
+              'An augmented assignment evaluates the target (which, unlike '
+              'normal\n'
+              'assignment statements, cannot be an unpacking) and the '
+              'expression\n'
+              'list, performs the binary operation specific to the type of '
+              'assignment\n'
+              'on the two operands, and assigns the result to the original '
+              'target.\n'
+              'The target is only evaluated once.\n'
+              '\n'
+              'An augmented assignment expression like "x += 1" can be '
+              'rewritten as\n'
+              '"x = x + 1" to achieve a similar, but not exactly equal effect. '
+              'In the\n'
+              'augmented version, "x" is only evaluated once. Also, when '
+              'possible,\n'
+              'the actual operation is performed *in-place*, meaning that '
+              'rather than\n'
+              'creating a new object and assigning that to the target, the old '
+              'object\n'
+              'is modified instead.\n'
+              '\n'
+              'With the exception of assigning to tuples and multiple targets '
+              'in a\n'
+              'single statement, the assignment done by augmented assignment\n'
+              'statements is handled the same way as normal assignments. '
+              'Similarly,\n'
+              'with the exception of the possible *in-place* behavior, the '
+              'binary\n'
+              'operation performed by augmented assignment is the same as the '
+              'normal\n'
+              'binary operations.\n'
+              '\n'
+              'For targets which are attribute references, the same caveat '
+              'about\n'
+              'class and instance attributes applies as for regular '
+              'assignments.\n',
+ 'binary': '\n'
+           'Binary arithmetic operations\n'
+           '****************************\n'
+           '\n'
+           'The binary arithmetic operations have the conventional priority\n'
+           'levels.  Note that some of these operations also apply to certain '
+           'non-\n'
+           'numeric types.  Apart from the power operator, there are only two\n'
+           'levels, one for multiplicative operators and one for additive\n'
+           'operators:\n'
+           '\n'
+           '   m_expr ::= u_expr | m_expr "*" u_expr | m_expr "//" u_expr | '
+           'm_expr "/" u_expr\n'
+           '              | m_expr "%" u_expr\n'
+           '   a_expr ::= m_expr | a_expr "+" m_expr | a_expr "-" m_expr\n'
+           '\n'
+           'The "*" (multiplication) operator yields the product of its '
+           'arguments.\n'
+           'The arguments must either both be numbers, or one argument must be '
+           'an\n'
+           'integer (plain or long) and the other must be a sequence. In the\n'
+           'former case, the numbers are converted to a common type and then\n'
+           'multiplied together.  In the latter case, sequence repetition is\n'
+           'performed; a negative repetition factor yields an empty sequence.\n'
+           '\n'
+           'The "/" (division) and "//" (floor division) operators yield the\n'
+           'quotient of their arguments.  The numeric arguments are first\n'
+           'converted to a common type. Plain or long integer division yields '
+           'an\n'
+           'integer of the same type; the result is that of mathematical '
+           'division\n'
+           "with the 'floor' function applied to the result. Division by zero\n"
+           'raises the "ZeroDivisionError" exception.\n'
+           '\n'
+           'The "%" (modulo) operator yields the remainder from the division '
+           'of\n'
+           'the first argument by the second.  The numeric arguments are '
+           'first\n'
+           'converted to a common type.  A zero right argument raises the\n'
+           '"ZeroDivisionError" exception.  The arguments may be floating '
+           'point\n'
+           'numbers, e.g., "3.14%0.7" equals "0.34" (since "3.14" equals '
+           '"4*0.7 +\n'
+           '0.34".)  The modulo operator always yields a result with the same '
+           'sign\n'
+           'as its second operand (or zero); the absolute value of the result '
+           'is\n'
+           'strictly smaller than the absolute value of the second operand '
+           '[2].\n'
+           '\n'
+           'The integer division and modulo operators are connected by the\n'
+           'following identity: "x == (x/y)*y + (x%y)".  Integer division and\n'
+           'modulo are also connected with the built-in function "divmod()":\n'
+           '"divmod(x, y) == (x/y, x%y)".  These identities don\'t hold for\n'
+           'floating point numbers; there similar identities hold '
+           'approximately\n'
+           'where "x/y" is replaced by "floor(x/y)" or "floor(x/y) - 1" [3].\n'
+           '\n'
+           'In addition to performing the modulo operation on numbers, the '
+           '"%"\n'
+           'operator is also overloaded by string and unicode objects to '
+           'perform\n'
+           'string formatting (also known as interpolation). The syntax for '
+           'string\n'
+           'formatting is described in the Python Library Reference, section\n'
+           'String Formatting Operations.\n'
+           '\n'
+           'Deprecated since version 2.3: The floor division operator, the '
+           'modulo\n'
+           'operator, and the "divmod()" function are no longer defined for\n'
+           'complex numbers.  Instead, convert to a floating point number '
+           'using\n'
+           'the "abs()" function if appropriate.\n'
+           '\n'
+           'The "+" (addition) operator yields the sum of its arguments. The\n'
+           'arguments must either both be numbers or both sequences of the '
+           'same\n'
+           'type.  In the former case, the numbers are converted to a common '
+           'type\n'
+           'and then added together.  In the latter case, the sequences are\n'
+           'concatenated.\n'
+           '\n'
+           'The "-" (subtraction) operator yields the difference of its '
+           'arguments.\n'
+           'The numeric arguments are first converted to a common type.\n',
+ 'bitwise': '\n'
+            'Binary bitwise operations\n'
+            '*************************\n'
+            '\n'
+            'Each of the three bitwise operations has a different priority '
+            'level:\n'
+            '\n'
+            '   and_expr ::= shift_expr | and_expr "&" shift_expr\n'
+            '   xor_expr ::= and_expr | xor_expr "^" and_expr\n'
+            '   or_expr  ::= xor_expr | or_expr "|" xor_expr\n'
+            '\n'
+            'The "&" operator yields the bitwise AND of its arguments, which '
+            'must\n'
+            'be plain or long integers.  The arguments are converted to a '
+            'common\n'
+            'type.\n'
+            '\n'
+            'The "^" operator yields the bitwise XOR (exclusive OR) of its\n'
+            'arguments, which must be plain or long integers.  The arguments '
+            'are\n'
+            'converted to a common type.\n'
+            '\n'
+            'The "|" operator yields the bitwise (inclusive) OR of its '
+            'arguments,\n'
+            'which must be plain or long integers.  The arguments are '
+            'converted to\n'
+            'a common type.\n',
+ 'bltin-code-objects': '\n'
+                       'Code Objects\n'
+                       '************\n'
+                       '\n'
+                       'Code objects are used by the implementation to '
+                       'represent "pseudo-\n'
+                       'compiled" executable Python code such as a function '
+                       'body. They differ\n'
+                       "from function objects because they don't contain a "
+                       'reference to their\n'
+                       'global execution environment.  Code objects are '
+                       'returned by the built-\n'
+                       'in "compile()" function and can be extracted from '
+                       'function objects\n'
+                       'through their "func_code" attribute. See also the '
+                       '"code" module.\n'
+                       '\n'
+                       'A code object can be executed or evaluated by passing '
+                       'it (instead of a\n'
+                       'source string) to the "exec" statement or the built-in '
+                       '"eval()"\n'
+                       'function.\n'
+                       '\n'
+                       'See The standard type hierarchy for more '
+                       'information.\n',
+ 'bltin-ellipsis-object': '\n'
+                          'The Ellipsis Object\n'
+                          '*******************\n'
+                          '\n'
+                          'This object is used by extended slice notation (see '
+                          'Slicings).  It\n'
+                          'supports no special operations.  There is exactly '
+                          'one ellipsis object,\n'
+                          'named "Ellipsis" (a built-in name).\n'
+                          '\n'
+                          'It is written as "Ellipsis".  When in a subscript, '
+                          'it can also be\n'
+                          'written as "...", for example "seq[...]".\n',
+ 'bltin-file-objects': '\n'
+                       'File Objects\n'
+                       '************\n'
+                       '\n'
+                       'File objects are implemented using C\'s "stdio" '
+                       'package and can be\n'
+                       'created with the built-in "open()" function.  File '
+                       'objects are also\n'
+                       'returned by some other built-in functions and methods, '
+                       'such as\n'
+                       '"os.popen()" and "os.fdopen()" and the "makefile()" '
+                       'method of socket\n'
+                       'objects. Temporary files can be created using the '
+                       '"tempfile" module,\n'
+                       'and high-level file operations such as copying, '
+                       'moving, and deleting\n'
+                       'files and directories can be achieved with the '
+                       '"shutil" module.\n'
+                       '\n'
+                       'When a file operation fails for an I/O-related reason, '
+                       'the exception\n'
+                       '"IOError" is raised.  This includes situations where '
+                       'the operation is\n'
+                       'not defined for some reason, like "seek()" on a tty '
+                       'device or writing\n'
+                       'a file opened for reading.\n'
+                       '\n'
+                       'Files have the following methods:\n'
+                       '\n'
+                       'file.close()\n'
+                       '\n'
+                       '   Close the file.  A closed file cannot be read or '
+                       'written any more.\n'
+                       '   Any operation which requires that the file be open '
+                       'will raise a\n'
+                       '   "ValueError" after the file has been closed.  '
+                       'Calling "close()"\n'
+                       '   more than once is allowed.\n'
+                       '\n'
+                       '   As of Python 2.5, you can avoid having to call this '
+                       'method\n'
+                       '   explicitly if you use the "with" statement.  For '
+                       'example, the\n'
+                       '   following code will automatically close *f* when '
+                       'the "with" block\n'
+                       '   is exited:\n'
+                       '\n'
+                       '      from __future__ import with_statement # This '
+                       "isn't required in Python 2.6\n"
+                       '\n'
+                       '      with open("hello.txt") as f:\n'
+                       '          for line in f:\n'
+                       '              print line,\n'
+                       '\n'
+                       '   In older versions of Python, you would have needed '
+                       'to do this to\n'
+                       '   get the same effect:\n'
+                       '\n'
+                       '      f = open("hello.txt")\n'
+                       '      try:\n'
+                       '          for line in f:\n'
+                       '              print line,\n'
+                       '      finally:\n'
+                       '          f.close()\n'
+                       '\n'
+                       '   Note: Not all "file-like" types in Python support '
+                       'use as a\n'
+                       '     context manager for the "with" statement.  If '
+                       'your code is\n'
+                       '     intended to work with any file-like object, you '
+                       'can use the\n'
+                       '     function "contextlib.closing()" instead of using '
+                       'the object\n'
+                       '     directly.\n'
+                       '\n'
+                       'file.flush()\n'
+                       '\n'
+                       '   Flush the internal buffer, like "stdio"\'s '
+                       '"fflush()".  This may be\n'
+                       '   a no-op on some file-like objects.\n'
+                       '\n'
+                       '   Note: "flush()" does not necessarily write the '
+                       "file's data to\n"
+                       '     disk. Use "flush()" followed by "os.fsync()" to '
+                       'ensure this\n'
+                       '     behavior.\n'
+                       '\n'
+                       'file.fileno()\n'
+                       '\n'
+                       '   Return the integer "file descriptor" that is used '
+                       'by the underlying\n'
+                       '   implementation to request I/O operations from the '
+                       'operating system.\n'
+                       '   This can be useful for other, lower level '
+                       'interfaces that use file\n'
+                       '   descriptors, such as the "fcntl" module or '
+                       '"os.read()" and friends.\n'
+                       '\n'
+                       '   Note: File-like objects which do not have a real '
+                       'file descriptor\n'
+                       '     should *not* provide this method!\n'
+                       '\n'
+                       'file.isatty()\n'
+                       '\n'
+                       '   Return "True" if the file is connected to a '
+                       'tty(-like) device, else\n'
+                       '   "False".\n'
+                       '\n'
+                       '   Note: If a file-like object is not associated with '
+                       'a real file,\n'
+                       '     this method should *not* be implemented.\n'
+                       '\n'
+                       'file.next()\n'
+                       '\n'
+                       '   A file object is its own iterator, for example '
+                       '"iter(f)" returns\n'
+                       '   *f* (unless *f* is closed).  When a file is used as '
+                       'an iterator,\n'
+                       '   typically in a "for" loop (for example, "for line '
+                       'in f: print\n'
+                       '   line.strip()"), the "next()" method is called '
+                       'repeatedly.  This\n'
+                       '   method returns the next input line, or raises '
+                       '"StopIteration" when\n'
+                       '   EOF is hit when the file is open for reading '
+                       '(behavior is undefined\n'
+                       '   when the file is open for writing).  In order to '
+                       'make a "for" loop\n'
+                       '   the most efficient way of looping over the lines of '
+                       'a file (a very\n'
+                       '   common operation), the "next()" method uses a '
+                       'hidden read-ahead\n'
+                       '   buffer.  As a consequence of using a read-ahead '
+                       'buffer, combining\n'
+                       '   "next()" with other file methods (like '
+                       '"readline()") does not work\n'
+                       '   right.  However, using "seek()" to reposition the '
+                       'file to an\n'
+                       '   absolute position will flush the read-ahead '
+                       'buffer.\n'
+                       '\n'
+                       '   New in version 2.3.\n'
+                       '\n'
+                       'file.read([size])\n'
+                       '\n'
+                       '   Read at most *size* bytes from the file (less if '
+                       'the read hits EOF\n'
+                       '   before obtaining *size* bytes).  If the *size* '
+                       'argument is negative\n'
+                       '   or omitted, read all data until EOF is reached.  '
+                       'The bytes are\n'
+                       '   returned as a string object.  An empty string is '
+                       'returned when EOF\n'
+                       '   is encountered immediately.  (For certain files, '
+                       'like ttys, it\n'
+                       '   makes sense to continue reading after an EOF is '
+                       'hit.)  Note that\n'
+                       '   this method may call the underlying C function '
+                       '"fread()" more than\n'
+                       '   once in an effort to acquire as close to *size* '
+                       'bytes as possible.\n'
+                       '   Also note that when in non-blocking mode, less data '
+                       'than was\n'
+                       '   requested may be returned, even if no *size* '
+                       'parameter was given.\n'
+                       '\n'
+                       '   Note: This function is simply a wrapper for the '
+                       'underlying\n'
+                       '     "fread()" C function, and will behave the same in '
+                       'corner cases,\n'
+                       '     such as whether the EOF value is cached.\n'
+                       '\n'
+                       'file.readline([size])\n'
+                       '\n'
+                       '   Read one entire line from the file.  A trailing '
+                       'newline character\n'
+                       '   is kept in the string (but may be absent when a '
+                       'file ends with an\n'
+                       '   incomplete line). [6] If the *size* argument is '
+                       'present and non-\n'
+                       '   negative, it is a maximum byte count (including the '
+                       'trailing\n'
+                       '   newline) and an incomplete line may be returned. '
+                       'When *size* is not\n'
+                       '   0, an empty string is returned *only* when EOF is '
+                       'encountered\n'
+                       '   immediately.\n'
+                       '\n'
+                       '   Note: Unlike "stdio"\'s "fgets()", the returned '
+                       'string contains\n'
+                       '     null characters ("\'\\0\'") if they occurred in '
+                       'the input.\n'
+                       '\n'
+                       'file.readlines([sizehint])\n'
+                       '\n'
+                       '   Read until EOF using "readline()" and return a list '
+                       'containing the\n'
+                       '   lines thus read.  If the optional *sizehint* '
+                       'argument is present,\n'
+                       '   instead of reading up to EOF, whole lines totalling '
+                       'approximately\n'
+                       '   *sizehint* bytes (possibly after rounding up to an '
+                       'internal buffer\n'
+                       '   size) are read.  Objects implementing a file-like '
+                       'interface may\n'
+                       '   choose to ignore *sizehint* if it cannot be '
+                       'implemented, or cannot\n'
+                       '   be implemented efficiently.\n'
+                       '\n'
+                       'file.xreadlines()\n'
+                       '\n'
+                       '   This method returns the same thing as "iter(f)".\n'
+                       '\n'
+                       '   New in version 2.1.\n'
+                       '\n'
+                       '   Deprecated since version 2.3: Use "for line in '
+                       'file" instead.\n'
+                       '\n'
+                       'file.seek(offset[, whence])\n'
+                       '\n'
+                       '   Set the file\'s current position, like "stdio"\'s '
+                       '"fseek()". The\n'
+                       '   *whence* argument is optional and defaults to  '
+                       '"os.SEEK_SET" or "0"\n'
+                       '   (absolute file positioning); other values are '
+                       '"os.SEEK_CUR" or "1"\n'
+                       '   (seek relative to the current position) and '
+                       '"os.SEEK_END" or "2"\n'
+                       "   (seek relative to the file's end).  There is no "
+                       'return value.\n'
+                       '\n'
+                       '   For example, "f.seek(2, os.SEEK_CUR)" advances the '
+                       'position by two\n'
+                       '   and "f.seek(-3, os.SEEK_END)" sets the position to '
+                       'the third to\n'
+                       '   last.\n'
+                       '\n'
+                       '   Note that if the file is opened for appending (mode '
+                       '"\'a\'" or\n'
+                       '   "\'a+\'"), any "seek()" operations will be undone '
+                       'at the next write.\n'
+                       '   If the file is only opened for writing in append '
+                       'mode (mode "\'a\'"),\n'
+                       '   this method is essentially a no-op, but it remains '
+                       'useful for files\n'
+                       '   opened in append mode with reading enabled (mode '
+                       '"\'a+\'").  If the\n'
+                       '   file is opened in text mode (without "\'b\'"), only '
+                       'offsets returned\n'
+                       '   by "tell()" are legal.  Use of other offsets causes '
+                       'undefined\n'
+                       '   behavior.\n'
+                       '\n'
+                       '   Note that not all file objects are seekable.\n'
+                       '\n'
+                       '   Changed in version 2.6: Passing float values as '
+                       'offset has been\n'
+                       '   deprecated.\n'
+                       '\n'
+                       'file.tell()\n'
+                       '\n'
+                       "   Return the file's current position, like "
+                       '"stdio"\'s "ftell()".\n'
+                       '\n'
+                       '   Note: On Windows, "tell()" can return illegal '
+                       'values (after an\n'
+                       '     "fgets()") when reading files with Unix-style '
+                       'line-endings. Use\n'
+                       '     binary mode ("\'rb\'") to circumvent this '
+                       'problem.\n'
+                       '\n'
+                       'file.truncate([size])\n'
+                       '\n'
+                       "   Truncate the file's size.  If the optional *size* "
+                       'argument is\n'
+                       '   present, the file is truncated to (at most) that '
+                       'size.  The size\n'
+                       '   defaults to the current position. The current file '
+                       'position is not\n'
+                       '   changed.  Note that if a specified size exceeds the '
+                       "file's current\n"
+                       '   size, the result is platform-dependent:  '
+                       'possibilities include that\n'
+                       '   the file may remain unchanged, increase to the '
+                       'specified size as if\n'
+                       '   zero-filled, or increase to the specified size with '
+                       'undefined new\n'
+                       '   content. Availability:  Windows, many Unix '
+                       'variants.\n'
+                       '\n'
+                       'file.write(str)\n'
+                       '\n'
+                       '   Write a string to the file.  There is no return '
+                       'value.  Due to\n'
+                       '   buffering, the string may not actually show up in '
+                       'the file until\n'
+                       '   the "flush()" or "close()" method is called.\n'
+                       '\n'
+                       'file.writelines(sequence)\n'
+                       '\n'
+                       '   Write a sequence of strings to the file.  The '
+                       'sequence can be any\n'
+                       '   iterable object producing strings, typically a list '
+                       'of strings.\n'
+                       '   There is no return value. (The name is intended to '
+                       'match\n'
+                       '   "readlines()"; "writelines()" does not add line '
+                       'separators.)\n'
+                       '\n'
+                       'Files support the iterator protocol.  Each iteration '
+                       'returns the same\n'
+                       'result as "readline()", and iteration ends when the '
+                       '"readline()"\n'
+                       'method returns an empty string.\n'
+                       '\n'
+                       'File objects also offer a number of other interesting '
+                       'attributes.\n'
+                       'These are not required for file-like objects, but '
+                       'should be\n'
+                       'implemented if they make sense for the particular '
+                       'object.\n'
+                       '\n'
+                       'file.closed\n'
+                       '\n'
+                       '   bool indicating the current state of the file '
+                       'object.  This is a\n'
+                       '   read-only attribute; the "close()" method changes '
+                       'the value. It may\n'
+                       '   not be available on all file-like objects.\n'
+                       '\n'
+                       'file.encoding\n'
+                       '\n'
+                       '   The encoding that this file uses. When Unicode '
+                       'strings are written\n'
+                       '   to a file, they will be converted to byte strings '
+                       'using this\n'
+                       '   encoding. In addition, when the file is connected '
+                       'to a terminal,\n'
+                       '   the attribute gives the encoding that the terminal '
+                       'is likely to use\n'
+                       '   (that  information might be incorrect if the user '
+                       'has misconfigured\n'
+                       '   the  terminal). The attribute is read-only and may '
+                       'not be present\n'
+                       '   on all file-like objects. It may also be "None", in '
+                       'which case the\n'
+                       '   file uses the system default encoding for '
+                       'converting Unicode\n'
+                       '   strings.\n'
+                       '\n'
+                       '   New in version 2.3.\n'
+                       '\n'
+                       'file.errors\n'
+                       '\n'
+                       '   The Unicode error handler used along with the '
+                       'encoding.\n'
+                       '\n'
+                       '   New in version 2.6.\n'
+                       '\n'
+                       'file.mode\n'
+                       '\n'
+                       '   The I/O mode for the file.  If the file was created '
+                       'using the\n'
+                       '   "open()" built-in function, this will be the value '
+                       'of the *mode*\n'
+                       '   parameter.  This is a read-only attribute and may '
+                       'not be present on\n'
+                       '   all file-like objects.\n'
+                       '\n'
+                       'file.name\n'
+                       '\n'
+                       '   If the file object was created using "open()", the '
+                       'name of the\n'
+                       '   file. Otherwise, some string that indicates the '
+                       'source of the file\n'
+                       '   object, of the form "<...>".  This is a read-only '
+                       'attribute and may\n'
+                       '   not be present on all file-like objects.\n'
+                       '\n'
+                       'file.newlines\n'
+                       '\n'
+                       '   If Python was built with *universal newlines* '
+                       'enabled (the default)\n'
+                       '   this read-only attribute exists, and for files '
+                       'opened in universal\n'
+                       '   newline read mode it keeps track of the types of '
+                       'newlines\n'
+                       '   encountered while reading the file. The values it '
+                       'can take are\n'
+                       '   "\'\\r\'", "\'\\n\'", "\'\\r\\n\'", "None" '
+                       '(unknown, no newlines read yet) or\n'
+                       '   a tuple containing all the newline types seen, to '
+                       'indicate that\n'
+                       '   multiple newline conventions were encountered. For '
+                       'files not opened\n'
+                       '   in universal newlines read mode the value of this '
+                       'attribute will be\n'
+                       '   "None".\n'
+                       '\n'
+                       'file.softspace\n'
+                       '\n'
+                       '   Boolean that indicates whether a space character '
+                       'needs to be\n'
+                       '   printed before another value when using the "print" '
+                       'statement.\n'
+                       '   Classes that are trying to simulate a file object '
+                       'should also have\n'
+                       '   a writable "softspace" attribute, which should be '
+                       'initialized to\n'
+                       '   zero.  This will be automatic for most classes '
+                       'implemented in\n'
+                       '   Python (care may be needed for objects that '
+                       'override attribute\n'
+                       '   access); types implemented in C will have to '
+                       'provide a writable\n'
+                       '   "softspace" attribute.\n'
+                       '\n'
+                       '   Note: This attribute is not used to control the '
+                       '"print"\n'
+                       '     statement, but to allow the implementation of '
+                       '"print" to keep\n'
+                       '     track of its internal state.\n',
+ 'bltin-null-object': '\n'
+                      'The Null Object\n'
+                      '***************\n'
+                      '\n'
+                      "This object is returned by functions that don't "
+                      'explicitly return a\n'
+                      'value.  It supports no special operations.  There is '
+                      'exactly one null\n'
+                      'object, named "None" (a built-in name).\n'
+                      '\n'
+                      'It is written as "None".\n',
+ 'bltin-type-objects': '\n'
+                       'Type Objects\n'
+                       '************\n'
+                       '\n'
+                       'Type objects represent the various object types.  An '
+                       "object's type is\n"
+                       'accessed by the built-in function "type()".  There are '
+                       'no special\n'
+                       'operations on types.  The standard module "types" '
+                       'defines names for\n'
+                       'all standard built-in types.\n'
+                       '\n'
+                       'Types are written like this: "<type \'int\'>".\n',
+ 'booleans': '\n'
+             'Boolean operations\n'
+             '******************\n'
+             '\n'
+             '   or_test  ::= and_test | or_test "or" and_test\n'
+             '   and_test ::= not_test | and_test "and" not_test\n'
+             '   not_test ::= comparison | "not" not_test\n'
+             '\n'
+             'In the context of Boolean operations, and also when expressions '
+             'are\n'
+             'used by control flow statements, the following values are '
+             'interpreted\n'
+             'as false: "False", "None", numeric zero of all types, and empty\n'
+             'strings and containers (including strings, tuples, lists,\n'
+             'dictionaries, sets and frozensets).  All other values are '
+             'interpreted\n'
+             'as true.  (See the "__nonzero__()" special method for a way to '
+             'change\n'
+             'this.)\n'
+             '\n'
+             'The operator "not" yields "True" if its argument is false, '
+             '"False"\n'
+             'otherwise.\n'
+             '\n'
+             'The expression "x and y" first evaluates *x*; if *x* is false, '
+             'its\n'
+             'value is returned; otherwise, *y* is evaluated and the resulting '
+             'value\n'
+             'is returned.\n'
+             '\n'
+             'The expression "x or y" first evaluates *x*; if *x* is true, its '
+             'value\n'
+             'is returned; otherwise, *y* is evaluated and the resulting value '
+             'is\n'
+             'returned.\n'
+             '\n'
+             '(Note that neither "and" nor "or" restrict the value and type '
+             'they\n'
+             'return to "False" and "True", but rather return the last '
+             'evaluated\n'
+             'argument. This is sometimes useful, e.g., if "s" is a string '
+             'that\n'
+             'should be replaced by a default value if it is empty, the '
+             'expression\n'
+             '"s or \'foo\'" yields the desired value.  Because "not" has to '
+             'invent a\n'
+             'value anyway, it does not bother to return a value of the same '
+             'type as\n'
+             'its argument, so e.g., "not \'foo\'" yields "False", not '
+             '"\'\'".)\n',
+ 'break': '\n'
+          'The "break" statement\n'
+          '*********************\n'
+          '\n'
+          '   break_stmt ::= "break"\n'
+          '\n'
+          '"break" may only occur syntactically nested in a "for" or "while"\n'
+          'loop, but not nested in a function or class definition within that\n'
+          'loop.\n'
+          '\n'
+          'It terminates the nearest enclosing loop, skipping the optional '
+          '"else"\n'
+          'clause if the loop has one.\n'
+          '\n'
+          'If a "for" loop is terminated by "break", the loop control target\n'
+          'keeps its current value.\n'
+          '\n'
+          'When "break" passes control out of a "try" statement with a '
+          '"finally"\n'
+          'clause, that "finally" clause is executed before really leaving '
+          'the\n'
+          'loop.\n',
+ 'callable-types': '\n'
+                   'Emulating callable objects\n'
+                   '**************************\n'
+                   '\n'
+                   'object.__call__(self[, args...])\n'
+                   '\n'
+                   '   Called when the instance is "called" as a function; if '
+                   'this method\n'
+                   '   is defined, "x(arg1, arg2, ...)" is a shorthand for\n'
+                   '   "x.__call__(arg1, arg2, ...)".\n',
+ 'calls': '\n'
+          'Calls\n'
+          '*****\n'
+          '\n'
+          'A call calls a callable object (e.g., a *function*) with a '
+          'possibly\n'
+          'empty series of *arguments*:\n'
+          '\n'
+          '   call                 ::= primary "(" [argument_list [","]\n'
+          '            | expression genexpr_for] ")"\n'
+          '   argument_list        ::= positional_arguments ["," '
+          'keyword_arguments]\n'
+          '                       ["," "*" expression] ["," '
+          'keyword_arguments]\n'
+          '                       ["," "**" expression]\n'
+          '                     | keyword_arguments ["," "*" expression]\n'
+          '                       ["," "**" expression]\n'
+          '                     | "*" expression ["," keyword_arguments] ["," '
+          '"**" expression]\n'
+          '                     | "**" expression\n'
+          '   positional_arguments ::= expression ("," expression)*\n'
+          '   keyword_arguments    ::= keyword_item ("," keyword_item)*\n'
+          '   keyword_item         ::= identifier "=" expression\n'
+          '\n'
+          'A trailing comma may be present after the positional and keyword\n'
+          'arguments but does not affect the semantics.\n'
+          '\n'
+          'The primary must evaluate to a callable object (user-defined\n'
+          'functions, built-in functions, methods of built-in objects, class\n'
+          'objects, methods of class instances, and certain class instances\n'
+          'themselves are callable; extensions may define additional callable\n'
+          'object types).  All argument expressions are evaluated before the '
+          'call\n'
+          'is attempted.  Please refer to section Function definitions for '
+          'the\n'
+          'syntax of formal *parameter* lists.\n'
+          '\n'
+          'If keyword arguments are present, they are first converted to\n'
+          'positional arguments, as follows.  First, a list of unfilled slots '
+          'is\n'
+          'created for the formal parameters.  If there are N positional\n'
+          'arguments, they are placed in the first N slots.  Next, for each\n'
+          'keyword argument, the identifier is used to determine the\n'
+          'corresponding slot (if the identifier is the same as the first '
+          'formal\n'
+          'parameter name, the first slot is used, and so on).  If the slot '
+          'is\n'
+          'already filled, a "TypeError" exception is raised. Otherwise, the\n'
+          'value of the argument is placed in the slot, filling it (even if '
+          'the\n'
+          'expression is "None", it fills the slot).  When all arguments have\n'
+          'been processed, the slots that are still unfilled are filled with '
+          'the\n'
+          'corresponding default value from the function definition.  '
+          '(Default\n'
+          'values are calculated, once, when the function is defined; thus, a\n'
+          'mutable object such as a list or dictionary used as default value '
+          'will\n'
+          "be shared by all calls that don't specify an argument value for "
+          'the\n'
+          'corresponding slot; this should usually be avoided.)  If there are '
+          'any\n'
+          'unfilled slots for which no default value is specified, a '
+          '"TypeError"\n'
+          'exception is raised.  Otherwise, the list of filled slots is used '
+          'as\n'
+          'the argument list for the call.\n'
+          '\n'
+          '**CPython implementation detail:** An implementation may provide\n'
+          'built-in functions whose positional parameters do not have names, '
+          'even\n'
+          "if they are 'named' for the purpose of documentation, and which\n"
+          'therefore cannot be supplied by keyword.  In CPython, this is the '
+          'case\n'
+          'for functions implemented in C that use "PyArg_ParseTuple()" to '
+          'parse\n'
+          'their arguments.\n'
+          '\n'
+          'If there are more positional arguments than there are formal '
+          'parameter\n'
+          'slots, a "TypeError" exception is raised, unless a formal '
+          'parameter\n'
+          'using the syntax "*identifier" is present; in this case, that '
+          'formal\n'
+          'parameter receives a tuple containing the excess positional '
+          'arguments\n'
+          '(or an empty tuple if there were no excess positional arguments).\n'
+          '\n'
+          'If any keyword argument does not correspond to a formal parameter\n'
+          'name, a "TypeError" exception is raised, unless a formal parameter\n'
+          'using the syntax "**identifier" is present; in this case, that '
+          'formal\n'
+          'parameter receives a dictionary containing the excess keyword\n'
+          'arguments (using the keywords as keys and the argument values as\n'
+          'corresponding values), or a (new) empty dictionary if there were '
+          'no\n'
+          'excess keyword arguments.\n'
+          '\n'
+          'If the syntax "*expression" appears in the function call, '
+          '"expression"\n'
+          'must evaluate to an iterable.  Elements from this iterable are '
+          'treated\n'
+          'as if they were additional positional arguments; if there are\n'
+          'positional arguments *x1*, ..., *xN*, and "expression" evaluates to '
+          'a\n'
+          'sequence *y1*, ..., *yM*, this is equivalent to a call with M+N\n'
+          'positional arguments *x1*, ..., *xN*, *y1*, ..., *yM*.\n'
+          '\n'
+          'A consequence of this is that although the "*expression" syntax '
+          'may\n'
+          'appear *after* some keyword arguments, it is processed *before* '
+          'the\n'
+          'keyword arguments (and the "**expression" argument, if any -- see\n'
+          'below).  So:\n'
+          '\n'
+          '   >>> def f(a, b):\n'
+          '   ...     print a, b\n'
+          '   ...\n'
+          '   >>> f(b=1, *(2,))\n'
+          '   2 1\n'
+          '   >>> f(a=1, *(2,))\n'
+          '   Traceback (most recent call last):\n'
+          '     File "<stdin>", line 1, in <module>\n'
+          "   TypeError: f() got multiple values for keyword argument 'a'\n"
+          '   >>> f(1, *(2,))\n'
+          '   1 2\n'
+          '\n'
+          'It is unusual for both keyword arguments and the "*expression" '
+          'syntax\n'
+          'to be used in the same call, so in practice this confusion does '
+          'not\n'
+          'arise.\n'
+          '\n'
+          'If the syntax "**expression" appears in the function call,\n'
+          '"expression" must evaluate to a mapping, the contents of which are\n'
+          'treated as additional keyword arguments.  In the case of a keyword\n'
+          'appearing in both "expression" and as an explicit keyword argument, '
+          'a\n'
+          '"TypeError" exception is raised.\n'
+          '\n'
+          'Formal parameters using the syntax "*identifier" or "**identifier"\n'
+          'cannot be used as positional argument slots or as keyword argument\n'
+          'names.  Formal parameters using the syntax "(sublist)" cannot be '
+          'used\n'
+          'as keyword argument names; the outermost sublist corresponds to a\n'
+          'single unnamed argument slot, and the argument value is assigned '
+          'to\n'
+          'the sublist using the usual tuple assignment rules after all other\n'
+          'parameter processing is done.\n'
+          '\n'
+          'A call always returns some value, possibly "None", unless it raises '
+          'an\n'
+          'exception.  How this value is computed depends on the type of the\n'
+          'callable object.\n'
+          '\n'
+          'If it is---\n'
+          '\n'
+          'a user-defined function:\n'
+          '   The code block for the function is executed, passing it the\n'
+          '   argument list.  The first thing the code block will do is bind '
+          'the\n'
+          '   formal parameters to the arguments; this is described in '
+          'section\n'
+          '   Function definitions.  When the code block executes a "return"\n'
+          '   statement, this specifies the return value of the function '
+          'call.\n'
+          '\n'
+          'a built-in function or method:\n'
+          '   The result is up to the interpreter; see Built-in Functions for '
+          'the\n'
+          '   descriptions of built-in functions and methods.\n'
+          '\n'
+          'a class object:\n'
+          '   A new instance of that class is returned.\n'
+          '\n'
+          'a class instance method:\n'
+          '   The corresponding user-defined function is called, with an '
+          'argument\n'
+          '   list that is one longer than the argument list of the call: the\n'
+          '   instance becomes the first argument.\n'
+          '\n'
+          'a class instance:\n'
+          '   The class must define a "__call__()" method; the effect is then '
+          'the\n'
+          '   same as if that method was called.\n',
+ 'class': '\n'
+          'Class definitions\n'
+          '*****************\n'
+          '\n'
+          'A class definition defines a class object (see section The '
+          'standard\n'
+          'type hierarchy):\n'
+          '\n'
+          '   classdef    ::= "class" classname [inheritance] ":" suite\n'
+          '   inheritance ::= "(" [expression_list] ")"\n'
+          '   classname   ::= identifier\n'
+          '\n'
+          'A class definition is an executable statement.  It first evaluates '
+          'the\n'
+          'inheritance list, if present.  Each item in the inheritance list\n'
+          'should evaluate to a class object or class type which allows\n'
+          "subclassing.  The class's suite is then executed in a new "
+          'execution\n'
+          'frame (see section Naming and binding), using a newly created '
+          'local\n'
+          'namespace and the original global namespace. (Usually, the suite\n'
+          "contains only function definitions.)  When the class's suite "
+          'finishes\n'
+          'execution, its execution frame is discarded but its local namespace '
+          'is\n'
+          'saved. [4] A class object is then created using the inheritance '
+          'list\n'
+          'for the base classes and the saved local namespace for the '
+          'attribute\n'
+          'dictionary.  The class name is bound to this class object in the\n'
+          'original local namespace.\n'
+          '\n'
+          "**Programmer's note:** Variables defined in the class definition "
+          'are\n'
+          'class variables; they are shared by all instances.  To create '
+          'instance\n'
+          'variables, they can be set in a method with "self.name = value".  '
+          'Both\n'
+          'class and instance variables are accessible through the notation\n'
+          '""self.name"", and an instance variable hides a class variable '
+          'with\n'
+          'the same name when accessed in this way. Class variables can be '
+          'used\n'
+          'as defaults for instance variables, but using mutable values there '
+          'can\n'
+          'lead to unexpected results.  For *new-style class*es, descriptors '
+          'can\n'
+          'be used to create instance variables with different implementation\n'
+          'details.\n'
+          '\n'
+          'Class definitions, like function definitions, may be wrapped by one '
+          'or\n'
+          'more *decorator* expressions.  The evaluation rules for the '
+          'decorator\n'
+          'expressions are the same as for functions.  The result must be a '
+          'class\n'
+          'object, which is then bound to the class name.\n'
+          '\n'
+          '-[ Footnotes ]-\n'
+          '\n'
+          '[1] The exception is propagated to the invocation stack unless\n'
+          '    there is a "finally" clause which happens to raise another\n'
+          '    exception. That new exception causes the old one to be lost.\n'
+          '\n'
+          '[2] Currently, control "flows off the end" except in the case of\n'
+          '    an exception or the execution of a "return", "continue", or\n'
+          '    "break" statement.\n'
+          '\n'
+          '[3] A string literal appearing as the first statement in the\n'
+          '    function body is transformed into the function\'s "__doc__"\n'
+          "    attribute and therefore the function's *docstring*.\n"
+          '\n'
+          '[4] A string literal appearing as the first statement in the class\n'
+          '    body is transformed into the namespace\'s "__doc__" item and\n'
+          "    therefore the class's *docstring*.\n",
+ 'comparisons': '\n'
+                'Comparisons\n'
+                '***********\n'
+                '\n'
+                'Unlike C, all comparison operations in Python have the same '
+                'priority,\n'
+                'which is lower than that of any arithmetic, shifting or '
+                'bitwise\n'
+                'operation.  Also unlike C, expressions like "a < b < c" have '
+                'the\n'
+                'interpretation that is conventional in mathematics:\n'
+                '\n'
+                '   comparison    ::= or_expr ( comp_operator or_expr )*\n'
+                '   comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "<>" | '
+                '"!="\n'
+                '                     | "is" ["not"] | ["not"] "in"\n'
+                '\n'
+                'Comparisons yield boolean values: "True" or "False".\n'
+                '\n'
+                'Comparisons can be chained arbitrarily, e.g., "x < y <= z" '
+                'is\n'
+                'equivalent to "x < y and y <= z", except that "y" is '
+                'evaluated only\n'
+                'once (but in both cases "z" is not evaluated at all when "x < '
+                'y" is\n'
+                'found to be false).\n'
+                '\n'
+                'Formally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and '
+                '*op1*,\n'
+                '*op2*, ..., *opN* are comparison operators, then "a op1 b op2 '
+                'c ... y\n'
+                'opN z" is equivalent to "a op1 b and b op2 c and ... y opN '
+                'z", except\n'
+                'that each expression is evaluated at most once.\n'
+                '\n'
+                'Note that "a op1 b op2 c" doesn\'t imply any kind of '
+                'comparison between\n'
+                '*a* and *c*, so that, e.g., "x < y > z" is perfectly legal '
+                '(though\n'
+                'perhaps not pretty).\n'
+                '\n'
+                'The forms "<>" and "!=" are equivalent; for consistency with '
+                'C, "!="\n'
+                'is preferred; where "!=" is mentioned below "<>" is also '
+                'accepted.\n'
+                'The "<>" spelling is considered obsolescent.\n'
+                '\n'
+                '\n'
+                'Value comparisons\n'
+                '=================\n'
+                '\n'
+                'The operators "<", ">", "==", ">=", "<=", and "!=" compare '
+                'the values\n'
+                'of two objects.  The objects do not need to have the same '
+                'type.\n'
+                '\n'
+                'Chapter Objects, values and types states that objects have a '
+                'value (in\n'
+                'addition to type and identity).  The value of an object is a '
+                'rather\n'
+                'abstract notion in Python: For example, there is no canonical '
+                'access\n'
+                "method for an object's value.  Also, there is no requirement "
+                'that the\n'
+                'value of an object should be constructed in a particular way, '
+                'e.g.\n'
+                'comprised of all its data attributes. Comparison operators '
+                'implement a\n'
+                'particular notion of what the value of an object is.  One can '
+                'think of\n'
+                'them as defining the value of an object indirectly, by means '
+                'of their\n'
+                'comparison implementation.\n'
+                '\n'
+                'Types can customize their comparison behavior by implementing '
+                'a\n'
+                '"__cmp__()" method or *rich comparison methods* like '
+                '"__lt__()",\n'
+                'described in Basic customization.\n'
+                '\n'
+                'The default behavior for equality comparison ("==" and "!=") '
+                'is based\n'
+                'on the identity of the objects.  Hence, equality comparison '
+                'of\n'
+                'instances with the same identity results in equality, and '
+                'equality\n'
+                'comparison of instances with different identities results in\n'
+                'inequality.  A motivation for this default behavior is the '
+                'desire that\n'
+                'all objects should be reflexive (i.e. "x is y" implies "x == '
+                'y").\n'
+                '\n'
+                'The default order comparison ("<", ">", "<=", and ">=") gives '
+                'a\n'
+                'consistent but arbitrary order.\n'
+                '\n'
+                '(This unusual definition of comparison was used to simplify '
+                'the\n'
+                'definition of operations like sorting and the "in" and "not '
+                'in"\n'
+                'operators. In the future, the comparison rules for objects '
+                'of\n'
+                'different types are likely to change.)\n'
+                '\n'
+                'The behavior of the default equality comparison, that '
+                'instances with\n'
+                'different identities are always unequal, may be in contrast '
+                'to what\n'
+                'types will need that have a sensible definition of object '
+                'value and\n'
+                'value-based equality.  Such types will need to customize '
+                'their\n'
+                'comparison behavior, and in fact, a number of built-in types '
+                'have done\n'
+                'that.\n'
+                '\n'
+                'The following list describes the comparison behavior of the '
+                'most\n'
+                'important built-in types.\n'
+                '\n'
+                '* Numbers of built-in numeric types (Numeric Types --- int, '
+                'float,\n'
+                '  long, complex) and of the standard library types\n'
+                '  "fractions.Fraction" and "decimal.Decimal" can be compared '
+                'within\n'
+                '  and across their types, with the restriction that complex '
+                'numbers do\n'
+                '  not support order comparison.  Within the limits of the '
+                'types\n'
+                '  involved, they compare mathematically (algorithmically) '
+                'correct\n'
+                '  without loss of precision.\n'
+                '\n'
+                '* Strings (instances of "str" or "unicode") compare\n'
+                '  lexicographically using the numeric equivalents (the result '
+                'of the\n'
+                '  built-in function "ord()") of their characters. [4] When '
+                'comparing\n'
+                '  an 8-bit string and a Unicode string, the 8-bit string is '
+                'converted\n'
+                '  to Unicode.  If the conversion fails, the strings are '
+                'considered\n'
+                '  unequal.\n'
+                '\n'
+                '* Instances of "tuple" or "list" can be compared only within '
+                'each of\n'
+                '  their types.  Equality comparison across these types '
+                'results in\n'
+                '  unequality, and ordering comparison across these types '
+                'gives an\n'
+                '  arbitrary order.\n'
+                '\n'
+                '  These sequences compare lexicographically using comparison '
+                'of\n'
+                '  corresponding elements, whereby reflexivity of the elements '
+                'is\n'
+                '  enforced.\n'
+                '\n'
+                '  In enforcing reflexivity of elements, the comparison of '
+                'collections\n'
+                '  assumes that for a collection element "x", "x == x" is '
+                'always true.\n'
+                '  Based on that assumption, element identity is compared '
+                'first, and\n'
+                '  element comparison is performed only for distinct '
+                'elements.  This\n'
+                '  approach yields the same result as a strict element '
+                'comparison\n'
+                '  would, if the compared elements are reflexive.  For '
+                'non-reflexive\n'
+                '  elements, the result is different than for strict element\n'
+                '  comparison.\n'
+                '\n'
+                '  Lexicographical comparison between built-in collections '
+                'works as\n'
+                '  follows:\n'
+                '\n'
+                '  * For two collections to compare equal, they must be of the '
+                'same\n'
+                '    type, have the same length, and each pair of '
+                'corresponding\n'
+                '    elements must compare equal (for example, "[1,2] == '
+                '(1,2)" is\n'
+                '    false because the type is not the same).\n'
+                '\n'
+                '  * Collections are ordered the same as their first unequal '
+                'elements\n'
+                '    (for example, "cmp([1,2,x], [1,2,y])" returns the same '
+                'as\n'
+                '    "cmp(x,y)").  If a corresponding element does not exist, '
+                'the\n'
+                '    shorter collection is ordered first (for example, "[1,2] '
+                '<\n'
+                '    [1,2,3]" is true).\n'
+                '\n'
+                '* Mappings (instances of "dict") compare equal if and only if '
+                'they\n'
+                '  have equal *(key, value)* pairs. Equality comparison of the '
+                'keys and\n'
+                '  values enforces reflexivity.\n'
+                '\n'
+                '  Outcomes other than equality are resolved consistently, but '
+                'are not\n'
+                '  otherwise defined. [5]\n'
+                '\n'
+                '* Most other objects of built-in types compare unequal unless '
+                'they\n'
+                '  are the same object; the choice whether one object is '
+                'considered\n'
+                '  smaller or larger than another one is made arbitrarily but\n'
+                '  consistently within one execution of a program.\n'
+                '\n'
+                'User-defined classes that customize their comparison behavior '
+                'should\n'
+                'follow some consistency rules, if possible:\n'
+                '\n'
+                '* Equality comparison should be reflexive. In other words, '
+                'identical\n'
+                '  objects should compare equal:\n'
+                '\n'
+                '     "x is y" implies "x == y"\n'
+                '\n'
+                '* Comparison should be symmetric. In other words, the '
+                'following\n'
+                '  expressions should have the same result:\n'
+                '\n'
+                '     "x == y" and "y == x"\n'
+                '\n'
+                '     "x != y" and "y != x"\n'
+                '\n'
+                '     "x < y" and "y > x"\n'
+                '\n'
+                '     "x <= y" and "y >= x"\n'
+                '\n'
+                '* Comparison should be transitive. The following '
+                '(non-exhaustive)\n'
+                '  examples illustrate that:\n'
+                '\n'
+                '     "x > y and y > z" implies "x > z"\n'
+                '\n'
+                '     "x < y and y <= z" implies "x < z"\n'
+                '\n'
+                '* Inverse comparison should result in the boolean negation. '
+                'In other\n'
+                '  words, the following expressions should have the same '
+                'result:\n'
+                '\n'
+                '     "x == y" and "not x != y"\n'
+                '\n'
+                '     "x < y" and "not x >= y" (for total ordering)\n'
+                '\n'
+                '     "x > y" and "not x <= y" (for total ordering)\n'
+                '\n'
+                '  The last two expressions apply to totally ordered '
+                'collections (e.g.\n'
+                '  to sequences, but not to sets or mappings). See also the\n'
+                '  "total_ordering()" decorator.\n'
+                '\n'
+                '* The "hash()" result should be consistent with equality. '
+                'Objects\n'
+                '  that are equal should either have the same hash value, or '
+                'be marked\n'
+                '  as unhashable.\n'
+                '\n'
+                'Python does not enforce these consistency rules.\n'
+                '\n'
+                '\n'
+                'Membership test operations\n'
+                '==========================\n'
+                '\n'
+                'The operators "in" and "not in" test for membership.  "x in '
+                's"\n'
+                'evaluates to "True" if *x* is a member of *s*, and "False" '
+                'otherwise.\n'
+                '"x not in s" returns the negation of "x in s".  All built-in '
+                'sequences\n'
+                'and set types support this as well as dictionary, for which '
+                '"in" tests\n'
+                'whether the dictionary has a given key. For container types '
+                'such as\n'
+                'list, tuple, set, frozenset, dict, or collections.deque, the\n'
+                'expression "x in y" is equivalent to "any(x is e or x == e '
+                'for e in\n'
+                'y)".\n'
+                '\n'
+                'For the string and bytes types, "x in y" is "True" if and '
+                'only if *x*\n'
+                'is a substring of *y*.  An equivalent test is "y.find(x) != '
+                '-1".\n'
+                'Empty strings are always considered to be a substring of any '
+                'other\n'
+                'string, so """ in "abc"" will return "True".\n'
+                '\n'
+                'For user-defined classes which define the "__contains__()" '
+                'method, "x\n'
+                'in y" returns "True" if "y.__contains__(x)" returns a true '
+                'value, and\n'
+                '"False" otherwise.\n'
+                '\n'
+                'For user-defined classes which do not define "__contains__()" '
+                'but do\n'
+                'define "__iter__()", "x in y" is "True" if some value "z" '
+                'with "x ==\n'
+                'z" is produced while iterating over "y".  If an exception is '
+                'raised\n'
+                'during the iteration, it is as if "in" raised that '
+                'exception.\n'
+                '\n'
+                'Lastly, the old-style iteration protocol is tried: if a class '
+                'defines\n'
+                '"__getitem__()", "x in y" is "True" if and only if there is a '
+                'non-\n'
+                'negative integer index *i* such that "x == y[i]", and all '
+                'lower\n'
+                'integer indices do not raise "IndexError" exception. (If any '
+                'other\n'
+                'exception is raised, it is as if "in" raised that '
+                'exception).\n'
+                '\n'
+                'The operator "not in" is defined to have the inverse true '
+                'value of\n'
+                '"in".\n'
+                '\n'
+                '\n'
+                'Identity comparisons\n'
+                '====================\n'
+                '\n'
+                'The operators "is" and "is not" test for object identity: "x '
+                'is y" is\n'
+                'true if and only if *x* and *y* are the same object.  "x is '
+                'not y"\n'
+                'yields the inverse truth value. [6]\n',
+ 'compound': '\n'
+             'Compound statements\n'
+             '*******************\n'
+             '\n'
+             'Compound statements contain (groups of) other statements; they '
+             'affect\n'
+             'or control the execution of those other statements in some way.  '
+             'In\n'
+             'general, compound statements span multiple lines, although in '
+             'simple\n'
+             'incarnations a whole compound statement may be contained in one '
+             'line.\n'
+             '\n'
+             'The "if", "while" and "for" statements implement traditional '
+             'control\n'
+             'flow constructs.  "try" specifies exception handlers and/or '
+             'cleanup\n'
+             'code for a group of statements.  Function and class definitions '
+             'are\n'
+             'also syntactically compound statements.\n'
+             '\n'
+             "Compound statements consist of one or more 'clauses.'  A clause\n"
+             "consists of a header and a 'suite.'  The clause headers of a\n"
+             'particular compound statement are all at the same indentation '
+             'level.\n'
+             'Each clause header begins with a uniquely identifying keyword '
+             'and ends\n'
+             'with a colon.  A suite is a group of statements controlled by a\n'
+             'clause.  A suite can be one or more semicolon-separated simple\n'
+             'statements on the same line as the header, following the '
+             "header's\n"
+             'colon, or it can be one or more indented statements on '
+             'subsequent\n'
+             'lines.  Only the latter form of suite can contain nested '
+             'compound\n'
+             "statements; the following is illegal, mostly because it wouldn't "
+             'be\n'
+             'clear to which "if" clause a following "else" clause would '
+             'belong:\n'
+             '\n'
+             '   if test1: if test2: print x\n'
+             '\n'
+             'Also note that the semicolon binds tighter than the colon in '
+             'this\n'
+             'context, so that in the following example, either all or none of '
+             'the\n'
+             '"print" statements are executed:\n'
+             '\n'
+             '   if x < y < z: print x; print y; print z\n'
+             '\n'
+             'Summarizing:\n'
+             '\n'
+             '   compound_stmt ::= if_stmt\n'
+             '                     | while_stmt\n'
+             '                     | for_stmt\n'
+             '                     | try_stmt\n'
+             '                     | with_stmt\n'
+             '                     | funcdef\n'
+             '                     | classdef\n'
+             '                     | decorated\n'
+             '   suite         ::= stmt_list NEWLINE | NEWLINE INDENT '
+             'statement+ DEDENT\n'
+             '   statement     ::= stmt_list NEWLINE | compound_stmt\n'
+             '   stmt_list     ::= simple_stmt (";" simple_stmt)* [";"]\n'
+             '\n'
+             'Note that statements always end in a "NEWLINE" possibly followed '
+             'by a\n'
+             '"DEDENT". Also note that optional continuation clauses always '
+             'begin\n'
+             'with a keyword that cannot start a statement, thus there are no\n'
+             'ambiguities (the \'dangling "else"\' problem is solved in Python '
+             'by\n'
+             'requiring nested "if" statements to be indented).\n'
+             '\n'
+             'The formatting of the grammar rules in the following sections '
+             'places\n'
+             'each clause on a separate line for clarity.\n'
+             '\n'
+             '\n'
+             'The "if" statement\n'
+             '==================\n'
+             '\n'
+             'The "if" statement is used for conditional execution:\n'
+             '\n'
+             '   if_stmt ::= "if" expression ":" suite\n'
+             '               ( "elif" expression ":" suite )*\n'
+             '               ["else" ":" suite]\n'
+             '\n'
+             'It selects exactly one of the suites by evaluating the '
+             'expressions one\n'
+             'by one until one is found to be true (see section Boolean '
+             'operations\n'
+             'for the definition of true and false); then that suite is '
+             'executed\n'
+             '(and no other part of the "if" statement is executed or '
+             'evaluated).\n'
+             'If all expressions are false, the suite of the "else" clause, '
+             'if\n'
+             'present, is executed.\n'
+             '\n'
+             '\n'
+             'The "while" statement\n'
+             '=====================\n'
+             '\n'
+             'The "while" statement is used for repeated execution as long as '
+             'an\n'
+             'expression is true:\n'
+             '\n'
+             '   while_stmt ::= "while" expression ":" suite\n'
+             '                  ["else" ":" suite]\n'
+             '\n'
+             'This repeatedly tests the expression and, if it is true, '
+             'executes the\n'
+             'first suite; if the expression is false (which may be the first '
+             'time\n'
+             'it is tested) the suite of the "else" clause, if present, is '
+             'executed\n'
+             'and the loop terminates.\n'
+             '\n'
+             'A "break" statement executed in the first suite terminates the '
+             'loop\n'
+             'without executing the "else" clause\'s suite.  A "continue" '
+             'statement\n'
+             'executed in the first suite skips the rest of the suite and goes '
+             'back\n'
+             'to testing the expression.\n'
+             '\n'
+             '\n'
+             'The "for" statement\n'
+             '===================\n'
+             '\n'
+             'The "for" statement is used to iterate over the elements of a '
+             'sequence\n'
+             '(such as a string, tuple or list) or other iterable object:\n'
+             '\n'
+             '   for_stmt ::= "for" target_list "in" expression_list ":" '
+             'suite\n'
+             '                ["else" ":" suite]\n'
+             '\n'
+             'The expression list is evaluated once; it should yield an '
+             'iterable\n'
+             'object.  An iterator is created for the result of the\n'
+             '"expression_list".  The suite is then executed once for each '
+             'item\n'
+             'provided by the iterator, in the order of ascending indices.  '
+             'Each\n'
+             'item in turn is assigned to the target list using the standard '
+             'rules\n'
+             'for assignments, and then the suite is executed.  When the items '
+             'are\n'
+             'exhausted (which is immediately when the sequence is empty), the '
+             'suite\n'
+             'in the "else" clause, if present, is executed, and the loop\n'
+             'terminates.\n'
+             '\n'
+             'A "break" statement executed in the first suite terminates the '
+             'loop\n'
+             'without executing the "else" clause\'s suite.  A "continue" '
+             'statement\n'
+             'executed in the first suite skips the rest of the suite and '
+             'continues\n'
+             'with the next item, or with the "else" clause if there was no '
+             'next\n'
+             'item.\n'
+             '\n'
+             'The suite may assign to the variable(s) in the target list; this '
+             'does\n'
+             'not affect the next item assigned to it.\n'
+             '\n'
+             'The target list is not deleted when the loop is finished, but if '
+             'the\n'
+             'sequence is empty, it will not have been assigned to at all by '
+             'the\n'
+             'loop.  Hint: the built-in function "range()" returns a sequence '
+             'of\n'
+             'integers suitable to emulate the effect of Pascal\'s "for i := a '
+             'to b\n'
+             'do"; e.g., "range(3)" returns the list "[0, 1, 2]".\n'
+             '\n'
+             'Note: There is a subtlety when the sequence is being modified by '
+             'the\n'
+             '  loop (this can only occur for mutable sequences, i.e. lists). '
+             'An\n'
+             '  internal counter is used to keep track of which item is used '
+             'next,\n'
+             '  and this is incremented on each iteration.  When this counter '
+             'has\n'
+             '  reached the length of the sequence the loop terminates.  This '
+             'means\n'
+             '  that if the suite deletes the current (or a previous) item '
+             'from the\n'
+             '  sequence, the next item will be skipped (since it gets the '
+             'index of\n'
+             '  the current item which has already been treated).  Likewise, '
+             'if the\n'
+             '  suite inserts an item in the sequence before the current item, '
+             'the\n'
+             '  current item will be treated again the next time through the '
+             'loop.\n'
+             '  This can lead to nasty bugs that can be avoided by making a\n'
+             '  temporary copy using a slice of the whole sequence, e.g.,\n'
+             '\n'
+             '     for x in a[:]:\n'
+             '         if x < 0: a.remove(x)\n'
+             '\n'
+             '\n'
+             'The "try" statement\n'
+             '===================\n'
+             '\n'
+             'The "try" statement specifies exception handlers and/or cleanup '
+             'code\n'
+             'for a group of statements:\n'
+             '\n'
+             '   try_stmt  ::= try1_stmt | try2_stmt\n'
+             '   try1_stmt ::= "try" ":" suite\n'
+             '                 ("except" [expression [("as" | ",") '
+             'identifier]] ":" suite)+\n'
+             '                 ["else" ":" suite]\n'
+             '                 ["finally" ":" suite]\n'
+             '   try2_stmt ::= "try" ":" suite\n'
+             '                 "finally" ":" suite\n'
+             '\n'
+             'Changed in version 2.5: In previous versions of Python,\n'
+             '"try"..."except"..."finally" did not work. "try"..."except" had '
+             'to be\n'
+             'nested in "try"..."finally".\n'
+             '\n'
+             'The "except" clause(s) specify one or more exception handlers. '
+             'When no\n'
+             'exception occurs in the "try" clause, no exception handler is\n'
+             'executed. When an exception occurs in the "try" suite, a search '
+             'for an\n'
+             'exception handler is started.  This search inspects the except '
+             'clauses\n'
+             'in turn until one is found that matches the exception.  An '
+             'expression-\n'
+             'less except clause, if present, must be last; it matches any\n'
+             'exception.  For an except clause with an expression, that '
+             'expression\n'
+             'is evaluated, and the clause matches the exception if the '
+             'resulting\n'
+             'object is "compatible" with the exception.  An object is '
+             'compatible\n'
+             'with an exception if it is the class or a base class of the '
+             'exception\n'
+             'object, or a tuple containing an item compatible with the '
+             'exception.\n'
+             '\n'
+             'If no except clause matches the exception, the search for an '
+             'exception\n'
+             'handler continues in the surrounding code and on the invocation '
+             'stack.\n'
+             '[1]\n'
+             '\n'
+             'If the evaluation of an expression in the header of an except '
+             'clause\n'
+             'raises an exception, the original search for a handler is '
+             'canceled and\n'
+             'a search starts for the new exception in the surrounding code '
+             'and on\n'
+             'the call stack (it is treated as if the entire "try" statement '
+             'raised\n'
+             'the exception).\n'
+             '\n'
+             'When a matching except clause is found, the exception is '
+             'assigned to\n'
+             'the target specified in that except clause, if present, and the '
+             'except\n'
+             "clause's suite is executed.  All except clauses must have an\n"
+             'executable block.  When the end of this block is reached, '
+             'execution\n'
+             'continues normally after the entire try statement.  (This means '
+             'that\n'
+             'if two nested handlers exist for the same exception, and the '
+             'exception\n'
+             'occurs in the try clause of the inner handler, the outer handler '
+             'will\n'
+             'not handle the exception.)\n'
+             '\n'
+             "Before an except clause's suite is executed, details about the\n"
+             'exception are assigned to three variables in the "sys" module:\n'
+             '"sys.exc_type" receives the object identifying the exception;\n'
+             '"sys.exc_value" receives the exception\'s parameter;\n'
+             '"sys.exc_traceback" receives a traceback object (see section '
+             'The\n'
+             'standard type hierarchy) identifying the point in the program '
+             'where\n'
+             'the exception occurred. These details are also available through '
+             'the\n'
+             '"sys.exc_info()" function, which returns a tuple "(exc_type,\n'
+             'exc_value, exc_traceback)".  Use of the corresponding variables '
+             'is\n'
+             'deprecated in favor of this function, since their use is unsafe '
+             'in a\n'
+             'threaded program.  As of Python 1.5, the variables are restored '
+             'to\n'
+             'their previous values (before the call) when returning from a '
+             'function\n'
+             'that handled an exception.\n'
+             '\n'
+             'The optional "else" clause is executed if and when control flows '
+             'off\n'
+             'the end of the "try" clause. [2] Exceptions in the "else" clause '
+             'are\n'
+             'not handled by the preceding "except" clauses.\n'
+             '\n'
+             'If "finally" is present, it specifies a \'cleanup\' handler.  '
+             'The "try"\n'
+             'clause is executed, including any "except" and "else" clauses.  '
+             'If an\n'
+             'exception occurs in any of the clauses and is not handled, the\n'
+             'exception is temporarily saved. The "finally" clause is '
+             'executed.  If\n'
+             'there is a saved exception, it is re-raised at the end of the\n'
+             '"finally" clause. If the "finally" clause raises another '
+             'exception or\n'
+             'executes a "return" or "break" statement, the saved exception '
+             'is\n'
+             'discarded:\n'
+             '\n'
+             '   >>> def f():\n'
+             '   ...     try:\n'
+             '   ...         1/0\n'
+             '   ...     finally:\n'
+             '   ...         return 42\n'
+             '   ...\n'
+             '   >>> f()\n'
+             '   42\n'
+             '\n'
+             'The exception information is not available to the program '
+             'during\n'
+             'execution of the "finally" clause.\n'
+             '\n'
+             'When a "return", "break" or "continue" statement is executed in '
+             'the\n'
+             '"try" suite of a "try"..."finally" statement, the "finally" '
+             'clause is\n'
+             'also executed \'on the way out.\' A "continue" statement is '
+             'illegal in\n'
+             'the "finally" clause. (The reason is a problem with the current\n'
+             'implementation --- this restriction may be lifted in the '
+             'future).\n'
+             '\n'
+             'The return value of a function is determined by the last '
+             '"return"\n'
+             'statement executed.  Since the "finally" clause always executes, '
+             'a\n'
+             '"return" statement executed in the "finally" clause will always '
+             'be the\n'
+             'last one executed:\n'
+             '\n'
+             '   >>> def foo():\n'
+             '   ...     try:\n'
+             "   ...         return 'try'\n"
+             '   ...     finally:\n'
+             "   ...         return 'finally'\n"
+             '   ...\n'
+             '   >>> foo()\n'
+             "   'finally'\n"
+             '\n'
+             'Additional information on exceptions can be found in section\n'
+             'Exceptions, and information on using the "raise" statement to '
+             'generate\n'
+             'exceptions may be found in section The raise statement.\n'
+             '\n'
+             '\n'
+             'The "with" statement\n'
+             '====================\n'
+             '\n'
+             'New in version 2.5.\n'
+             '\n'
+             'The "with" statement is used to wrap the execution of a block '
+             'with\n'
+             'methods defined by a context manager (see section With '
+             'Statement\n'
+             'Context Managers). This allows common '
+             '"try"..."except"..."finally"\n'
+             'usage patterns to be encapsulated for convenient reuse.\n'
+             '\n'
+             '   with_stmt ::= "with" with_item ("," with_item)* ":" suite\n'
+             '   with_item ::= expression ["as" target]\n'
+             '\n'
+             'The execution of the "with" statement with one "item" proceeds '
+             'as\n'
+             'follows:\n'
+             '\n'
+             '1. The context expression (the expression given in the '
+             '"with_item")\n'
+             '   is evaluated to obtain a context manager.\n'
+             '\n'
+             '2. The context manager\'s "__exit__()" is loaded for later use.\n'
+             '\n'
+             '3. The context manager\'s "__enter__()" method is invoked.\n'
+             '\n'
+             '4. If a target was included in the "with" statement, the return\n'
+             '   value from "__enter__()" is assigned to it.\n'
+             '\n'
+             '   Note: The "with" statement guarantees that if the '
+             '"__enter__()"\n'
+             '     method returns without an error, then "__exit__()" will '
+             'always be\n'
+             '     called. Thus, if an error occurs during the assignment to '
+             'the\n'
+             '     target list, it will be treated the same as an error '
+             'occurring\n'
+             '     within the suite would be. See step 6 below.\n'
+             '\n'
+             '5. The suite is executed.\n'
+             '\n'
+             '6. The context manager\'s "__exit__()" method is invoked. If an\n'
+             '   exception caused the suite to be exited, its type, value, '
+             'and\n'
+             '   traceback are passed as arguments to "__exit__()". Otherwise, '
+             'three\n'
+             '   "None" arguments are supplied.\n'
+             '\n'
+             '   If the suite was exited due to an exception, and the return '
+             'value\n'
+             '   from the "__exit__()" method was false, the exception is '
+             'reraised.\n'
+             '   If the return value was true, the exception is suppressed, '
+             'and\n'
+             '   execution continues with the statement following the "with"\n'
+             '   statement.\n'
+             '\n'
+             '   If the suite was exited for any reason other than an '
+             'exception, the\n'
+             '   return value from "__exit__()" is ignored, and execution '
+             'proceeds\n'
+             '   at the normal location for the kind of exit that was taken.\n'
+             '\n'
+             'With more than one item, the context managers are processed as '
+             'if\n'
+             'multiple "with" statements were nested:\n'
+             '\n'
+             '   with A() as a, B() as b:\n'
+             '       suite\n'
+             '\n'
+             'is equivalent to\n'
+             '\n'
+             '   with A() as a:\n'
+             '       with B() as b:\n'
+             '           suite\n'
+             '\n'
+             'Note: In Python 2.5, the "with" statement is only allowed when '
+             'the\n'
+             '  "with_statement" feature has been enabled.  It is always '
+             'enabled in\n'
+             '  Python 2.6.\n'
+             '\n'
+             'Changed in version 2.7: Support for multiple context '
+             'expressions.\n'
+             '\n'
+             'See also:\n'
+             '\n'
+             '  **PEP 343** - The "with" statement\n'
+             '     The specification, background, and examples for the Python '
+             '"with"\n'
+             '     statement.\n'
+             '\n'
+             '\n'
+             'Function definitions\n'
+             '====================\n'
+             '\n'
+             'A function definition defines a user-defined function object '
+             '(see\n'
+             'section The standard type hierarchy):\n'
+             '\n'
+             '   decorated      ::= decorators (classdef | funcdef)\n'
+             '   decorators     ::= decorator+\n'
+             '   decorator      ::= "@" dotted_name ["(" [argument_list [","]] '
+             '")"] NEWLINE\n'
+             '   funcdef        ::= "def" funcname "(" [parameter_list] ")" '
+             '":" suite\n'
+             '   dotted_name    ::= identifier ("." identifier)*\n'
+             '   parameter_list ::= (defparameter ",")*\n'
+             '                      (  "*" identifier ["," "**" identifier]\n'
+             '                      | "**" identifier\n'
+             '                      | defparameter [","] )\n'
+             '   defparameter   ::= parameter ["=" expression]\n'
+             '   sublist        ::= parameter ("," parameter)* [","]\n'
+             '   parameter      ::= identifier | "(" sublist ")"\n'
+             '   funcname       ::= identifier\n'
+             '\n'
+             'A function definition is an executable statement.  Its execution '
+             'binds\n'
+             'the function name in the current local namespace to a function '
+             'object\n'
+             '(a wrapper around the executable code for the function).  This\n'
+             'function object contains a reference to the current global '
+             'namespace\n'
+             'as the global namespace to be used when the function is called.\n'
+             '\n'
+             'The function definition does not execute the function body; this '
+             'gets\n'
+             'executed only when the function is called. [3]\n'
+             '\n'
+             'A function definition may be wrapped by one or more *decorator*\n'
+             'expressions. Decorator expressions are evaluated when the '
+             'function is\n'
+             'defined, in the scope that contains the function definition.  '
+             'The\n'
+             'result must be a callable, which is invoked with the function '
+             'object\n'
+             'as the only argument. The returned value is bound to the '
+             'function name\n'
+             'instead of the function object.  Multiple decorators are applied '
+             'in\n'
+             'nested fashion. For example, the following code:\n'
+             '\n'
+             '   @f1(arg)\n'
+             '   @f2\n'
+             '   def func(): pass\n'
+             '\n'
+             'is equivalent to:\n'
+             '\n'
+             '   def func(): pass\n'
+             '   func = f1(arg)(f2(func))\n'
+             '\n'
+             'When one or more top-level *parameters* have the form '
+             '*parameter* "="\n'
+             '*expression*, the function is said to have "default parameter '
+             'values."\n'
+             'For a parameter with a default value, the corresponding '
+             '*argument* may\n'
+             "be omitted from a call, in which case the parameter's default "
+             'value is\n'
+             'substituted.  If a parameter has a default value, all following\n'
+             'parameters must also have a default value --- this is a '
+             'syntactic\n'
+             'restriction that is not expressed by the grammar.\n'
+             '\n'
+             '**Default parameter values are evaluated when the function '
+             'definition\n'
+             'is executed.**  This means that the expression is evaluated '
+             'once, when\n'
+             'the function is defined, and that the same "pre-computed" value '
+             'is\n'
+             'used for each call.  This is especially important to understand '
+             'when a\n'
+             'default parameter is a mutable object, such as a list or a '
+             'dictionary:\n'
+             'if the function modifies the object (e.g. by appending an item '
+             'to a\n'
+             'list), the default value is in effect modified. This is '
+             'generally not\n'
+             'what was intended.  A way around this  is to use "None" as the\n'
+             'default, and explicitly test for it in the body of the function, '
+             'e.g.:\n'
+             '\n'
+             '   def whats_on_the_telly(penguin=None):\n'
+             '       if penguin is None:\n'
+             '           penguin = []\n'
+             '       penguin.append("property of the zoo")\n'
+             '       return penguin\n'
+             '\n'
+             'Function call semantics are described in more detail in section '
+             'Calls.\n'
+             'A function call always assigns values to all parameters '
+             'mentioned in\n'
+             'the parameter list, either from position arguments, from '
+             'keyword\n'
+             'arguments, or from default values.  If the form ""*identifier"" '
+             'is\n'
+             'present, it is initialized to a tuple receiving any excess '
+             'positional\n'
+             'parameters, defaulting to the empty tuple.  If the form\n'
+             '""**identifier"" is present, it is initialized to a new '
+             'dictionary\n'
+             'receiving any excess keyword arguments, defaulting to a new '
+             'empty\n'
+             'dictionary.\n'
+             '\n'
+             'It is also possible to create anonymous functions (functions not '
+             'bound\n'
+             'to a name), for immediate use in expressions.  This uses lambda\n'
+             'expressions, described in section Lambdas.  Note that the '
+             'lambda\n'
+             'expression is merely a shorthand for a simplified function '
+             'definition;\n'
+             'a function defined in a ""def"" statement can be passed around '
+             'or\n'
+             'assigned to another name just like a function defined by a '
+             'lambda\n'
+             'expression.  The ""def"" form is actually more powerful since '
+             'it\n'
+             'allows the execution of multiple statements.\n'
+             '\n'
+             "**Programmer's note:** Functions are first-class objects.  A "
+             '""def""\n'
+             'form executed inside a function definition defines a local '
+             'function\n'
+             'that can be returned or passed around.  Free variables used in '
+             'the\n'
+             'nested function can access the local variables of the function\n'
+             'containing the def.  See section Naming and binding for '
+             'details.\n'
+             '\n'
+             '\n'
+             'Class definitions\n'
+             '=================\n'
+             '\n'
+             'A class definition defines a class object (see section The '
+             'standard\n'
+             'type hierarchy):\n'
+             '\n'
+             '   classdef    ::= "class" classname [inheritance] ":" suite\n'
+             '   inheritance ::= "(" [expression_list] ")"\n'
+             '   classname   ::= identifier\n'
+             '\n'
+             'A class definition is an executable statement.  It first '
+             'evaluates the\n'
+             'inheritance list, if present.  Each item in the inheritance '
+             'list\n'
+             'should evaluate to a class object or class type which allows\n'
+             "subclassing.  The class's suite is then executed in a new "
+             'execution\n'
+             'frame (see section Naming and binding), using a newly created '
+             'local\n'
+             'namespace and the original global namespace. (Usually, the '
+             'suite\n'
+             "contains only function definitions.)  When the class's suite "
+             'finishes\n'
+             'execution, its execution frame is discarded but its local '
+             'namespace is\n'
+             'saved. [4] A class object is then created using the inheritance '
+             'list\n'
+             'for the base classes and the saved local namespace for the '
+             'attribute\n'
+             'dictionary.  The class name is bound to this class object in '
+             'the\n'
+             'original local namespace.\n'
+             '\n'
+             "**Programmer's note:** Variables defined in the class definition "
+             'are\n'
+             'class variables; they are shared by all instances.  To create '
+             'instance\n'
+             'variables, they can be set in a method with "self.name = '
+             'value".  Both\n'
+             'class and instance variables are accessible through the '
+             'notation\n'
+             '""self.name"", and an instance variable hides a class variable '
+             'with\n'
+             'the same name when accessed in this way. Class variables can be '
+             'used\n'
+             'as defaults for instance variables, but using mutable values '
+             'there can\n'
+             'lead to unexpected results.  For *new-style class*es, '
+             'descriptors can\n'
+             'be used to create instance variables with different '
+             'implementation\n'
+             'details.\n'
+             '\n'
+             'Class definitions, like function definitions, may be wrapped by '
+             'one or\n'
+             'more *decorator* expressions.  The evaluation rules for the '
+             'decorator\n'
+             'expressions are the same as for functions.  The result must be a '
+             'class\n'
+             'object, which is then bound to the class name.\n'
+             '\n'
+             '-[ Footnotes ]-\n'
+             '\n'
+             '[1] The exception is propagated to the invocation stack unless\n'
+             '    there is a "finally" clause which happens to raise another\n'
+             '    exception. That new exception causes the old one to be '
+             'lost.\n'
+             '\n'
+             '[2] Currently, control "flows off the end" except in the case '
+             'of\n'
+             '    an exception or the execution of a "return", "continue", or\n'
+             '    "break" statement.\n'
+             '\n'
+             '[3] A string literal appearing as the first statement in the\n'
+             '    function body is transformed into the function\'s "__doc__"\n'
+             "    attribute and therefore the function's *docstring*.\n"
+             '\n'
+             '[4] A string literal appearing as the first statement in the '
+             'class\n'
+             '    body is transformed into the namespace\'s "__doc__" item '
+             'and\n'
+             "    therefore the class's *docstring*.\n",
+ 'context-managers': '\n'
+                     'With Statement Context Managers\n'
+                     '*******************************\n'
+                     '\n'
+                     'New in version 2.5.\n'
+                     '\n'
+                     'A *context manager* is an object that defines the '
+                     'runtime context to\n'
+                     'be established when executing a "with" statement. The '
+                     'context manager\n'
+                     'handles the entry into, and the exit from, the desired '
+                     'runtime context\n'
+                     'for the execution of the block of code.  Context '
+                     'managers are normally\n'
+                     'invoked using the "with" statement (described in section '
+                     'The with\n'
+                     'statement), but can also be used by directly invoking '
+                     'their methods.\n'
+                     '\n'
+                     'Typical uses of context managers include saving and '
+                     'restoring various\n'
+                     'kinds of global state, locking and unlocking resources, '
+                     'closing opened\n'
+                     'files, etc.\n'
+                     '\n'
+                     'For more information on context managers, see Context '
+                     'Manager Types.\n'
+                     '\n'
+                     'object.__enter__(self)\n'
+                     '\n'
+                     '   Enter the runtime context related to this object. The '
+                     '"with"\n'
+                     "   statement will bind this method's return value to the "
+                     'target(s)\n'
+                     '   specified in the "as" clause of the statement, if '
+                     'any.\n'
+                     '\n'
+                     'object.__exit__(self, exc_type, exc_value, traceback)\n'
+                     '\n'
+                     '   Exit the runtime context related to this object. The '
+                     'parameters\n'
+                     '   describe the exception that caused the context to be '
+                     'exited. If the\n'
+                     '   context was exited without an exception, all three '
+                     'arguments will\n'
+                     '   be "None".\n'
+                     '\n'
+                     '   If an exception is supplied, and the method wishes to '
+                     'suppress the\n'
+                     '   exception (i.e., prevent it from being propagated), '
+                     'it should\n'
+                     '   return a true value. Otherwise, the exception will be '
+                     'processed\n'
+                     '   normally upon exit from this method.\n'
+                     '\n'
+                     '   Note that "__exit__()" methods should not reraise the '
+                     'passed-in\n'
+                     "   exception; this is the caller's responsibility.\n"
+                     '\n'
+                     'See also:\n'
+                     '\n'
+                     '  **PEP 343** - The "with" statement\n'
+                     '     The specification, background, and examples for the '
+                     'Python "with"\n'
+                     '     statement.\n',
+ 'continue': '\n'
+             'The "continue" statement\n'
+             '************************\n'
+             '\n'
+             '   continue_stmt ::= "continue"\n'
+             '\n'
+             '"continue" may only occur syntactically nested in a "for" or '
+             '"while"\n'
+             'loop, but not nested in a function or class definition or '
+             '"finally"\n'
+             'clause within that loop.  It continues with the next cycle of '
+             'the\n'
+             'nearest enclosing loop.\n'
+             '\n'
+             'When "continue" passes control out of a "try" statement with a\n'
+             '"finally" clause, that "finally" clause is executed before '
+             'really\n'
+             'starting the next loop cycle.\n',
+ 'conversions': '\n'
+                'Arithmetic conversions\n'
+                '**********************\n'
+                '\n'
+                'When a description of an arithmetic operator below uses the '
+                'phrase\n'
+                '"the numeric arguments are converted to a common type," the '
+                'arguments\n'
+                'are coerced using the coercion rules listed at  Coercion '
+                'rules.  If\n'
+                'both arguments are standard numeric types, the following '
+                'coercions are\n'
+                'applied:\n'
+                '\n'
+                '* If either argument is a complex number, the other is '
+                'converted to\n'
+                '  complex;\n'
+                '\n'
+                '* otherwise, if either argument is a floating point number, '
+                'the\n'
+                '  other is converted to floating point;\n'
+                '\n'
+                '* otherwise, if either argument is a long integer, the other '
+                'is\n'
+                '  converted to long integer;\n'
+                '\n'
+                '* otherwise, both must be plain integers and no conversion '
+                'is\n'
+                '  necessary.\n'
+                '\n'
+                'Some additional rules apply for certain operators (e.g., a '
+                'string left\n'
+                "argument to the '%' operator). Extensions can define their "
+                'own\n'
+                'coercions.\n',
+ 'customization': '\n'
+                  'Basic customization\n'
+                  '*******************\n'
+                  '\n'
+                  'object.__new__(cls[, ...])\n'
+                  '\n'
+                  '   Called to create a new instance of class *cls*.  '
+                  '"__new__()" is a\n'
+                  '   static method (special-cased so you need not declare it '
+                  'as such)\n'
+                  '   that takes the class of which an instance was requested '
+                  'as its\n'
+                  '   first argument.  The remaining arguments are those '
+                  'passed to the\n'
+                  '   object constructor expression (the call to the class).  '
+                  'The return\n'
+                  '   value of "__new__()" should be the new object instance '
+                  '(usually an\n'
+                  '   instance of *cls*).\n'
+                  '\n'
+                  '   Typical implementations create a new instance of the '
+                  'class by\n'
+                  '   invoking the superclass\'s "__new__()" method using\n'
+                  '   "super(currentclass, cls).__new__(cls[, ...])" with '
+                  'appropriate\n'
+                  '   arguments and then modifying the newly-created instance '
+                  'as\n'
+                  '   necessary before returning it.\n'
+                  '\n'
+                  '   If "__new__()" returns an instance of *cls*, then the '
+                  'new\n'
+                  '   instance\'s "__init__()" method will be invoked like\n'
+                  '   "__init__(self[, ...])", where *self* is the new '
+                  'instance and the\n'
+                  '   remaining arguments are the same as were passed to '
+                  '"__new__()".\n'
+                  '\n'
+                  '   If "__new__()" does not return an instance of *cls*, '
+                  'then the new\n'
+                  '   instance\'s "__init__()" method will not be invoked.\n'
+                  '\n'
+                  '   "__new__()" is intended mainly to allow subclasses of '
+                  'immutable\n'
+                  '   types (like int, str, or tuple) to customize instance '
+                  'creation.  It\n'
+                  '   is also commonly overridden in custom metaclasses in '
+                  'order to\n'
+                  '   customize class creation.\n'
+                  '\n'
+                  'object.__init__(self[, ...])\n'
+                  '\n'
+                  '   Called after the instance has been created (by '
+                  '"__new__()"), but\n'
+                  '   before it is returned to the caller.  The arguments are '
+                  'those\n'
+                  '   passed to the class constructor expression.  If a base '
+                  'class has an\n'
+                  '   "__init__()" method, the derived class\'s "__init__()" '
+                  'method, if\n'
+                  '   any, must explicitly call it to ensure proper '
+                  'initialization of the\n'
+                  '   base class part of the instance; for example:\n'
+                  '   "BaseClass.__init__(self, [args...])".\n'
+                  '\n'
+                  '   Because "__new__()" and "__init__()" work together in '
+                  'constructing\n'
+                  '   objects ("__new__()" to create it, and "__init__()" to '
+                  'customise\n'
+                  '   it), no non-"None" value may be returned by '
+                  '"__init__()"; doing so\n'
+                  '   will cause a "TypeError" to be raised at runtime.\n'
+                  '\n'
+                  'object.__del__(self)\n'
+                  '\n'
+                  '   Called when the instance is about to be destroyed.  This '
+                  'is also\n'
+                  '   called a destructor.  If a base class has a "__del__()" '
+                  'method, the\n'
+                  '   derived class\'s "__del__()" method, if any, must '
+                  'explicitly call it\n'
+                  '   to ensure proper deletion of the base class part of the '
+                  'instance.\n'
+                  '   Note that it is possible (though not recommended!) for '
+                  'the\n'
+                  '   "__del__()" method to postpone destruction of the '
+                  'instance by\n'
+                  '   creating a new reference to it.  It may then be called '
+                  'at a later\n'
+                  '   time when this new reference is deleted.  It is not '
+                  'guaranteed that\n'
+                  '   "__del__()" methods are called for objects that still '
+                  'exist when\n'
+                  '   the interpreter exits.\n'
+                  '\n'
+                  '   Note: "del x" doesn\'t directly call "x.__del__()" --- '
+                  'the former\n'
+                  '     decrements the reference count for "x" by one, and the '
+                  'latter is\n'
+                  '     only called when "x"\'s reference count reaches zero.  '
+                  'Some common\n'
+                  '     situations that may prevent the reference count of an '
+                  'object from\n'
+                  '     going to zero include: circular references between '
+                  'objects (e.g.,\n'
+                  '     a doubly-linked list or a tree data structure with '
+                  'parent and\n'
+                  '     child pointers); a reference to the object on the '
+                  'stack frame of\n'
+                  '     a function that caught an exception (the traceback '
+                  'stored in\n'
+                  '     "sys.exc_traceback" keeps the stack frame alive); or a '
+                  'reference\n'
+                  '     to the object on the stack frame that raised an '
+                  'unhandled\n'
+                  '     exception in interactive mode (the traceback stored '
+                  'in\n'
+                  '     "sys.last_traceback" keeps the stack frame alive).  '
+                  'The first\n'
+                  '     situation can only be remedied by explicitly breaking '
+                  'the cycles;\n'
+                  '     the latter two situations can be resolved by storing '
+                  '"None" in\n'
+                  '     "sys.exc_traceback" or "sys.last_traceback".  Circular '
+                  'references\n'
+                  '     which are garbage are detected when the option cycle '
+                  'detector is\n'
+                  "     enabled (it's on by default), but can only be cleaned "
+                  'up if there\n'
+                  '     are no Python-level "__del__()" methods involved. '
+                  'Refer to the\n'
+                  '     documentation for the "gc" module for more information '
+                  'about how\n'
+                  '     "__del__()" methods are handled by the cycle '
+                  'detector,\n'
+                  '     particularly the description of the "garbage" value.\n'
+                  '\n'
+                  '   Warning: Due to the precarious circumstances under '
+                  'which\n'
+                  '     "__del__()" methods are invoked, exceptions that occur '
+                  'during\n'
+                  '     their execution are ignored, and a warning is printed '
+                  'to\n'
+                  '     "sys.stderr" instead. Also, when "__del__()" is '
+                  'invoked in\n'
+                  '     response to a module being deleted (e.g., when '
+                  'execution of the\n'
+                  '     program is done), other globals referenced by the '
+                  '"__del__()"\n'
+                  '     method may already have been deleted or in the process '
+                  'of being\n'
+                  '     torn down (e.g. the import machinery shutting down).  '
+                  'For this\n'
+                  '     reason, "__del__()" methods should do the absolute '
+                  'minimum needed\n'
+                  '     to maintain external invariants.  Starting with '
+                  'version 1.5,\n'
+                  '     Python guarantees that globals whose name begins with '
+                  'a single\n'
+                  '     underscore are deleted from their module before other '
+                  'globals are\n'
+                  '     deleted; if no other references to such globals exist, '
+                  'this may\n'
+                  '     help in assuring that imported modules are still '
+                  'available at the\n'
+                  '     time when the "__del__()" method is called.\n'
+                  '\n'
+                  '   See also the "-R" command-line option.\n'
+                  '\n'
+                  'object.__repr__(self)\n'
+                  '\n'
+                  '   Called by the "repr()" built-in function and by string '
+                  'conversions\n'
+                  '   (reverse quotes) to compute the "official" string '
+                  'representation of\n'
+                  '   an object.  If at all possible, this should look like a '
+                  'valid\n'
+                  '   Python expression that could be used to recreate an '
+                  'object with the\n'
+                  '   same value (given an appropriate environment).  If this '
+                  'is not\n'
+                  '   possible, a string of the form "<...some useful '
+                  'description...>"\n'
+                  '   should be returned.  The return value must be a string '
+                  'object. If a\n'
+                  '   class defines "__repr__()" but not "__str__()", then '
+                  '"__repr__()"\n'
+                  '   is also used when an "informal" string representation of '
+                  'instances\n'
+                  '   of that class is required.\n'
+                  '\n'
+                  '   This is typically used for debugging, so it is important '
+                  'that the\n'
+                  '   representation is information-rich and unambiguous.\n'
+                  '\n'
+                  'object.__str__(self)\n'
+                  '\n'
+                  '   Called by the "str()" built-in function and by the '
+                  '"print"\n'
+                  '   statement to compute the "informal" string '
+                  'representation of an\n'
+                  '   object.  This differs from "__repr__()" in that it does '
+                  'not have to\n'
+                  '   be a valid Python expression: a more convenient or '
+                  'concise\n'
+                  '   representation may be used instead. The return value '
+                  'must be a\n'
+                  '   string object.\n'
+                  '\n'
+                  'object.__lt__(self, other)\n'
+                  'object.__le__(self, other)\n'
+                  'object.__eq__(self, other)\n'
+                  'object.__ne__(self, other)\n'
+                  'object.__gt__(self, other)\n'
+                  'object.__ge__(self, other)\n'
+                  '\n'
+                  '   New in version 2.1.\n'
+                  '\n'
+                  '   These are the so-called "rich comparison" methods, and '
+                  'are called\n'
+                  '   for comparison operators in preference to "__cmp__()" '
+                  'below. The\n'
+                  '   correspondence between operator symbols and method names '
+                  'is as\n'
+                  '   follows: "x<y" calls "x.__lt__(y)", "x<=y" calls '
+                  '"x.__le__(y)",\n'
+                  '   "x==y" calls "x.__eq__(y)", "x!=y" and "x<>y" call '
+                  '"x.__ne__(y)",\n'
+                  '   "x>y" calls "x.__gt__(y)", and "x>=y" calls '
+                  '"x.__ge__(y)".\n'
+                  '\n'
+                  '   A rich comparison method may return the singleton '
+                  '"NotImplemented"\n'
+                  '   if it does not implement the operation for a given pair '
+                  'of\n'
+                  '   arguments. By convention, "False" and "True" are '
+                  'returned for a\n'
+                  '   successful comparison. However, these methods can return '
+                  'any value,\n'
+                  '   so if the comparison operator is used in a Boolean '
+                  'context (e.g.,\n'
+                  '   in the condition of an "if" statement), Python will call '
+                  '"bool()"\n'
+                  '   on the value to determine if the result is true or '
+                  'false.\n'
+                  '\n'
+                  '   There are no implied relationships among the comparison '
+                  'operators.\n'
+                  '   The truth of "x==y" does not imply that "x!=y" is '
+                  'false.\n'
+                  '   Accordingly, when defining "__eq__()", one should also '
+                  'define\n'
+                  '   "__ne__()" so that the operators will behave as '
+                  'expected.  See the\n'
+                  '   paragraph on "__hash__()" for some important notes on '
+                  'creating\n'
+                  '   *hashable* objects which support custom comparison '
+                  'operations and\n'
+                  '   are usable as dictionary keys.\n'
+                  '\n'
+                  '   There are no swapped-argument versions of these methods '
+                  '(to be used\n'
+                  '   when the left argument does not support the operation '
+                  'but the right\n'
+                  '   argument does); rather, "__lt__()" and "__gt__()" are '
+                  "each other's\n"
+                  '   reflection, "__le__()" and "__ge__()" are each other\'s '
+                  'reflection,\n'
+                  '   and "__eq__()" and "__ne__()" are their own reflection.\n'
+                  '\n'
+                  '   Arguments to rich comparison methods are never coerced.\n'
+                  '\n'
+                  '   To automatically generate ordering operations from a '
+                  'single root\n'
+                  '   operation, see "functools.total_ordering()".\n'
+                  '\n'
+                  'object.__cmp__(self, other)\n'
+                  '\n'
+                  '   Called by comparison operations if rich comparison (see '
+                  'above) is\n'
+                  '   not defined.  Should return a negative integer if "self '
+                  '< other",\n'
+                  '   zero if "self == other", a positive integer if "self > '
+                  'other".  If\n'
+                  '   no "__cmp__()", "__eq__()" or "__ne__()" operation is '
+                  'defined,\n'
+                  '   class instances are compared by object identity '
+                  '("address").  See\n'
+                  '   also the description of "__hash__()" for some important '
+                  'notes on\n'
+                  '   creating *hashable* objects which support custom '
+                  'comparison\n'
+                  '   operations and are usable as dictionary keys. (Note: '
+                  'the\n'
+                  '   restriction that exceptions are not propagated by '
+                  '"__cmp__()" has\n'
+                  '   been removed since Python 1.5.)\n'
+                  '\n'
+                  'object.__rcmp__(self, other)\n'
+                  '\n'
+                  '   Changed in version 2.1: No longer supported.\n'
+                  '\n'
+                  'object.__hash__(self)\n'
+                  '\n'
+                  '   Called by built-in function "hash()" and for operations '
+                  'on members\n'
+                  '   of hashed collections including "set", "frozenset", and '
+                  '"dict".\n'
+                  '   "__hash__()" should return an integer.  The only '
+                  'required property\n'
+                  '   is that objects which compare equal have the same hash '
+                  'value; it is\n'
+                  '   advised to mix together the hash values of the '
+                  'components of the\n'
+                  '   object that also play a part in comparison of objects by '
+                  'packing\n'
+                  '   them into a tuple and hashing the tuple. Example:\n'
+                  '\n'
+                  '      def __hash__(self):\n'
+                  '          return hash((self.name, self.nick, self.color))\n'
+                  '\n'
+                  '   If a class does not define a "__cmp__()" or "__eq__()" '
+                  'method it\n'
+                  '   should not define a "__hash__()" operation either; if it '
+                  'defines\n'
+                  '   "__cmp__()" or "__eq__()" but not "__hash__()", its '
+                  'instances will\n'
+                  '   not be usable in hashed collections.  If a class defines '
+                  'mutable\n'
+                  '   objects and implements a "__cmp__()" or "__eq__()" '
+                  'method, it\n'
+                  '   should not implement "__hash__()", since hashable '
+                  'collection\n'
+                  "   implementations require that an object's hash value is "
+                  'immutable\n'
+                  "   (if the object's hash value changes, it will be in the "
+                  'wrong hash\n'
+                  '   bucket).\n'
+                  '\n'
+                  '   User-defined classes have "__cmp__()" and "__hash__()" '
+                  'methods by\n'
+                  '   default; with them, all objects compare unequal (except '
+                  'with\n'
+                  '   themselves) and "x.__hash__()" returns a result derived '
+                  'from\n'
+                  '   "id(x)".\n'
+                  '\n'
+                  '   Classes which inherit a "__hash__()" method from a '
+                  'parent class but\n'
+                  '   change the meaning of "__cmp__()" or "__eq__()" such '
+                  'that the hash\n'
+                  '   value returned is no longer appropriate (e.g. by '
+                  'switching to a\n'
+                  '   value-based concept of equality instead of the default '
+                  'identity\n'
+                  '   based equality) can explicitly flag themselves as being '
+                  'unhashable\n'
+                  '   by setting "__hash__ = None" in the class definition. '
+                  'Doing so\n'
+                  '   means that not only will instances of the class raise '
+                  'an\n'
+                  '   appropriate "TypeError" when a program attempts to '
+                  'retrieve their\n'
+                  '   hash value, but they will also be correctly identified '
+                  'as\n'
+                  '   unhashable when checking "isinstance(obj, '
+                  'collections.Hashable)"\n'
+                  '   (unlike classes which define their own "__hash__()" to '
+                  'explicitly\n'
+                  '   raise "TypeError").\n'
+                  '\n'
+                  '   Changed in version 2.5: "__hash__()" may now also return '
+                  'a long\n'
+                  '   integer object; the 32-bit integer is then derived from '
+                  'the hash of\n'
+                  '   that object.\n'
+                  '\n'
+                  '   Changed in version 2.6: "__hash__" may now be set to '
+                  '"None" to\n'
+                  '   explicitly flag instances of a class as unhashable.\n'
+                  '\n'
+                  'object.__nonzero__(self)\n'
+                  '\n'
+                  '   Called to implement truth value testing and the built-in '
+                  'operation\n'
+                  '   "bool()"; should return "False" or "True", or their '
+                  'integer\n'
+                  '   equivalents "0" or "1".  When this method is not '
+                  'defined,\n'
+                  '   "__len__()" is called, if it is defined, and the object '
+                  'is\n'
+                  '   considered true if its result is nonzero. If a class '
+                  'defines\n'
+                  '   neither "__len__()" nor "__nonzero__()", all its '
+                  'instances are\n'
+                  '   considered true.\n'
+                  '\n'
+                  'object.__unicode__(self)\n'
+                  '\n'
+                  '   Called to implement "unicode()" built-in; should return '
+                  'a Unicode\n'
+                  '   object. When this method is not defined, string '
+                  'conversion is\n'
+                  '   attempted, and the result of string conversion is '
+                  'converted to\n'
+                  '   Unicode using the system default encoding.\n',
+ 'debugger': '\n'
+             '"pdb" --- The Python Debugger\n'
+             '*****************************\n'
+             '\n'
+             '**Source code:** Lib/pdb.py\n'
+             '\n'
+             '======================================================================\n'
+             '\n'
+             'The module "pdb" defines an interactive source code debugger '
+             'for\n'
+             'Python programs.  It supports setting (conditional) breakpoints '
+             'and\n'
+             'single stepping at the source line level, inspection of stack '
+             'frames,\n'
+             'source code listing, and evaluation of arbitrary Python code in '
+             'the\n'
+             'context of any stack frame.  It also supports post-mortem '
+             'debugging\n'
+             'and can be called under program control.\n'
+             '\n'
+             'The debugger is extensible --- it is actually defined as the '
+             'class\n'
+             '"Pdb". This is currently undocumented but easily understood by '
+             'reading\n'
+             'the source.  The extension interface uses the modules "bdb" and '
+             '"cmd".\n'
+             '\n'
+             'The debugger\'s prompt is "(Pdb)". Typical usage to run a '
+             'program under\n'
+             'control of the debugger is:\n'
+             '\n'
+             '   >>> import pdb\n'
+             '   >>> import mymodule\n'
+             "   >>> pdb.run('mymodule.test()')\n"
+             '   > <string>(0)?()\n'
+             '   (Pdb) continue\n'
+             '   > <string>(1)?()\n'
+             '   (Pdb) continue\n'
+             "   NameError: 'spam'\n"
+             '   > <string>(1)?()\n'
+             '   (Pdb)\n'
+             '\n'
+             '"pdb.py" can also be invoked as a script to debug other '
+             'scripts.  For\n'
+             'example:\n'
+             '\n'
+             '   python -m pdb myscript.py\n'
+             '\n'
+             'When invoked as a script, pdb will automatically enter '
+             'post-mortem\n'
+             'debugging if the program being debugged exits abnormally. After '
+             'post-\n'
+             'mortem debugging (or after normal exit of the program), pdb '
+             'will\n'
+             "restart the program. Automatic restarting preserves pdb's state "
+             '(such\n'
+             'as breakpoints) and in most cases is more useful than quitting '
+             'the\n'
+             "debugger upon program's exit.\n"
+             '\n'
+             'New in version 2.4: Restarting post-mortem behavior added.\n'
+             '\n'
+             'The typical usage to break into the debugger from a running '
+             'program is\n'
+             'to insert\n'
+             '\n'
+             '   import pdb; pdb.set_trace()\n'
+             '\n'
+             'at the location you want to break into the debugger.  You can '
+             'then\n'
+             'step through the code following this statement, and continue '
+             'running\n'
+             'without the debugger using the "c" command.\n'
+             '\n'
+             'The typical usage to inspect a crashed program is:\n'
+             '\n'
+             '   >>> import pdb\n'
+             '   >>> import mymodule\n'
+             '   >>> mymodule.test()\n'
+             '   Traceback (most recent call last):\n'
+             '     File "<stdin>", line 1, in <module>\n'
+             '     File "./mymodule.py", line 4, in test\n'
+             '       test2()\n'
+             '     File "./mymodule.py", line 3, in test2\n'
+             '       print spam\n'
+             '   NameError: spam\n'
+             '   >>> pdb.pm()\n'
+             '   > ./mymodule.py(3)test2()\n'
+             '   -> print spam\n'
+             '   (Pdb)\n'
+             '\n'
+             'The module defines the following functions; each enters the '
+             'debugger\n'
+             'in a slightly different way:\n'
+             '\n'
+             'pdb.run(statement[, globals[, locals]])\n'
+             '\n'
+             '   Execute the *statement* (given as a string) under debugger '
+             'control.\n'
+             '   The debugger prompt appears before any code is executed; you '
+             'can\n'
+             '   set breakpoints and type "continue", or you can step through '
+             'the\n'
+             '   statement using "step" or "next" (all these commands are '
+             'explained\n'
+             '   below).  The optional *globals* and *locals* arguments '
+             'specify the\n'
+             '   environment in which the code is executed; by default the\n'
+             '   dictionary of the module "__main__" is used.  (See the '
+             'explanation\n'
+             '   of the "exec" statement or the "eval()" built-in function.)\n'
+             '\n'
+             'pdb.runeval(expression[, globals[, locals]])\n'
+             '\n'
+             '   Evaluate the *expression* (given as a string) under debugger\n'
+             '   control.  When "runeval()" returns, it returns the value of '
+             'the\n'
+             '   expression.  Otherwise this function is similar to "run()".\n'
+             '\n'
+             'pdb.runcall(function[, argument, ...])\n'
+             '\n'
+             '   Call the *function* (a function or method object, not a '
+             'string)\n'
+             '   with the given arguments.  When "runcall()" returns, it '
+             'returns\n'
+             '   whatever the function call returned.  The debugger prompt '
+             'appears\n'
+             '   as soon as the function is entered.\n'
+             '\n'
+             'pdb.set_trace()\n'
+             '\n'
+             '   Enter the debugger at the calling stack frame.  This is '
+             'useful to\n'
+             '   hard-code a breakpoint at a given point in a program, even if '
+             'the\n'
+             '   code is not otherwise being debugged (e.g. when an assertion\n'
+             '   fails).\n'
+             '\n'
+             'pdb.post_mortem([traceback])\n'
+             '\n'
+             '   Enter post-mortem debugging of the given *traceback* object.  '
+             'If no\n'
+             '   *traceback* is given, it uses the one of the exception that '
+             'is\n'
+             '   currently being handled (an exception must be being handled '
+             'if the\n'
+             '   default is to be used).\n'
+             '\n'
+             'pdb.pm()\n'
+             '\n'
+             '   Enter post-mortem debugging of the traceback found in\n'
+             '   "sys.last_traceback".\n'
+             '\n'
+             'The "run*" functions and "set_trace()" are aliases for '
+             'instantiating\n'
+             'the "Pdb" class and calling the method of the same name.  If you '
+             'want\n'
+             'to access further features, you have to do this yourself:\n'
+             '\n'
+             "class pdb.Pdb(completekey='tab', stdin=None, stdout=None, "
+             'skip=None)\n'
+             '\n'
+             '   "Pdb" is the debugger class.\n'
+             '\n'
+             '   The *completekey*, *stdin* and *stdout* arguments are passed '
+             'to the\n'
+             '   underlying "cmd.Cmd" class; see the description there.\n'
+             '\n'
+             '   The *skip* argument, if given, must be an iterable of '
+             'glob-style\n'
+             '   module name patterns.  The debugger will not step into frames '
+             'that\n'
+             '   originate in a module that matches one of these patterns. '
+             '[1]\n'
+             '\n'
+             '   Example call to enable tracing with *skip*:\n'
+             '\n'
+             "      import pdb; pdb.Pdb(skip=['django.*']).set_trace()\n"
+             '\n'
+             '   New in version 2.7: The *skip* argument.\n'
+             '\n'
+             '   run(statement[, globals[, locals]])\n'
+             '   runeval(expression[, globals[, locals]])\n'
+             '   runcall(function[, argument, ...])\n'
+             '   set_trace()\n'
+             '\n'
+             '      See the documentation for the functions explained above.\n',
+ 'del': '\n'
+        'The "del" statement\n'
+        '*******************\n'
+        '\n'
+        '   del_stmt ::= "del" target_list\n'
+        '\n'
+        'Deletion is recursively defined very similar to the way assignment '
+        'is\n'
+        'defined. Rather than spelling it out in full details, here are some\n'
+        'hints.\n'
+        '\n'
+        'Deletion of a target list recursively deletes each target, from left\n'
+        'to right.\n'
+        '\n'
+        'Deletion of a name removes the binding of that name  from the local '
+        'or\n'
+        'global namespace, depending on whether the name occurs in a "global"\n'
+        'statement in the same code block.  If the name is unbound, a\n'
+        '"NameError" exception will be raised.\n'
+        '\n'
+        'It is illegal to delete a name from the local namespace if it occurs\n'
+        'as a free variable in a nested block.\n'
+        '\n'
+        'Deletion of attribute references, subscriptions and slicings is '
+        'passed\n'
+        'to the primary object involved; deletion of a slicing is in general\n'
+        'equivalent to assignment of an empty slice of the right type (but '
+        'even\n'
+        'this is determined by the sliced object).\n',
+ 'dict': '\n'
+         'Dictionary displays\n'
+         '*******************\n'
+         '\n'
+         'A dictionary display is a possibly empty series of key/datum pairs\n'
+         'enclosed in curly braces:\n'
+         '\n'
+         '   dict_display       ::= "{" [key_datum_list | dict_comprehension] '
+         '"}"\n'
+         '   key_datum_list     ::= key_datum ("," key_datum)* [","]\n'
+         '   key_datum          ::= expression ":" expression\n'
+         '   dict_comprehension ::= expression ":" expression comp_for\n'
+         '\n'
+         'A dictionary display yields a new dictionary object.\n'
+         '\n'
+         'If a comma-separated sequence of key/datum pairs is given, they are\n'
+         'evaluated from left to right to define the entries of the '
+         'dictionary:\n'
+         'each key object is used as a key into the dictionary to store the\n'
+         'corresponding datum.  This means that you can specify the same key\n'
+         "multiple times in the key/datum list, and the final dictionary's "
+         'value\n'
+         'for that key will be the last one given.\n'
+         '\n'
+         'A dict comprehension, in contrast to list and set comprehensions,\n'
+         'needs two expressions separated with a colon followed by the usual\n'
+         '"for" and "if" clauses. When the comprehension is run, the '
+         'resulting\n'
+         'key and value elements are inserted in the new dictionary in the '
+         'order\n'
+         'they are produced.\n'
+         '\n'
+         'Restrictions on the types of the key values are listed earlier in\n'
+         'section The standard type hierarchy.  (To summarize, the key type\n'
+         'should be *hashable*, which excludes all mutable objects.)  Clashes\n'
+         'between duplicate keys are not detected; the last datum (textually\n'
+         'rightmost in the display) stored for a given key value prevails.\n',
+ 'dynamic-features': '\n'
+                     'Interaction with dynamic features\n'
+                     '*********************************\n'
+                     '\n'
+                     'There are several cases where Python statements are '
+                     'illegal when used\n'
+                     'in conjunction with nested scopes that contain free '
+                     'variables.\n'
+                     '\n'
+                     'If a variable is referenced in an enclosing scope, it is '
+                     'illegal to\n'
+                     'delete the name.  An error will be reported at compile '
+                     'time.\n'
+                     '\n'
+                     'If the wild card form of import --- "import *" --- is '
+                     'used in a\n'
+                     'function and the function contains or is a nested block '
+                     'with free\n'
+                     'variables, the compiler will raise a "SyntaxError".\n'
+                     '\n'
+                     'If "exec" is used in a function and the function '
+                     'contains or is a\n'
+                     'nested block with free variables, the compiler will '
+                     'raise a\n'
+                     '"SyntaxError" unless the exec explicitly specifies the '
+                     'local namespace\n'
+                     'for the "exec".  (In other words, "exec obj" would be '
+                     'illegal, but\n'
+                     '"exec obj in ns" would be legal.)\n'
+                     '\n'
+                     'The "eval()", "execfile()", and "input()" functions and '
+                     'the "exec"\n'
+                     'statement do not have access to the full environment for '
+                     'resolving\n'
+                     'names.  Names may be resolved in the local and global '
+                     'namespaces of\n'
+                     'the caller.  Free variables are not resolved in the '
+                     'nearest enclosing\n'
+                     'namespace, but in the global namespace. [1] The "exec" '
+                     'statement and\n'
+                     'the "eval()" and "execfile()" functions have optional '
+                     'arguments to\n'
+                     'override the global and local namespace.  If only one '
+                     'namespace is\n'
+                     'specified, it is used for both.\n',
+ 'else': '\n'
+         'The "if" statement\n'
+         '******************\n'
+         '\n'
+         'The "if" statement is used for conditional execution:\n'
+         '\n'
+         '   if_stmt ::= "if" expression ":" suite\n'
+         '               ( "elif" expression ":" suite )*\n'
+         '               ["else" ":" suite]\n'
+         '\n'
+         'It selects exactly one of the suites by evaluating the expressions '
+         'one\n'
+         'by one until one is found to be true (see section Boolean '
+         'operations\n'
+         'for the definition of true and false); then that suite is executed\n'
+         '(and no other part of the "if" statement is executed or evaluated).\n'
+         'If all expressions are false, the suite of the "else" clause, if\n'
+         'present, is executed.\n',
+ 'exceptions': '\n'
+               'Exceptions\n'
+               '**********\n'
+               '\n'
+               'Exceptions are a means of breaking out of the normal flow of '
+               'control\n'
+               'of a code block in order to handle errors or other '
+               'exceptional\n'
+               'conditions.  An exception is *raised* at the point where the '
+               'error is\n'
+               'detected; it may be *handled* by the surrounding code block or '
+               'by any\n'
+               'code block that directly or indirectly invoked the code block '
+               'where\n'
+               'the error occurred.\n'
+               '\n'
+               'The Python interpreter raises an exception when it detects a '
+               'run-time\n'
+               'error (such as division by zero).  A Python program can also\n'
+               'explicitly raise an exception with the "raise" statement. '
+               'Exception\n'
+               'handlers are specified with the "try" ... "except" statement.  '
+               'The\n'
+               '"finally" clause of such a statement can be used to specify '
+               'cleanup\n'
+               'code which does not handle the exception, but is executed '
+               'whether an\n'
+               'exception occurred or not in the preceding code.\n'
+               '\n'
+               'Python uses the "termination" model of error handling: an '
+               'exception\n'
+               'handler can find out what happened and continue execution at '
+               'an outer\n'
+               'level, but it cannot repair the cause of the error and retry '
+               'the\n'
+               'failing operation (except by re-entering the offending piece '
+               'of code\n'
+               'from the top).\n'
+               '\n'
+               'When an exception is not handled at all, the interpreter '
+               'terminates\n'
+               'execution of the program, or returns to its interactive main '
+               'loop.  In\n'
+               'either case, it prints a stack backtrace, except when the '
+               'exception is\n'
+               '"SystemExit".\n'
+               '\n'
+               'Exceptions are identified by class instances.  The "except" '
+               'clause is\n'
+               'selected depending on the class of the instance: it must '
+               'reference the\n'
+               'class of the instance or a base class thereof.  The instance '
+               'can be\n'
+               'received by the handler and can carry additional information '
+               'about the\n'
+               'exceptional condition.\n'
+               '\n'
+               'Exceptions can also be identified by strings, in which case '
+               'the\n'
+               '"except" clause is selected by object identity.  An arbitrary '
+               'value\n'
+               'can be raised along with the identifying string which can be '
+               'passed to\n'
+               'the handler.\n'
+               '\n'
+               'Note: Messages to exceptions are not part of the Python API.  '
+               'Their\n'
+               '  contents may change from one version of Python to the next '
+               'without\n'
+               '  warning and should not be relied on by code which will run '
+               'under\n'
+               '  multiple versions of the interpreter.\n'
+               '\n'
+               'See also the description of the "try" statement in section The '
+               'try\n'
+               'statement and "raise" statement in section The raise '
+               'statement.\n'
+               '\n'
+               '-[ Footnotes ]-\n'
+               '\n'
+               '[1] This limitation occurs because the code that is executed '
+               'by\n'
+               '    these operations is not available at the time the module '
+               'is\n'
+               '    compiled.\n',
+ 'exec': '\n'
+         'The "exec" statement\n'
+         '********************\n'
+         '\n'
+         '   exec_stmt ::= "exec" or_expr ["in" expression ["," expression]]\n'
+         '\n'
+         'This statement supports dynamic execution of Python code.  The '
+         'first\n'
+         'expression should evaluate to either a Unicode string, a *Latin-1*\n'
+         'encoded string, an open file object, a code object, or a tuple.  If '
+         'it\n'
+         'is a string, the string is parsed as a suite of Python statements\n'
+         'which is then executed (unless a syntax error occurs). [1] If it is '
+         'an\n'
+         'open file, the file is parsed until EOF and executed. If it is a '
+         'code\n'
+         'object, it is simply executed.  For the interpretation of a tuple, '
+         'see\n'
+         "below.  In all cases, the code that's executed is expected to be "
+         'valid\n'
+         'as file input (see section File input).  Be aware that the "return"\n'
+         'and "yield" statements may not be used outside of function '
+         'definitions\n'
+         'even within the context of code passed to the "exec" statement.\n'
+         '\n'
+         'In all cases, if the optional parts are omitted, the code is '
+         'executed\n'
+         'in the current scope.  If only the first expression after "in" is\n'
+         'specified, it should be a dictionary, which will be used for both '
+         'the\n'
+         'global and the local variables.  If two expressions are given, they\n'
+         'are used for the global and local variables, respectively. If\n'
+         'provided, *locals* can be any mapping object. Remember that at '
+         'module\n'
+         'level, globals and locals are the same dictionary. If two separate\n'
+         'objects are given as *globals* and *locals*, the code will be '
+         'executed\n'
+         'as if it were embedded in a class definition.\n'
+         '\n'
+         'The first expression may also be a tuple of length 2 or 3.  In this\n'
+         'case, the optional parts must be omitted.  The form "exec(expr,\n'
+         'globals)" is equivalent to "exec expr in globals", while the form\n'
+         '"exec(expr, globals, locals)" is equivalent to "exec expr in '
+         'globals,\n'
+         'locals".  The tuple form of "exec" provides compatibility with '
+         'Python\n'
+         '3, where "exec" is a function rather than a statement.\n'
+         '\n'
+         'Changed in version 2.4: Formerly, *locals* was required to be a\n'
+         'dictionary.\n'
+         '\n'
+         'As a side effect, an implementation may insert additional keys into\n'
+         'the dictionaries given besides those corresponding to variable '
+         'names\n'
+         'set by the executed code.  For example, the current implementation '
+         'may\n'
+         'add a reference to the dictionary of the built-in module '
+         '"__builtin__"\n'
+         'under the key "__builtins__" (!).\n'
+         '\n'
+         "**Programmer's hints:** dynamic evaluation of expressions is "
+         'supported\n'
+         'by the built-in function "eval()".  The built-in functions '
+         '"globals()"\n'
+         'and "locals()" return the current global and local dictionary,\n'
+         'respectively, which may be useful to pass around for use by "exec".\n'
+         '\n'
+         '-[ Footnotes ]-\n'
+         '\n'
+         '[1] Note that the parser only accepts the Unix-style end of line\n'
+         '    convention. If you are reading the code from a file, make sure '
+         'to\n'
+         '    use *universal newlines* mode to convert Windows or Mac-style\n'
+         '    newlines.\n',
+ 'execmodel': '\n'
+              'Execution model\n'
+              '***************\n'
+              '\n'
+              '\n'
+              'Naming and binding\n'
+              '==================\n'
+              '\n'
+              '*Names* refer to objects.  Names are introduced by name '
+              'binding\n'
+              'operations. Each occurrence of a name in the program text '
+              'refers to\n'
+              'the *binding* of that name established in the innermost '
+              'function block\n'
+              'containing the use.\n'
+              '\n'
+              'A *block* is a piece of Python program text that is executed as '
+              'a\n'
+              'unit. The following are blocks: a module, a function body, and '
+              'a class\n'
+              'definition. Each command typed interactively is a block.  A '
+              'script\n'
+              'file (a file given as standard input to the interpreter or '
+              'specified\n'
+              'on the interpreter command line the first argument) is a code '
+              'block.\n'
+              'A script command (a command specified on the interpreter '
+              'command line\n'
+              "with the '**-c**' option) is a code block.  The file read by "
+              'the\n'
+              'built-in function "execfile()" is a code block.  The string '
+              'argument\n'
+              'passed to the built-in function "eval()" and to the "exec" '
+              'statement\n'
+              'is a code block. The expression read and evaluated by the '
+              'built-in\n'
+              'function "input()" is a code block.\n'
+              '\n'
+              'A code block is executed in an *execution frame*.  A frame '
+              'contains\n'
+              'some administrative information (used for debugging) and '
+              'determines\n'
+              "where and how execution continues after the code block's "
+              'execution has\n'
+              'completed.\n'
+              '\n'
+              'A *scope* defines the visibility of a name within a block.  If '
+              'a local\n'
+              'variable is defined in a block, its scope includes that block.  '
+              'If the\n'
+              'definition occurs in a function block, the scope extends to any '
+              'blocks\n'
+              'contained within the defining one, unless a contained block '
+              'introduces\n'
+              'a different binding for the name.  The scope of names defined '
+              'in a\n'
+              'class block is limited to the class block; it does not extend '
+              'to the\n'
+              'code blocks of methods -- this includes generator expressions '
+              'since\n'
+              'they are implemented using a function scope.  This means that '
+              'the\n'
+              'following will fail:\n'
+              '\n'
+              '   class A:\n'
+              '       a = 42\n'
+              '       b = list(a + i for i in range(10))\n'
+              '\n'
+              'When a name is used in a code block, it is resolved using the '
+              'nearest\n'
+              'enclosing scope.  The set of all such scopes visible to a code '
+              'block\n'
+              "is called the block's *environment*.\n"
+              '\n'
+              'If a name is bound in a block, it is a local variable of that '
+              'block.\n'
+              'If a name is bound at the module level, it is a global '
+              'variable.  (The\n'
+              'variables of the module code block are local and global.)  If '
+              'a\n'
+              'variable is used in a code block but not defined there, it is a '
+              '*free\n'
+              'variable*.\n'
+              '\n'
+              'When a name is not found at all, a "NameError" exception is '
+              'raised.\n'
+              'If the name refers to a local variable that has not been bound, '
+              'a\n'
+              '"UnboundLocalError" exception is raised.  "UnboundLocalError" '
+              'is a\n'
+              'subclass of "NameError".\n'
+              '\n'
+              'The following constructs bind names: formal parameters to '
+              'functions,\n'
+              '"import" statements, class and function definitions (these bind '
+              'the\n'
+              'class or function name in the defining block), and targets that '
+              'are\n'
+              'identifiers if occurring in an assignment, "for" loop header, '
+              'in the\n'
+              'second position of an "except" clause header or after "as" in a '
+              '"with"\n'
+              'statement.  The "import" statement of the form "from ... import '
+              '*"\n'
+              'binds all names defined in the imported module, except those '
+              'beginning\n'
+              'with an underscore.  This form may only be used at the module '
+              'level.\n'
+              '\n'
+              'A target occurring in a "del" statement is also considered '
+              'bound for\n'
+              'this purpose (though the actual semantics are to unbind the '
+              'name).  It\n'
+              'is illegal to unbind a name that is referenced by an enclosing '
+              'scope;\n'
+              'the compiler will report a "SyntaxError".\n'
+              '\n'
+              'Each assignment or import statement occurs within a block '
+              'defined by a\n'
+              'class or function definition or at the module level (the '
+              'top-level\n'
+              'code block).\n'
+              '\n'
+              'If a name binding operation occurs anywhere within a code '
+              'block, all\n'
+              'uses of the name within the block are treated as references to '
+              'the\n'
+              'current block.  This can lead to errors when a name is used '
+              'within a\n'
+              'block before it is bound. This rule is subtle.  Python lacks\n'
+              'declarations and allows name binding operations to occur '
+              'anywhere\n'
+              'within a code block.  The local variables of a code block can '
+              'be\n'
+              'determined by scanning the entire text of the block for name '
+              'binding\n'
+              'operations.\n'
+              '\n'
+              'If the global statement occurs within a block, all uses of the '
+              'name\n'
+              'specified in the statement refer to the binding of that name in '
+              'the\n'
+              'top-level namespace. Names are resolved in the top-level '
+              'namespace by\n'
+              'searching the global namespace, i.e. the namespace of the '
+              'module\n'
+              'containing the code block, and the builtins namespace, the '
+              'namespace\n'
+              'of the module "__builtin__".  The global namespace is searched '
+              'first.\n'
+              'If the name is not found there, the builtins namespace is '
+              'searched.\n'
+              'The global statement must precede all uses of the name.\n'
+              '\n'
+              'The builtins namespace associated with the execution of a code '
+              'block\n'
+              'is actually found by looking up the name "__builtins__" in its '
+              'global\n'
+              'namespace; this should be a dictionary or a module (in the '
+              'latter case\n'
+              "the module's dictionary is used).  By default, when in the "
+              '"__main__"\n'
+              'module, "__builtins__" is the built-in module "__builtin__" '
+              '(note: no\n'
+              '\'s\'); when in any other module, "__builtins__" is an alias '
+              'for the\n'
+              'dictionary of the "__builtin__" module itself.  "__builtins__" '
+              'can be\n'
+              'set to a user-created dictionary to create a weak form of '
+              'restricted\n'
+              'execution.\n'
+              '\n'
+              '**CPython implementation detail:** Users should not touch\n'
+              '"__builtins__"; it is strictly an implementation detail.  '
+              'Users\n'
+              'wanting to override values in the builtins namespace should '
+              '"import"\n'
+              'the "__builtin__" (no \'s\') module and modify its attributes\n'
+              'appropriately.\n'
+              '\n'
+              'The namespace for a module is automatically created the first '
+              'time a\n'
+              'module is imported.  The main module for a script is always '
+              'called\n'
+              '"__main__".\n'
+              '\n'
+              'The "global" statement has the same scope as a name binding '
+              'operation\n'
+              'in the same block.  If the nearest enclosing scope for a free '
+              'variable\n'
+              'contains a global statement, the free variable is treated as a '
+              'global.\n'
+              '\n'
+              'A class definition is an executable statement that may use and '
+              'define\n'
+              'names. These references follow the normal rules for name '
+              'resolution.\n'
+              'The namespace of the class definition becomes the attribute '
+              'dictionary\n'
+              'of the class.  Names defined at the class scope are not visible '
+              'in\n'
+              'methods.\n'
+              '\n'
+              '\n'
+              'Interaction with dynamic features\n'
+              '---------------------------------\n'
+              '\n'
+              'There are several cases where Python statements are illegal '
+              'when used\n'
+              'in conjunction with nested scopes that contain free variables.\n'
+              '\n'
+              'If a variable is referenced in an enclosing scope, it is '
+              'illegal to\n'
+              'delete the name.  An error will be reported at compile time.\n'
+              '\n'
+              'If the wild card form of import --- "import *" --- is used in '
+              'a\n'
+              'function and the function contains or is a nested block with '
+              'free\n'
+              'variables, the compiler will raise a "SyntaxError".\n'
+              '\n'
+              'If "exec" is used in a function and the function contains or is '
+              'a\n'
+              'nested block with free variables, the compiler will raise a\n'
+              '"SyntaxError" unless the exec explicitly specifies the local '
+              'namespace\n'
+              'for the "exec".  (In other words, "exec obj" would be illegal, '
+              'but\n'
+              '"exec obj in ns" would be legal.)\n'
+              '\n'
+              'The "eval()", "execfile()", and "input()" functions and the '
+              '"exec"\n'
+              'statement do not have access to the full environment for '
+              'resolving\n'
+              'names.  Names may be resolved in the local and global '
+              'namespaces of\n'
+              'the caller.  Free variables are not resolved in the nearest '
+              'enclosing\n'
+              'namespace, but in the global namespace. [1] The "exec" '
+              'statement and\n'
+              'the "eval()" and "execfile()" functions have optional arguments '
+              'to\n'
+              'override the global and local namespace.  If only one namespace '
+              'is\n'
+              'specified, it is used for both.\n'
+              '\n'
+              '\n'
+              'Exceptions\n'
+              '==========\n'
+              '\n'
+              'Exceptions are a means of breaking out of the normal flow of '
+              'control\n'
+              'of a code block in order to handle errors or other exceptional\n'
+              'conditions.  An exception is *raised* at the point where the '
+              'error is\n'
+              'detected; it may be *handled* by the surrounding code block or '
+              'by any\n'
+              'code block that directly or indirectly invoked the code block '
+              'where\n'
+              'the error occurred.\n'
+              '\n'
+              'The Python interpreter raises an exception when it detects a '
+              'run-time\n'
+              'error (such as division by zero).  A Python program can also\n'
+              'explicitly raise an exception with the "raise" statement. '
+              'Exception\n'
+              'handlers are specified with the "try" ... "except" statement.  '
+              'The\n'
+              '"finally" clause of such a statement can be used to specify '
+              'cleanup\n'
+              'code which does not handle the exception, but is executed '
+              'whether an\n'
+              'exception occurred or not in the preceding code.\n'
+              '\n'
+              'Python uses the "termination" model of error handling: an '
+              'exception\n'
+              'handler can find out what happened and continue execution at an '
+              'outer\n'
+              'level, but it cannot repair the cause of the error and retry '
+              'the\n'
+              'failing operation (except by re-entering the offending piece of '
+              'code\n'
+              'from the top).\n'
+              '\n'
+              'When an exception is not handled at all, the interpreter '
+              'terminates\n'
+              'execution of the program, or returns to its interactive main '
+              'loop.  In\n'
+              'either case, it prints a stack backtrace, except when the '
+              'exception is\n'
+              '"SystemExit".\n'
+              '\n'
+              'Exceptions are identified by class instances.  The "except" '
+              'clause is\n'
+              'selected depending on the class of the instance: it must '
+              'reference the\n'
+              'class of the instance or a base class thereof.  The instance '
+              'can be\n'
+              'received by the handler and can carry additional information '
+              'about the\n'
+              'exceptional condition.\n'
+              '\n'
+              'Exceptions can also be identified by strings, in which case '
+              'the\n'
+              '"except" clause is selected by object identity.  An arbitrary '
+              'value\n'
+              'can be raised along with the identifying string which can be '
+              'passed to\n'
+              'the handler.\n'
+              '\n'
+              'Note: Messages to exceptions are not part of the Python API.  '
+              'Their\n'
+              '  contents may change from one version of Python to the next '
+              'without\n'
+              '  warning and should not be relied on by code which will run '
+              'under\n'
+              '  multiple versions of the interpreter.\n'
+              '\n'
+              'See also the description of the "try" statement in section The '
+              'try\n'
+              'statement and "raise" statement in section The raise '
+              'statement.\n'
+              '\n'
+              '-[ Footnotes ]-\n'
+              '\n'
+              '[1] This limitation occurs because the code that is executed '
+              'by\n'
+              '    these operations is not available at the time the module '
+              'is\n'
+              '    compiled.\n',
+ 'exprlists': '\n'
+              'Expression lists\n'
+              '****************\n'
+              '\n'
+              '   expression_list ::= expression ( "," expression )* [","]\n'
+              '\n'
+              'An expression list containing at least one comma yields a '
+              'tuple.  The\n'
+              'length of the tuple is the number of expressions in the list.  '
+              'The\n'
+              'expressions are evaluated from left to right.\n'
+              '\n'
+              'The trailing comma is required only to create a single tuple '
+              '(a.k.a. a\n'
+              '*singleton*); it is optional in all other cases.  A single '
+              'expression\n'
+              "without a trailing comma doesn't create a tuple, but rather "
+              'yields the\n'
+              'value of that expression. (To create an empty tuple, use an '
+              'empty pair\n'
+              'of parentheses: "()".)\n',
+ 'floating': '\n'
+             'Floating point literals\n'
+             '***********************\n'
+             '\n'
+             'Floating point literals are described by the following lexical\n'
+             'definitions:\n'
+             '\n'
+             '   floatnumber   ::= pointfloat | exponentfloat\n'
+             '   pointfloat    ::= [intpart] fraction | intpart "."\n'
+             '   exponentfloat ::= (intpart | pointfloat) exponent\n'
+             '   intpart       ::= digit+\n'
+             '   fraction      ::= "." digit+\n'
+             '   exponent      ::= ("e" | "E") ["+" | "-"] digit+\n'
+             '\n'
+             'Note that the integer and exponent parts of floating point '
+             'numbers can\n'
+             'look like octal integers, but are interpreted using radix 10.  '
+             'For\n'
+             'example, "077e010" is legal, and denotes the same number as '
+             '"77e10".\n'
+             'The allowed range of floating point literals is implementation-\n'
+             'dependent. Some examples of floating point literals:\n'
+             '\n'
+             '   3.14    10.    .001    1e100    3.14e-10    0e0\n'
+             '\n'
+             'Note that numeric literals do not include a sign; a phrase like '
+             '"-1"\n'
+             'is actually an expression composed of the unary operator "-" and '
+             'the\n'
+             'literal "1".\n',
+ 'for': '\n'
+        'The "for" statement\n'
+        '*******************\n'
+        '\n'
+        'The "for" statement is used to iterate over the elements of a '
+        'sequence\n'
+        '(such as a string, tuple or list) or other iterable object:\n'
+        '\n'
+        '   for_stmt ::= "for" target_list "in" expression_list ":" suite\n'
+        '                ["else" ":" suite]\n'
+        '\n'
+        'The expression list is evaluated once; it should yield an iterable\n'
+        'object.  An iterator is created for the result of the\n'
+        '"expression_list".  The suite is then executed once for each item\n'
+        'provided by the iterator, in the order of ascending indices.  Each\n'
+        'item in turn is assigned to the target list using the standard rules\n'
+        'for assignments, and then the suite is executed.  When the items are\n'
+        'exhausted (which is immediately when the sequence is empty), the '
+        'suite\n'
+        'in the "else" clause, if present, is executed, and the loop\n'
+        'terminates.\n'
+        '\n'
+        'A "break" statement executed in the first suite terminates the loop\n'
+        'without executing the "else" clause\'s suite.  A "continue" '
+        'statement\n'
+        'executed in the first suite skips the rest of the suite and '
+        'continues\n'
+        'with the next item, or with the "else" clause if there was no next\n'
+        'item.\n'
+        '\n'
+        'The suite may assign to the variable(s) in the target list; this '
+        'does\n'
+        'not affect the next item assigned to it.\n'
+        '\n'
+        'The target list is not deleted when the loop is finished, but if the\n'
+        'sequence is empty, it will not have been assigned to at all by the\n'
+        'loop.  Hint: the built-in function "range()" returns a sequence of\n'
+        'integers suitable to emulate the effect of Pascal\'s "for i := a to '
+        'b\n'
+        'do"; e.g., "range(3)" returns the list "[0, 1, 2]".\n'
+        '\n'
+        'Note: There is a subtlety when the sequence is being modified by the\n'
+        '  loop (this can only occur for mutable sequences, i.e. lists). An\n'
+        '  internal counter is used to keep track of which item is used next,\n'
+        '  and this is incremented on each iteration.  When this counter has\n'
+        '  reached the length of the sequence the loop terminates.  This '
+        'means\n'
+        '  that if the suite deletes the current (or a previous) item from '
+        'the\n'
+        '  sequence, the next item will be skipped (since it gets the index '
+        'of\n'
+        '  the current item which has already been treated).  Likewise, if '
+        'the\n'
+        '  suite inserts an item in the sequence before the current item, the\n'
+        '  current item will be treated again the next time through the loop.\n'
+        '  This can lead to nasty bugs that can be avoided by making a\n'
+        '  temporary copy using a slice of the whole sequence, e.g.,\n'
+        '\n'
+        '     for x in a[:]:\n'
+        '         if x < 0: a.remove(x)\n',
+ 'formatstrings': '\n'
+                  'Format String Syntax\n'
+                  '********************\n'
+                  '\n'
+                  'The "str.format()" method and the "Formatter" class share '
+                  'the same\n'
+                  'syntax for format strings (although in the case of '
+                  '"Formatter",\n'
+                  'subclasses can define their own format string syntax).\n'
+                  '\n'
+                  'Format strings contain "replacement fields" surrounded by '
+                  'curly braces\n'
+                  '"{}". Anything that is not contained in braces is '
+                  'considered literal\n'
+                  'text, which is copied unchanged to the output.  If you need '
+                  'to include\n'
+                  'a brace character in the literal text, it can be escaped by '
+                  'doubling:\n'
+                  '"{{" and "}}".\n'
+                  '\n'
+                  'The grammar for a replacement field is as follows:\n'
+                  '\n'
+                  '      replacement_field ::= "{" [field_name] ["!" '
+                  'conversion] [":" format_spec] "}"\n'
+                  '      field_name        ::= arg_name ("." attribute_name | '
+                  '"[" element_index "]")*\n'
+                  '      arg_name          ::= [identifier | integer]\n'
+                  '      attribute_name    ::= identifier\n'
+                  '      element_index     ::= integer | index_string\n'
+                  '      index_string      ::= <any source character except '
+                  '"]"> +\n'
+                  '      conversion        ::= "r" | "s"\n'
+                  '      format_spec       ::= <described in the next '
+                  'section>\n'
+                  '\n'
+                  'In less formal terms, the replacement field can start with '
+                  'a\n'
+                  '*field_name* that specifies the object whose value is to be '
+                  'formatted\n'
+                  'and inserted into the output instead of the replacement '
+                  'field. The\n'
+                  '*field_name* is optionally followed by a  *conversion* '
+                  'field, which is\n'
+                  'preceded by an exclamation point "\'!\'", and a '
+                  '*format_spec*, which is\n'
+                  'preceded by a colon "\':\'".  These specify a non-default '
+                  'format for the\n'
+                  'replacement value.\n'
+                  '\n'
+                  'See also the Format Specification Mini-Language section.\n'
+                  '\n'
+                  'The *field_name* itself begins with an *arg_name* that is '
+                  'either a\n'
+                  "number or a keyword.  If it's a number, it refers to a "
+                  'positional\n'
+                  "argument, and if it's a keyword, it refers to a named "
+                  'keyword\n'
+                  'argument.  If the numerical arg_names in a format string '
+                  'are 0, 1, 2,\n'
+                  '... in sequence, they can all be omitted (not just some) '
+                  'and the\n'
+                  'numbers 0, 1, 2, ... will be automatically inserted in that '
+                  'order.\n'
+                  'Because *arg_name* is not quote-delimited, it is not '
+                  'possible to\n'
+                  'specify arbitrary dictionary keys (e.g., the strings '
+                  '"\'10\'" or\n'
+                  '"\':-]\'") within a format string. The *arg_name* can be '
+                  'followed by any\n'
+                  'number of index or attribute expressions. An expression of '
+                  'the form\n'
+                  '"\'.name\'" selects the named attribute using "getattr()", '
+                  'while an\n'
+                  'expression of the form "\'[index]\'" does an index lookup '
+                  'using\n'
+                  '"__getitem__()".\n'
+                  '\n'
+                  'Changed in version 2.7: The positional argument specifiers '
+                  'can be\n'
+                  'omitted, so "\'{} {}\'" is equivalent to "\'{0} {1}\'".\n'
+                  '\n'
+                  'Some simple format string examples:\n'
+                  '\n'
+                  '   "First, thou shalt count to {0}"  # References first '
+                  'positional argument\n'
+                  '   "Bring me a {}"                   # Implicitly '
+                  'references the first positional argument\n'
+                  '   "From {} to {}"                   # Same as "From {0} to '
+                  '{1}"\n'
+                  '   "My quest is {name}"              # References keyword '
+                  "argument 'name'\n"
+                  '   "Weight in tons {0.weight}"       # \'weight\' attribute '
+                  'of first positional arg\n'
+                  '   "Units destroyed: {players[0]}"   # First element of '
+                  "keyword argument 'players'.\n"
+                  '\n'
+                  'The *conversion* field causes a type coercion before '
+                  'formatting.\n'
+                  'Normally, the job of formatting a value is done by the '
+                  '"__format__()"\n'
+                  'method of the value itself.  However, in some cases it is '
+                  'desirable to\n'
+                  'force a type to be formatted as a string, overriding its '
+                  'own\n'
+                  'definition of formatting.  By converting the value to a '
+                  'string before\n'
+                  'calling "__format__()", the normal formatting logic is '
+                  'bypassed.\n'
+                  '\n'
+                  'Two conversion flags are currently supported: "\'!s\'" '
+                  'which calls\n'
+                  '"str()" on the value, and "\'!r\'" which calls "repr()".\n'
+                  '\n'
+                  'Some examples:\n'
+                  '\n'
+                  '   "Harold\'s a clever {0!s}"        # Calls str() on the '
+                  'argument first\n'
+                  '   "Bring out the holy {name!r}"    # Calls repr() on the '
+                  'argument first\n'
+                  '\n'
+                  'The *format_spec* field contains a specification of how the '
+                  'value\n'
+                  'should be presented, including such details as field width, '
+                  'alignment,\n'
+                  'padding, decimal precision and so on.  Each value type can '
+                  'define its\n'
+                  'own "formatting mini-language" or interpretation of the '
+                  '*format_spec*.\n'
+                  '\n'
+                  'Most built-in types support a common formatting '
+                  'mini-language, which\n'
+                  'is described in the next section.\n'
+                  '\n'
+                  'A *format_spec* field can also include nested replacement '
+                  'fields\n'
+                  'within it. These nested replacement fields may contain a '
+                  'field name,\n'
+                  'conversion flag and format specification, but deeper '
+                  'nesting is not\n'
+                  'allowed.  The replacement fields within the format_spec '
+                  'are\n'
+                  'substituted before the *format_spec* string is interpreted. '
+                  'This\n'
+                  'allows the formatting of a value to be dynamically '
+                  'specified.\n'
+                  '\n'
+                  'See the Format examples section for some examples.\n'
+                  '\n'
+                  '\n'
+                  'Format Specification Mini-Language\n'
+                  '==================================\n'
+                  '\n'
+                  '"Format specifications" are used within replacement fields '
+                  'contained\n'
+                  'within a format string to define how individual values are '
+                  'presented\n'
+                  '(see Format String Syntax).  They can also be passed '
+                  'directly to the\n'
+                  'built-in "format()" function.  Each formattable type may '
+                  'define how\n'
+                  'the format specification is to be interpreted.\n'
+                  '\n'
+                  'Most built-in types implement the following options for '
+                  'format\n'
+                  'specifications, although some of the formatting options are '
+                  'only\n'
+                  'supported by the numeric types.\n'
+                  '\n'
+                  'A general convention is that an empty format string ("""") '
+                  'produces\n'
+                  'the same result as if you had called "str()" on the value. '
+                  'A non-empty\n'
+                  'format string typically modifies the result.\n'
+                  '\n'
+                  'The general form of a *standard format specifier* is:\n'
+                  '\n'
+                  '   format_spec ::= '
+                  '[[fill]align][sign][#][0][width][,][.precision][type]\n'
+                  '   fill        ::= <any character>\n'
+                  '   align       ::= "<" | ">" | "=" | "^"\n'
+                  '   sign        ::= "+" | "-" | " "\n'
+                  '   width       ::= integer\n'
+                  '   precision   ::= integer\n'
+                  '   type        ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" '
+                  '| "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"\n'
+                  '\n'
+                  'If a valid *align* value is specified, it can be preceded '
+                  'by a *fill*\n'
+                  'character that can be any character and defaults to a space '
+                  'if\n'
+                  'omitted. It is not possible to use a literal curly brace '
+                  '(""{"" or\n'
+                  '""}"") as the *fill* character when using the '
+                  '"str.format()" method.\n'
+                  'However, it is possible to insert a curly brace with a '
+                  'nested\n'
+                  "replacement field.  This limitation doesn't affect the "
+                  '"format()"\n'
+                  'function.\n'
+                  '\n'
+                  'The meaning of the various alignment options is as '
+                  'follows:\n'
+                  '\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | Option    | '
+                  'Meaning                                                    '
+                  '|\n'
+                  '   '
+                  '+===========+============================================================+\n'
+                  '   | "\'<\'"     | Forces the field to be left-aligned '
+                  'within the available   |\n'
+                  '   |           | space (this is the default for most '
+                  'objects).              |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'>\'"     | Forces the field to be right-aligned '
+                  'within the available  |\n'
+                  '   |           | space (this is the default for '
+                  'numbers).                   |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'=\'"     | Forces the padding to be placed after '
+                  'the sign (if any)    |\n'
+                  '   |           | but before the digits.  This is used for '
+                  'printing fields   |\n'
+                  "   |           | in the form '+000000120'. This alignment "
+                  'option is only    |\n'
+                  '   |           | valid for numeric types.  It becomes the '
+                  "default when '0'  |\n"
+                  '   |           | immediately precedes the field '
+                  'width.                      |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'^\'"     | Forces the field to be centered within '
+                  'the available       |\n'
+                  '   |           | '
+                  'space.                                                     '
+                  '|\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '\n'
+                  'Note that unless a minimum field width is defined, the '
+                  'field width\n'
+                  'will always be the same size as the data to fill it, so '
+                  'that the\n'
+                  'alignment option has no meaning in this case.\n'
+                  '\n'
+                  'The *sign* option is only valid for number types, and can '
+                  'be one of\n'
+                  'the following:\n'
+                  '\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | Option    | '
+                  'Meaning                                                    '
+                  '|\n'
+                  '   '
+                  '+===========+============================================================+\n'
+                  '   | "\'+\'"     | indicates that a sign should be used for '
+                  'both positive as  |\n'
+                  '   |           | well as negative '
+                  'numbers.                                  |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'-\'"     | indicates that a sign should be used '
+                  'only for negative     |\n'
+                  '   |           | numbers (this is the default '
+                  'behavior).                    |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | space     | indicates that a leading space should be '
+                  'used on positive  |\n'
+                  '   |           | numbers, and a minus sign on negative '
+                  'numbers.             |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '\n'
+                  'The "\'#\'" option is only valid for integers, and only for '
+                  'binary,\n'
+                  'octal, or hexadecimal output.  If present, it specifies '
+                  'that the\n'
+                  'output will be prefixed by "\'0b\'", "\'0o\'", or "\'0x\'", '
+                  'respectively.\n'
+                  '\n'
+                  'The "\',\'" option signals the use of a comma for a '
+                  'thousands separator.\n'
+                  'For a locale aware separator, use the "\'n\'" integer '
+                  'presentation type\n'
+                  'instead.\n'
+                  '\n'
+                  'Changed in version 2.7: Added the "\',\'" option (see also '
+                  '**PEP 378**).\n'
+                  '\n'
+                  '*width* is a decimal integer defining the minimum field '
+                  'width.  If not\n'
+                  'specified, then the field width will be determined by the '
+                  'content.\n'
+                  '\n'
+                  'When no explicit alignment is given, preceding the *width* '
+                  'field by a\n'
+                  'zero ("\'0\'") character enables sign-aware zero-padding '
+                  'for numeric\n'
+                  'types.  This is equivalent to a *fill* character of "\'0\'" '
+                  'with an\n'
+                  '*alignment* type of "\'=\'".\n'
+                  '\n'
+                  'The *precision* is a decimal number indicating how many '
+                  'digits should\n'
+                  'be displayed after the decimal point for a floating point '
+                  'value\n'
+                  'formatted with "\'f\'" and "\'F\'", or before and after the '
+                  'decimal point\n'
+                  'for a floating point value formatted with "\'g\'" or '
+                  '"\'G\'".  For non-\n'
+                  'number types the field indicates the maximum field size - '
+                  'in other\n'
+                  'words, how many characters will be used from the field '
+                  'content. The\n'
+                  '*precision* is not allowed for integer values.\n'
+                  '\n'
+                  'Finally, the *type* determines how the data should be '
+                  'presented.\n'
+                  '\n'
+                  'The available string presentation types are:\n'
+                  '\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | Type      | '
+                  'Meaning                                                    '
+                  '|\n'
+                  '   '
+                  '+===========+============================================================+\n'
+                  '   | "\'s\'"     | String format. This is the default type '
+                  'for strings and    |\n'
+                  '   |           | may be '
+                  'omitted.                                            |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | None      | The same as '
+                  '"\'s\'".                                         |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '\n'
+                  'The available integer presentation types are:\n'
+                  '\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | Type      | '
+                  'Meaning                                                    '
+                  '|\n'
+                  '   '
+                  '+===========+============================================================+\n'
+                  '   | "\'b\'"     | Binary format. Outputs the number in '
+                  'base 2.               |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'c\'"     | Character. Converts the integer to the '
+                  'corresponding       |\n'
+                  '   |           | unicode character before '
+                  'printing.                         |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'d\'"     | Decimal Integer. Outputs the number in '
+                  'base 10.            |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'o\'"     | Octal format. Outputs the number in base '
+                  '8.                |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'x\'"     | Hex format. Outputs the number in base '
+                  '16, using lower-    |\n'
+                  '   |           | case letters for the digits above '
+                  '9.                       |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'X\'"     | Hex format. Outputs the number in base '
+                  '16, using upper-    |\n'
+                  '   |           | case letters for the digits above '
+                  '9.                       |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'n\'"     | Number. This is the same as "\'d\'", '
+                  'except that it uses the |\n'
+                  '   |           | current locale setting to insert the '
+                  'appropriate number    |\n'
+                  '   |           | separator '
+                  'characters.                                      |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | None      | The same as '
+                  '"\'d\'".                                         |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '\n'
+                  'In addition to the above presentation types, integers can '
+                  'be formatted\n'
+                  'with the floating point presentation types listed below '
+                  '(except "\'n\'"\n'
+                  'and "None"). When doing so, "float()" is used to convert '
+                  'the integer\n'
+                  'to a floating point number before formatting.\n'
+                  '\n'
+                  'The available presentation types for floating point and '
+                  'decimal values\n'
+                  'are:\n'
+                  '\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | Type      | '
+                  'Meaning                                                    '
+                  '|\n'
+                  '   '
+                  '+===========+============================================================+\n'
+                  '   | "\'e\'"     | Exponent notation. Prints the number in '
+                  'scientific         |\n'
+                  "   |           | notation using the letter 'e' to indicate "
+                  'the exponent.    |\n'
+                  '   |           | The default precision is '
+                  '"6".                              |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'E\'"     | Exponent notation. Same as "\'e\'" '
+                  'except it uses an upper   |\n'
+                  "   |           | case 'E' as the separator "
+                  'character.                       |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'f\'"     | Fixed point. Displays the number as a '
+                  'fixed-point number.  |\n'
+                  '   |           | The default precision is '
+                  '"6".                              |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'F\'"     | Fixed point. Same as '
+                  '"\'f\'".                                |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'g\'"     | General format.  For a given precision '
+                  '"p >= 1", this      |\n'
+                  '   |           | rounds the number to "p" significant '
+                  'digits and then       |\n'
+                  '   |           | formats the result in either fixed-point '
+                  'format or in      |\n'
+                  '   |           | scientific notation, depending on its '
+                  'magnitude.  The      |\n'
+                  '   |           | precise rules are as follows: suppose that '
+                  'the result      |\n'
+                  '   |           | formatted with presentation type "\'e\'" '
+                  'and precision "p-1" |\n'
+                  '   |           | would have exponent "exp".  Then if "-4 <= '
+                  'exp < p", the   |\n'
+                  '   |           | number is formatted with presentation type '
+                  '"\'f\'" and       |\n'
+                  '   |           | precision "p-1-exp".  Otherwise, the '
+                  'number is formatted   |\n'
+                  '   |           | with presentation type "\'e\'" and '
+                  'precision "p-1". In both  |\n'
+                  '   |           | cases insignificant trailing zeros are '
+                  'removed from the    |\n'
+                  '   |           | significand, and the decimal point is also '
+                  'removed if      |\n'
+                  '   |           | there are no remaining digits following '
+                  'it.  Positive and  |\n'
+                  '   |           | negative infinity, positive and negative '
+                  'zero, and nans,   |\n'
+                  '   |           | are formatted as "inf", "-inf", "0", "-0" '
+                  'and "nan"        |\n'
+                  '   |           | respectively, regardless of the '
+                  'precision.  A precision of |\n'
+                  '   |           | "0" is treated as equivalent to a '
+                  'precision of "1". The    |\n'
+                  '   |           | default precision is '
+                  '"6".                                  |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'G\'"     | General format. Same as "\'g\'" except '
+                  'switches to "\'E\'" if  |\n'
+                  '   |           | the number gets too large. The '
+                  'representations of infinity |\n'
+                  '   |           | and NaN are uppercased, '
+                  'too.                               |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'n\'"     | Number. This is the same as "\'g\'", '
+                  'except that it uses the |\n'
+                  '   |           | current locale setting to insert the '
+                  'appropriate number    |\n'
+                  '   |           | separator '
+                  'characters.                                      |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | "\'%\'"     | Percentage. Multiplies the number by 100 '
+                  'and displays in   |\n'
+                  '   |           | fixed ("\'f\'") format, followed by a '
+                  'percent sign.          |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '   | None      | The same as '
+                  '"\'g\'".                                         |\n'
+                  '   '
+                  '+-----------+------------------------------------------------------------+\n'
+                  '\n'
+                  '\n'
+                  'Format examples\n'
+                  '===============\n'
+                  '\n'
+                  'This section contains examples of the "str.format()" syntax '
+                  'and\n'
+                  'comparison with the old "%"-formatting.\n'
+                  '\n'
+                  'In most of the cases the syntax is similar to the old '
+                  '"%"-formatting,\n'
+                  'with the addition of the "{}" and with ":" used instead of '
+                  '"%". For\n'
+                  'example, "\'%03.2f\'" can be translated to "\'{:03.2f}\'".\n'
+                  '\n'
+                  'The new format syntax also supports new and different '
+                  'options, shown\n'
+                  'in the follow examples.\n'
+                  '\n'
+                  'Accessing arguments by position:\n'
+                  '\n'
+                  "   >>> '{0}, {1}, {2}'.format('a', 'b', 'c')\n"
+                  "   'a, b, c'\n"
+                  "   >>> '{}, {}, {}'.format('a', 'b', 'c')  # 2.7+ only\n"
+                  "   'a, b, c'\n"
+                  "   >>> '{2}, {1}, {0}'.format('a', 'b', 'c')\n"
+                  "   'c, b, a'\n"
+                  "   >>> '{2}, {1}, {0}'.format(*'abc')      # unpacking "
+                  'argument sequence\n'
+                  "   'c, b, a'\n"
+                  "   >>> '{0}{1}{0}'.format('abra', 'cad')   # arguments' "
+                  'indices can be repeated\n'
+                  "   'abracadabra'\n"
+                  '\n'
+                  'Accessing arguments by name:\n'
+                  '\n'
+                  "   >>> 'Coordinates: {latitude}, "
+                  "{longitude}'.format(latitude='37.24N', "
+                  "longitude='-115.81W')\n"
+                  "   'Coordinates: 37.24N, -115.81W'\n"
+                  "   >>> coord = {'latitude': '37.24N', 'longitude': "
+                  "'-115.81W'}\n"
+                  "   >>> 'Coordinates: {latitude}, "
+                  "{longitude}'.format(**coord)\n"
+                  "   'Coordinates: 37.24N, -115.81W'\n"
+                  '\n'
+                  "Accessing arguments' attributes:\n"
+                  '\n'
+                  '   >>> c = 3-5j\n'
+                  "   >>> ('The complex number {0} is formed from the real "
+                  "part {0.real} '\n"
+                  "   ...  'and the imaginary part {0.imag}.').format(c)\n"
+                  "   'The complex number (3-5j) is formed from the real part "
+                  "3.0 and the imaginary part -5.0.'\n"
+                  '   >>> class Point(object):\n'
+                  '   ...     def __init__(self, x, y):\n'
+                  '   ...         self.x, self.y = x, y\n'
+                  '   ...     def __str__(self):\n'
+                  "   ...         return 'Point({self.x}, "
+                  "{self.y})'.format(self=self)\n"
+                  '   ...\n'
+                  '   >>> str(Point(4, 2))\n'
+                  "   'Point(4, 2)'\n"
+                  '\n'
+                  "Accessing arguments' items:\n"
+                  '\n'
+                  '   >>> coord = (3, 5)\n'
+                  "   >>> 'X: {0[0]};  Y: {0[1]}'.format(coord)\n"
+                  "   'X: 3;  Y: 5'\n"
+                  '\n'
+                  'Replacing "%s" and "%r":\n'
+                  '\n'
+                  '   >>> "repr() shows quotes: {!r}; str() doesn\'t: '
+                  '{!s}".format(\'test1\', \'test2\')\n'
+                  '   "repr() shows quotes: \'test1\'; str() doesn\'t: test2"\n'
+                  '\n'
+                  'Aligning the text and specifying a width:\n'
+                  '\n'
+                  "   >>> '{:<30}'.format('left aligned')\n"
+                  "   'left aligned                  '\n"
+                  "   >>> '{:>30}'.format('right aligned')\n"
+                  "   '                 right aligned'\n"
+                  "   >>> '{:^30}'.format('centered')\n"
+                  "   '           centered           '\n"
+                  "   >>> '{:*^30}'.format('centered')  # use '*' as a fill "
+                  'char\n'
+                  "   '***********centered***********'\n"
+                  '\n'
+                  'Replacing "%+f", "%-f", and "% f" and specifying a sign:\n'
+                  '\n'
+                  "   >>> '{:+f}; {:+f}'.format(3.14, -3.14)  # show it "
+                  'always\n'
+                  "   '+3.140000; -3.140000'\n"
+                  "   >>> '{: f}; {: f}'.format(3.14, -3.14)  # show a space "
+                  'for positive numbers\n'
+                  "   ' 3.140000; -3.140000'\n"
+                  "   >>> '{:-f}; {:-f}'.format(3.14, -3.14)  # show only the "
+                  "minus -- same as '{:f}; {:f}'\n"
+                  "   '3.140000; -3.140000'\n"
+                  '\n'
+                  'Replacing "%x" and "%o" and converting the value to '
+                  'different bases:\n'
+                  '\n'
+                  '   >>> # format also supports binary numbers\n'
+                  '   >>> "int: {0:d};  hex: {0:x};  oct: {0:o};  bin: '
+                  '{0:b}".format(42)\n'
+                  "   'int: 42;  hex: 2a;  oct: 52;  bin: 101010'\n"
+                  '   >>> # with 0x, 0o, or 0b as prefix:\n'
+                  '   >>> "int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: '
+                  '{0:#b}".format(42)\n'
+                  "   'int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010'\n"
+                  '\n'
+                  'Using the comma as a thousands separator:\n'
+                  '\n'
+                  "   >>> '{:,}'.format(1234567890)\n"
+                  "   '1,234,567,890'\n"
+                  '\n'
+                  'Expressing a percentage:\n'
+                  '\n'
+                  '   >>> points = 19.5\n'
+                  '   >>> total = 22\n'
+                  "   >>> 'Correct answers: {:.2%}'.format(points/total)\n"
+                  "   'Correct answers: 88.64%'\n"
+                  '\n'
+                  'Using type-specific formatting:\n'
+                  '\n'
+                  '   >>> import datetime\n'
+                  '   >>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)\n'
+                  "   >>> '{:%Y-%m-%d %H:%M:%S}'.format(d)\n"
+                  "   '2010-07-04 12:15:58'\n"
+                  '\n'
+                  'Nesting arguments and more complex examples:\n'
+                  '\n'
+                  "   >>> for align, text in zip('<^>', ['left', 'center', "
+                  "'right']):\n"
+                  "   ...     '{0:{fill}{align}16}'.format(text, fill=align, "
+                  'align=align)\n'
+                  '   ...\n'
+                  "   'left<<<<<<<<<<<<'\n"
+                  "   '^^^^^center^^^^^'\n"
+                  "   '>>>>>>>>>>>right'\n"
+                  '   >>>\n'
+                  '   >>> octets = [192, 168, 0, 1]\n'
+                  "   >>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)\n"
+                  "   'C0A80001'\n"
+                  '   >>> int(_, 16)\n'
+                  '   3232235521\n'
+                  '   >>>\n'
+                  '   >>> width = 5\n'
+                  '   >>> for num in range(5,12):\n'
+                  "   ...     for base in 'dXob':\n"
+                  "   ...         print '{0:{width}{base}}'.format(num, "
+                  'base=base, width=width),\n'
+                  '   ...     print\n'
+                  '   ...\n'
+                  '       5     5     5   101\n'
+                  '       6     6     6   110\n'
+                  '       7     7     7   111\n'
+                  '       8     8    10  1000\n'
+                  '       9     9    11  1001\n'
+                  '      10     A    12  1010\n'
+                  '      11     B    13  1011\n',
+ 'function': '\n'
+             'Function definitions\n'
+             '********************\n'
+             '\n'
+             'A function definition defines a user-defined function object '
+             '(see\n'
+             'section The standard type hierarchy):\n'
+             '\n'
+             '   decorated      ::= decorators (classdef | funcdef)\n'
+             '   decorators     ::= decorator+\n'
+             '   decorator      ::= "@" dotted_name ["(" [argument_list [","]] '
+             '")"] NEWLINE\n'
+             '   funcdef        ::= "def" funcname "(" [parameter_list] ")" '
+             '":" suite\n'
+             '   dotted_name    ::= identifier ("." identifier)*\n'
+             '   parameter_list ::= (defparameter ",")*\n'
+             '                      (  "*" identifier ["," "**" identifier]\n'
+             '                      | "**" identifier\n'
+             '                      | defparameter [","] )\n'
+             '   defparameter   ::= parameter ["=" expression]\n'
+             '   sublist        ::= parameter ("," parameter)* [","]\n'
+             '   parameter      ::= identifier | "(" sublist ")"\n'
+             '   funcname       ::= identifier\n'
+             '\n'
+             'A function definition is an executable statement.  Its execution '
+             'binds\n'
+             'the function name in the current local namespace to a function '
+             'object\n'
+             '(a wrapper around the executable code for the function).  This\n'
+             'function object contains a reference to the current global '
+             'namespace\n'
+             'as the global namespace to be used when the function is called.\n'
+             '\n'
+             'The function definition does not execute the function body; this '
+             'gets\n'
+             'executed only when the function is called. [3]\n'
+             '\n'
+             'A function definition may be wrapped by one or more *decorator*\n'
+             'expressions. Decorator expressions are evaluated when the '
+             'function is\n'
+             'defined, in the scope that contains the function definition.  '
+             'The\n'
+             'result must be a callable, which is invoked with the function '
+             'object\n'
+             'as the only argument. The returned value is bound to the '
+             'function name\n'
+             'instead of the function object.  Multiple decorators are applied '
+             'in\n'
+             'nested fashion. For example, the following code:\n'
+             '\n'
+             '   @f1(arg)\n'
+             '   @f2\n'
+             '   def func(): pass\n'
+             '\n'
+             'is equivalent to:\n'
+             '\n'
+             '   def func(): pass\n'
+             '   func = f1(arg)(f2(func))\n'
+             '\n'
+             'When one or more top-level *parameters* have the form '
+             '*parameter* "="\n'
+             '*expression*, the function is said to have "default parameter '
+             'values."\n'
+             'For a parameter with a default value, the corresponding '
+             '*argument* may\n'
+             "be omitted from a call, in which case the parameter's default "
+             'value is\n'
+             'substituted.  If a parameter has a default value, all following\n'
+             'parameters must also have a default value --- this is a '
+             'syntactic\n'
+             'restriction that is not expressed by the grammar.\n'
+             '\n'
+             '**Default parameter values are evaluated when the function '
+             'definition\n'
+             'is executed.**  This means that the expression is evaluated '
+             'once, when\n'
+             'the function is defined, and that the same "pre-computed" value '
+             'is\n'
+             'used for each call.  This is especially important to understand '
+             'when a\n'
+             'default parameter is a mutable object, such as a list or a '
+             'dictionary:\n'
+             'if the function modifies the object (e.g. by appending an item '
+             'to a\n'
+             'list), the default value is in effect modified. This is '
+             'generally not\n'
+             'what was intended.  A way around this  is to use "None" as the\n'
+             'default, and explicitly test for it in the body of the function, '
+             'e.g.:\n'
+             '\n'
+             '   def whats_on_the_telly(penguin=None):\n'
+             '       if penguin is None:\n'
+             '           penguin = []\n'
+             '       penguin.append("property of the zoo")\n'
+             '       return penguin\n'
+             '\n'
+             'Function call semantics are described in more detail in section '
+             'Calls.\n'
+             'A function call always assigns values to all parameters '
+             'mentioned in\n'
+             'the parameter list, either from position arguments, from '
+             'keyword\n'
+             'arguments, or from default values.  If the form ""*identifier"" '
+             'is\n'
+             'present, it is initialized to a tuple receiving any excess '
+             'positional\n'
+             'parameters, defaulting to the empty tuple.  If the form\n'
+             '""**identifier"" is present, it is initialized to a new '
+             'dictionary\n'
+             'receiving any excess keyword arguments, defaulting to a new '
+             'empty\n'
+             'dictionary.\n'
+             '\n'
+             'It is also possible to create anonymous functions (functions not '
+             'bound\n'
+             'to a name), for immediate use in expressions.  This uses lambda\n'
+             'expressions, described in section Lambdas.  Note that the '
+             'lambda\n'
+             'expression is merely a shorthand for a simplified function '
+             'definition;\n'
+             'a function defined in a ""def"" statement can be passed around '
+             'or\n'
+             'assigned to another name just like a function defined by a '
+             'lambda\n'
+             'expression.  The ""def"" form is actually more powerful since '
+             'it\n'
+             'allows the execution of multiple statements.\n'
+             '\n'
+             "**Programmer's note:** Functions are first-class objects.  A "
+             '""def""\n'
+             'form executed inside a function definition defines a local '
+             'function\n'
+             'that can be returned or passed around.  Free variables used in '
+             'the\n'
+             'nested function can access the local variables of the function\n'
+             'containing the def.  See section Naming and binding for '
+             'details.\n',
+ 'global': '\n'
+           'The "global" statement\n'
+           '**********************\n'
+           '\n'
+           '   global_stmt ::= "global" identifier ("," identifier)*\n'
+           '\n'
+           'The "global" statement is a declaration which holds for the '
+           'entire\n'
+           'current code block.  It means that the listed identifiers are to '
+           'be\n'
+           'interpreted as globals.  It would be impossible to assign to a '
+           'global\n'
+           'variable without "global", although free variables may refer to\n'
+           'globals without being declared global.\n'
+           '\n'
+           'Names listed in a "global" statement must not be used in the same '
+           'code\n'
+           'block textually preceding that "global" statement.\n'
+           '\n'
+           'Names listed in a "global" statement must not be defined as '
+           'formal\n'
+           'parameters or in a "for" loop control target, "class" definition,\n'
+           'function definition, or "import" statement.\n'
+           '\n'
+           '**CPython implementation detail:** The current implementation does '
+           'not\n'
+           'enforce the latter two restrictions, but programs should not '
+           'abuse\n'
+           'this freedom, as future implementations may enforce them or '
+           'silently\n'
+           'change the meaning of the program.\n'
+           '\n'
+           '**Programmer\'s note:** "global" is a directive to the parser.  '
+           'It\n'
+           'applies only to code parsed at the same time as the "global"\n'
+           'statement. In particular, a "global" statement contained in an '
+           '"exec"\n'
+           'statement does not affect the code block *containing* the "exec"\n'
+           'statement, and code contained in an "exec" statement is unaffected '
+           'by\n'
+           '"global" statements in the code containing the "exec" statement.  '
+           'The\n'
+           'same applies to the "eval()", "execfile()" and "compile()" '
+           'functions.\n',
+ 'id-classes': '\n'
+               'Reserved classes of identifiers\n'
+               '*******************************\n'
+               '\n'
+               'Certain classes of identifiers (besides keywords) have '
+               'special\n'
+               'meanings.  These classes are identified by the patterns of '
+               'leading and\n'
+               'trailing underscore characters:\n'
+               '\n'
+               '"_*"\n'
+               '   Not imported by "from module import *".  The special '
+               'identifier "_"\n'
+               '   is used in the interactive interpreter to store the result '
+               'of the\n'
+               '   last evaluation; it is stored in the "__builtin__" module.  '
+               'When\n'
+               '   not in interactive mode, "_" has no special meaning and is '
+               'not\n'
+               '   defined. See section The import statement.\n'
+               '\n'
+               '   Note: The name "_" is often used in conjunction with\n'
+               '     internationalization; refer to the documentation for the\n'
+               '     "gettext" module for more information on this '
+               'convention.\n'
+               '\n'
+               '"__*__"\n'
+               '   System-defined names. These names are defined by the '
+               'interpreter\n'
+               '   and its implementation (including the standard library).  '
+               'Current\n'
+               '   system names are discussed in the Special method names '
+               'section and\n'
+               '   elsewhere.  More will likely be defined in future versions '
+               'of\n'
+               '   Python.  *Any* use of "__*__" names, in any context, that '
+               'does not\n'
+               '   follow explicitly documented use, is subject to breakage '
+               'without\n'
+               '   warning.\n'
+               '\n'
+               '"__*"\n'
+               '   Class-private names.  Names in this category, when used '
+               'within the\n'
+               '   context of a class definition, are re-written to use a '
+               'mangled form\n'
+               '   to help avoid name clashes between "private" attributes of '
+               'base and\n'
+               '   derived classes. See section Identifiers (Names).\n',
+ 'identifiers': '\n'
+                'Identifiers and keywords\n'
+                '************************\n'
+                '\n'
+                'Identifiers (also referred to as *names*) are described by '
+                'the\n'
+                'following lexical definitions:\n'
+                '\n'
+                '   identifier ::= (letter|"_") (letter | digit | "_")*\n'
+                '   letter     ::= lowercase | uppercase\n'
+                '   lowercase  ::= "a"..."z"\n'
+                '   uppercase  ::= "A"..."Z"\n'
+                '   digit      ::= "0"..."9"\n'
+                '\n'
+                'Identifiers are unlimited in length.  Case is significant.\n'
+                '\n'
+                '\n'
+                'Keywords\n'
+                '========\n'
+                '\n'
+                'The following identifiers are used as reserved words, or '
+                '*keywords* of\n'
+                'the language, and cannot be used as ordinary identifiers.  '
+                'They must\n'
+                'be spelled exactly as written here:\n'
+                '\n'
+                '   and       del       from      not       while\n'
+                '   as        elif      global    or        with\n'
+                '   assert    else      if        pass      yield\n'
+                '   break     except    import    print\n'
+                '   class     exec      in        raise\n'
+                '   continue  finally   is        return\n'
+                '   def       for       lambda    try\n'
+                '\n'
+                'Changed in version 2.4: "None" became a constant and is now '
+                'recognized\n'
+                'by the compiler as a name for the built-in object "None".  '
+                'Although it\n'
+                'is not a keyword, you cannot assign a different object to '
+                'it.\n'
+                '\n'
+                'Changed in version 2.5: Using "as" and "with" as identifiers '
+                'triggers\n'
+                'a warning.  To use them as keywords, enable the '
+                '"with_statement"\n'
+                'future feature .\n'
+                '\n'
+                'Changed in version 2.6: "as" and "with" are full keywords.\n'
+                '\n'
+                '\n'
+                'Reserved classes of identifiers\n'
+                '===============================\n'
+                '\n'
+                'Certain classes of identifiers (besides keywords) have '
+                'special\n'
+                'meanings.  These classes are identified by the patterns of '
+                'leading and\n'
+                'trailing underscore characters:\n'
+                '\n'
+                '"_*"\n'
+                '   Not imported by "from module import *".  The special '
+                'identifier "_"\n'
+                '   is used in the interactive interpreter to store the result '
+                'of the\n'
+                '   last evaluation; it is stored in the "__builtin__" '
+                'module.  When\n'
+                '   not in interactive mode, "_" has no special meaning and is '
+                'not\n'
+                '   defined. See section The import statement.\n'
+                '\n'
+                '   Note: The name "_" is often used in conjunction with\n'
+                '     internationalization; refer to the documentation for '
+                'the\n'
+                '     "gettext" module for more information on this '
+                'convention.\n'
+                '\n'
+                '"__*__"\n'
+                '   System-defined names. These names are defined by the '
+                'interpreter\n'
+                '   and its implementation (including the standard library).  '
+                'Current\n'
+                '   system names are discussed in the Special method names '
+                'section and\n'
+                '   elsewhere.  More will likely be defined in future versions '
+                'of\n'
+                '   Python.  *Any* use of "__*__" names, in any context, that '
+                'does not\n'
+                '   follow explicitly documented use, is subject to breakage '
+                'without\n'
+                '   warning.\n'
+                '\n'
+                '"__*"\n'
+                '   Class-private names.  Names in this category, when used '
+                'within the\n'
+                '   context of a class definition, are re-written to use a '
+                'mangled form\n'
+                '   to help avoid name clashes between "private" attributes of '
+                'base and\n'
+                '   derived classes. See section Identifiers (Names).\n',
+ 'if': '\n'
+       'The "if" statement\n'
+       '******************\n'
+       '\n'
+       'The "if" statement is used for conditional execution:\n'
+       '\n'
+       '   if_stmt ::= "if" expression ":" suite\n'
+       '               ( "elif" expression ":" suite )*\n'
+       '               ["else" ":" suite]\n'
+       '\n'
+       'It selects exactly one of the suites by evaluating the expressions '
+       'one\n'
+       'by one until one is found to be true (see section Boolean operations\n'
+       'for the definition of true and false); then that suite is executed\n'
+       '(and no other part of the "if" statement is executed or evaluated).\n'
+       'If all expressions are false, the suite of the "else" clause, if\n'
+       'present, is executed.\n',
+ 'imaginary': '\n'
+              'Imaginary literals\n'
+              '******************\n'
+              '\n'
+              'Imaginary literals are described by the following lexical '
+              'definitions:\n'
+              '\n'
+              '   imagnumber ::= (floatnumber | intpart) ("j" | "J")\n'
+              '\n'
+              'An imaginary literal yields a complex number with a real part '
+              'of 0.0.\n'
+              'Complex numbers are represented as a pair of floating point '
+              'numbers\n'
+              'and have the same restrictions on their range.  To create a '
+              'complex\n'
+              'number with a nonzero real part, add a floating point number to '
+              'it,\n'
+              'e.g., "(3+4j)".  Some examples of imaginary literals:\n'
+              '\n'
+              '   3.14j   10.j    10j     .001j   1e100j  3.14e-10j\n',
+ 'import': '\n'
+           'The "import" statement\n'
+           '**********************\n'
+           '\n'
+           '   import_stmt     ::= "import" module ["as" name] ( "," module '
+           '["as" name] )*\n'
+           '                   | "from" relative_module "import" identifier '
+           '["as" name]\n'
+           '                   ( "," identifier ["as" name] )*\n'
+           '                   | "from" relative_module "import" "(" '
+           'identifier ["as" name]\n'
+           '                   ( "," identifier ["as" name] )* [","] ")"\n'
+           '                   | "from" module "import" "*"\n'
+           '   module          ::= (identifier ".")* identifier\n'
+           '   relative_module ::= "."* module | "."+\n'
+           '   name            ::= identifier\n'
+           '\n'
+           'Import statements are executed in two steps: (1) find a module, '
+           'and\n'
+           'initialize it if necessary; (2) define a name or names in the '
+           'local\n'
+           'namespace (of the scope where the "import" statement occurs). The\n'
+           'statement comes in two forms differing on whether it uses the '
+           '"from"\n'
+           'keyword. The first form (without "from") repeats these steps for '
+           'each\n'
+           'identifier in the list. The form with "from" performs step (1) '
+           'once,\n'
+           'and then performs step (2) repeatedly.\n'
+           '\n'
+           'To understand how step (1) occurs, one must first understand how\n'
+           'Python handles hierarchical naming of modules. To help organize\n'
+           'modules and provide a hierarchy in naming, Python has a concept '
+           'of\n'
+           'packages. A package can contain other packages and modules while\n'
+           'modules cannot contain other modules or packages. From a file '
+           'system\n'
+           'perspective, packages are directories and modules are files.\n'
+           '\n'
+           'Once the name of the module is known (unless otherwise specified, '
+           'the\n'
+           'term "module" will refer to both packages and modules), searching '
+           'for\n'
+           'the module or package can begin. The first place checked is\n'
+           '"sys.modules", the cache of all modules that have been imported\n'
+           'previously. If the module is found there then it is used in step '
+           '(2)\n'
+           'of import.\n'
+           '\n'
+           'If the module is not found in the cache, then "sys.meta_path" is\n'
+           'searched (the specification for "sys.meta_path" can be found in '
+           '**PEP\n'
+           '302**). The object is a list of *finder* objects which are queried '
+           'in\n'
+           'order as to whether they know how to load the module by calling '
+           'their\n'
+           '"find_module()" method with the name of the module. If the module\n'
+           'happens to be contained within a package (as denoted by the '
+           'existence\n'
+           'of a dot in the name), then a second argument to "find_module()" '
+           'is\n'
+           'given as the value of the "__path__" attribute from the parent '
+           'package\n'
+           '(everything up to the last dot in the name of the module being\n'
+           'imported). If a finder can find the module it returns a *loader*\n'
+           '(discussed later) or returns "None".\n'
+           '\n'
+           'If none of the finders on "sys.meta_path" are able to find the '
+           'module\n'
+           'then some implicitly defined finders are queried. Implementations '
+           'of\n'
+           'Python vary in what implicit meta path finders are defined. The '
+           'one\n'
+           'they all do define, though, is one that handles "sys.path_hooks",\n'
+           '"sys.path_importer_cache", and "sys.path".\n'
+           '\n'
+           'The implicit finder searches for the requested module in the '
+           '"paths"\n'
+           'specified in one of two places ("paths" do not have to be file '
+           'system\n'
+           'paths). If the module being imported is supposed to be contained\n'
+           'within a package then the second argument passed to '
+           '"find_module()",\n'
+           '"__path__" on the parent package, is used as the source of paths. '
+           'If\n'
+           'the module is not contained in a package then "sys.path" is used '
+           'as\n'
+           'the source of paths.\n'
+           '\n'
+           'Once the source of paths is chosen it is iterated over to find a\n'
+           'finder that can handle that path. The dict at\n'
+           '"sys.path_importer_cache" caches finders for paths and is checked '
+           'for\n'
+           'a finder. If the path does not have a finder cached then\n'
+           '"sys.path_hooks" is searched by calling each object in the list '
+           'with a\n'
+           'single argument of the path, returning a finder or raises\n'
+           '"ImportError". If a finder is returned then it is cached in\n'
+           '"sys.path_importer_cache" and then used for that path entry. If '
+           'no\n'
+           'finder can be found but the path exists then a value of "None" is\n'
+           'stored in "sys.path_importer_cache" to signify that an implicit, '
+           'file-\n'
+           'based finder that handles modules stored as individual files '
+           'should be\n'
+           'used for that path. If the path does not exist then a finder '
+           'which\n'
+           'always returns "None" is placed in the cache for the path.\n'
+           '\n'
+           'If no finder can find the module then "ImportError" is raised.\n'
+           'Otherwise some finder returned a loader whose "load_module()" '
+           'method\n'
+           'is called with the name of the module to load (see **PEP 302** for '
+           'the\n'
+           'original definition of loaders). A loader has several '
+           'responsibilities\n'
+           'to perform on a module it loads. First, if the module already '
+           'exists\n'
+           'in "sys.modules" (a possibility if the loader is called outside of '
+           'the\n'
+           'import machinery) then it is to use that module for initialization '
+           'and\n'
+           'not a new module. But if the module does not exist in '
+           '"sys.modules"\n'
+           'then it is to be added to that dict before initialization begins. '
+           'If\n'
+           'an error occurs during loading of the module and it was added to\n'
+           '"sys.modules" it is to be removed from the dict. If an error '
+           'occurs\n'
+           'but the module was already in "sys.modules" it is left in the '
+           'dict.\n'
+           '\n'
+           'The loader must set several attributes on the module. "__name__" '
+           'is to\n'
+           'be set to the name of the module. "__file__" is to be the "path" '
+           'to\n'
+           'the file unless the module is built-in (and thus listed in\n'
+           '"sys.builtin_module_names") in which case the attribute is not '
+           'set. If\n'
+           'what is being imported is a package then "__path__" is to be set '
+           'to a\n'
+           'list of paths to be searched when looking for modules and '
+           'packages\n'
+           'contained within the package being imported. "__package__" is '
+           'optional\n'
+           'but should be set to the name of package that contains the module '
+           'or\n'
+           'package (the empty string is used for module not contained in a\n'
+           'package). "__loader__" is also optional but should be set to the\n'
+           'loader object that is loading the module.\n'
+           '\n'
+           'If an error occurs during loading then the loader raises '
+           '"ImportError"\n'
+           'if some other exception is not already being propagated. Otherwise '
+           'the\n'
+           'loader returns the module that was loaded and initialized.\n'
+           '\n'
+           'When step (1) finishes without raising an exception, step (2) can\n'
+           'begin.\n'
+           '\n'
+           'The first form of "import" statement binds the module name in the\n'
+           'local namespace to the module object, and then goes on to import '
+           'the\n'
+           'next identifier, if any.  If the module name is followed by "as", '
+           'the\n'
+           'name following "as" is used as the local name for the module.\n'
+           '\n'
+           'The "from" form does not bind the module name: it goes through '
+           'the\n'
+           'list of identifiers, looks each one of them up in the module found '
+           'in\n'
+           'step (1), and binds the name in the local namespace to the object '
+           'thus\n'
+           'found.  As with the first form of "import", an alternate local '
+           'name\n'
+           'can be supplied by specifying ""as" localname".  If a name is not\n'
+           'found, "ImportError" is raised.  If the list of identifiers is\n'
+           'replaced by a star ("\'*\'"), all public names defined in the '
+           'module are\n'
+           'bound in the local namespace of the "import" statement..\n'
+           '\n'
+           'The *public names* defined by a module are determined by checking '
+           'the\n'
+           'module\'s namespace for a variable named "__all__"; if defined, it '
+           'must\n'
+           'be a sequence of strings which are names defined or imported by '
+           'that\n'
+           'module.  The names given in "__all__" are all considered public '
+           'and\n'
+           'are required to exist.  If "__all__" is not defined, the set of '
+           'public\n'
+           "names includes all names found in the module's namespace which do "
+           'not\n'
+           'begin with an underscore character ("\'_\'"). "__all__" should '
+           'contain\n'
+           'the entire public API. It is intended to avoid accidentally '
+           'exporting\n'
+           'items that are not part of the API (such as library modules which '
+           'were\n'
+           'imported and used within the module).\n'
+           '\n'
+           'The "from" form with "*" may only occur in a module scope.  If '
+           'the\n'
+           'wild card form of import --- "import *" --- is used in a function '
+           'and\n'
+           'the function contains or is a nested block with free variables, '
+           'the\n'
+           'compiler will raise a "SyntaxError".\n'
+           '\n'
+           'When specifying what module to import you do not have to specify '
+           'the\n'
+           'absolute name of the module. When a module or package is '
+           'contained\n'
+           'within another package it is possible to make a relative import '
+           'within\n'
+           'the same top package without having to mention the package name. '
+           'By\n'
+           'using leading dots in the specified module or package after "from" '
+           'you\n'
+           'can specify how high to traverse up the current package hierarchy\n'
+           'without specifying exact names. One leading dot means the current\n'
+           'package where the module making the import exists. Two dots means '
+           'up\n'
+           'one package level. Three dots is up two levels, etc. So if you '
+           'execute\n'
+           '"from . import mod" from a module in the "pkg" package then you '
+           'will\n'
+           'end up importing "pkg.mod". If you execute "from ..subpkg2 import '
+           'mod"\n'
+           'from within "pkg.subpkg1" you will import "pkg.subpkg2.mod". The\n'
+           'specification for relative imports is contained within **PEP '
+           '328**.\n'
+           '\n'
+           '"importlib.import_module()" is provided to support applications '
+           'that\n'
+           'determine which modules need to be loaded dynamically.\n'
+           '\n'
+           '\n'
+           'Future statements\n'
+           '=================\n'
+           '\n'
+           'A *future statement* is a directive to the compiler that a '
+           'particular\n'
+           'module should be compiled using syntax or semantics that will be\n'
+           'available in a specified future release of Python.  The future\n'
+           'statement is intended to ease migration to future versions of '
+           'Python\n'
+           'that introduce incompatible changes to the language.  It allows '
+           'use of\n'
+           'the new features on a per-module basis before the release in which '
+           'the\n'
+           'feature becomes standard.\n'
+           '\n'
+           '   future_statement ::= "from" "__future__" "import" feature ["as" '
+           'name]\n'
+           '                        ("," feature ["as" name])*\n'
+           '                        | "from" "__future__" "import" "(" feature '
+           '["as" name]\n'
+           '                        ("," feature ["as" name])* [","] ")"\n'
+           '   feature          ::= identifier\n'
+           '   name             ::= identifier\n'
+           '\n'
+           'A future statement must appear near the top of the module.  The '
+           'only\n'
+           'lines that can appear before a future statement are:\n'
+           '\n'
+           '* the module docstring (if any),\n'
+           '\n'
+           '* comments,\n'
+           '\n'
+           '* blank lines, and\n'
+           '\n'
+           '* other future statements.\n'
+           '\n'
+           'The features recognized by Python 2.6 are "unicode_literals",\n'
+           '"print_function", "absolute_import", "division", "generators",\n'
+           '"nested_scopes" and "with_statement".  "generators", '
+           '"with_statement",\n'
+           '"nested_scopes" are redundant in Python version 2.6 and above '
+           'because\n'
+           'they are always enabled.\n'
+           '\n'
+           'A future statement is recognized and treated specially at compile\n'
+           'time: Changes to the semantics of core constructs are often\n'
+           'implemented by generating different code.  It may even be the '
+           'case\n'
+           'that a new feature introduces new incompatible syntax (such as a '
+           'new\n'
+           'reserved word), in which case the compiler may need to parse the\n'
+           'module differently.  Such decisions cannot be pushed off until\n'
+           'runtime.\n'
+           '\n'
+           'For any given release, the compiler knows which feature names '
+           'have\n'
+           'been defined, and raises a compile-time error if a future '
+           'statement\n'
+           'contains a feature not known to it.\n'
+           '\n'
+           'The direct runtime semantics are the same as for any import '
+           'statement:\n'
+           'there is a standard module "__future__", described later, and it '
+           'will\n'
+           'be imported in the usual way at the time the future statement is\n'
+           'executed.\n'
+           '\n'
+           'The interesting runtime semantics depend on the specific feature\n'
+           'enabled by the future statement.\n'
+           '\n'
+           'Note that there is nothing special about the statement:\n'
+           '\n'
+           '   import __future__ [as name]\n'
+           '\n'
+           "That is not a future statement; it's an ordinary import statement "
+           'with\n'
+           'no special semantics or syntax restrictions.\n'
+           '\n'
+           'Code compiled by an "exec" statement or calls to the built-in\n'
+           'functions "compile()" and "execfile()" that occur in a module "M"\n'
+           'containing a future statement will, by default, use the new  '
+           'syntax or\n'
+           'semantics associated with the future statement.  This can, '
+           'starting\n'
+           'with Python 2.2 be controlled by optional arguments to "compile()" '
+           '---\n'
+           'see the documentation of that function for details.\n'
+           '\n'
+           'A future statement typed at an interactive interpreter prompt '
+           'will\n'
+           'take effect for the rest of the interpreter session.  If an\n'
+           'interpreter is started with the "-i" option, is passed a script '
+           'name\n'
+           'to execute, and the script includes a future statement, it will be '
+           'in\n'
+           'effect in the interactive session started after the script is\n'
+           'executed.\n'
+           '\n'
+           'See also:\n'
+           '\n'
+           '  **PEP 236** - Back to the __future__\n'
+           '     The original proposal for the __future__ mechanism.\n',
+ 'in': '\n'
+       'Membership test operations\n'
+       '**************************\n'
+       '\n'
+       'The operators "in" and "not in" test for membership.  "x in s"\n'
+       'evaluates to "True" if *x* is a member of *s*, and "False" otherwise.\n'
+       '"x not in s" returns the negation of "x in s".  All built-in '
+       'sequences\n'
+       'and set types support this as well as dictionary, for which "in" '
+       'tests\n'
+       'whether the dictionary has a given key. For container types such as\n'
+       'list, tuple, set, frozenset, dict, or collections.deque, the\n'
+       'expression "x in y" is equivalent to "any(x is e or x == e for e in\n'
+       'y)".\n'
+       '\n'
+       'For the string and bytes types, "x in y" is "True" if and only if *x*\n'
+       'is a substring of *y*.  An equivalent test is "y.find(x) != -1".\n'
+       'Empty strings are always considered to be a substring of any other\n'
+       'string, so """ in "abc"" will return "True".\n'
+       '\n'
+       'For user-defined classes which define the "__contains__()" method, "x\n'
+       'in y" returns "True" if "y.__contains__(x)" returns a true value, and\n'
+       '"False" otherwise.\n'
+       '\n'
+       'For user-defined classes which do not define "__contains__()" but do\n'
+       'define "__iter__()", "x in y" is "True" if some value "z" with "x ==\n'
+       'z" is produced while iterating over "y".  If an exception is raised\n'
+       'during the iteration, it is as if "in" raised that exception.\n'
+       '\n'
+       'Lastly, the old-style iteration protocol is tried: if a class defines\n'
+       '"__getitem__()", "x in y" is "True" if and only if there is a non-\n'
+       'negative integer index *i* such that "x == y[i]", and all lower\n'
+       'integer indices do not raise "IndexError" exception. (If any other\n'
+       'exception is raised, it is as if "in" raised that exception).\n'
+       '\n'
+       'The operator "not in" is defined to have the inverse true value of\n'
+       '"in".\n',
+ 'integers': '\n'
+             'Integer and long integer literals\n'
+             '*********************************\n'
+             '\n'
+             'Integer and long integer literals are described by the '
+             'following\n'
+             'lexical definitions:\n'
+             '\n'
+             '   longinteger    ::= integer ("l" | "L")\n'
+             '   integer        ::= decimalinteger | octinteger | hexinteger | '
+             'bininteger\n'
+             '   decimalinteger ::= nonzerodigit digit* | "0"\n'
+             '   octinteger     ::= "0" ("o" | "O") octdigit+ | "0" octdigit+\n'
+             '   hexinteger     ::= "0" ("x" | "X") hexdigit+\n'
+             '   bininteger     ::= "0" ("b" | "B") bindigit+\n'
+             '   nonzerodigit   ::= "1"..."9"\n'
+             '   octdigit       ::= "0"..."7"\n'
+             '   bindigit       ::= "0" | "1"\n'
+             '   hexdigit       ::= digit | "a"..."f" | "A"..."F"\n'
+             '\n'
+             'Although both lower case "\'l\'" and upper case "\'L\'" are '
+             'allowed as\n'
+             'suffix for long integers, it is strongly recommended to always '
+             'use\n'
+             '"\'L\'", since the letter "\'l\'" looks too much like the digit '
+             '"\'1\'".\n'
+             '\n'
+             'Plain integer literals that are above the largest representable '
+             'plain\n'
+             'integer (e.g., 2147483647 when using 32-bit arithmetic) are '
+             'accepted\n'
+             'as if they were long integers instead. [1]  There is no limit '
+             'for long\n'
+             'integer literals apart from what can be stored in available '
+             'memory.\n'
+             '\n'
+             'Some examples of plain integer literals (first row) and long '
+             'integer\n'
+             'literals (second and third rows):\n'
+             '\n'
+             '   7     2147483647                        0177\n'
+             '   3L    79228162514264337593543950336L    0377L   0x100000000L\n'
+             '         79228162514264337593543950336             0xdeadbeef\n',
+ 'lambda': '\n'
+           'Lambdas\n'
+           '*******\n'
+           '\n'
+           '   lambda_expr     ::= "lambda" [parameter_list]: expression\n'
+           '   old_lambda_expr ::= "lambda" [parameter_list]: old_expression\n'
+           '\n'
+           'Lambda expressions (sometimes called lambda forms) have the same\n'
+           'syntactic position as expressions.  They are a shorthand to '
+           'create\n'
+           'anonymous functions; the expression "lambda arguments: '
+           'expression"\n'
+           'yields a function object.  The unnamed object behaves like a '
+           'function\n'
+           'object defined with\n'
+           '\n'
+           '   def name(arguments):\n'
+           '       return expression\n'
+           '\n'
+           'See section Function definitions for the syntax of parameter '
+           'lists.\n'
+           'Note that functions created with lambda expressions cannot '
+           'contain\n'
+           'statements.\n',
+ 'lists': '\n'
+          'List displays\n'
+          '*************\n'
+          '\n'
+          'A list display is a possibly empty series of expressions enclosed '
+          'in\n'
+          'square brackets:\n'
+          '\n'
+          '   list_display        ::= "[" [expression_list | '
+          'list_comprehension] "]"\n'
+          '   list_comprehension  ::= expression list_for\n'
+          '   list_for            ::= "for" target_list "in" '
+          'old_expression_list [list_iter]\n'
+          '   old_expression_list ::= old_expression [("," old_expression)+ '
+          '[","]]\n'
+          '   old_expression      ::= or_test | old_lambda_expr\n'
+          '   list_iter           ::= list_for | list_if\n'
+          '   list_if             ::= "if" old_expression [list_iter]\n'
+          '\n'
+          'A list display yields a new list object.  Its contents are '
+          'specified\n'
+          'by providing either a list of expressions or a list comprehension.\n'
+          'When a comma-separated list of expressions is supplied, its '
+          'elements\n'
+          'are evaluated from left to right and placed into the list object '
+          'in\n'
+          'that order.  When a list comprehension is supplied, it consists of '
+          'a\n'
+          'single expression followed by at least one "for" clause and zero '
+          'or\n'
+          'more "for" or "if" clauses.  In this case, the elements of the new\n'
+          'list are those that would be produced by considering each of the '
+          '"for"\n'
+          'or "if" clauses a block, nesting from left to right, and '
+          'evaluating\n'
+          'the expression to produce a list element each time the innermost '
+          'block\n'
+          'is reached [1].\n',
+ 'naming': '\n'
+           'Naming and binding\n'
+           '******************\n'
+           '\n'
+           '*Names* refer to objects.  Names are introduced by name binding\n'
+           'operations. Each occurrence of a name in the program text refers '
+           'to\n'
+           'the *binding* of that name established in the innermost function '
+           'block\n'
+           'containing the use.\n'
+           '\n'
+           'A *block* is a piece of Python program text that is executed as a\n'
+           'unit. The following are blocks: a module, a function body, and a '
+           'class\n'
+           'definition. Each command typed interactively is a block.  A '
+           'script\n'
+           'file (a file given as standard input to the interpreter or '
+           'specified\n'
+           'on the interpreter command line the first argument) is a code '
+           'block.\n'
+           'A script command (a command specified on the interpreter command '
+           'line\n'
+           "with the '**-c**' option) is a code block.  The file read by the\n"
+           'built-in function "execfile()" is a code block.  The string '
+           'argument\n'
+           'passed to the built-in function "eval()" and to the "exec" '
+           'statement\n'
+           'is a code block. The expression read and evaluated by the '
+           'built-in\n'
+           'function "input()" is a code block.\n'
+           '\n'
+           'A code block is executed in an *execution frame*.  A frame '
+           'contains\n'
+           'some administrative information (used for debugging) and '
+           'determines\n'
+           "where and how execution continues after the code block's execution "
+           'has\n'
+           'completed.\n'
+           '\n'
+           'A *scope* defines the visibility of a name within a block.  If a '
+           'local\n'
+           'variable is defined in a block, its scope includes that block.  If '
+           'the\n'
+           'definition occurs in a function block, the scope extends to any '
+           'blocks\n'
+           'contained within the defining one, unless a contained block '
+           'introduces\n'
+           'a different binding for the name.  The scope of names defined in '
+           'a\n'
+           'class block is limited to the class block; it does not extend to '
+           'the\n'
+           'code blocks of methods -- this includes generator expressions '
+           'since\n'
+           'they are implemented using a function scope.  This means that the\n'
+           'following will fail:\n'
+           '\n'
+           '   class A:\n'
+           '       a = 42\n'
+           '       b = list(a + i for i in range(10))\n'
+           '\n'
+           'When a name is used in a code block, it is resolved using the '
+           'nearest\n'
+           'enclosing scope.  The set of all such scopes visible to a code '
+           'block\n'
+           "is called the block's *environment*.\n"
+           '\n'
+           'If a name is bound in a block, it is a local variable of that '
+           'block.\n'
+           'If a name is bound at the module level, it is a global variable.  '
+           '(The\n'
+           'variables of the module code block are local and global.)  If a\n'
+           'variable is used in a code block but not defined there, it is a '
+           '*free\n'
+           'variable*.\n'
+           '\n'
+           'When a name is not found at all, a "NameError" exception is '
+           'raised.\n'
+           'If the name refers to a local variable that has not been bound, a\n'
+           '"UnboundLocalError" exception is raised.  "UnboundLocalError" is '
+           'a\n'
+           'subclass of "NameError".\n'
+           '\n'
+           'The following constructs bind names: formal parameters to '
+           'functions,\n'
+           '"import" statements, class and function definitions (these bind '
+           'the\n'
+           'class or function name in the defining block), and targets that '
+           'are\n'
+           'identifiers if occurring in an assignment, "for" loop header, in '
+           'the\n'
+           'second position of an "except" clause header or after "as" in a '
+           '"with"\n'
+           'statement.  The "import" statement of the form "from ... import '
+           '*"\n'
+           'binds all names defined in the imported module, except those '
+           'beginning\n'
+           'with an underscore.  This form may only be used at the module '
+           'level.\n'
+           '\n'
+           'A target occurring in a "del" statement is also considered bound '
+           'for\n'
+           'this purpose (though the actual semantics are to unbind the '
+           'name).  It\n'
+           'is illegal to unbind a name that is referenced by an enclosing '
+           'scope;\n'
+           'the compiler will report a "SyntaxError".\n'
+           '\n'
+           'Each assignment or import statement occurs within a block defined '
+           'by a\n'
+           'class or function definition or at the module level (the '
+           'top-level\n'
+           'code block).\n'
+           '\n'
+           'If a name binding operation occurs anywhere within a code block, '
+           'all\n'
+           'uses of the name within the block are treated as references to '
+           'the\n'
+           'current block.  This can lead to errors when a name is used within '
+           'a\n'
+           'block before it is bound. This rule is subtle.  Python lacks\n'
+           'declarations and allows name binding operations to occur anywhere\n'
+           'within a code block.  The local variables of a code block can be\n'
+           'determined by scanning the entire text of the block for name '
+           'binding\n'
+           'operations.\n'
+           '\n'
+           'If the global statement occurs within a block, all uses of the '
+           'name\n'
+           'specified in the statement refer to the binding of that name in '
+           'the\n'
+           'top-level namespace. Names are resolved in the top-level namespace '
+           'by\n'
+           'searching the global namespace, i.e. the namespace of the module\n'
+           'containing the code block, and the builtins namespace, the '
+           'namespace\n'
+           'of the module "__builtin__".  The global namespace is searched '
+           'first.\n'
+           'If the name is not found there, the builtins namespace is '
+           'searched.\n'
+           'The global statement must precede all uses of the name.\n'
+           '\n'
+           'The builtins namespace associated with the execution of a code '
+           'block\n'
+           'is actually found by looking up the name "__builtins__" in its '
+           'global\n'
+           'namespace; this should be a dictionary or a module (in the latter '
+           'case\n'
+           "the module's dictionary is used).  By default, when in the "
+           '"__main__"\n'
+           'module, "__builtins__" is the built-in module "__builtin__" (note: '
+           'no\n'
+           '\'s\'); when in any other module, "__builtins__" is an alias for '
+           'the\n'
+           'dictionary of the "__builtin__" module itself.  "__builtins__" can '
+           'be\n'
+           'set to a user-created dictionary to create a weak form of '
+           'restricted\n'
+           'execution.\n'
+           '\n'
+           '**CPython implementation detail:** Users should not touch\n'
+           '"__builtins__"; it is strictly an implementation detail.  Users\n'
+           'wanting to override values in the builtins namespace should '
+           '"import"\n'
+           'the "__builtin__" (no \'s\') module and modify its attributes\n'
+           'appropriately.\n'
+           '\n'
+           'The namespace for a module is automatically created the first time '
+           'a\n'
+           'module is imported.  The main module for a script is always '
+           'called\n'
+           '"__main__".\n'
+           '\n'
+           'The "global" statement has the same scope as a name binding '
+           'operation\n'
+           'in the same block.  If the nearest enclosing scope for a free '
+           'variable\n'
+           'contains a global statement, the free variable is treated as a '
+           'global.\n'
+           '\n'
+           'A class definition is an executable statement that may use and '
+           'define\n'
+           'names. These references follow the normal rules for name '
+           'resolution.\n'
+           'The namespace of the class definition becomes the attribute '
+           'dictionary\n'
+           'of the class.  Names defined at the class scope are not visible '
+           'in\n'
+           'methods.\n'
+           '\n'
+           '\n'
+           'Interaction with dynamic features\n'
+           '=================================\n'
+           '\n'
+           'There are several cases where Python statements are illegal when '
+           'used\n'
+           'in conjunction with nested scopes that contain free variables.\n'
+           '\n'
+           'If a variable is referenced in an enclosing scope, it is illegal '
+           'to\n'
+           'delete the name.  An error will be reported at compile time.\n'
+           '\n'
+           'If the wild card form of import --- "import *" --- is used in a\n'
+           'function and the function contains or is a nested block with free\n'
+           'variables, the compiler will raise a "SyntaxError".\n'
+           '\n'
+           'If "exec" is used in a function and the function contains or is a\n'
+           'nested block with free variables, the compiler will raise a\n'
+           '"SyntaxError" unless the exec explicitly specifies the local '
+           'namespace\n'
+           'for the "exec".  (In other words, "exec obj" would be illegal, '
+           'but\n'
+           '"exec obj in ns" would be legal.)\n'
+           '\n'
+           'The "eval()", "execfile()", and "input()" functions and the '
+           '"exec"\n'
+           'statement do not have access to the full environment for '
+           'resolving\n'
+           'names.  Names may be resolved in the local and global namespaces '
+           'of\n'
+           'the caller.  Free variables are not resolved in the nearest '
+           'enclosing\n'
+           'namespace, but in the global namespace. [1] The "exec" statement '
+           'and\n'
+           'the "eval()" and "execfile()" functions have optional arguments '
+           'to\n'
+           'override the global and local namespace.  If only one namespace '
+           'is\n'
+           'specified, it is used for both.\n',
+ 'numbers': '\n'
+            'Numeric literals\n'
+            '****************\n'
+            '\n'
+            'There are four types of numeric literals: plain integers, long\n'
+            'integers, floating point numbers, and imaginary numbers.  There '
+            'are no\n'
+            'complex literals (complex numbers can be formed by adding a real\n'
+            'number and an imaginary number).\n'
+            '\n'
+            'Note that numeric literals do not include a sign; a phrase like '
+            '"-1"\n'
+            'is actually an expression composed of the unary operator \'"-"\' '
+            'and the\n'
+            'literal "1".\n',
+ 'numeric-types': '\n'
+                  'Emulating numeric types\n'
+                  '***********************\n'
+                  '\n'
+                  'The following methods can be defined to emulate numeric '
+                  'objects.\n'
+                  'Methods corresponding to operations that are not supported '
+                  'by the\n'
+                  'particular kind of number implemented (e.g., bitwise '
+                  'operations for\n'
+                  'non-integral numbers) should be left undefined.\n'
+                  '\n'
+                  'object.__add__(self, other)\n'
+                  'object.__sub__(self, other)\n'
+                  'object.__mul__(self, other)\n'
+                  'object.__floordiv__(self, other)\n'
+                  'object.__mod__(self, other)\n'
+                  'object.__divmod__(self, other)\n'
+                  'object.__pow__(self, other[, modulo])\n'
+                  'object.__lshift__(self, other)\n'
+                  'object.__rshift__(self, other)\n'
+                  'object.__and__(self, other)\n'
+                  'object.__xor__(self, other)\n'
+                  'object.__or__(self, other)\n'
+                  '\n'
+                  '   These methods are called to implement the binary '
+                  'arithmetic\n'
+                  '   operations ("+", "-", "*", "//", "%", "divmod()", '
+                  '"pow()", "**",\n'
+                  '   "<<", ">>", "&", "^", "|").  For instance, to evaluate '
+                  'the\n'
+                  '   expression "x + y", where *x* is an instance of a class '
+                  'that has an\n'
+                  '   "__add__()" method, "x.__add__(y)" is called.  The '
+                  '"__divmod__()"\n'
+                  '   method should be the equivalent to using '
+                  '"__floordiv__()" and\n'
+                  '   "__mod__()"; it should not be related to "__truediv__()" '
+                  '(described\n'
+                  '   below).  Note that "__pow__()" should be defined to '
+                  'accept an\n'
+                  '   optional third argument if the ternary version of the '
+                  'built-in\n'
+                  '   "pow()" function is to be supported.\n'
+                  '\n'
+                  '   If one of those methods does not support the operation '
+                  'with the\n'
+                  '   supplied arguments, it should return "NotImplemented".\n'
+                  '\n'
+                  'object.__div__(self, other)\n'
+                  'object.__truediv__(self, other)\n'
+                  '\n'
+                  '   The division operator ("/") is implemented by these '
+                  'methods.  The\n'
+                  '   "__truediv__()" method is used when '
+                  '"__future__.division" is in\n'
+                  '   effect, otherwise "__div__()" is used.  If only one of '
+                  'these two\n'
+                  '   methods is defined, the object will not support division '
+                  'in the\n'
+                  '   alternate context; "TypeError" will be raised instead.\n'
+                  '\n'
+                  'object.__radd__(self, other)\n'
+                  'object.__rsub__(self, other)\n'
+                  'object.__rmul__(self, other)\n'
+                  'object.__rdiv__(self, other)\n'
+                  'object.__rtruediv__(self, other)\n'
+                  'object.__rfloordiv__(self, other)\n'
+                  'object.__rmod__(self, other)\n'
+                  'object.__rdivmod__(self, other)\n'
+                  'object.__rpow__(self, other)\n'
+                  'object.__rlshift__(self, other)\n'
+                  'object.__rrshift__(self, other)\n'
+                  'object.__rand__(self, other)\n'
+                  'object.__rxor__(self, other)\n'
+                  'object.__ror__(self, other)\n'
+                  '\n'
+                  '   These methods are called to implement the binary '
+                  'arithmetic\n'
+                  '   operations ("+", "-", "*", "/", "%", "divmod()", '
+                  '"pow()", "**",\n'
+                  '   "<<", ">>", "&", "^", "|") with reflected (swapped) '
+                  'operands.\n'
+                  '   These functions are only called if the left operand does '
+                  'not\n'
+                  '   support the corresponding operation and the operands are '
+                  'of\n'
+                  '   different types. [2] For instance, to evaluate the '
+                  'expression "x -\n'
+                  '   y", where *y* is an instance of a class that has an '
+                  '"__rsub__()"\n'
+                  '   method, "y.__rsub__(x)" is called if "x.__sub__(y)" '
+                  'returns\n'
+                  '   *NotImplemented*.\n'
+                  '\n'
+                  '   Note that ternary "pow()" will not try calling '
+                  '"__rpow__()" (the\n'
+                  '   coercion rules would become too complicated).\n'
+                  '\n'
+                  "   Note: If the right operand's type is a subclass of the "
+                  'left\n'
+                  "     operand's type and that subclass provides the "
+                  'reflected method\n'
+                  '     for the operation, this method will be called before '
+                  'the left\n'
+                  "     operand's non-reflected method.  This behavior allows "
+                  'subclasses\n'
+                  "     to override their ancestors' operations.\n"
+                  '\n'
+                  'object.__iadd__(self, other)\n'
+                  'object.__isub__(self, other)\n'
+                  'object.__imul__(self, other)\n'
+                  'object.__idiv__(self, other)\n'
+                  'object.__itruediv__(self, other)\n'
+                  'object.__ifloordiv__(self, other)\n'
+                  'object.__imod__(self, other)\n'
+                  'object.__ipow__(self, other[, modulo])\n'
+                  'object.__ilshift__(self, other)\n'
+                  'object.__irshift__(self, other)\n'
+                  'object.__iand__(self, other)\n'
+                  'object.__ixor__(self, other)\n'
+                  'object.__ior__(self, other)\n'
+                  '\n'
+                  '   These methods are called to implement the augmented '
+                  'arithmetic\n'
+                  '   assignments ("+=", "-=", "*=", "/=", "//=", "%=", "**=", '
+                  '"<<=",\n'
+                  '   ">>=", "&=", "^=", "|=").  These methods should attempt '
+                  'to do the\n'
+                  '   operation in-place (modifying *self*) and return the '
+                  'result (which\n'
+                  '   could be, but does not have to be, *self*).  If a '
+                  'specific method\n'
+                  '   is not defined, the augmented assignment falls back to '
+                  'the normal\n'
+                  '   methods.  For instance, to execute the statement "x += '
+                  'y", where\n'
+                  '   *x* is an instance of a class that has an "__iadd__()" '
+                  'method,\n'
+                  '   "x.__iadd__(y)" is called.  If *x* is an instance of a '
+                  'class that\n'
+                  '   does not define a "__iadd__()" method, "x.__add__(y)" '
+                  'and\n'
+                  '   "y.__radd__(x)" are considered, as with the evaluation '
+                  'of "x + y".\n'
+                  '\n'
+                  'object.__neg__(self)\n'
+                  'object.__pos__(self)\n'
+                  'object.__abs__(self)\n'
+                  'object.__invert__(self)\n'
+                  '\n'
+                  '   Called to implement the unary arithmetic operations '
+                  '("-", "+",\n'
+                  '   "abs()" and "~").\n'
+                  '\n'
+                  'object.__complex__(self)\n'
+                  'object.__int__(self)\n'
+                  'object.__long__(self)\n'
+                  'object.__float__(self)\n'
+                  '\n'
+                  '   Called to implement the built-in functions "complex()", '
+                  '"int()",\n'
+                  '   "long()", and "float()".  Should return a value of the '
+                  'appropriate\n'
+                  '   type.\n'
+                  '\n'
+                  'object.__oct__(self)\n'
+                  'object.__hex__(self)\n'
+                  '\n'
+                  '   Called to implement the built-in functions "oct()" and '
+                  '"hex()".\n'
+                  '   Should return a string value.\n'
+                  '\n'
+                  'object.__index__(self)\n'
+                  '\n'
+                  '   Called to implement "operator.index()".  Also called '
+                  'whenever\n'
+                  '   Python needs an integer object (such as in slicing).  '
+                  'Must return\n'
+                  '   an integer (int or long).\n'
+                  '\n'
+                  '   New in version 2.5.\n'
+                  '\n'
+                  'object.__coerce__(self, other)\n'
+                  '\n'
+                  '   Called to implement "mixed-mode" numeric arithmetic.  '
+                  'Should either\n'
+                  '   return a 2-tuple containing *self* and *other* converted '
+                  'to a\n'
+                  '   common numeric type, or "None" if conversion is '
+                  'impossible.  When\n'
+                  '   the common type would be the type of "other", it is '
+                  'sufficient to\n'
+                  '   return "None", since the interpreter will also ask the '
+                  'other object\n'
+                  '   to attempt a coercion (but sometimes, if the '
+                  'implementation of the\n'
+                  '   other type cannot be changed, it is useful to do the '
+                  'conversion to\n'
+                  '   the other type here).  A return value of '
+                  '"NotImplemented" is\n'
+                  '   equivalent to returning "None".\n',
+ 'objects': '\n'
+            'Objects, values and types\n'
+            '*************************\n'
+            '\n'
+            "*Objects* are Python's abstraction for data.  All data in a "
+            'Python\n'
+            'program is represented by objects or by relations between '
+            'objects. (In\n'
+            'a sense, and in conformance to Von Neumann\'s model of a "stored\n'
+            'program computer," code is also represented by objects.)\n'
+            '\n'
+            "Every object has an identity, a type and a value.  An object's\n"
+            '*identity* never changes once it has been created; you may think '
+            'of it\n'
+            'as the object\'s address in memory.  The \'"is"\' operator '
+            'compares the\n'
+            'identity of two objects; the "id()" function returns an integer\n'
+            'representing its identity (currently implemented as its address). '
+            'An\n'
+            "object's *type* is also unchangeable. [1] An object's type "
+            'determines\n'
+            'the operations that the object supports (e.g., "does it have a\n'
+            'length?") and also defines the possible values for objects of '
+            'that\n'
+            'type.  The "type()" function returns an object\'s type (which is '
+            'an\n'
+            'object itself).  The *value* of some objects can change.  '
+            'Objects\n'
+            'whose value can change are said to be *mutable*; objects whose '
+            'value\n'
+            'is unchangeable once they are created are called *immutable*. '
+            '(The\n'
+            'value of an immutable container object that contains a reference '
+            'to a\n'
+            "mutable object can change when the latter's value is changed; "
+            'however\n'
+            'the container is still considered immutable, because the '
+            'collection of\n'
+            'objects it contains cannot be changed.  So, immutability is not\n'
+            'strictly the same as having an unchangeable value, it is more '
+            'subtle.)\n'
+            "An object's mutability is determined by its type; for instance,\n"
+            'numbers, strings and tuples are immutable, while dictionaries '
+            'and\n'
+            'lists are mutable.\n'
+            '\n'
+            'Objects are never explicitly destroyed; however, when they '
+            'become\n'
+            'unreachable they may be garbage-collected.  An implementation is\n'
+            'allowed to postpone garbage collection or omit it altogether --- '
+            'it is\n'
+            'a matter of implementation quality how garbage collection is\n'
+            'implemented, as long as no objects are collected that are still\n'
+            'reachable.\n'
+            '\n'
+            '**CPython implementation detail:** CPython currently uses a '
+            'reference-\n'
+            'counting scheme with (optional) delayed detection of cyclically '
+            'linked\n'
+            'garbage, which collects most objects as soon as they become\n'
+            'unreachable, but is not guaranteed to collect garbage containing\n'
+            'circular references.  See the documentation of the "gc" module '
+            'for\n'
+            'information on controlling the collection of cyclic garbage. '
+            'Other\n'
+            'implementations act differently and CPython may change. Do not '
+            'depend\n'
+            'on immediate finalization of objects when they become unreachable '
+            '(ex:\n'
+            'always close files).\n'
+            '\n'
+            "Note that the use of the implementation's tracing or debugging\n"
+            'facilities may keep objects alive that would normally be '
+            'collectable.\n'
+            'Also note that catching an exception with a \'"try"..."except"\'\n'
+            'statement may keep objects alive.\n'
+            '\n'
+            'Some objects contain references to "external" resources such as '
+            'open\n'
+            'files or windows.  It is understood that these resources are '
+            'freed\n'
+            'when the object is garbage-collected, but since garbage '
+            'collection is\n'
+            'not guaranteed to happen, such objects also provide an explicit '
+            'way to\n'
+            'release the external resource, usually a "close()" method. '
+            'Programs\n'
+            'are strongly recommended to explicitly close such objects.  The\n'
+            '\'"try"..."finally"\' statement provides a convenient way to do '
+            'this.\n'
+            '\n'
+            'Some objects contain references to other objects; these are '
+            'called\n'
+            '*containers*. Examples of containers are tuples, lists and\n'
+            "dictionaries.  The references are part of a container's value.  "
+            'In\n'
+            'most cases, when we talk about the value of a container, we imply '
+            'the\n'
+            'values, not the identities of the contained objects; however, '
+            'when we\n'
+            'talk about the mutability of a container, only the identities of '
+            'the\n'
+            'immediately contained objects are implied.  So, if an immutable\n'
+            'container (like a tuple) contains a reference to a mutable '
+            'object, its\n'
+            'value changes if that mutable object is changed.\n'
+            '\n'
+            'Types affect almost all aspects of object behavior.  Even the\n'
+            'importance of object identity is affected in some sense: for '
+            'immutable\n'
+            'types, operations that compute new values may actually return a\n'
+            'reference to any existing object with the same type and value, '
+            'while\n'
+            'for mutable objects this is not allowed.  E.g., after "a = 1; b = '
+            '1",\n'
+            '"a" and "b" may or may not refer to the same object with the '
+            'value\n'
+            'one, depending on the implementation, but after "c = []; d = []", '
+            '"c"\n'
+            'and "d" are guaranteed to refer to two different, unique, newly\n'
+            'created empty lists. (Note that "c = d = []" assigns the same '
+            'object\n'
+            'to both "c" and "d".)\n',
+ 'operator-summary': '\n'
+                     'Operator precedence\n'
+                     '*******************\n'
+                     '\n'
+                     'The following table summarizes the operator precedences '
+                     'in Python,\n'
+                     'from lowest precedence (least binding) to highest '
+                     'precedence (most\n'
+                     'binding). Operators in the same box have the same '
+                     'precedence.  Unless\n'
+                     'the syntax is explicitly given, operators are binary.  '
+                     'Operators in\n'
+                     'the same box group left to right (except for '
+                     'comparisons, including\n'
+                     'tests, which all have the same precedence and chain from '
+                     'left to right\n'
+                     '--- see section Comparisons --- and exponentiation, '
+                     'which groups from\n'
+                     'right to left).\n'
+                     '\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| Operator                                        | '
+                     'Description                           |\n'
+                     '+=================================================+=======================================+\n'
+                     '| "lambda"                                        | '
+                     'Lambda expression                     |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| "if" -- "else"                                  | '
+                     'Conditional expression                |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| "or"                                            | '
+                     'Boolean OR                            |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| "and"                                           | '
+                     'Boolean AND                           |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| "not" "x"                                       | '
+                     'Boolean NOT                           |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| "in", "not in", "is", "is not", "<", "<=", ">", | '
+                     'Comparisons, including membership     |\n'
+                     '| ">=", "<>", "!=", "=="                          | '
+                     'tests and identity tests              |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| "|"                                             | '
+                     'Bitwise OR                            |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| "^"                                             | '
+                     'Bitwise XOR                           |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| "&"                                             | '
+                     'Bitwise AND                           |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| "<<", ">>"                                      | '
+                     'Shifts                                |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| "+", "-"                                        | '
+                     'Addition and subtraction              |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| "*", "/", "//", "%"                             | '
+                     'Multiplication, division, remainder   |\n'
+                     '|                                                 | '
+                     '[7]                                   |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| "+x", "-x", "~x"                                | '
+                     'Positive, negative, bitwise NOT       |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| "**"                                            | '
+                     'Exponentiation [8]                    |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| "x[index]", "x[index:index]",                   | '
+                     'Subscription, slicing, call,          |\n'
+                     '| "x(arguments...)", "x.attribute"                | '
+                     'attribute reference                   |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '| "(expressions...)", "[expressions...]", "{key:  | '
+                     'Binding or tuple display, list        |\n'
+                     '| value...}", "`expressions...`"                  | '
+                     'display, dictionary display, string   |\n'
+                     '|                                                 | '
+                     'conversion                            |\n'
+                     '+-------------------------------------------------+---------------------------------------+\n'
+                     '\n'
+                     '-[ Footnotes ]-\n'
+                     '\n'
+                     '[1] In Python 2.3 and later releases, a list '
+                     'comprehension "leaks"\n'
+                     '    the control variables of each "for" it contains into '
+                     'the\n'
+                     '    containing scope.  However, this behavior is '
+                     'deprecated, and\n'
+                     '    relying on it will not work in Python 3.\n'
+                     '\n'
+                     '[2] While "abs(x%y) < abs(y)" is true mathematically, '
+                     'for floats\n'
+                     '    it may not be true numerically due to roundoff.  For '
+                     'example, and\n'
+                     '    assuming a platform on which a Python float is an '
+                     'IEEE 754 double-\n'
+                     '    precision number, in order that "-1e-100 % 1e100" '
+                     'have the same\n'
+                     '    sign as "1e100", the computed result is "-1e-100 + '
+                     '1e100", which\n'
+                     '    is numerically exactly equal to "1e100".  The '
+                     'function\n'
+                     '    "math.fmod()" returns a result whose sign matches '
+                     'the sign of the\n'
+                     '    first argument instead, and so returns "-1e-100" in '
+                     'this case.\n'
+                     '    Which approach is more appropriate depends on the '
+                     'application.\n'
+                     '\n'
+                     '[3] If x is very close to an exact integer multiple of '
+                     "y, it's\n"
+                     '    possible for "floor(x/y)" to be one larger than '
+                     '"(x-x%y)/y" due to\n'
+                     '    rounding.  In such cases, Python returns the latter '
+                     'result, in\n'
+                     '    order to preserve that "divmod(x,y)[0] * y + x % y" '
+                     'be very close\n'
+                     '    to "x".\n'
+                     '\n'
+                     '[4] The Unicode standard distinguishes between *code '
+                     'points* (e.g.\n'
+                     '    U+0041) and *abstract characters* (e.g. "LATIN '
+                     'CAPITAL LETTER A").\n'
+                     '    While most abstract characters in Unicode are only '
+                     'represented\n'
+                     '    using one code point, there is a number of abstract '
+                     'characters\n'
+                     '    that can in addition be represented using a sequence '
+                     'of more than\n'
+                     '    one code point.  For example, the abstract character '
+                     '"LATIN\n'
+                     '    CAPITAL LETTER C WITH CEDILLA" can be represented as '
+                     'a single\n'
+                     '    *precomposed character* at code position U+00C7, or '
+                     'as a sequence\n'
+                     '    of a *base character* at code position U+0043 (LATIN '
+                     'CAPITAL\n'
+                     '    LETTER C), followed by a *combining character* at '
+                     'code position\n'
+                     '    U+0327 (COMBINING CEDILLA).\n'
+                     '\n'
+                     '    The comparison operators on unicode strings compare '
+                     'at the level\n'
+                     '    of Unicode code points. This may be '
+                     'counter-intuitive to humans.\n'
+                     '    For example, "u"\\u00C7" == u"\\u0043\\u0327"" is '
+                     '"False", even\n'
+                     '    though both strings represent the same abstract '
+                     'character "LATIN\n'
+                     '    CAPITAL LETTER C WITH CEDILLA".\n'
+                     '\n'
+                     '    To compare strings at the level of abstract '
+                     'characters (that is,\n'
+                     '    in a way intuitive to humans), use '
+                     '"unicodedata.normalize()".\n'
+                     '\n'
+                     '[5] Earlier versions of Python used lexicographic '
+                     'comparison of\n'
+                     '    the sorted (key, value) lists, but this was very '
+                     'expensive for the\n'
+                     '    common case of comparing for equality.  An even '
+                     'earlier version of\n'
+                     '    Python compared dictionaries by identity only, but '
+                     'this caused\n'
+                     '    surprises because people expected to be able to test '
+                     'a dictionary\n'
+                     '    for emptiness by comparing it to "{}".\n'
+                     '\n'
+                     '[6] Due to automatic garbage-collection, free lists, and '
+                     'the\n'
+                     '    dynamic nature of descriptors, you may notice '
+                     'seemingly unusual\n'
+                     '    behaviour in certain uses of the "is" operator, like '
+                     'those\n'
+                     '    involving comparisons between instance methods, or '
+                     'constants.\n'
+                     '    Check their documentation for more info.\n'
+                     '\n'
+                     '[7] The "%" operator is also used for string formatting; '
+                     'the same\n'
+                     '    precedence applies.\n'
+                     '\n'
+                     '[8] The power operator "**" binds less tightly than an '
+                     'arithmetic\n'
+                     '    or bitwise unary operator on its right, that is, '
+                     '"2**-1" is "0.5".\n',
+ 'pass': '\n'
+         'The "pass" statement\n'
+         '********************\n'
+         '\n'
+         '   pass_stmt ::= "pass"\n'
+         '\n'
+         '"pass" is a null operation --- when it is executed, nothing '
+         'happens.\n'
+         'It is useful as a placeholder when a statement is required\n'
+         'syntactically, but no code needs to be executed, for example:\n'
+         '\n'
+         '   def f(arg): pass    # a function that does nothing (yet)\n'
+         '\n'
+         '   class C: pass       # a class with no methods (yet)\n',
+ 'power': '\n'
+          'The power operator\n'
+          '******************\n'
+          '\n'
+          'The power operator binds more tightly than unary operators on its\n'
+          'left; it binds less tightly than unary operators on its right.  '
+          'The\n'
+          'syntax is:\n'
+          '\n'
+          '   power ::= primary ["**" u_expr]\n'
+          '\n'
+          'Thus, in an unparenthesized sequence of power and unary operators, '
+          'the\n'
+          'operators are evaluated from right to left (this does not '
+          'constrain\n'
+          'the evaluation order for the operands): "-1**2" results in "-1".\n'
+          '\n'
+          'The power operator has the same semantics as the built-in "pow()"\n'
+          'function, when called with two arguments: it yields its left '
+          'argument\n'
+          'raised to the power of its right argument.  The numeric arguments '
+          'are\n'
+          'first converted to a common type.  The result type is that of the\n'
+          'arguments after coercion.\n'
+          '\n'
+          'With mixed operand types, the coercion rules for binary arithmetic\n'
+          'operators apply. For int and long int operands, the result has the\n'
+          'same type as the operands (after coercion) unless the second '
+          'argument\n'
+          'is negative; in that case, all arguments are converted to float and '
+          'a\n'
+          'float result is delivered. For example, "10**2" returns "100", but\n'
+          '"10**-2" returns "0.01". (This last feature was added in Python '
+          '2.2.\n'
+          'In Python 2.1 and before, if both arguments were of integer types '
+          'and\n'
+          'the second argument was negative, an exception was raised).\n'
+          '\n'
+          'Raising "0.0" to a negative power results in a '
+          '"ZeroDivisionError".\n'
+          'Raising a negative number to a fractional power results in a\n'
+          '"ValueError".\n',
+ 'print': '\n'
+          'The "print" statement\n'
+          '*********************\n'
+          '\n'
+          '   print_stmt ::= "print" ([expression ("," expression)* [","]]\n'
+          '                  | ">>" expression [("," expression)+ [","]])\n'
+          '\n'
+          '"print" evaluates each expression in turn and writes the resulting\n'
+          'object to standard output (see below).  If an object is not a '
+          'string,\n'
+          'it is first converted to a string using the rules for string\n'
+          'conversions.  The (resulting or original) string is then written.  '
+          'A\n'
+          'space is written before each object is (converted and) written, '
+          'unless\n'
+          'the output system believes it is positioned at the beginning of a\n'
+          'line.  This is the case (1) when no characters have yet been '
+          'written\n'
+          'to standard output, (2) when the last character written to '
+          'standard\n'
+          'output is a whitespace character except "\' \'", or (3) when the '
+          'last\n'
+          'write operation on standard output was not a "print" statement. '
+          '(In\n'
+          'some cases it may be functional to write an empty string to '
+          'standard\n'
+          'output for this reason.)\n'
+          '\n'
+          'Note: Objects which act like file objects but which are not the\n'
+          '  built-in file objects often do not properly emulate this aspect '
+          'of\n'
+          "  the file object's behavior, so it is best not to rely on this.\n"
+          '\n'
+          'A "\'\\n\'" character is written at the end, unless the "print" '
+          'statement\n'
+          'ends with a comma.  This is the only action if the statement '
+          'contains\n'
+          'just the keyword "print".\n'
+          '\n'
+          'Standard output is defined as the file object named "stdout" in '
+          'the\n'
+          'built-in module "sys".  If no such object exists, or if it does '
+          'not\n'
+          'have a "write()" method, a "RuntimeError" exception is raised.\n'
+          '\n'
+          '"print" also has an extended form, defined by the second portion '
+          'of\n'
+          'the syntax described above. This form is sometimes referred to as\n'
+          '""print" chevron." In this form, the first expression after the '
+          '">>"\n'
+          'must evaluate to a "file-like" object, specifically an object that '
+          'has\n'
+          'a "write()" method as described above.  With this extended form, '
+          'the\n'
+          'subsequent expressions are printed to this file object.  If the '
+          'first\n'
+          'expression evaluates to "None", then "sys.stdout" is used as the '
+          'file\n'
+          'for output.\n',
+ 'raise': '\n'
+          'The "raise" statement\n'
+          '*********************\n'
+          '\n'
+          '   raise_stmt ::= "raise" [expression ["," expression ["," '
+          'expression]]]\n'
+          '\n'
+          'If no expressions are present, "raise" re-raises the last '
+          'exception\n'
+          'that was active in the current scope.  If no exception is active '
+          'in\n'
+          'the current scope, a "TypeError" exception is raised indicating '
+          'that\n'
+          'this is an error (if running under IDLE, a "Queue.Empty" exception '
+          'is\n'
+          'raised instead).\n'
+          '\n'
+          'Otherwise, "raise" evaluates the expressions to get three objects,\n'
+          'using "None" as the value of omitted expressions.  The first two\n'
+          'objects are used to determine the *type* and *value* of the '
+          'exception.\n'
+          '\n'
+          'If the first object is an instance, the type of the exception is '
+          'the\n'
+          'class of the instance, the instance itself is the value, and the\n'
+          'second object must be "None".\n'
+          '\n'
+          'If the first object is a class, it becomes the type of the '
+          'exception.\n'
+          'The second object is used to determine the exception value: If it '
+          'is\n'
+          'an instance of the class, the instance becomes the exception value. '
+          'If\n'
+          'the second object is a tuple, it is used as the argument list for '
+          'the\n'
+          'class constructor; if it is "None", an empty argument list is '
+          'used,\n'
+          'and any other object is treated as a single argument to the\n'
+          'constructor.  The instance so created by calling the constructor '
+          'is\n'
+          'used as the exception value.\n'
+          '\n'
+          'If a third object is present and not "None", it must be a '
+          'traceback\n'
+          'object (see section The standard type hierarchy), and it is\n'
+          'substituted instead of the current location as the place where the\n'
+          'exception occurred.  If the third object is present and not a\n'
+          'traceback object or "None", a "TypeError" exception is raised.  '
+          'The\n'
+          'three-expression form of "raise" is useful to re-raise an '
+          'exception\n'
+          'transparently in an except clause, but "raise" with no expressions\n'
+          'should be preferred if the exception to be re-raised was the most\n'
+          'recently active exception in the current scope.\n'
+          '\n'
+          'Additional information on exceptions can be found in section\n'
+          'Exceptions, and information about handling exceptions is in '
+          'section\n'
+          'The try statement.\n',
+ 'return': '\n'
+           'The "return" statement\n'
+           '**********************\n'
+           '\n'
+           '   return_stmt ::= "return" [expression_list]\n'
+           '\n'
+           '"return" may only occur syntactically nested in a function '
+           'definition,\n'
+           'not within a nested class definition.\n'
+           '\n'
+           'If an expression list is present, it is evaluated, else "None" is\n'
+           'substituted.\n'
+           '\n'
+           '"return" leaves the current function call with the expression list '
+           '(or\n'
+           '"None") as return value.\n'
+           '\n'
+           'When "return" passes control out of a "try" statement with a '
+           '"finally"\n'
+           'clause, that "finally" clause is executed before really leaving '
+           'the\n'
+           'function.\n'
+           '\n'
+           'In a generator function, the "return" statement is not allowed to\n'
+           'include an "expression_list".  In that context, a bare "return"\n'
+           'indicates that the generator is done and will cause '
+           '"StopIteration" to\n'
+           'be raised.\n',
+ 'sequence-types': '\n'
+                   'Emulating container types\n'
+                   '*************************\n'
+                   '\n'
+                   'The following methods can be defined to implement '
+                   'container objects.\n'
+                   'Containers usually are sequences (such as lists or tuples) '
+                   'or mappings\n'
+                   '(like dictionaries), but can represent other containers as '
+                   'well.  The\n'
+                   'first set of methods is used either to emulate a sequence '
+                   'or to\n'
+                   'emulate a mapping; the difference is that for a sequence, '
+                   'the\n'
+                   'allowable keys should be the integers *k* for which "0 <= '
+                   'k < N" where\n'
+                   '*N* is the length of the sequence, or slice objects, which '
+                   'define a\n'
+                   'range of items. (For backwards compatibility, the method\n'
+                   '"__getslice__()" (see below) can also be defined to handle '
+                   'simple, but\n'
+                   'not extended slices.) It is also recommended that mappings '
+                   'provide the\n'
+                   'methods "keys()", "values()", "items()", "has_key()", '
+                   '"get()",\n'
+                   '"clear()", "setdefault()", "iterkeys()", "itervalues()",\n'
+                   '"iteritems()", "pop()", "popitem()", "copy()", and '
+                   '"update()" behaving\n'
+                   "similar to those for Python's standard dictionary "
+                   'objects.  The\n'
+                   '"UserDict" module provides a "DictMixin" class to help '
+                   'create those\n'
+                   'methods from a base set of "__getitem__()", '
+                   '"__setitem__()",\n'
+                   '"__delitem__()", and "keys()". Mutable sequences should '
+                   'provide\n'
+                   'methods "append()", "count()", "index()", "extend()", '
+                   '"insert()",\n'
+                   '"pop()", "remove()", "reverse()" and "sort()", like Python '
+                   'standard\n'
+                   'list objects.  Finally, sequence types should implement '
+                   'addition\n'
+                   '(meaning concatenation) and multiplication (meaning '
+                   'repetition) by\n'
+                   'defining the methods "__add__()", "__radd__()", '
+                   '"__iadd__()",\n'
+                   '"__mul__()", "__rmul__()" and "__imul__()" described '
+                   'below; they\n'
+                   'should not define "__coerce__()" or other numerical '
+                   'operators.  It is\n'
+                   'recommended that both mappings and sequences implement '
+                   'the\n'
+                   '"__contains__()" method to allow efficient use of the "in" '
+                   'operator;\n'
+                   'for mappings, "in" should be equivalent of "has_key()"; '
+                   'for sequences,\n'
+                   'it should search through the values.  It is further '
+                   'recommended that\n'
+                   'both mappings and sequences implement the "__iter__()" '
+                   'method to allow\n'
+                   'efficient iteration through the container; for mappings, '
+                   '"__iter__()"\n'
+                   'should be the same as "iterkeys()"; for sequences, it '
+                   'should iterate\n'
+                   'through the values.\n'
+                   '\n'
+                   'object.__len__(self)\n'
+                   '\n'
+                   '   Called to implement the built-in function "len()".  '
+                   'Should return\n'
+                   '   the length of the object, an integer ">=" 0.  Also, an '
+                   'object that\n'
+                   '   doesn\'t define a "__nonzero__()" method and whose '
+                   '"__len__()"\n'
+                   '   method returns zero is considered to be false in a '
+                   'Boolean context.\n'
+                   '\n'
+                   '   **CPython implementation detail:** In CPython, the '
+                   'length is\n'
+                   '   required to be at most "sys.maxsize". If the length is '
+                   'larger than\n'
+                   '   "sys.maxsize" some features (such as "len()") may '
+                   'raise\n'
+                   '   "OverflowError".  To prevent raising "OverflowError" by '
+                   'truth value\n'
+                   '   testing, an object must define a "__nonzero__()" '
+                   'method.\n'
+                   '\n'
+                   'object.__getitem__(self, key)\n'
+                   '\n'
+                   '   Called to implement evaluation of "self[key]". For '
+                   'sequence types,\n'
+                   '   the accepted keys should be integers and slice '
+                   'objects.  Note that\n'
+                   '   the special interpretation of negative indexes (if the '
+                   'class wishes\n'
+                   '   to emulate a sequence type) is up to the '
+                   '"__getitem__()" method. If\n'
+                   '   *key* is of an inappropriate type, "TypeError" may be '
+                   'raised; if of\n'
+                   '   a value outside the set of indexes for the sequence '
+                   '(after any\n'
+                   '   special interpretation of negative values), '
+                   '"IndexError" should be\n'
+                   '   raised. For mapping types, if *key* is missing (not in '
+                   'the\n'
+                   '   container), "KeyError" should be raised.\n'
+                   '\n'
+                   '   Note: "for" loops expect that an "IndexError" will be '
+                   'raised for\n'
+                   '     illegal indexes to allow proper detection of the end '
+                   'of the\n'
+                   '     sequence.\n'
+                   '\n'
+                   'object.__missing__(self, key)\n'
+                   '\n'
+                   '   Called by "dict"."__getitem__()" to implement '
+                   '"self[key]" for dict\n'
+                   '   subclasses when key is not in the dictionary.\n'
+                   '\n'
+                   'object.__setitem__(self, key, value)\n'
+                   '\n'
+                   '   Called to implement assignment to "self[key]".  Same '
+                   'note as for\n'
+                   '   "__getitem__()".  This should only be implemented for '
+                   'mappings if\n'
+                   '   the objects support changes to the values for keys, or '
+                   'if new keys\n'
+                   '   can be added, or for sequences if elements can be '
+                   'replaced.  The\n'
+                   '   same exceptions should be raised for improper *key* '
+                   'values as for\n'
+                   '   the "__getitem__()" method.\n'
+                   '\n'
+                   'object.__delitem__(self, key)\n'
+                   '\n'
+                   '   Called to implement deletion of "self[key]".  Same note '
+                   'as for\n'
+                   '   "__getitem__()".  This should only be implemented for '
+                   'mappings if\n'
+                   '   the objects support removal of keys, or for sequences '
+                   'if elements\n'
+                   '   can be removed from the sequence.  The same exceptions '
+                   'should be\n'
+                   '   raised for improper *key* values as for the '
+                   '"__getitem__()" method.\n'
+                   '\n'
+                   'object.__iter__(self)\n'
+                   '\n'
+                   '   This method is called when an iterator is required for '
+                   'a container.\n'
+                   '   This method should return a new iterator object that '
+                   'can iterate\n'
+                   '   over all the objects in the container.  For mappings, '
+                   'it should\n'
+                   '   iterate over the keys of the container, and should also '
+                   'be made\n'
+                   '   available as the method "iterkeys()".\n'
+                   '\n'
+                   '   Iterator objects also need to implement this method; '
+                   'they are\n'
+                   '   required to return themselves.  For more information on '
+                   'iterator\n'
+                   '   objects, see Iterator Types.\n'
+                   '\n'
+                   'object.__reversed__(self)\n'
+                   '\n'
+                   '   Called (if present) by the "reversed()" built-in to '
+                   'implement\n'
+                   '   reverse iteration.  It should return a new iterator '
+                   'object that\n'
+                   '   iterates over all the objects in the container in '
+                   'reverse order.\n'
+                   '\n'
+                   '   If the "__reversed__()" method is not provided, the '
+                   '"reversed()"\n'
+                   '   built-in will fall back to using the sequence protocol '
+                   '("__len__()"\n'
+                   '   and "__getitem__()").  Objects that support the '
+                   'sequence protocol\n'
+                   '   should only provide "__reversed__()" if they can '
+                   'provide an\n'
+                   '   implementation that is more efficient than the one '
+                   'provided by\n'
+                   '   "reversed()".\n'
+                   '\n'
+                   '   New in version 2.6.\n'
+                   '\n'
+                   'The membership test operators ("in" and "not in") are '
+                   'normally\n'
+                   'implemented as an iteration through a sequence.  However, '
+                   'container\n'
+                   'objects can supply the following special method with a '
+                   'more efficient\n'
+                   'implementation, which also does not require the object be '
+                   'a sequence.\n'
+                   '\n'
+                   'object.__contains__(self, item)\n'
+                   '\n'
+                   '   Called to implement membership test operators.  Should '
+                   'return true\n'
+                   '   if *item* is in *self*, false otherwise.  For mapping '
+                   'objects, this\n'
+                   '   should consider the keys of the mapping rather than the '
+                   'values or\n'
+                   '   the key-item pairs.\n'
+                   '\n'
+                   '   For objects that don\'t define "__contains__()", the '
+                   'membership test\n'
+                   '   first tries iteration via "__iter__()", then the old '
+                   'sequence\n'
+                   '   iteration protocol via "__getitem__()", see this '
+                   'section in the\n'
+                   '   language reference.\n',
+ 'shifting': '\n'
+             'Shifting operations\n'
+             '*******************\n'
+             '\n'
+             'The shifting operations have lower priority than the arithmetic\n'
+             'operations:\n'
+             '\n'
+             '   shift_expr ::= a_expr | shift_expr ( "<<" | ">>" ) a_expr\n'
+             '\n'
+             'These operators accept plain or long integers as arguments.  '
+             'The\n'
+             'arguments are converted to a common type.  They shift the first\n'
+             'argument to the left or right by the number of bits given by '
+             'the\n'
+             'second argument.\n'
+             '\n'
+             'A right shift by *n* bits is defined as division by "pow(2, '
+             'n)".  A\n'
+             'left shift by *n* bits is defined as multiplication with "pow(2, '
+             'n)".\n'
+             'Negative shift counts raise a "ValueError" exception.\n'
+             '\n'
+             'Note: In the current implementation, the right-hand operand is\n'
+             '  required to be at most "sys.maxsize".  If the right-hand '
+             'operand is\n'
+             '  larger than "sys.maxsize" an "OverflowError" exception is '
+             'raised.\n',
+ 'slicings': '\n'
+             'Slicings\n'
+             '********\n'
+             '\n'
+             'A slicing selects a range of items in a sequence object (e.g., '
+             'a\n'
+             'string, tuple or list).  Slicings may be used as expressions or '
+             'as\n'
+             'targets in assignment or "del" statements.  The syntax for a '
+             'slicing:\n'
+             '\n'
+             '   slicing          ::= simple_slicing | extended_slicing\n'
+             '   simple_slicing   ::= primary "[" short_slice "]"\n'
+             '   extended_slicing ::= primary "[" slice_list "]"\n'
+             '   slice_list       ::= slice_item ("," slice_item)* [","]\n'
+             '   slice_item       ::= expression | proper_slice | ellipsis\n'
+             '   proper_slice     ::= short_slice | long_slice\n'
+             '   short_slice      ::= [lower_bound] ":" [upper_bound]\n'
+             '   long_slice       ::= short_slice ":" [stride]\n'
+             '   lower_bound      ::= expression\n'
+             '   upper_bound      ::= expression\n'
+             '   stride           ::= expression\n'
+             '   ellipsis         ::= "..."\n'
+             '\n'
+             'There is ambiguity in the formal syntax here: anything that '
+             'looks like\n'
+             'an expression list also looks like a slice list, so any '
+             'subscription\n'
+             'can be interpreted as a slicing.  Rather than further '
+             'complicating the\n'
+             'syntax, this is disambiguated by defining that in this case the\n'
+             'interpretation as a subscription takes priority over the\n'
+             'interpretation as a slicing (this is the case if the slice list\n'
+             'contains no proper slice nor ellipses).  Similarly, when the '
+             'slice\n'
+             'list has exactly one short slice and no trailing comma, the\n'
+             'interpretation as a simple slicing takes priority over that as '
+             'an\n'
+             'extended slicing.\n'
+             '\n'
+             'The semantics for a simple slicing are as follows.  The primary '
+             'must\n'
+             'evaluate to a sequence object.  The lower and upper bound '
+             'expressions,\n'
+             'if present, must evaluate to plain integers; defaults are zero '
+             'and the\n'
+             '"sys.maxint", respectively.  If either bound is negative, the\n'
+             "sequence's length is added to it.  The slicing now selects all "
+             'items\n'
+             'with index *k* such that "i <= k < j" where *i* and *j* are the\n'
+             'specified lower and upper bounds.  This may be an empty '
+             'sequence.  It\n'
+             'is not an error if *i* or *j* lie outside the range of valid '
+             'indexes\n'
+             "(such items don't exist so they aren't selected).\n"
+             '\n'
+             'The semantics for an extended slicing are as follows.  The '
+             'primary\n'
+             'must evaluate to a mapping object, and it is indexed with a key '
+             'that\n'
+             'is constructed from the slice list, as follows.  If the slice '
+             'list\n'
+             'contains at least one comma, the key is a tuple containing the\n'
+             'conversion of the slice items; otherwise, the conversion of the '
+             'lone\n'
+             'slice item is the key.  The conversion of a slice item that is '
+             'an\n'
+             'expression is that expression.  The conversion of an ellipsis '
+             'slice\n'
+             'item is the built-in "Ellipsis" object.  The conversion of a '
+             'proper\n'
+             'slice is a slice object (see section The standard type '
+             'hierarchy)\n'
+             'whose "start", "stop" and "step" attributes are the values of '
+             'the\n'
+             'expressions given as lower bound, upper bound and stride,\n'
+             'respectively, substituting "None" for missing expressions.\n',
+ 'specialattrs': '\n'
+                 'Special Attributes\n'
+                 '******************\n'
+                 '\n'
+                 'The implementation adds a few special read-only attributes '
+                 'to several\n'
+                 'object types, where they are relevant.  Some of these are '
+                 'not reported\n'
+                 'by the "dir()" built-in function.\n'
+                 '\n'
+                 'object.__dict__\n'
+                 '\n'
+                 '   A dictionary or other mapping object used to store an '
+                 "object's\n"
+                 '   (writable) attributes.\n'
+                 '\n'
+                 'object.__methods__\n'
+                 '\n'
+                 '   Deprecated since version 2.2: Use the built-in function '
+                 '"dir()" to\n'
+                 "   get a list of an object's attributes. This attribute is "
+                 'no longer\n'
+                 '   available.\n'
+                 '\n'
+                 'object.__members__\n'
+                 '\n'
+                 '   Deprecated since version 2.2: Use the built-in function '
+                 '"dir()" to\n'
+                 "   get a list of an object's attributes. This attribute is "
+                 'no longer\n'
+                 '   available.\n'
+                 '\n'
+                 'instance.__class__\n'
+                 '\n'
+                 '   The class to which a class instance belongs.\n'
+                 '\n'
+                 'class.__bases__\n'
+                 '\n'
+                 '   The tuple of base classes of a class object.\n'
+                 '\n'
+                 'definition.__name__\n'
+                 '\n'
+                 '   The name of the class, type, function, method, '
+                 'descriptor, or\n'
+                 '   generator instance.\n'
+                 '\n'
+                 'The following attributes are only supported by *new-style '
+                 'class*es.\n'
+                 '\n'
+                 'class.__mro__\n'
+                 '\n'
+                 '   This attribute is a tuple of classes that are considered '
+                 'when\n'
+                 '   looking for base classes during method resolution.\n'
+                 '\n'
+                 'class.mro()\n'
+                 '\n'
+                 '   This method can be overridden by a metaclass to customize '
+                 'the\n'
+                 '   method resolution order for its instances.  It is called '
+                 'at class\n'
+                 '   instantiation, and its result is stored in "__mro__".\n'
+                 '\n'
+                 'class.__subclasses__()\n'
+                 '\n'
+                 '   Each new-style class keeps a list of weak references to '
+                 'its\n'
+                 '   immediate subclasses.  This method returns a list of all '
+                 'those\n'
+                 '   references still alive. Example:\n'
+                 '\n'
+                 '      >>> int.__subclasses__()\n'
+                 "      [<type 'bool'>]\n"
+                 '\n'
+                 '-[ Footnotes ]-\n'
+                 '\n'
+                 '[1] Additional information on these special methods may be '
+                 'found\n'
+                 '    in the Python Reference Manual (Basic customization).\n'
+                 '\n'
+                 '[2] As a consequence, the list "[1, 2]" is considered equal '
+                 'to\n'
+                 '    "[1.0, 2.0]", and similarly for tuples.\n'
+                 '\n'
+                 "[3] They must have since the parser can't tell the type of "
+                 'the\n'
+                 '    operands.\n'
+                 '\n'
+                 '[4] Cased characters are those with general category '
+                 'property\n'
+                 '    being one of "Lu" (Letter, uppercase), "Ll" (Letter, '
+                 'lowercase),\n'
+                 '    or "Lt" (Letter, titlecase).\n'
+                 '\n'
+                 '[5] To format only a tuple you should therefore provide a\n'
+                 '    singleton tuple whose only element is the tuple to be '
+                 'formatted.\n'
+                 '\n'
+                 '[6] The advantage of leaving the newline on is that '
+                 'returning an\n'
+                 '    empty string is then an unambiguous EOF indication.  It '
+                 'is also\n'
+                 '    possible (in cases where it might matter, for example, '
+                 'if you want\n'
+                 '    to make an exact copy of a file while scanning its '
+                 'lines) to tell\n'
+                 '    whether the last line of a file ended in a newline or '
+                 'not (yes\n'
+                 '    this happens!).\n',
+ 'specialnames': '\n'
+                 'Special method names\n'
+                 '********************\n'
+                 '\n'
+                 'A class can implement certain operations that are invoked by '
+                 'special\n'
+                 'syntax (such as arithmetic operations or subscripting and '
+                 'slicing) by\n'
+                 "defining methods with special names. This is Python's "
+                 'approach to\n'
+                 '*operator overloading*, allowing classes to define their own '
+                 'behavior\n'
+                 'with respect to language operators.  For instance, if a '
+                 'class defines\n'
+                 'a method named "__getitem__()", and "x" is an instance of '
+                 'this class,\n'
+                 'then "x[i]" is roughly equivalent to "x.__getitem__(i)" for '
+                 'old-style\n'
+                 'classes and "type(x).__getitem__(x, i)" for new-style '
+                 'classes.  Except\n'
+                 'where mentioned, attempts to execute an operation raise an '
+                 'exception\n'
+                 'when no appropriate method is defined (typically '
+                 '"AttributeError" or\n'
+                 '"TypeError").\n'
+                 '\n'
+                 'When implementing a class that emulates any built-in type, '
+                 'it is\n'
+                 'important that the emulation only be implemented to the '
+                 'degree that it\n'
+                 'makes sense for the object being modelled.  For example, '
+                 'some\n'
+                 'sequences may work well with retrieval of individual '
+                 'elements, but\n'
+                 'extracting a slice may not make sense.  (One example of this '
+                 'is the\n'
+                 '"NodeList" interface in the W3C\'s Document Object Model.)\n'
+                 '\n'
+                 '\n'
+                 'Basic customization\n'
+                 '===================\n'
+                 '\n'
+                 'object.__new__(cls[, ...])\n'
+                 '\n'
+                 '   Called to create a new instance of class *cls*.  '
+                 '"__new__()" is a\n'
+                 '   static method (special-cased so you need not declare it '
+                 'as such)\n'
+                 '   that takes the class of which an instance was requested '
+                 'as its\n'
+                 '   first argument.  The remaining arguments are those passed '
+                 'to the\n'
+                 '   object constructor expression (the call to the class).  '
+                 'The return\n'
+                 '   value of "__new__()" should be the new object instance '
+                 '(usually an\n'
+                 '   instance of *cls*).\n'
+                 '\n'
+                 '   Typical implementations create a new instance of the '
+                 'class by\n'
+                 '   invoking the superclass\'s "__new__()" method using\n'
+                 '   "super(currentclass, cls).__new__(cls[, ...])" with '
+                 'appropriate\n'
+                 '   arguments and then modifying the newly-created instance '
+                 'as\n'
+                 '   necessary before returning it.\n'
+                 '\n'
+                 '   If "__new__()" returns an instance of *cls*, then the '
+                 'new\n'
+                 '   instance\'s "__init__()" method will be invoked like\n'
+                 '   "__init__(self[, ...])", where *self* is the new instance '
+                 'and the\n'
+                 '   remaining arguments are the same as were passed to '
+                 '"__new__()".\n'
+                 '\n'
+                 '   If "__new__()" does not return an instance of *cls*, then '
+                 'the new\n'
+                 '   instance\'s "__init__()" method will not be invoked.\n'
+                 '\n'
+                 '   "__new__()" is intended mainly to allow subclasses of '
+                 'immutable\n'
+                 '   types (like int, str, or tuple) to customize instance '
+                 'creation.  It\n'
+                 '   is also commonly overridden in custom metaclasses in '
+                 'order to\n'
+                 '   customize class creation.\n'
+                 '\n'
+                 'object.__init__(self[, ...])\n'
+                 '\n'
+                 '   Called after the instance has been created (by '
+                 '"__new__()"), but\n'
+                 '   before it is returned to the caller.  The arguments are '
+                 'those\n'
+                 '   passed to the class constructor expression.  If a base '
+                 'class has an\n'
+                 '   "__init__()" method, the derived class\'s "__init__()" '
+                 'method, if\n'
+                 '   any, must explicitly call it to ensure proper '
+                 'initialization of the\n'
+                 '   base class part of the instance; for example:\n'
+                 '   "BaseClass.__init__(self, [args...])".\n'
+                 '\n'
+                 '   Because "__new__()" and "__init__()" work together in '
+                 'constructing\n'
+                 '   objects ("__new__()" to create it, and "__init__()" to '
+                 'customise\n'
+                 '   it), no non-"None" value may be returned by "__init__()"; '
+                 'doing so\n'
+                 '   will cause a "TypeError" to be raised at runtime.\n'
+                 '\n'
+                 'object.__del__(self)\n'
+                 '\n'
+                 '   Called when the instance is about to be destroyed.  This '
+                 'is also\n'
+                 '   called a destructor.  If a base class has a "__del__()" '
+                 'method, the\n'
+                 '   derived class\'s "__del__()" method, if any, must '
+                 'explicitly call it\n'
+                 '   to ensure proper deletion of the base class part of the '
+                 'instance.\n'
+                 '   Note that it is possible (though not recommended!) for '
+                 'the\n'
+                 '   "__del__()" method to postpone destruction of the '
+                 'instance by\n'
+                 '   creating a new reference to it.  It may then be called at '
+                 'a later\n'
+                 '   time when this new reference is deleted.  It is not '
+                 'guaranteed that\n'
+                 '   "__del__()" methods are called for objects that still '
+                 'exist when\n'
+                 '   the interpreter exits.\n'
+                 '\n'
+                 '   Note: "del x" doesn\'t directly call "x.__del__()" --- '
+                 'the former\n'
+                 '     decrements the reference count for "x" by one, and the '
+                 'latter is\n'
+                 '     only called when "x"\'s reference count reaches zero.  '
+                 'Some common\n'
+                 '     situations that may prevent the reference count of an '
+                 'object from\n'
+                 '     going to zero include: circular references between '
+                 'objects (e.g.,\n'
+                 '     a doubly-linked list or a tree data structure with '
+                 'parent and\n'
+                 '     child pointers); a reference to the object on the stack '
+                 'frame of\n'
+                 '     a function that caught an exception (the traceback '
+                 'stored in\n'
+                 '     "sys.exc_traceback" keeps the stack frame alive); or a '
+                 'reference\n'
+                 '     to the object on the stack frame that raised an '
+                 'unhandled\n'
+                 '     exception in interactive mode (the traceback stored in\n'
+                 '     "sys.last_traceback" keeps the stack frame alive).  The '
+                 'first\n'
+                 '     situation can only be remedied by explicitly breaking '
+                 'the cycles;\n'
+                 '     the latter two situations can be resolved by storing '
+                 '"None" in\n'
+                 '     "sys.exc_traceback" or "sys.last_traceback".  Circular '
+                 'references\n'
+                 '     which are garbage are detected when the option cycle '
+                 'detector is\n'
+                 "     enabled (it's on by default), but can only be cleaned "
+                 'up if there\n'
+                 '     are no Python-level "__del__()" methods involved. Refer '
+                 'to the\n'
+                 '     documentation for the "gc" module for more information '
+                 'about how\n'
+                 '     "__del__()" methods are handled by the cycle detector,\n'
+                 '     particularly the description of the "garbage" value.\n'
+                 '\n'
+                 '   Warning: Due to the precarious circumstances under which\n'
+                 '     "__del__()" methods are invoked, exceptions that occur '
+                 'during\n'
+                 '     their execution are ignored, and a warning is printed '
+                 'to\n'
+                 '     "sys.stderr" instead. Also, when "__del__()" is invoked '
+                 'in\n'
+                 '     response to a module being deleted (e.g., when '
+                 'execution of the\n'
+                 '     program is done), other globals referenced by the '
+                 '"__del__()"\n'
+                 '     method may already have been deleted or in the process '
+                 'of being\n'
+                 '     torn down (e.g. the import machinery shutting down).  '
+                 'For this\n'
+                 '     reason, "__del__()" methods should do the absolute '
+                 'minimum needed\n'
+                 '     to maintain external invariants.  Starting with version '
+                 '1.5,\n'
+                 '     Python guarantees that globals whose name begins with a '
+                 'single\n'
+                 '     underscore are deleted from their module before other '
+                 'globals are\n'
+                 '     deleted; if no other references to such globals exist, '
+                 'this may\n'
+                 '     help in assuring that imported modules are still '
+                 'available at the\n'
+                 '     time when the "__del__()" method is called.\n'
+                 '\n'
+                 '   See also the "-R" command-line option.\n'
+                 '\n'
+                 'object.__repr__(self)\n'
+                 '\n'
+                 '   Called by the "repr()" built-in function and by string '
+                 'conversions\n'
+                 '   (reverse quotes) to compute the "official" string '
+                 'representation of\n'
+                 '   an object.  If at all possible, this should look like a '
+                 'valid\n'
+                 '   Python expression that could be used to recreate an '
+                 'object with the\n'
+                 '   same value (given an appropriate environment).  If this '
+                 'is not\n'
+                 '   possible, a string of the form "<...some useful '
+                 'description...>"\n'
+                 '   should be returned.  The return value must be a string '
+                 'object. If a\n'
+                 '   class defines "__repr__()" but not "__str__()", then '
+                 '"__repr__()"\n'
+                 '   is also used when an "informal" string representation of '
+                 'instances\n'
+                 '   of that class is required.\n'
+                 '\n'
+                 '   This is typically used for debugging, so it is important '
+                 'that the\n'
+                 '   representation is information-rich and unambiguous.\n'
+                 '\n'
+                 'object.__str__(self)\n'
+                 '\n'
+                 '   Called by the "str()" built-in function and by the '
+                 '"print"\n'
+                 '   statement to compute the "informal" string representation '
+                 'of an\n'
+                 '   object.  This differs from "__repr__()" in that it does '
+                 'not have to\n'
+                 '   be a valid Python expression: a more convenient or '
+                 'concise\n'
+                 '   representation may be used instead. The return value must '
+                 'be a\n'
+                 '   string object.\n'
+                 '\n'
+                 'object.__lt__(self, other)\n'
+                 'object.__le__(self, other)\n'
+                 'object.__eq__(self, other)\n'
+                 'object.__ne__(self, other)\n'
+                 'object.__gt__(self, other)\n'
+                 'object.__ge__(self, other)\n'
+                 '\n'
+                 '   New in version 2.1.\n'
+                 '\n'
+                 '   These are the so-called "rich comparison" methods, and '
+                 'are called\n'
+                 '   for comparison operators in preference to "__cmp__()" '
+                 'below. The\n'
+                 '   correspondence between operator symbols and method names '
+                 'is as\n'
+                 '   follows: "x<y" calls "x.__lt__(y)", "x<=y" calls '
+                 '"x.__le__(y)",\n'
+                 '   "x==y" calls "x.__eq__(y)", "x!=y" and "x<>y" call '
+                 '"x.__ne__(y)",\n'
+                 '   "x>y" calls "x.__gt__(y)", and "x>=y" calls '
+                 '"x.__ge__(y)".\n'
+                 '\n'
+                 '   A rich comparison method may return the singleton '
+                 '"NotImplemented"\n'
+                 '   if it does not implement the operation for a given pair '
+                 'of\n'
+                 '   arguments. By convention, "False" and "True" are returned '
+                 'for a\n'
+                 '   successful comparison. However, these methods can return '
+                 'any value,\n'
+                 '   so if the comparison operator is used in a Boolean '
+                 'context (e.g.,\n'
+                 '   in the condition of an "if" statement), Python will call '
+                 '"bool()"\n'
+                 '   on the value to determine if the result is true or '
+                 'false.\n'
+                 '\n'
+                 '   There are no implied relationships among the comparison '
+                 'operators.\n'
+                 '   The truth of "x==y" does not imply that "x!=y" is false.\n'
+                 '   Accordingly, when defining "__eq__()", one should also '
+                 'define\n'
+                 '   "__ne__()" so that the operators will behave as '
+                 'expected.  See the\n'
+                 '   paragraph on "__hash__()" for some important notes on '
+                 'creating\n'
+                 '   *hashable* objects which support custom comparison '
+                 'operations and\n'
+                 '   are usable as dictionary keys.\n'
+                 '\n'
+                 '   There are no swapped-argument versions of these methods '
+                 '(to be used\n'
+                 '   when the left argument does not support the operation but '
+                 'the right\n'
+                 '   argument does); rather, "__lt__()" and "__gt__()" are '
+                 "each other's\n"
+                 '   reflection, "__le__()" and "__ge__()" are each other\'s '
+                 'reflection,\n'
+                 '   and "__eq__()" and "__ne__()" are their own reflection.\n'
+                 '\n'
+                 '   Arguments to rich comparison methods are never coerced.\n'
+                 '\n'
+                 '   To automatically generate ordering operations from a '
+                 'single root\n'
+                 '   operation, see "functools.total_ordering()".\n'
+                 '\n'
+                 'object.__cmp__(self, other)\n'
+                 '\n'
+                 '   Called by comparison operations if rich comparison (see '
+                 'above) is\n'
+                 '   not defined.  Should return a negative integer if "self < '
+                 'other",\n'
+                 '   zero if "self == other", a positive integer if "self > '
+                 'other".  If\n'
+                 '   no "__cmp__()", "__eq__()" or "__ne__()" operation is '
+                 'defined,\n'
+                 '   class instances are compared by object identity '
+                 '("address").  See\n'
+                 '   also the description of "__hash__()" for some important '
+                 'notes on\n'
+                 '   creating *hashable* objects which support custom '
+                 'comparison\n'
+                 '   operations and are usable as dictionary keys. (Note: the\n'
+                 '   restriction that exceptions are not propagated by '
+                 '"__cmp__()" has\n'
+                 '   been removed since Python 1.5.)\n'
+                 '\n'
+                 'object.__rcmp__(self, other)\n'
+                 '\n'
+                 '   Changed in version 2.1: No longer supported.\n'
+                 '\n'
+                 'object.__hash__(self)\n'
+                 '\n'
+                 '   Called by built-in function "hash()" and for operations '
+                 'on members\n'
+                 '   of hashed collections including "set", "frozenset", and '
+                 '"dict".\n'
+                 '   "__hash__()" should return an integer.  The only required '
+                 'property\n'
+                 '   is that objects which compare equal have the same hash '
+                 'value; it is\n'
+                 '   advised to mix together the hash values of the components '
+                 'of the\n'
+                 '   object that also play a part in comparison of objects by '
+                 'packing\n'
+                 '   them into a tuple and hashing the tuple. Example:\n'
+                 '\n'
+                 '      def __hash__(self):\n'
+                 '          return hash((self.name, self.nick, self.color))\n'
+                 '\n'
+                 '   If a class does not define a "__cmp__()" or "__eq__()" '
+                 'method it\n'
+                 '   should not define a "__hash__()" operation either; if it '
+                 'defines\n'
+                 '   "__cmp__()" or "__eq__()" but not "__hash__()", its '
+                 'instances will\n'
+                 '   not be usable in hashed collections.  If a class defines '
+                 'mutable\n'
+                 '   objects and implements a "__cmp__()" or "__eq__()" '
+                 'method, it\n'
+                 '   should not implement "__hash__()", since hashable '
+                 'collection\n'
+                 "   implementations require that an object's hash value is "
+                 'immutable\n'
+                 "   (if the object's hash value changes, it will be in the "
+                 'wrong hash\n'
+                 '   bucket).\n'
+                 '\n'
+                 '   User-defined classes have "__cmp__()" and "__hash__()" '
+                 'methods by\n'
+                 '   default; with them, all objects compare unequal (except '
+                 'with\n'
+                 '   themselves) and "x.__hash__()" returns a result derived '
+                 'from\n'
+                 '   "id(x)".\n'
+                 '\n'
+                 '   Classes which inherit a "__hash__()" method from a parent '
+                 'class but\n'
+                 '   change the meaning of "__cmp__()" or "__eq__()" such that '
+                 'the hash\n'
+                 '   value returned is no longer appropriate (e.g. by '
+                 'switching to a\n'
+                 '   value-based concept of equality instead of the default '
+                 'identity\n'
+                 '   based equality) can explicitly flag themselves as being '
+                 'unhashable\n'
+                 '   by setting "__hash__ = None" in the class definition. '
+                 'Doing so\n'
+                 '   means that not only will instances of the class raise an\n'
+                 '   appropriate "TypeError" when a program attempts to '
+                 'retrieve their\n'
+                 '   hash value, but they will also be correctly identified '
+                 'as\n'
+                 '   unhashable when checking "isinstance(obj, '
+                 'collections.Hashable)"\n'
+                 '   (unlike classes which define their own "__hash__()" to '
+                 'explicitly\n'
+                 '   raise "TypeError").\n'
+                 '\n'
+                 '   Changed in version 2.5: "__hash__()" may now also return '
+                 'a long\n'
+                 '   integer object; the 32-bit integer is then derived from '
+                 'the hash of\n'
+                 '   that object.\n'
+                 '\n'
+                 '   Changed in version 2.6: "__hash__" may now be set to '
+                 '"None" to\n'
+                 '   explicitly flag instances of a class as unhashable.\n'
+                 '\n'
+                 'object.__nonzero__(self)\n'
+                 '\n'
+                 '   Called to implement truth value testing and the built-in '
+                 'operation\n'
+                 '   "bool()"; should return "False" or "True", or their '
+                 'integer\n'
+                 '   equivalents "0" or "1".  When this method is not '
+                 'defined,\n'
+                 '   "__len__()" is called, if it is defined, and the object '
+                 'is\n'
+                 '   considered true if its result is nonzero. If a class '
+                 'defines\n'
+                 '   neither "__len__()" nor "__nonzero__()", all its '
+                 'instances are\n'
+                 '   considered true.\n'
+                 '\n'
+                 'object.__unicode__(self)\n'
+                 '\n'
+                 '   Called to implement "unicode()" built-in; should return a '
+                 'Unicode\n'
+                 '   object. When this method is not defined, string '
+                 'conversion is\n'
+                 '   attempted, and the result of string conversion is '
+                 'converted to\n'
+                 '   Unicode using the system default encoding.\n'
+                 '\n'
+                 '\n'
+                 'Customizing attribute access\n'
+                 '============================\n'
+                 '\n'
+                 'The following methods can be defined to customize the '
+                 'meaning of\n'
+                 'attribute access (use of, assignment to, or deletion of '
+                 '"x.name") for\n'
+                 'class instances.\n'
+                 '\n'
+                 'object.__getattr__(self, name)\n'
+                 '\n'
+                 '   Called when an attribute lookup has not found the '
+                 'attribute in the\n'
+                 '   usual places (i.e. it is not an instance attribute nor is '
+                 'it found\n'
+                 '   in the class tree for "self").  "name" is the attribute '
+                 'name. This\n'
+                 '   method should return the (computed) attribute value or '
+                 'raise an\n'
+                 '   "AttributeError" exception.\n'
+                 '\n'
+                 '   Note that if the attribute is found through the normal '
+                 'mechanism,\n'
+                 '   "__getattr__()" is not called.  (This is an intentional '
+                 'asymmetry\n'
+                 '   between "__getattr__()" and "__setattr__()".) This is '
+                 'done both for\n'
+                 '   efficiency reasons and because otherwise "__getattr__()" '
+                 'would have\n'
+                 '   no way to access other attributes of the instance.  Note '
+                 'that at\n'
+                 '   least for instance variables, you can fake total control '
+                 'by not\n'
+                 '   inserting any values in the instance attribute dictionary '
+                 '(but\n'
+                 '   instead inserting them in another object).  See the\n'
+                 '   "__getattribute__()" method below for a way to actually '
+                 'get total\n'
+                 '   control in new-style classes.\n'
+                 '\n'
+                 'object.__setattr__(self, name, value)\n'
+                 '\n'
+                 '   Called when an attribute assignment is attempted.  This '
+                 'is called\n'
+                 '   instead of the normal mechanism (i.e. store the value in '
+                 'the\n'
+                 '   instance dictionary).  *name* is the attribute name, '
+                 '*value* is the\n'
+                 '   value to be assigned to it.\n'
+                 '\n'
+                 '   If "__setattr__()" wants to assign to an instance '
+                 'attribute, it\n'
+                 '   should not simply execute "self.name = value" --- this '
+                 'would cause\n'
+                 '   a recursive call to itself.  Instead, it should insert '
+                 'the value in\n'
+                 '   the dictionary of instance attributes, e.g., '
+                 '"self.__dict__[name] =\n'
+                 '   value".  For new-style classes, rather than accessing the '
+                 'instance\n'
+                 '   dictionary, it should call the base class method with the '
+                 'same\n'
+                 '   name, for example, "object.__setattr__(self, name, '
+                 'value)".\n'
+                 '\n'
+                 'object.__delattr__(self, name)\n'
+                 '\n'
+                 '   Like "__setattr__()" but for attribute deletion instead '
+                 'of\n'
+                 '   assignment.  This should only be implemented if "del '
+                 'obj.name" is\n'
+                 '   meaningful for the object.\n'
+                 '\n'
+                 '\n'
+                 'More attribute access for new-style classes\n'
+                 '-------------------------------------------\n'
+                 '\n'
+                 'The following methods only apply to new-style classes.\n'
+                 '\n'
+                 'object.__getattribute__(self, name)\n'
+                 '\n'
+                 '   Called unconditionally to implement attribute accesses '
+                 'for\n'
+                 '   instances of the class. If the class also defines '
+                 '"__getattr__()",\n'
+                 '   the latter will not be called unless "__getattribute__()" '
+                 'either\n'
+                 '   calls it explicitly or raises an "AttributeError". This '
+                 'method\n'
+                 '   should return the (computed) attribute value or raise an\n'
+                 '   "AttributeError" exception. In order to avoid infinite '
+                 'recursion in\n'
+                 '   this method, its implementation should always call the '
+                 'base class\n'
+                 '   method with the same name to access any attributes it '
+                 'needs, for\n'
+                 '   example, "object.__getattribute__(self, name)".\n'
+                 '\n'
+                 '   Note: This method may still be bypassed when looking up '
+                 'special\n'
+                 '     methods as the result of implicit invocation via '
+                 'language syntax\n'
+                 '     or built-in functions. See Special method lookup for '
+                 'new-style\n'
+                 '     classes.\n'
+                 '\n'
+                 '\n'
+                 'Implementing Descriptors\n'
+                 '------------------------\n'
+                 '\n'
+                 'The following methods only apply when an instance of the '
+                 'class\n'
+                 'containing the method (a so-called *descriptor* class) '
+                 'appears in an\n'
+                 "*owner* class (the descriptor must be in either the owner's "
+                 'class\n'
+                 'dictionary or in the class dictionary for one of its '
+                 'parents).  In the\n'
+                 'examples below, "the attribute" refers to the attribute '
+                 'whose name is\n'
+                 'the key of the property in the owner class\' "__dict__".\n'
+                 '\n'
+                 'object.__get__(self, instance, owner)\n'
+                 '\n'
+                 '   Called to get the attribute of the owner class (class '
+                 'attribute\n'
+                 '   access) or of an instance of that class (instance '
+                 'attribute\n'
+                 '   access). *owner* is always the owner class, while '
+                 '*instance* is the\n'
+                 '   instance that the attribute was accessed through, or '
+                 '"None" when\n'
+                 '   the attribute is accessed through the *owner*.  This '
+                 'method should\n'
+                 '   return the (computed) attribute value or raise an '
+                 '"AttributeError"\n'
+                 '   exception.\n'
+                 '\n'
+                 'object.__set__(self, instance, value)\n'
+                 '\n'
+                 '   Called to set the attribute on an instance *instance* of '
+                 'the owner\n'
+                 '   class to a new value, *value*.\n'
+                 '\n'
+                 'object.__delete__(self, instance)\n'
+                 '\n'
+                 '   Called to delete the attribute on an instance *instance* '
+                 'of the\n'
+                 '   owner class.\n'
+                 '\n'
+                 '\n'
+                 'Invoking Descriptors\n'
+                 '--------------------\n'
+                 '\n'
+                 'In general, a descriptor is an object attribute with '
+                 '"binding\n'
+                 'behavior", one whose attribute access has been overridden by '
+                 'methods\n'
+                 'in the descriptor protocol:  "__get__()", "__set__()", and\n'
+                 '"__delete__()". If any of those methods are defined for an '
+                 'object, it\n'
+                 'is said to be a descriptor.\n'
+                 '\n'
+                 'The default behavior for attribute access is to get, set, or '
+                 'delete\n'
+                 "the attribute from an object's dictionary. For instance, "
+                 '"a.x" has a\n'
+                 'lookup chain starting with "a.__dict__[\'x\']", then\n'
+                 '"type(a).__dict__[\'x\']", and continuing through the base '
+                 'classes of\n'
+                 '"type(a)" excluding metaclasses.\n'
+                 '\n'
+                 'However, if the looked-up value is an object defining one of '
+                 'the\n'
+                 'descriptor methods, then Python may override the default '
+                 'behavior and\n'
+                 'invoke the descriptor method instead.  Where this occurs in '
+                 'the\n'
+                 'precedence chain depends on which descriptor methods were '
+                 'defined and\n'
+                 'how they were called.  Note that descriptors are only '
+                 'invoked for new\n'
+                 'style objects or classes (ones that subclass "object()" or '
+                 '"type()").\n'
+                 '\n'
+                 'The starting point for descriptor invocation is a binding, '
+                 '"a.x". How\n'
+                 'the arguments are assembled depends on "a":\n'
+                 '\n'
+                 'Direct Call\n'
+                 '   The simplest and least common call is when user code '
+                 'directly\n'
+                 '   invokes a descriptor method:    "x.__get__(a)".\n'
+                 '\n'
+                 'Instance Binding\n'
+                 '   If binding to a new-style object instance, "a.x" is '
+                 'transformed\n'
+                 '   into the call: "type(a).__dict__[\'x\'].__get__(a, '
+                 'type(a))".\n'
+                 '\n'
+                 'Class Binding\n'
+                 '   If binding to a new-style class, "A.x" is transformed '
+                 'into the\n'
+                 '   call: "A.__dict__[\'x\'].__get__(None, A)".\n'
+                 '\n'
+                 'Super Binding\n'
+                 '   If "a" is an instance of "super", then the binding '
+                 '"super(B,\n'
+                 '   obj).m()" searches "obj.__class__.__mro__" for the base '
+                 'class "A"\n'
+                 '   immediately preceding "B" and then invokes the descriptor '
+                 'with the\n'
+                 '   call: "A.__dict__[\'m\'].__get__(obj, obj.__class__)".\n'
+                 '\n'
+                 'For instance bindings, the precedence of descriptor '
+                 'invocation depends\n'
+                 'on the which descriptor methods are defined.  A descriptor '
+                 'can define\n'
+                 'any combination of "__get__()", "__set__()" and '
+                 '"__delete__()".  If it\n'
+                 'does not define "__get__()", then accessing the attribute '
+                 'will return\n'
+                 'the descriptor object itself unless there is a value in the '
+                 "object's\n"
+                 'instance dictionary.  If the descriptor defines "__set__()" '
+                 'and/or\n'
+                 '"__delete__()", it is a data descriptor; if it defines '
+                 'neither, it is\n'
+                 'a non-data descriptor.  Normally, data descriptors define '
+                 'both\n'
+                 '"__get__()" and "__set__()", while non-data descriptors have '
+                 'just the\n'
+                 '"__get__()" method.  Data descriptors with "__set__()" and '
+                 '"__get__()"\n'
+                 'defined always override a redefinition in an instance '
+                 'dictionary.  In\n'
+                 'contrast, non-data descriptors can be overridden by '
+                 'instances.\n'
+                 '\n'
+                 'Python methods (including "staticmethod()" and '
+                 '"classmethod()") are\n'
+                 'implemented as non-data descriptors.  Accordingly, instances '
+                 'can\n'
+                 'redefine and override methods.  This allows individual '
+                 'instances to\n'
+                 'acquire behaviors that differ from other instances of the '
+                 'same class.\n'
+                 '\n'
+                 'The "property()" function is implemented as a data '
+                 'descriptor.\n'
+                 'Accordingly, instances cannot override the behavior of a '
+                 'property.\n'
+                 '\n'
+                 '\n'
+                 '__slots__\n'
+                 '---------\n'
+                 '\n'
+                 'By default, instances of both old and new-style classes have '
+                 'a\n'
+                 'dictionary for attribute storage.  This wastes space for '
+                 'objects\n'
+                 'having very few instance variables.  The space consumption '
+                 'can become\n'
+                 'acute when creating large numbers of instances.\n'
+                 '\n'
+                 'The default can be overridden by defining *__slots__* in a '
+                 'new-style\n'
+                 'class definition.  The *__slots__* declaration takes a '
+                 'sequence of\n'
+                 'instance variables and reserves just enough space in each '
+                 'instance to\n'
+                 'hold a value for each variable.  Space is saved because '
+                 '*__dict__* is\n'
+                 'not created for each instance.\n'
+                 '\n'
+                 '__slots__\n'
+                 '\n'
+                 '   This class variable can be assigned a string, iterable, '
+                 'or sequence\n'
+                 '   of strings with variable names used by instances.  If '
+                 'defined in a\n'
+                 '   new-style class, *__slots__* reserves space for the '
+                 'declared\n'
+                 '   variables and prevents the automatic creation of '
+                 '*__dict__* and\n'
+                 '   *__weakref__* for each instance.\n'
+                 '\n'
+                 '   New in version 2.2.\n'
+                 '\n'
+                 'Notes on using *__slots__*\n'
+                 '\n'
+                 '* When inheriting from a class without *__slots__*, the '
+                 '*__dict__*\n'
+                 '  attribute of that class will always be accessible, so a '
+                 '*__slots__*\n'
+                 '  definition in the subclass is meaningless.\n'
+                 '\n'
+                 '* Without a *__dict__* variable, instances cannot be '
+                 'assigned new\n'
+                 '  variables not listed in the *__slots__* definition.  '
+                 'Attempts to\n'
+                 '  assign to an unlisted variable name raises '
+                 '"AttributeError". If\n'
+                 '  dynamic assignment of new variables is desired, then add\n'
+                 '  "\'__dict__\'" to the sequence of strings in the '
+                 '*__slots__*\n'
+                 '  declaration.\n'
+                 '\n'
+                 '  Changed in version 2.3: Previously, adding "\'__dict__\'" '
+                 'to the\n'
+                 '  *__slots__* declaration would not enable the assignment of '
+                 'new\n'
+                 '  attributes not specifically listed in the sequence of '
+                 'instance\n'
+                 '  variable names.\n'
+                 '\n'
+                 '* Without a *__weakref__* variable for each instance, '
+                 'classes\n'
+                 '  defining *__slots__* do not support weak references to '
+                 'its\n'
+                 '  instances. If weak reference support is needed, then add\n'
+                 '  "\'__weakref__\'" to the sequence of strings in the '
+                 '*__slots__*\n'
+                 '  declaration.\n'
+                 '\n'
+                 '  Changed in version 2.3: Previously, adding '
+                 '"\'__weakref__\'" to the\n'
+                 '  *__slots__* declaration would not enable support for weak\n'
+                 '  references.\n'
+                 '\n'
+                 '* *__slots__* are implemented at the class level by '
+                 'creating\n'
+                 '  descriptors (Implementing Descriptors) for each variable '
+                 'name.  As a\n'
+                 '  result, class attributes cannot be used to set default '
+                 'values for\n'
+                 '  instance variables defined by *__slots__*; otherwise, the '
+                 'class\n'
+                 '  attribute would overwrite the descriptor assignment.\n'
+                 '\n'
+                 '* The action of a *__slots__* declaration is limited to the '
+                 'class\n'
+                 '  where it is defined.  As a result, subclasses will have a '
+                 '*__dict__*\n'
+                 '  unless they also define *__slots__* (which must only '
+                 'contain names\n'
+                 '  of any *additional* slots).\n'
+                 '\n'
+                 '* If a class defines a slot also defined in a base class, '
+                 'the\n'
+                 '  instance variable defined by the base class slot is '
+                 'inaccessible\n'
+                 '  (except by retrieving its descriptor directly from the '
+                 'base class).\n'
+                 '  This renders the meaning of the program undefined.  In the '
+                 'future, a\n'
+                 '  check may be added to prevent this.\n'
+                 '\n'
+                 '* Nonempty *__slots__* does not work for classes derived '
+                 'from\n'
+                 '  "variable-length" built-in types such as "long", "str" and '
+                 '"tuple".\n'
+                 '\n'
+                 '* Any non-string iterable may be assigned to *__slots__*. '
+                 'Mappings\n'
+                 '  may also be used; however, in the future, special meaning '
+                 'may be\n'
+                 '  assigned to the values corresponding to each key.\n'
+                 '\n'
+                 '* *__class__* assignment works only if both classes have the '
+                 'same\n'
+                 '  *__slots__*.\n'
+                 '\n'
+                 '  Changed in version 2.6: Previously, *__class__* assignment '
+                 'raised an\n'
+                 '  error if either new or old class had *__slots__*.\n'
+                 '\n'
+                 '\n'
+                 'Customizing class creation\n'
+                 '==========================\n'
+                 '\n'
+                 'By default, new-style classes are constructed using '
+                 '"type()". A class\n'
+                 'definition is read into a separate namespace and the value '
+                 'of class\n'
+                 'name is bound to the result of "type(name, bases, dict)".\n'
+                 '\n'
+                 'When the class definition is read, if *__metaclass__* is '
+                 'defined then\n'
+                 'the callable assigned to it will be called instead of '
+                 '"type()". This\n'
+                 'allows classes or functions to be written which monitor or '
+                 'alter the\n'
+                 'class creation process:\n'
+                 '\n'
+                 '* Modifying the class dictionary prior to the class being '
+                 'created.\n'
+                 '\n'
+                 '* Returning an instance of another class -- essentially '
+                 'performing\n'
+                 '  the role of a factory function.\n'
+                 '\n'
+                 "These steps will have to be performed in the metaclass's "
+                 '"__new__()"\n'
+                 'method -- "type.__new__()" can then be called from this '
+                 'method to\n'
+                 'create a class with different properties.  This example adds '
+                 'a new\n'
+                 'element to the class dictionary before creating the class:\n'
+                 '\n'
+                 '   class metacls(type):\n'
+                 '       def __new__(mcs, name, bases, dict):\n'
+                 "           dict['foo'] = 'metacls was here'\n"
+                 '           return type.__new__(mcs, name, bases, dict)\n'
+                 '\n'
+                 'You can of course also override other class methods (or add '
+                 'new\n'
+                 'methods); for example defining a custom "__call__()" method '
+                 'in the\n'
+                 'metaclass allows custom behavior when the class is called, '
+                 'e.g. not\n'
+                 'always creating a new instance.\n'
+                 '\n'
+                 '__metaclass__\n'
+                 '\n'
+                 '   This variable can be any callable accepting arguments for '
+                 '"name",\n'
+                 '   "bases", and "dict".  Upon class creation, the callable '
+                 'is used\n'
+                 '   instead of the built-in "type()".\n'
+                 '\n'
+                 '   New in version 2.2.\n'
+                 '\n'
+                 'The appropriate metaclass is determined by the following '
+                 'precedence\n'
+                 'rules:\n'
+                 '\n'
+                 '* If "dict[\'__metaclass__\']" exists, it is used.\n'
+                 '\n'
+                 '* Otherwise, if there is at least one base class, its '
+                 'metaclass is\n'
+                 '  used (this looks for a *__class__* attribute first and if '
+                 'not found,\n'
+                 '  uses its type).\n'
+                 '\n'
+                 '* Otherwise, if a global variable named __metaclass__ '
+                 'exists, it is\n'
+                 '  used.\n'
+                 '\n'
+                 '* Otherwise, the old-style, classic metaclass '
+                 '(types.ClassType) is\n'
+                 '  used.\n'
+                 '\n'
+                 'The potential uses for metaclasses are boundless. Some ideas '
+                 'that have\n'
+                 'been explored including logging, interface checking, '
+                 'automatic\n'
+                 'delegation, automatic property creation, proxies, '
+                 'frameworks, and\n'
+                 'automatic resource locking/synchronization.\n'
+                 '\n'
+                 '\n'
+                 'Customizing instance and subclass checks\n'
+                 '========================================\n'
+                 '\n'
+                 'New in version 2.6.\n'
+                 '\n'
+                 'The following methods are used to override the default '
+                 'behavior of the\n'
+                 '"isinstance()" and "issubclass()" built-in functions.\n'
+                 '\n'
+                 'In particular, the metaclass "abc.ABCMeta" implements these '
+                 'methods in\n'
+                 'order to allow the addition of Abstract Base Classes (ABCs) '
+                 'as\n'
+                 '"virtual base classes" to any class or type (including '
+                 'built-in\n'
+                 'types), including other ABCs.\n'
+                 '\n'
+                 'class.__instancecheck__(self, instance)\n'
+                 '\n'
+                 '   Return true if *instance* should be considered a (direct '
+                 'or\n'
+                 '   indirect) instance of *class*. If defined, called to '
+                 'implement\n'
+                 '   "isinstance(instance, class)".\n'
+                 '\n'
+                 'class.__subclasscheck__(self, subclass)\n'
+                 '\n'
+                 '   Return true if *subclass* should be considered a (direct '
+                 'or\n'
+                 '   indirect) subclass of *class*.  If defined, called to '
+                 'implement\n'
+                 '   "issubclass(subclass, class)".\n'
+                 '\n'
+                 'Note that these methods are looked up on the type '
+                 '(metaclass) of a\n'
+                 'class.  They cannot be defined as class methods in the '
+                 'actual class.\n'
+                 'This is consistent with the lookup of special methods that '
+                 'are called\n'
+                 'on instances, only in this case the instance is itself a '
+                 'class.\n'
+                 '\n'
+                 'See also:\n'
+                 '\n'
+                 '  **PEP 3119** - Introducing Abstract Base Classes\n'
+                 '     Includes the specification for customizing '
+                 '"isinstance()" and\n'
+                 '     "issubclass()" behavior through "__instancecheck__()" '
+                 'and\n'
+                 '     "__subclasscheck__()", with motivation for this '
+                 'functionality in\n'
+                 '     the context of adding Abstract Base Classes (see the '
+                 '"abc"\n'
+                 '     module) to the language.\n'
+                 '\n'
+                 '\n'
+                 'Emulating callable objects\n'
+                 '==========================\n'
+                 '\n'
+                 'object.__call__(self[, args...])\n'
+                 '\n'
+                 '   Called when the instance is "called" as a function; if '
+                 'this method\n'
+                 '   is defined, "x(arg1, arg2, ...)" is a shorthand for\n'
+                 '   "x.__call__(arg1, arg2, ...)".\n'
+                 '\n'
+                 '\n'
+                 'Emulating container types\n'
+                 '=========================\n'
+                 '\n'
+                 'The following methods can be defined to implement container '
+                 'objects.\n'
+                 'Containers usually are sequences (such as lists or tuples) '
+                 'or mappings\n'
+                 '(like dictionaries), but can represent other containers as '
+                 'well.  The\n'
+                 'first set of methods is used either to emulate a sequence or '
+                 'to\n'
+                 'emulate a mapping; the difference is that for a sequence, '
+                 'the\n'
+                 'allowable keys should be the integers *k* for which "0 <= k '
+                 '< N" where\n'
+                 '*N* is the length of the sequence, or slice objects, which '
+                 'define a\n'
+                 'range of items. (For backwards compatibility, the method\n'
+                 '"__getslice__()" (see below) can also be defined to handle '
+                 'simple, but\n'
+                 'not extended slices.) It is also recommended that mappings '
+                 'provide the\n'
+                 'methods "keys()", "values()", "items()", "has_key()", '
+                 '"get()",\n'
+                 '"clear()", "setdefault()", "iterkeys()", "itervalues()",\n'
+                 '"iteritems()", "pop()", "popitem()", "copy()", and '
+                 '"update()" behaving\n'
+                 "similar to those for Python's standard dictionary objects.  "
+                 'The\n'
+                 '"UserDict" module provides a "DictMixin" class to help '
+                 'create those\n'
+                 'methods from a base set of "__getitem__()", '
+                 '"__setitem__()",\n'
+                 '"__delitem__()", and "keys()". Mutable sequences should '
+                 'provide\n'
+                 'methods "append()", "count()", "index()", "extend()", '
+                 '"insert()",\n'
+                 '"pop()", "remove()", "reverse()" and "sort()", like Python '
+                 'standard\n'
+                 'list objects.  Finally, sequence types should implement '
+                 'addition\n'
+                 '(meaning concatenation) and multiplication (meaning '
+                 'repetition) by\n'
+                 'defining the methods "__add__()", "__radd__()", '
+                 '"__iadd__()",\n'
+                 '"__mul__()", "__rmul__()" and "__imul__()" described below; '
+                 'they\n'
+                 'should not define "__coerce__()" or other numerical '
+                 'operators.  It is\n'
+                 'recommended that both mappings and sequences implement the\n'
+                 '"__contains__()" method to allow efficient use of the "in" '
+                 'operator;\n'
+                 'for mappings, "in" should be equivalent of "has_key()"; for '
+                 'sequences,\n'
+                 'it should search through the values.  It is further '
+                 'recommended that\n'
+                 'both mappings and sequences implement the "__iter__()" '
+                 'method to allow\n'
+                 'efficient iteration through the container; for mappings, '
+                 '"__iter__()"\n'
+                 'should be the same as "iterkeys()"; for sequences, it should '
+                 'iterate\n'
+                 'through the values.\n'
+                 '\n'
+                 'object.__len__(self)\n'
+                 '\n'
+                 '   Called to implement the built-in function "len()".  '
+                 'Should return\n'
+                 '   the length of the object, an integer ">=" 0.  Also, an '
+                 'object that\n'
+                 '   doesn\'t define a "__nonzero__()" method and whose '
+                 '"__len__()"\n'
+                 '   method returns zero is considered to be false in a '
+                 'Boolean context.\n'
+                 '\n'
+                 '   **CPython implementation detail:** In CPython, the length '
+                 'is\n'
+                 '   required to be at most "sys.maxsize". If the length is '
+                 'larger than\n'
+                 '   "sys.maxsize" some features (such as "len()") may raise\n'
+                 '   "OverflowError".  To prevent raising "OverflowError" by '
+                 'truth value\n'
+                 '   testing, an object must define a "__nonzero__()" method.\n'
+                 '\n'
+                 'object.__getitem__(self, key)\n'
+                 '\n'
+                 '   Called to implement evaluation of "self[key]". For '
+                 'sequence types,\n'
+                 '   the accepted keys should be integers and slice objects.  '
+                 'Note that\n'
+                 '   the special interpretation of negative indexes (if the '
+                 'class wishes\n'
+                 '   to emulate a sequence type) is up to the "__getitem__()" '
+                 'method. If\n'
+                 '   *key* is of an inappropriate type, "TypeError" may be '
+                 'raised; if of\n'
+                 '   a value outside the set of indexes for the sequence '
+                 '(after any\n'
+                 '   special interpretation of negative values), "IndexError" '
+                 'should be\n'
+                 '   raised. For mapping types, if *key* is missing (not in '
+                 'the\n'
+                 '   container), "KeyError" should be raised.\n'
+                 '\n'
+                 '   Note: "for" loops expect that an "IndexError" will be '
+                 'raised for\n'
+                 '     illegal indexes to allow proper detection of the end of '
+                 'the\n'
+                 '     sequence.\n'
+                 '\n'
+                 'object.__missing__(self, key)\n'
+                 '\n'
+                 '   Called by "dict"."__getitem__()" to implement "self[key]" '
+                 'for dict\n'
+                 '   subclasses when key is not in the dictionary.\n'
+                 '\n'
+                 'object.__setitem__(self, key, value)\n'
+                 '\n'
+                 '   Called to implement assignment to "self[key]".  Same note '
+                 'as for\n'
+                 '   "__getitem__()".  This should only be implemented for '
+                 'mappings if\n'
+                 '   the objects support changes to the values for keys, or if '
+                 'new keys\n'
+                 '   can be added, or for sequences if elements can be '
+                 'replaced.  The\n'
+                 '   same exceptions should be raised for improper *key* '
+                 'values as for\n'
+                 '   the "__getitem__()" method.\n'
+                 '\n'
+                 'object.__delitem__(self, key)\n'
+                 '\n'
+                 '   Called to implement deletion of "self[key]".  Same note '
+                 'as for\n'
+                 '   "__getitem__()".  This should only be implemented for '
+                 'mappings if\n'
+                 '   the objects support removal of keys, or for sequences if '
+                 'elements\n'
+                 '   can be removed from the sequence.  The same exceptions '
+                 'should be\n'
+                 '   raised for improper *key* values as for the '
+                 '"__getitem__()" method.\n'
+                 '\n'
+                 'object.__iter__(self)\n'
+                 '\n'
+                 '   This method is called when an iterator is required for a '
+                 'container.\n'
+                 '   This method should return a new iterator object that can '
+                 'iterate\n'
+                 '   over all the objects in the container.  For mappings, it '
+                 'should\n'
+                 '   iterate over the keys of the container, and should also '
+                 'be made\n'
+                 '   available as the method "iterkeys()".\n'
+                 '\n'
+                 '   Iterator objects also need to implement this method; they '
+                 'are\n'
+                 '   required to return themselves.  For more information on '
+                 'iterator\n'
+                 '   objects, see Iterator Types.\n'
+                 '\n'
+                 'object.__reversed__(self)\n'
+                 '\n'
+                 '   Called (if present) by the "reversed()" built-in to '
+                 'implement\n'
+                 '   reverse iteration.  It should return a new iterator '
+                 'object that\n'
+                 '   iterates over all the objects in the container in reverse '
+                 'order.\n'
+                 '\n'
+                 '   If the "__reversed__()" method is not provided, the '
+                 '"reversed()"\n'
+                 '   built-in will fall back to using the sequence protocol '
+                 '("__len__()"\n'
+                 '   and "__getitem__()").  Objects that support the sequence '
+                 'protocol\n'
+                 '   should only provide "__reversed__()" if they can provide '
+                 'an\n'
+                 '   implementation that is more efficient than the one '
+                 'provided by\n'
+                 '   "reversed()".\n'
+                 '\n'
+                 '   New in version 2.6.\n'
+                 '\n'
+                 'The membership test operators ("in" and "not in") are '
+                 'normally\n'
+                 'implemented as an iteration through a sequence.  However, '
+                 'container\n'
+                 'objects can supply the following special method with a more '
+                 'efficient\n'
+                 'implementation, which also does not require the object be a '
+                 'sequence.\n'
+                 '\n'
+                 'object.__contains__(self, item)\n'
+                 '\n'
+                 '   Called to implement membership test operators.  Should '
+                 'return true\n'
+                 '   if *item* is in *self*, false otherwise.  For mapping '
+                 'objects, this\n'
+                 '   should consider the keys of the mapping rather than the '
+                 'values or\n'
+                 '   the key-item pairs.\n'
+                 '\n'
+                 '   For objects that don\'t define "__contains__()", the '
+                 'membership test\n'
+                 '   first tries iteration via "__iter__()", then the old '
+                 'sequence\n'
+                 '   iteration protocol via "__getitem__()", see this section '
+                 'in the\n'
+                 '   language reference.\n'
+                 '\n'
+                 '\n'
+                 'Additional methods for emulation of sequence types\n'
+                 '==================================================\n'
+                 '\n'
+                 'The following optional methods can be defined to further '
+                 'emulate\n'
+                 'sequence objects.  Immutable sequences methods should at '
+                 'most only\n'
+                 'define "__getslice__()"; mutable sequences might define all '
+                 'three\n'
+                 'methods.\n'
+                 '\n'
+                 'object.__getslice__(self, i, j)\n'
+                 '\n'
+                 '   Deprecated since version 2.0: Support slice objects as '
+                 'parameters\n'
+                 '   to the "__getitem__()" method. (However, built-in types '
+                 'in CPython\n'
+                 '   currently still implement "__getslice__()".  Therefore, '
+                 'you have to\n'
+                 '   override it in derived classes when implementing '
+                 'slicing.)\n'
+                 '\n'
+                 '   Called to implement evaluation of "self[i:j]". The '
+                 'returned object\n'
+                 '   should be of the same type as *self*.  Note that missing '
+                 '*i* or *j*\n'
+                 '   in the slice expression are replaced by zero or '
+                 '"sys.maxsize",\n'
+                 '   respectively.  If negative indexes are used in the slice, '
+                 'the\n'
+                 '   length of the sequence is added to that index. If the '
+                 'instance does\n'
+                 '   not implement the "__len__()" method, an "AttributeError" '
+                 'is\n'
+                 '   raised. No guarantee is made that indexes adjusted this '
+                 'way are not\n'
+                 '   still negative.  Indexes which are greater than the '
+                 'length of the\n'
+                 '   sequence are not modified. If no "__getslice__()" is '
+                 'found, a slice\n'
+                 '   object is created instead, and passed to "__getitem__()" '
+                 'instead.\n'
+                 '\n'
+                 'object.__setslice__(self, i, j, sequence)\n'
+                 '\n'
+                 '   Called to implement assignment to "self[i:j]". Same notes '
+                 'for *i*\n'
+                 '   and *j* as for "__getslice__()".\n'
+                 '\n'
+                 '   This method is deprecated. If no "__setslice__()" is '
+                 'found, or for\n'
+                 '   extended slicing of the form "self[i:j:k]", a slice '
+                 'object is\n'
+                 '   created, and passed to "__setitem__()", instead of '
+                 '"__setslice__()"\n'
+                 '   being called.\n'
+                 '\n'
+                 'object.__delslice__(self, i, j)\n'
+                 '\n'
+                 '   Called to implement deletion of "self[i:j]". Same notes '
+                 'for *i* and\n'
+                 '   *j* as for "__getslice__()". This method is deprecated. '
+                 'If no\n'
+                 '   "__delslice__()" is found, or for extended slicing of the '
+                 'form\n'
+                 '   "self[i:j:k]", a slice object is created, and passed to\n'
+                 '   "__delitem__()", instead of "__delslice__()" being '
+                 'called.\n'
+                 '\n'
+                 'Notice that these methods are only invoked when a single '
+                 'slice with a\n'
+                 'single colon is used, and the slice method is available.  '
+                 'For slice\n'
+                 'operations involving extended slice notation, or in absence '
+                 'of the\n'
+                 'slice methods, "__getitem__()", "__setitem__()" or '
+                 '"__delitem__()" is\n'
+                 'called with a slice object as argument.\n'
+                 '\n'
+                 'The following example demonstrate how to make your program '
+                 'or module\n'
+                 'compatible with earlier versions of Python (assuming that '
+                 'methods\n'
+                 '"__getitem__()", "__setitem__()" and "__delitem__()" support '
+                 'slice\n'
+                 'objects as arguments):\n'
+                 '\n'
+                 '   class MyClass:\n'
+                 '       ...\n'
+                 '       def __getitem__(self, index):\n'
+                 '           ...\n'
+                 '       def __setitem__(self, index, value):\n'
+                 '           ...\n'
+                 '       def __delitem__(self, index):\n'
+                 '           ...\n'
+                 '\n'
+                 '       if sys.version_info < (2, 0):\n'
+                 "           # They won't be defined if version is at least "
+                 '2.0 final\n'
+                 '\n'
+                 '           def __getslice__(self, i, j):\n'
+                 '               return self[max(0, i):max(0, j):]\n'
+                 '           def __setslice__(self, i, j, seq):\n'
+                 '               self[max(0, i):max(0, j):] = seq\n'
+                 '           def __delslice__(self, i, j):\n'
+                 '               del self[max(0, i):max(0, j):]\n'
+                 '       ...\n'
+                 '\n'
+                 'Note the calls to "max()"; these are necessary because of '
+                 'the handling\n'
+                 'of negative indices before the "__*slice__()" methods are '
+                 'called.\n'
+                 'When negative indexes are used, the "__*item__()" methods '
+                 'receive them\n'
+                 'as provided, but the "__*slice__()" methods get a "cooked" '
+                 'form of the\n'
+                 'index values.  For each negative index value, the length of '
+                 'the\n'
+                 'sequence is added to the index before calling the method '
+                 '(which may\n'
+                 'still result in a negative index); this is the customary '
+                 'handling of\n'
+                 'negative indexes by the built-in sequence types, and the '
+                 '"__*item__()"\n'
+                 'methods are expected to do this as well.  However, since '
+                 'they should\n'
+                 'already be doing that, negative indexes cannot be passed in; '
+                 'they must\n'
+                 'be constrained to the bounds of the sequence before being '
+                 'passed to\n'
+                 'the "__*item__()" methods. Calling "max(0, i)" conveniently '
+                 'returns\n'
+                 'the proper value.\n'
+                 '\n'
+                 '\n'
+                 'Emulating numeric types\n'
+                 '=======================\n'
+                 '\n'
+                 'The following methods can be defined to emulate numeric '
+                 'objects.\n'
+                 'Methods corresponding to operations that are not supported '
+                 'by the\n'
+                 'particular kind of number implemented (e.g., bitwise '
+                 'operations for\n'
+                 'non-integral numbers) should be left undefined.\n'
+                 '\n'
+                 'object.__add__(self, other)\n'
+                 'object.__sub__(self, other)\n'
+                 'object.__mul__(self, other)\n'
+                 'object.__floordiv__(self, other)\n'
+                 'object.__mod__(self, other)\n'
+                 'object.__divmod__(self, other)\n'
+                 'object.__pow__(self, other[, modulo])\n'
+                 'object.__lshift__(self, other)\n'
+                 'object.__rshift__(self, other)\n'
+                 'object.__and__(self, other)\n'
+                 'object.__xor__(self, other)\n'
+                 'object.__or__(self, other)\n'
+                 '\n'
+                 '   These methods are called to implement the binary '
+                 'arithmetic\n'
+                 '   operations ("+", "-", "*", "//", "%", "divmod()", '
+                 '"pow()", "**",\n'
+                 '   "<<", ">>", "&", "^", "|").  For instance, to evaluate '
+                 'the\n'
+                 '   expression "x + y", where *x* is an instance of a class '
+                 'that has an\n'
+                 '   "__add__()" method, "x.__add__(y)" is called.  The '
+                 '"__divmod__()"\n'
+                 '   method should be the equivalent to using "__floordiv__()" '
+                 'and\n'
+                 '   "__mod__()"; it should not be related to "__truediv__()" '
+                 '(described\n'
+                 '   below).  Note that "__pow__()" should be defined to '
+                 'accept an\n'
+                 '   optional third argument if the ternary version of the '
+                 'built-in\n'
+                 '   "pow()" function is to be supported.\n'
+                 '\n'
+                 '   If one of those methods does not support the operation '
+                 'with the\n'
+                 '   supplied arguments, it should return "NotImplemented".\n'
+                 '\n'
+                 'object.__div__(self, other)\n'
+                 'object.__truediv__(self, other)\n'
+                 '\n'
+                 '   The division operator ("/") is implemented by these '
+                 'methods.  The\n'
+                 '   "__truediv__()" method is used when "__future__.division" '
+                 'is in\n'
+                 '   effect, otherwise "__div__()" is used.  If only one of '
+                 'these two\n'
+                 '   methods is defined, the object will not support division '
+                 'in the\n'
+                 '   alternate context; "TypeError" will be raised instead.\n'
+                 '\n'
+                 'object.__radd__(self, other)\n'
+                 'object.__rsub__(self, other)\n'
+                 'object.__rmul__(self, other)\n'
+                 'object.__rdiv__(self, other)\n'
+                 'object.__rtruediv__(self, other)\n'
+                 'object.__rfloordiv__(self, other)\n'
+                 'object.__rmod__(self, other)\n'
+                 'object.__rdivmod__(self, other)\n'
+                 'object.__rpow__(self, other)\n'
+                 'object.__rlshift__(self, other)\n'
+                 'object.__rrshift__(self, other)\n'
+                 'object.__rand__(self, other)\n'
+                 'object.__rxor__(self, other)\n'
+                 'object.__ror__(self, other)\n'
+                 '\n'
+                 '   These methods are called to implement the binary '
+                 'arithmetic\n'
+                 '   operations ("+", "-", "*", "/", "%", "divmod()", "pow()", '
+                 '"**",\n'
+                 '   "<<", ">>", "&", "^", "|") with reflected (swapped) '
+                 'operands.\n'
+                 '   These functions are only called if the left operand does '
+                 'not\n'
+                 '   support the corresponding operation and the operands are '
+                 'of\n'
+                 '   different types. [2] For instance, to evaluate the '
+                 'expression "x -\n'
+                 '   y", where *y* is an instance of a class that has an '
+                 '"__rsub__()"\n'
+                 '   method, "y.__rsub__(x)" is called if "x.__sub__(y)" '
+                 'returns\n'
+                 '   *NotImplemented*.\n'
+                 '\n'
+                 '   Note that ternary "pow()" will not try calling '
+                 '"__rpow__()" (the\n'
+                 '   coercion rules would become too complicated).\n'
+                 '\n'
+                 "   Note: If the right operand's type is a subclass of the "
+                 'left\n'
+                 "     operand's type and that subclass provides the reflected "
+                 'method\n'
+                 '     for the operation, this method will be called before '
+                 'the left\n'
+                 "     operand's non-reflected method.  This behavior allows "
+                 'subclasses\n'
+                 "     to override their ancestors' operations.\n"
+                 '\n'
+                 'object.__iadd__(self, other)\n'
+                 'object.__isub__(self, other)\n'
+                 'object.__imul__(self, other)\n'
+                 'object.__idiv__(self, other)\n'
+                 'object.__itruediv__(self, other)\n'
+                 'object.__ifloordiv__(self, other)\n'
+                 'object.__imod__(self, other)\n'
+                 'object.__ipow__(self, other[, modulo])\n'
+                 'object.__ilshift__(self, other)\n'
+                 'object.__irshift__(self, other)\n'
+                 'object.__iand__(self, other)\n'
+                 'object.__ixor__(self, other)\n'
+                 'object.__ior__(self, other)\n'
+                 '\n'
+                 '   These methods are called to implement the augmented '
+                 'arithmetic\n'
+                 '   assignments ("+=", "-=", "*=", "/=", "//=", "%=", "**=", '
+                 '"<<=",\n'
+                 '   ">>=", "&=", "^=", "|=").  These methods should attempt '
+                 'to do the\n'
+                 '   operation in-place (modifying *self*) and return the '
+                 'result (which\n'
+                 '   could be, but does not have to be, *self*).  If a '
+                 'specific method\n'
+                 '   is not defined, the augmented assignment falls back to '
+                 'the normal\n'
+                 '   methods.  For instance, to execute the statement "x += '
+                 'y", where\n'
+                 '   *x* is an instance of a class that has an "__iadd__()" '
+                 'method,\n'
+                 '   "x.__iadd__(y)" is called.  If *x* is an instance of a '
+                 'class that\n'
+                 '   does not define a "__iadd__()" method, "x.__add__(y)" '
+                 'and\n'
+                 '   "y.__radd__(x)" are considered, as with the evaluation of '
+                 '"x + y".\n'
+                 '\n'
+                 'object.__neg__(self)\n'
+                 'object.__pos__(self)\n'
+                 'object.__abs__(self)\n'
+                 'object.__invert__(self)\n'
+                 '\n'
+                 '   Called to implement the unary arithmetic operations ("-", '
+                 '"+",\n'
+                 '   "abs()" and "~").\n'
+                 '\n'
+                 'object.__complex__(self)\n'
+                 'object.__int__(self)\n'
+                 'object.__long__(self)\n'
+                 'object.__float__(self)\n'
+                 '\n'
+                 '   Called to implement the built-in functions "complex()", '
+                 '"int()",\n'
+                 '   "long()", and "float()".  Should return a value of the '
+                 'appropriate\n'
+                 '   type.\n'
+                 '\n'
+                 'object.__oct__(self)\n'
+                 'object.__hex__(self)\n'
+                 '\n'
+                 '   Called to implement the built-in functions "oct()" and '
+                 '"hex()".\n'
+                 '   Should return a string value.\n'
+                 '\n'
+                 'object.__index__(self)\n'
+                 '\n'
+                 '   Called to implement "operator.index()".  Also called '
+                 'whenever\n'
+                 '   Python needs an integer object (such as in slicing).  '
+                 'Must return\n'
+                 '   an integer (int or long).\n'
+                 '\n'
+                 '   New in version 2.5.\n'
+                 '\n'
+                 'object.__coerce__(self, other)\n'
+                 '\n'
+                 '   Called to implement "mixed-mode" numeric arithmetic.  '
+                 'Should either\n'
+                 '   return a 2-tuple containing *self* and *other* converted '
+                 'to a\n'
+                 '   common numeric type, or "None" if conversion is '
+                 'impossible.  When\n'
+                 '   the common type would be the type of "other", it is '
+                 'sufficient to\n'
+                 '   return "None", since the interpreter will also ask the '
+                 'other object\n'
+                 '   to attempt a coercion (but sometimes, if the '
+                 'implementation of the\n'
+                 '   other type cannot be changed, it is useful to do the '
+                 'conversion to\n'
+                 '   the other type here).  A return value of "NotImplemented" '
+                 'is\n'
+                 '   equivalent to returning "None".\n'
+                 '\n'
+                 '\n'
+                 'Coercion rules\n'
+                 '==============\n'
+                 '\n'
+                 'This section used to document the rules for coercion.  As '
+                 'the language\n'
+                 'has evolved, the coercion rules have become hard to '
+                 'document\n'
+                 'precisely; documenting what one version of one particular\n'
+                 'implementation does is undesirable.  Instead, here are some '
+                 'informal\n'
+                 'guidelines regarding coercion.  In Python 3, coercion will '
+                 'not be\n'
+                 'supported.\n'
+                 '\n'
+                 '* If the left operand of a % operator is a string or Unicode '
+                 'object,\n'
+                 '  no coercion takes place and the string formatting '
+                 'operation is\n'
+                 '  invoked instead.\n'
+                 '\n'
+                 '* It is no longer recommended to define a coercion '
+                 'operation. Mixed-\n'
+                 "  mode operations on types that don't define coercion pass "
+                 'the\n'
+                 '  original arguments to the operation.\n'
+                 '\n'
+                 '* New-style classes (those derived from "object") never '
+                 'invoke the\n'
+                 '  "__coerce__()" method in response to a binary operator; '
+                 'the only\n'
+                 '  time "__coerce__()" is invoked is when the built-in '
+                 'function\n'
+                 '  "coerce()" is called.\n'
+                 '\n'
+                 '* For most intents and purposes, an operator that returns\n'
+                 '  "NotImplemented" is treated the same as one that is not '
+                 'implemented\n'
+                 '  at all.\n'
+                 '\n'
+                 '* Below, "__op__()" and "__rop__()" are used to signify the '
+                 'generic\n'
+                 '  method names corresponding to an operator; "__iop__()" is '
+                 'used for\n'
+                 '  the corresponding in-place operator.  For example, for the '
+                 'operator\n'
+                 '  \'"+"\', "__add__()" and "__radd__()" are used for the '
+                 'left and right\n'
+                 '  variant of the binary operator, and "__iadd__()" for the '
+                 'in-place\n'
+                 '  variant.\n'
+                 '\n'
+                 '* For objects *x* and *y*, first "x.__op__(y)" is tried.  If '
+                 'this is\n'
+                 '  not implemented or returns "NotImplemented", '
+                 '"y.__rop__(x)" is\n'
+                 '  tried.  If this is also not implemented or returns '
+                 '"NotImplemented",\n'
+                 '  a "TypeError" exception is raised.  But see the following '
+                 'exception:\n'
+                 '\n'
+                 '* Exception to the previous item: if the left operand is an '
+                 'instance\n'
+                 '  of a built-in type or a new-style class, and the right '
+                 'operand is an\n'
+                 '  instance of a proper subclass of that type or class and '
+                 'overrides\n'
+                 '  the base\'s "__rop__()" method, the right operand\'s '
+                 '"__rop__()"\n'
+                 '  method is tried *before* the left operand\'s "__op__()" '
+                 'method.\n'
+                 '\n'
+                 '  This is done so that a subclass can completely override '
+                 'binary\n'
+                 '  operators. Otherwise, the left operand\'s "__op__()" '
+                 'method would\n'
+                 '  always accept the right operand: when an instance of a '
+                 'given class\n'
+                 '  is expected, an instance of a subclass of that class is '
+                 'always\n'
+                 '  acceptable.\n'
+                 '\n'
+                 '* When either operand type defines a coercion, this coercion '
+                 'is\n'
+                 '  called before that type\'s "__op__()" or "__rop__()" '
+                 'method is\n'
+                 '  called, but no sooner.  If the coercion returns an object '
+                 'of a\n'
+                 '  different type for the operand whose coercion is invoked, '
+                 'part of\n'
+                 '  the process is redone using the new object.\n'
+                 '\n'
+                 '* When an in-place operator (like \'"+="\') is used, if the '
+                 'left\n'
+                 '  operand implements "__iop__()", it is invoked without any '
+                 'coercion.\n'
+                 '  When the operation falls back to "__op__()" and/or '
+                 '"__rop__()", the\n'
+                 '  normal coercion rules apply.\n'
+                 '\n'
+                 '* In "x + y", if *x* is a sequence that implements sequence\n'
+                 '  concatenation, sequence concatenation is invoked.\n'
+                 '\n'
+                 '* In "x * y", if one operand is a sequence that implements '
+                 'sequence\n'
+                 '  repetition, and the other is an integer ("int" or "long"), '
+                 'sequence\n'
+                 '  repetition is invoked.\n'
+                 '\n'
+                 '* Rich comparisons (implemented by methods "__eq__()" and so '
+                 'on)\n'
+                 '  never use coercion.  Three-way comparison (implemented by\n'
+                 '  "__cmp__()") does use coercion under the same conditions '
+                 'as other\n'
+                 '  binary operations use it.\n'
+                 '\n'
+                 '* In the current implementation, the built-in numeric types '
+                 '"int",\n'
+                 '  "long", "float", and "complex" do not use coercion. All '
+                 'these types\n'
+                 '  implement a "__coerce__()" method, for use by the '
+                 'built-in\n'
+                 '  "coerce()" function.\n'
+                 '\n'
+                 '  Changed in version 2.7: The complex type no longer makes '
+                 'implicit\n'
+                 '  calls to the "__coerce__()" method for mixed-type binary '
+                 'arithmetic\n'
+                 '  operations.\n'
+                 '\n'
+                 '\n'
+                 'With Statement Context Managers\n'
+                 '===============================\n'
+                 '\n'
+                 'New in version 2.5.\n'
+                 '\n'
+                 'A *context manager* is an object that defines the runtime '
+                 'context to\n'
+                 'be established when executing a "with" statement. The '
+                 'context manager\n'
+                 'handles the entry into, and the exit from, the desired '
+                 'runtime context\n'
+                 'for the execution of the block of code.  Context managers '
+                 'are normally\n'
+                 'invoked using the "with" statement (described in section The '
+                 'with\n'
+                 'statement), but can also be used by directly invoking their '
+                 'methods.\n'
+                 '\n'
+                 'Typical uses of context managers include saving and '
+                 'restoring various\n'
+                 'kinds of global state, locking and unlocking resources, '
+                 'closing opened\n'
+                 'files, etc.\n'
+                 '\n'
+                 'For more information on context managers, see Context '
+                 'Manager Types.\n'
+                 '\n'
+                 'object.__enter__(self)\n'
+                 '\n'
+                 '   Enter the runtime context related to this object. The '
+                 '"with"\n'
+                 "   statement will bind this method's return value to the "
+                 'target(s)\n'
+                 '   specified in the "as" clause of the statement, if any.\n'
+                 '\n'
+                 'object.__exit__(self, exc_type, exc_value, traceback)\n'
+                 '\n'
+                 '   Exit the runtime context related to this object. The '
+                 'parameters\n'
+                 '   describe the exception that caused the context to be '
+                 'exited. If the\n'
+                 '   context was exited without an exception, all three '
+                 'arguments will\n'
+                 '   be "None".\n'
+                 '\n'
+                 '   If an exception is supplied, and the method wishes to '
+                 'suppress the\n'
+                 '   exception (i.e., prevent it from being propagated), it '
+                 'should\n'
+                 '   return a true value. Otherwise, the exception will be '
+                 'processed\n'
+                 '   normally upon exit from this method.\n'
+                 '\n'
+                 '   Note that "__exit__()" methods should not reraise the '
+                 'passed-in\n'
+                 "   exception; this is the caller's responsibility.\n"
+                 '\n'
+                 'See also:\n'
+                 '\n'
+                 '  **PEP 343** - The "with" statement\n'
+                 '     The specification, background, and examples for the '
+                 'Python "with"\n'
+                 '     statement.\n'
+                 '\n'
+                 '\n'
+                 'Special method lookup for old-style classes\n'
+                 '===========================================\n'
+                 '\n'
+                 'For old-style classes, special methods are always looked up '
+                 'in exactly\n'
+                 'the same way as any other method or attribute. This is the '
+                 'case\n'
+                 'regardless of whether the method is being looked up '
+                 'explicitly as in\n'
+                 '"x.__getitem__(i)" or implicitly as in "x[i]".\n'
+                 '\n'
+                 'This behaviour means that special methods may exhibit '
+                 'different\n'
+                 'behaviour for different instances of a single old-style '
+                 'class if the\n'
+                 'appropriate special attributes are set differently:\n'
+                 '\n'
+                 '   >>> class C:\n'
+                 '   ...     pass\n'
+                 '   ...\n'
+                 '   >>> c1 = C()\n'
+                 '   >>> c2 = C()\n'
+                 '   >>> c1.__len__ = lambda: 5\n'
+                 '   >>> c2.__len__ = lambda: 9\n'
+                 '   >>> len(c1)\n'
+                 '   5\n'
+                 '   >>> len(c2)\n'
+                 '   9\n'
+                 '\n'
+                 '\n'
+                 'Special method lookup for new-style classes\n'
+                 '===========================================\n'
+                 '\n'
+                 'For new-style classes, implicit invocations of special '
+                 'methods are\n'
+                 "only guaranteed to work correctly if defined on an object's "
+                 'type, not\n'
+                 "in the object's instance dictionary.  That behaviour is the "
+                 'reason why\n'
+                 'the following code raises an exception (unlike the '
+                 'equivalent example\n'
+                 'with old-style classes):\n'
+                 '\n'
+                 '   >>> class C(object):\n'
+                 '   ...     pass\n'
+                 '   ...\n'
+                 '   >>> c = C()\n'
+                 '   >>> c.__len__ = lambda: 5\n'
+                 '   >>> len(c)\n'
+                 '   Traceback (most recent call last):\n'
+                 '     File "<stdin>", line 1, in <module>\n'
+                 "   TypeError: object of type 'C' has no len()\n"
+                 '\n'
+                 'The rationale behind this behaviour lies with a number of '
+                 'special\n'
+                 'methods such as "__hash__()" and "__repr__()" that are '
+                 'implemented by\n'
+                 'all objects, including type objects. If the implicit lookup '
+                 'of these\n'
+                 'methods used the conventional lookup process, they would '
+                 'fail when\n'
+                 'invoked on the type object itself:\n'
+                 '\n'
+                 '   >>> 1 .__hash__() == hash(1)\n'
+                 '   True\n'
+                 '   >>> int.__hash__() == hash(int)\n'
+                 '   Traceback (most recent call last):\n'
+                 '     File "<stdin>", line 1, in <module>\n'
+                 "   TypeError: descriptor '__hash__' of 'int' object needs an "
+                 'argument\n'
+                 '\n'
+                 'Incorrectly attempting to invoke an unbound method of a '
+                 'class in this\n'
+                 "way is sometimes referred to as 'metaclass confusion', and "
+                 'is avoided\n'
+                 'by bypassing the instance when looking up special methods:\n'
+                 '\n'
+                 '   >>> type(1).__hash__(1) == hash(1)\n'
+                 '   True\n'
+                 '   >>> type(int).__hash__(int) == hash(int)\n'
+                 '   True\n'
+                 '\n'
+                 'In addition to bypassing any instance attributes in the '
+                 'interest of\n'
+                 'correctness, implicit special method lookup generally also '
+                 'bypasses\n'
+                 'the "__getattribute__()" method even of the object\'s '
+                 'metaclass:\n'
+                 '\n'
+                 '   >>> class Meta(type):\n'
+                 '   ...    def __getattribute__(*args):\n'
+                 '   ...       print "Metaclass getattribute invoked"\n'
+                 '   ...       return type.__getattribute__(*args)\n'
+                 '   ...\n'
+                 '   >>> class C(object):\n'
+                 '   ...     __metaclass__ = Meta\n'
+                 '   ...     def __len__(self):\n'
+                 '   ...         return 10\n'
+                 '   ...     def __getattribute__(*args):\n'
+                 '   ...         print "Class getattribute invoked"\n'
+                 '   ...         return object.__getattribute__(*args)\n'
+                 '   ...\n'
+                 '   >>> c = C()\n'
+                 '   >>> c.__len__()                 # Explicit lookup via '
+                 'instance\n'
+                 '   Class getattribute invoked\n'
+                 '   10\n'
+                 '   >>> type(c).__len__(c)          # Explicit lookup via '
+                 'type\n'
+                 '   Metaclass getattribute invoked\n'
+                 '   10\n'
+                 '   >>> len(c)                      # Implicit lookup\n'
+                 '   10\n'
+                 '\n'
+                 'Bypassing the "__getattribute__()" machinery in this fashion '
+                 'provides\n'
+                 'significant scope for speed optimisations within the '
+                 'interpreter, at\n'
+                 'the cost of some flexibility in the handling of special '
+                 'methods (the\n'
+                 'special method *must* be set on the class object itself in '
+                 'order to be\n'
+                 'consistently invoked by the interpreter).\n'
+                 '\n'
+                 '-[ Footnotes ]-\n'
+                 '\n'
+                 "[1] It *is* possible in some cases to change an object's "
+                 'type,\n'
+                 "    under certain controlled conditions. It generally isn't "
+                 'a good\n'
+                 '    idea though, since it can lead to some very strange '
+                 'behaviour if\n'
+                 '    it is handled incorrectly.\n'
+                 '\n'
+                 '[2] For operands of the same type, it is assumed that if the '
+                 'non-\n'
+                 '    reflected method (such as "__add__()") fails the '
+                 'operation is not\n'
+                 '    supported, which is why the reflected method is not '
+                 'called.\n',
+ 'string-methods': '\n'
+                   'String Methods\n'
+                   '**************\n'
+                   '\n'
+                   'Below are listed the string methods which both 8-bit '
+                   'strings and\n'
+                   'Unicode objects support.  Some of them are also available '
+                   'on\n'
+                   '"bytearray" objects.\n'
+                   '\n'
+                   "In addition, Python's strings support the sequence type "
+                   'methods\n'
+                   'described in the Sequence Types --- str, unicode, list, '
+                   'tuple,\n'
+                   'bytearray, buffer, xrange section. To output formatted '
+                   'strings use\n'
+                   'template strings or the "%" operator described in the '
+                   'String\n'
+                   'Formatting Operations section. Also, see the "re" module '
+                   'for string\n'
+                   'functions based on regular expressions.\n'
+                   '\n'
+                   'str.capitalize()\n'
+                   '\n'
+                   '   Return a copy of the string with its first character '
+                   'capitalized\n'
+                   '   and the rest lowercased.\n'
+                   '\n'
+                   '   For 8-bit strings, this method is locale-dependent.\n'
+                   '\n'
+                   'str.center(width[, fillchar])\n'
+                   '\n'
+                   '   Return centered in a string of length *width*. Padding '
+                   'is done\n'
+                   '   using the specified *fillchar* (default is a space).\n'
+                   '\n'
+                   '   Changed in version 2.4: Support for the *fillchar* '
+                   'argument.\n'
+                   '\n'
+                   'str.count(sub[, start[, end]])\n'
+                   '\n'
+                   '   Return the number of non-overlapping occurrences of '
+                   'substring *sub*\n'
+                   '   in the range [*start*, *end*].  Optional arguments '
+                   '*start* and\n'
+                   '   *end* are interpreted as in slice notation.\n'
+                   '\n'
+                   'str.decode([encoding[, errors]])\n'
+                   '\n'
+                   '   Decodes the string using the codec registered for '
+                   '*encoding*.\n'
+                   '   *encoding* defaults to the default string encoding.  '
+                   '*errors* may\n'
+                   '   be given to set a different error handling scheme.  The '
+                   'default is\n'
+                   '   "\'strict\'", meaning that encoding errors raise '
+                   '"UnicodeError".\n'
+                   '   Other possible values are "\'ignore\'", "\'replace\'" '
+                   'and any other\n'
+                   '   name registered via "codecs.register_error()", see '
+                   'section Codec\n'
+                   '   Base Classes.\n'
+                   '\n'
+                   '   New in version 2.2.\n'
+                   '\n'
+                   '   Changed in version 2.3: Support for other error '
+                   'handling schemes\n'
+                   '   added.\n'
+                   '\n'
+                   '   Changed in version 2.7: Support for keyword arguments '
+                   'added.\n'
+                   '\n'
+                   'str.encode([encoding[, errors]])\n'
+                   '\n'
+                   '   Return an encoded version of the string.  Default '
+                   'encoding is the\n'
+                   '   current default string encoding.  *errors* may be given '
+                   'to set a\n'
+                   '   different error handling scheme.  The default for '
+                   '*errors* is\n'
+                   '   "\'strict\'", meaning that encoding errors raise a '
+                   '"UnicodeError".\n'
+                   '   Other possible values are "\'ignore\'", "\'replace\'",\n'
+                   '   "\'xmlcharrefreplace\'", "\'backslashreplace\'" and any '
+                   'other name\n'
+                   '   registered via "codecs.register_error()", see section '
+                   'Codec Base\n'
+                   '   Classes. For a list of possible encodings, see section '
+                   'Standard\n'
+                   '   Encodings.\n'
+                   '\n'
+                   '   New in version 2.0.\n'
+                   '\n'
+                   '   Changed in version 2.3: Support for '
+                   '"\'xmlcharrefreplace\'" and\n'
+                   '   "\'backslashreplace\'" and other error handling schemes '
+                   'added.\n'
+                   '\n'
+                   '   Changed in version 2.7: Support for keyword arguments '
+                   'added.\n'
+                   '\n'
+                   'str.endswith(suffix[, start[, end]])\n'
+                   '\n'
+                   '   Return "True" if the string ends with the specified '
+                   '*suffix*,\n'
+                   '   otherwise return "False".  *suffix* can also be a tuple '
+                   'of suffixes\n'
+                   '   to look for.  With optional *start*, test beginning at '
+                   'that\n'
+                   '   position.  With optional *end*, stop comparing at that '
+                   'position.\n'
+                   '\n'
+                   '   Changed in version 2.5: Accept tuples as *suffix*.\n'
+                   '\n'
+                   'str.expandtabs([tabsize])\n'
+                   '\n'
+                   '   Return a copy of the string where all tab characters '
+                   'are replaced\n'
+                   '   by one or more spaces, depending on the current column '
+                   'and the\n'
+                   '   given tab size.  Tab positions occur every *tabsize* '
+                   'characters\n'
+                   '   (default is 8, giving tab positions at columns 0, 8, 16 '
+                   'and so on).\n'
+                   '   To expand the string, the current column is set to zero '
+                   'and the\n'
+                   '   string is examined character by character.  If the '
+                   'character is a\n'
+                   '   tab ("\\t"), one or more space characters are inserted '
+                   'in the result\n'
+                   '   until the current column is equal to the next tab '
+                   'position. (The\n'
+                   '   tab character itself is not copied.)  If the character '
+                   'is a newline\n'
+                   '   ("\\n") or return ("\\r"), it is copied and the current '
+                   'column is\n'
+                   '   reset to zero.  Any other character is copied unchanged '
+                   'and the\n'
+                   '   current column is incremented by one regardless of how '
+                   'the\n'
+                   '   character is represented when printed.\n'
+                   '\n'
+                   "   >>> '01\\t012\\t0123\\t01234'.expandtabs()\n"
+                   "   '01      012     0123    01234'\n"
+                   "   >>> '01\\t012\\t0123\\t01234'.expandtabs(4)\n"
+                   "   '01  012 0123    01234'\n"
+                   '\n'
+                   'str.find(sub[, start[, end]])\n'
+                   '\n'
+                   '   Return the lowest index in the string where substring '
+                   '*sub* is\n'
+                   '   found within the slice "s[start:end]".  Optional '
+                   'arguments *start*\n'
+                   '   and *end* are interpreted as in slice notation.  Return '
+                   '"-1" if\n'
+                   '   *sub* is not found.\n'
+                   '\n'
+                   '   Note: The "find()" method should be used only if you '
+                   'need to know\n'
+                   '     the position of *sub*.  To check if *sub* is a '
+                   'substring or not,\n'
+                   '     use the "in" operator:\n'
+                   '\n'
+                   "        >>> 'Py' in 'Python'\n"
+                   '        True\n'
+                   '\n'
+                   'str.format(*args, **kwargs)\n'
+                   '\n'
+                   '   Perform a string formatting operation.  The string on '
+                   'which this\n'
+                   '   method is called can contain literal text or '
+                   'replacement fields\n'
+                   '   delimited by braces "{}".  Each replacement field '
+                   'contains either\n'
+                   '   the numeric index of a positional argument, or the name '
+                   'of a\n'
+                   '   keyword argument.  Returns a copy of the string where '
+                   'each\n'
+                   '   replacement field is replaced with the string value of '
+                   'the\n'
+                   '   corresponding argument.\n'
+                   '\n'
+                   '   >>> "The sum of 1 + 2 is {0}".format(1+2)\n'
+                   "   'The sum of 1 + 2 is 3'\n"
+                   '\n'
+                   '   See Format String Syntax for a description of the '
+                   'various\n'
+                   '   formatting options that can be specified in format '
+                   'strings.\n'
+                   '\n'
+                   '   This method of string formatting is the new standard in '
+                   'Python 3,\n'
+                   '   and should be preferred to the "%" formatting described '
+                   'in String\n'
+                   '   Formatting Operations in new code.\n'
+                   '\n'
+                   '   New in version 2.6.\n'
+                   '\n'
+                   'str.index(sub[, start[, end]])\n'
+                   '\n'
+                   '   Like "find()", but raise "ValueError" when the '
+                   'substring is not\n'
+                   '   found.\n'
+                   '\n'
+                   'str.isalnum()\n'
+                   '\n'
+                   '   Return true if all characters in the string are '
+                   'alphanumeric and\n'
+                   '   there is at least one character, false otherwise.\n'
+                   '\n'
+                   '   For 8-bit strings, this method is locale-dependent.\n'
+                   '\n'
+                   'str.isalpha()\n'
+                   '\n'
+                   '   Return true if all characters in the string are '
+                   'alphabetic and\n'
+                   '   there is at least one character, false otherwise.\n'
+                   '\n'
+                   '   For 8-bit strings, this method is locale-dependent.\n'
+                   '\n'
+                   'str.isdigit()\n'
+                   '\n'
+                   '   Return true if all characters in the string are digits '
+                   'and there is\n'
+                   '   at least one character, false otherwise.\n'
+                   '\n'
+                   '   For 8-bit strings, this method is locale-dependent.\n'
+                   '\n'
+                   'str.islower()\n'
+                   '\n'
+                   '   Return true if all cased characters [4] in the string '
+                   'are lowercase\n'
+                   '   and there is at least one cased character, false '
+                   'otherwise.\n'
+                   '\n'
+                   '   For 8-bit strings, this method is locale-dependent.\n'
+                   '\n'
+                   'str.isspace()\n'
+                   '\n'
+                   '   Return true if there are only whitespace characters in '
+                   'the string\n'
+                   '   and there is at least one character, false otherwise.\n'
+                   '\n'
+                   '   For 8-bit strings, this method is locale-dependent.\n'
+                   '\n'
+                   'str.istitle()\n'
+                   '\n'
+                   '   Return true if the string is a titlecased string and '
+                   'there is at\n'
+                   '   least one character, for example uppercase characters '
+                   'may only\n'
+                   '   follow uncased characters and lowercase characters only '
+                   'cased ones.\n'
+                   '   Return false otherwise.\n'
+                   '\n'
+                   '   For 8-bit strings, this method is locale-dependent.\n'
+                   '\n'
+                   'str.isupper()\n'
+                   '\n'
+                   '   Return true if all cased characters [4] in the string '
+                   'are uppercase\n'
+                   '   and there is at least one cased character, false '
+                   'otherwise.\n'
+                   '\n'
+                   '   For 8-bit strings, this method is locale-dependent.\n'
+                   '\n'
+                   'str.join(iterable)\n'
+                   '\n'
+                   '   Return a string which is the concatenation of the '
+                   'strings in\n'
+                   '   *iterable*. A "TypeError" will be raised if there are '
+                   'any non-\n'
+                   '   string values in *iterable*, including "bytes" '
+                   'objects.  The\n'
+                   '   separator between elements is the string providing this '
+                   'method.\n'
+                   '\n'
+                   'str.ljust(width[, fillchar])\n'
+                   '\n'
+                   '   Return the string left justified in a string of length '
+                   '*width*.\n'
+                   '   Padding is done using the specified *fillchar* (default '
+                   'is a\n'
+                   '   space).  The original string is returned if *width* is '
+                   'less than or\n'
+                   '   equal to "len(s)".\n'
+                   '\n'
+                   '   Changed in version 2.4: Support for the *fillchar* '
+                   'argument.\n'
+                   '\n'
+                   'str.lower()\n'
+                   '\n'
+                   '   Return a copy of the string with all the cased '
+                   'characters [4]\n'
+                   '   converted to lowercase.\n'
+                   '\n'
+                   '   For 8-bit strings, this method is locale-dependent.\n'
+                   '\n'
+                   'str.lstrip([chars])\n'
+                   '\n'
+                   '   Return a copy of the string with leading characters '
+                   'removed.  The\n'
+                   '   *chars* argument is a string specifying the set of '
+                   'characters to be\n'
+                   '   removed.  If omitted or "None", the *chars* argument '
+                   'defaults to\n'
+                   '   removing whitespace.  The *chars* argument is not a '
+                   'prefix; rather,\n'
+                   '   all combinations of its values are stripped:\n'
+                   '\n'
+                   "   >>> '   spacious   '.lstrip()\n"
+                   "   'spacious   '\n"
+                   "   >>> 'www.example.com'.lstrip('cmowz.')\n"
+                   "   'example.com'\n"
+                   '\n'
+                   '   Changed in version 2.2.2: Support for the *chars* '
+                   'argument.\n'
+                   '\n'
+                   'str.partition(sep)\n'
+                   '\n'
+                   '   Split the string at the first occurrence of *sep*, and '
+                   'return a\n'
+                   '   3-tuple containing the part before the separator, the '
+                   'separator\n'
+                   '   itself, and the part after the separator.  If the '
+                   'separator is not\n'
+                   '   found, return a 3-tuple containing the string itself, '
+                   'followed by\n'
+                   '   two empty strings.\n'
+                   '\n'
+                   '   New in version 2.5.\n'
+                   '\n'
+                   'str.replace(old, new[, count])\n'
+                   '\n'
+                   '   Return a copy of the string with all occurrences of '
+                   'substring *old*\n'
+                   '   replaced by *new*.  If the optional argument *count* is '
+                   'given, only\n'
+                   '   the first *count* occurrences are replaced.\n'
+                   '\n'
+                   'str.rfind(sub[, start[, end]])\n'
+                   '\n'
+                   '   Return the highest index in the string where substring '
+                   '*sub* is\n'
+                   '   found, such that *sub* is contained within '
+                   '"s[start:end]".\n'
+                   '   Optional arguments *start* and *end* are interpreted as '
+                   'in slice\n'
+                   '   notation.  Return "-1" on failure.\n'
+                   '\n'
+                   'str.rindex(sub[, start[, end]])\n'
+                   '\n'
+                   '   Like "rfind()" but raises "ValueError" when the '
+                   'substring *sub* is\n'
+                   '   not found.\n'
+                   '\n'
+                   'str.rjust(width[, fillchar])\n'
+                   '\n'
+                   '   Return the string right justified in a string of length '
+                   '*width*.\n'
+                   '   Padding is done using the specified *fillchar* (default '
+                   'is a\n'
+                   '   space). The original string is returned if *width* is '
+                   'less than or\n'
+                   '   equal to "len(s)".\n'
+                   '\n'
+                   '   Changed in version 2.4: Support for the *fillchar* '
+                   'argument.\n'
+                   '\n'
+                   'str.rpartition(sep)\n'
+                   '\n'
+                   '   Split the string at the last occurrence of *sep*, and '
+                   'return a\n'
+                   '   3-tuple containing the part before the separator, the '
+                   'separator\n'
+                   '   itself, and the part after the separator.  If the '
+                   'separator is not\n'
+                   '   found, return a 3-tuple containing two empty strings, '
+                   'followed by\n'
+                   '   the string itself.\n'
+                   '\n'
+                   '   New in version 2.5.\n'
+                   '\n'
+                   'str.rsplit([sep[, maxsplit]])\n'
+                   '\n'
+                   '   Return a list of the words in the string, using *sep* '
+                   'as the\n'
+                   '   delimiter string. If *maxsplit* is given, at most '
+                   '*maxsplit* splits\n'
+                   '   are done, the *rightmost* ones.  If *sep* is not '
+                   'specified or\n'
+                   '   "None", any whitespace string is a separator.  Except '
+                   'for splitting\n'
+                   '   from the right, "rsplit()" behaves like "split()" which '
+                   'is\n'
+                   '   described in detail below.\n'
+                   '\n'
+                   '   New in version 2.4.\n'
+                   '\n'
+                   'str.rstrip([chars])\n'
+                   '\n'
+                   '   Return a copy of the string with trailing characters '
+                   'removed.  The\n'
+                   '   *chars* argument is a string specifying the set of '
+                   'characters to be\n'
+                   '   removed.  If omitted or "None", the *chars* argument '
+                   'defaults to\n'
+                   '   removing whitespace.  The *chars* argument is not a '
+                   'suffix; rather,\n'
+                   '   all combinations of its values are stripped:\n'
+                   '\n'
+                   "   >>> '   spacious   '.rstrip()\n"
+                   "   '   spacious'\n"
+                   "   >>> 'mississippi'.rstrip('ipz')\n"
+                   "   'mississ'\n"
+                   '\n'
+                   '   Changed in version 2.2.2: Support for the *chars* '
+                   'argument.\n'
+                   '\n'
+                   'str.split([sep[, maxsplit]])\n'
+                   '\n'
+                   '   Return a list of the words in the string, using *sep* '
+                   'as the\n'
+                   '   delimiter string.  If *maxsplit* is given, at most '
+                   '*maxsplit*\n'
+                   '   splits are done (thus, the list will have at most '
+                   '"maxsplit+1"\n'
+                   '   elements).  If *maxsplit* is not specified or "-1", '
+                   'then there is\n'
+                   '   no limit on the number of splits (all possible splits '
+                   'are made).\n'
+                   '\n'
+                   '   If *sep* is given, consecutive delimiters are not '
+                   'grouped together\n'
+                   '   and are deemed to delimit empty strings (for example,\n'
+                   '   "\'1,,2\'.split(\',\')" returns "[\'1\', \'\', '
+                   '\'2\']").  The *sep* argument\n'
+                   '   may consist of multiple characters (for example,\n'
+                   '   "\'1<>2<>3\'.split(\'<>\')" returns "[\'1\', \'2\', '
+                   '\'3\']"). Splitting an\n'
+                   '   empty string with a specified separator returns '
+                   '"[\'\']".\n'
+                   '\n'
+                   '   If *sep* is not specified or is "None", a different '
+                   'splitting\n'
+                   '   algorithm is applied: runs of consecutive whitespace '
+                   'are regarded\n'
+                   '   as a single separator, and the result will contain no '
+                   'empty strings\n'
+                   '   at the start or end if the string has leading or '
+                   'trailing\n'
+                   '   whitespace.  Consequently, splitting an empty string or '
+                   'a string\n'
+                   '   consisting of just whitespace with a "None" separator '
+                   'returns "[]".\n'
+                   '\n'
+                   '   For example, "\' 1  2   3  \'.split()" returns "[\'1\', '
+                   '\'2\', \'3\']", and\n'
+                   '   "\'  1  2   3  \'.split(None, 1)" returns "[\'1\', '
+                   '\'2   3  \']".\n'
+                   '\n'
+                   'str.splitlines([keepends])\n'
+                   '\n'
+                   '   Return a list of the lines in the string, breaking at '
+                   'line\n'
+                   '   boundaries. This method uses the *universal newlines* '
+                   'approach to\n'
+                   '   splitting lines. Line breaks are not included in the '
+                   'resulting list\n'
+                   '   unless *keepends* is given and true.\n'
+                   '\n'
+                   '   Python recognizes ""\\r"", ""\\n"", and ""\\r\\n"" as '
+                   'line boundaries\n'
+                   '   for 8-bit strings.\n'
+                   '\n'
+                   '   For example:\n'
+                   '\n'
+                   "      >>> 'ab c\\n\\nde fg\\rkl\\r\\n'.splitlines()\n"
+                   "      ['ab c', '', 'de fg', 'kl']\n"
+                   "      >>> 'ab c\\n\\nde fg\\rkl\\r\\n'.splitlines(True)\n"
+                   "      ['ab c\\n', '\\n', 'de fg\\r', 'kl\\r\\n']\n"
+                   '\n'
+                   '   Unlike "split()" when a delimiter string *sep* is '
+                   'given, this\n'
+                   '   method returns an empty list for the empty string, and '
+                   'a terminal\n'
+                   '   line break does not result in an extra line:\n'
+                   '\n'
+                   '      >>> "".splitlines()\n'
+                   '      []\n'
+                   '      >>> "One line\\n".splitlines()\n'
+                   "      ['One line']\n"
+                   '\n'
+                   '   For comparison, "split(\'\\n\')" gives:\n'
+                   '\n'
+                   "      >>> ''.split('\\n')\n"
+                   "      ['']\n"
+                   "      >>> 'Two lines\\n'.split('\\n')\n"
+                   "      ['Two lines', '']\n"
+                   '\n'
+                   'unicode.splitlines([keepends])\n'
+                   '\n'
+                   '   Return a list of the lines in the string, like '
+                   '"str.splitlines()".\n'
+                   '   However, the Unicode method splits on the following '
+                   'line\n'
+                   '   boundaries, which are a superset of the *universal '
+                   'newlines*\n'
+                   '   recognized for 8-bit strings.\n'
+                   '\n'
+                   '   '
+                   '+-------------------------+-------------------------------+\n'
+                   '   | Representation          | '
+                   'Description                   |\n'
+                   '   '
+                   '+=========================+===============================+\n'
+                   '   | "\\n"                    | Line '
+                   'Feed                     |\n'
+                   '   '
+                   '+-------------------------+-------------------------------+\n'
+                   '   | "\\r"                    | Carriage '
+                   'Return               |\n'
+                   '   '
+                   '+-------------------------+-------------------------------+\n'
+                   '   | "\\r\\n"                  | Carriage Return + Line '
+                   'Feed   |\n'
+                   '   '
+                   '+-------------------------+-------------------------------+\n'
+                   '   | "\\v" or "\\x0b"          | Line '
+                   'Tabulation               |\n'
+                   '   '
+                   '+-------------------------+-------------------------------+\n'
+                   '   | "\\f" or "\\x0c"          | Form '
+                   'Feed                     |\n'
+                   '   '
+                   '+-------------------------+-------------------------------+\n'
+                   '   | "\\x1c"                  | File '
+                   'Separator                |\n'
+                   '   '
+                   '+-------------------------+-------------------------------+\n'
+                   '   | "\\x1d"                  | Group '
+                   'Separator               |\n'
+                   '   '
+                   '+-------------------------+-------------------------------+\n'
+                   '   | "\\x1e"                  | Record '
+                   'Separator              |\n'
+                   '   '
+                   '+-------------------------+-------------------------------+\n'
+                   '   | "\\x85"                  | Next Line (C1 Control '
+                   'Code)   |\n'
+                   '   '
+                   '+-------------------------+-------------------------------+\n'
+                   '   | "\\u2028"                | Line '
+                   'Separator                |\n'
+                   '   '
+                   '+-------------------------+-------------------------------+\n'
+                   '   | "\\u2029"                | Paragraph '
+                   'Separator           |\n'
+                   '   '
+                   '+-------------------------+-------------------------------+\n'
+                   '\n'
+                   '   Changed in version 2.7: "\\v" and "\\f" added to list '
+                   'of line\n'
+                   '   boundaries.\n'
+                   '\n'
+                   'str.startswith(prefix[, start[, end]])\n'
+                   '\n'
+                   '   Return "True" if string starts with the *prefix*, '
+                   'otherwise return\n'
+                   '   "False". *prefix* can also be a tuple of prefixes to '
+                   'look for.\n'
+                   '   With optional *start*, test string beginning at that '
+                   'position.\n'
+                   '   With optional *end*, stop comparing string at that '
+                   'position.\n'
+                   '\n'
+                   '   Changed in version 2.5: Accept tuples as *prefix*.\n'
+                   '\n'
+                   'str.strip([chars])\n'
+                   '\n'
+                   '   Return a copy of the string with the leading and '
+                   'trailing\n'
+                   '   characters removed. The *chars* argument is a string '
+                   'specifying the\n'
+                   '   set of characters to be removed. If omitted or "None", '
+                   'the *chars*\n'
+                   '   argument defaults to removing whitespace. The *chars* '
+                   'argument is\n'
+                   '   not a prefix or suffix; rather, all combinations of its '
+                   'values are\n'
+                   '   stripped:\n'
+                   '\n'
+                   "   >>> '   spacious   '.strip()\n"
+                   "   'spacious'\n"
+                   "   >>> 'www.example.com'.strip('cmowz.')\n"
+                   "   'example'\n"
+                   '\n'
+                   '   Changed in version 2.2.2: Support for the *chars* '
+                   'argument.\n'
+                   '\n'
+                   'str.swapcase()\n'
+                   '\n'
+                   '   Return a copy of the string with uppercase characters '
+                   'converted to\n'
+                   '   lowercase and vice versa.\n'
+                   '\n'
+                   '   For 8-bit strings, this method is locale-dependent.\n'
+                   '\n'
+                   'str.title()\n'
+                   '\n'
+                   '   Return a titlecased version of the string where words '
+                   'start with an\n'
+                   '   uppercase character and the remaining characters are '
+                   'lowercase.\n'
+                   '\n'
+                   '   The algorithm uses a simple language-independent '
+                   'definition of a\n'
+                   '   word as groups of consecutive letters.  The definition '
+                   'works in\n'
+                   '   many contexts but it means that apostrophes in '
+                   'contractions and\n'
+                   '   possessives form word boundaries, which may not be the '
+                   'desired\n'
+                   '   result:\n'
+                   '\n'
+                   '      >>> "they\'re bill\'s friends from the UK".title()\n'
+                   '      "They\'Re Bill\'S Friends From The Uk"\n'
+                   '\n'
+                   '   A workaround for apostrophes can be constructed using '
+                   'regular\n'
+                   '   expressions:\n'
+                   '\n'
+                   '      >>> import re\n'
+                   '      >>> def titlecase(s):\n'
+                   '      ...     return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n'
+                   '      ...                   lambda mo: '
+                   'mo.group(0)[0].upper() +\n'
+                   '      ...                              '
+                   'mo.group(0)[1:].lower(),\n'
+                   '      ...                   s)\n'
+                   '      ...\n'
+                   '      >>> titlecase("they\'re bill\'s friends.")\n'
+                   '      "They\'re Bill\'s Friends."\n'
+                   '\n'
+                   '   For 8-bit strings, this method is locale-dependent.\n'
+                   '\n'
+                   'str.translate(table[, deletechars])\n'
+                   '\n'
+                   '   Return a copy of the string where all characters '
+                   'occurring in the\n'
+                   '   optional argument *deletechars* are removed, and the '
+                   'remaining\n'
+                   '   characters have been mapped through the given '
+                   'translation table,\n'
+                   '   which must be a string of length 256.\n'
+                   '\n'
+                   '   You can use the "maketrans()" helper function in the '
+                   '"string"\n'
+                   '   module to create a translation table. For string '
+                   'objects, set the\n'
+                   '   *table* argument to "None" for translations that only '
+                   'delete\n'
+                   '   characters:\n'
+                   '\n'
+                   "   >>> 'read this short text'.translate(None, 'aeiou')\n"
+                   "   'rd ths shrt txt'\n"
+                   '\n'
+                   '   New in version 2.6: Support for a "None" *table* '
+                   'argument.\n'
+                   '\n'
+                   '   For Unicode objects, the "translate()" method does not '
+                   'accept the\n'
+                   '   optional *deletechars* argument.  Instead, it returns a '
+                   'copy of the\n'
+                   '   *s* where all characters have been mapped through the '
+                   'given\n'
+                   '   translation table which must be a mapping of Unicode '
+                   'ordinals to\n'
+                   '   Unicode ordinals, Unicode strings or "None". Unmapped '
+                   'characters\n'
+                   '   are left untouched. Characters mapped to "None" are '
+                   'deleted.  Note,\n'
+                   '   a more flexible approach is to create a custom '
+                   'character mapping\n'
+                   '   codec using the "codecs" module (see "encodings.cp1251" '
+                   'for an\n'
+                   '   example).\n'
+                   '\n'
+                   'str.upper()\n'
+                   '\n'
+                   '   Return a copy of the string with all the cased '
+                   'characters [4]\n'
+                   '   converted to uppercase.  Note that '
+                   '"str.upper().isupper()" might be\n'
+                   '   "False" if "s" contains uncased characters or if the '
+                   'Unicode\n'
+                   '   category of the resulting character(s) is not "Lu" '
+                   '(Letter,\n'
+                   '   uppercase), but e.g. "Lt" (Letter, titlecase).\n'
+                   '\n'
+                   '   For 8-bit strings, this method is locale-dependent.\n'
+                   '\n'
+                   'str.zfill(width)\n'
+                   '\n'
+                   '   Return the numeric string left filled with zeros in a '
+                   'string of\n'
+                   '   length *width*.  A sign prefix is handled correctly.  '
+                   'The original\n'
+                   '   string is returned if *width* is less than or equal to '
+                   '"len(s)".\n'
+                   '\n'
+                   '   New in version 2.2.2.\n'
+                   '\n'
+                   'The following methods are present only on unicode '
+                   'objects:\n'
+                   '\n'
+                   'unicode.isnumeric()\n'
+                   '\n'
+                   '   Return "True" if there are only numeric characters in '
+                   'S, "False"\n'
+                   '   otherwise. Numeric characters include digit characters, '
+                   'and all\n'
+                   '   characters that have the Unicode numeric value '
+                   'property, e.g.\n'
+                   '   U+2155, VULGAR FRACTION ONE FIFTH.\n'
+                   '\n'
+                   'unicode.isdecimal()\n'
+                   '\n'
+                   '   Return "True" if there are only decimal characters in '
+                   'S, "False"\n'
+                   '   otherwise. Decimal characters include digit characters, '
+                   'and all\n'
+                   '   characters that can be used to form decimal-radix '
+                   'numbers, e.g.\n'
+                   '   U+0660, ARABIC-INDIC DIGIT ZERO.\n',
+ 'strings': '\n'
+            'String literals\n'
+            '***************\n'
+            '\n'
+            'String literals are described by the following lexical '
+            'definitions:\n'
+            '\n'
+            '   stringliteral   ::= [stringprefix](shortstring | longstring)\n'
+            '   stringprefix    ::= "r" | "u" | "ur" | "R" | "U" | "UR" | "Ur" '
+            '| "uR"\n'
+            '                    | "b" | "B" | "br" | "Br" | "bR" | "BR"\n'
+            '   shortstring     ::= "\'" shortstringitem* "\'" | \'"\' '
+            'shortstringitem* \'"\'\n'
+            '   longstring      ::= "\'\'\'" longstringitem* "\'\'\'"\n'
+            '                  | \'"""\' longstringitem* \'"""\'\n'
+            '   shortstringitem ::= shortstringchar | escapeseq\n'
+            '   longstringitem  ::= longstringchar | escapeseq\n'
+            '   shortstringchar ::= <any source character except "\\" or '
+            'newline or the quote>\n'
+            '   longstringchar  ::= <any source character except "\\">\n'
+            '   escapeseq       ::= "\\" <any ASCII character>\n'
+            '\n'
+            'One syntactic restriction not indicated by these productions is '
+            'that\n'
+            'whitespace is not allowed between the "stringprefix" and the rest '
+            'of\n'
+            'the string literal. The source character set is defined by the\n'
+            'encoding declaration; it is ASCII if no encoding declaration is '
+            'given\n'
+            'in the source file; see section Encoding declarations.\n'
+            '\n'
+            'In plain English: String literals can be enclosed in matching '
+            'single\n'
+            'quotes ("\'") or double quotes (""").  They can also be enclosed '
+            'in\n'
+            'matching groups of three single or double quotes (these are '
+            'generally\n'
+            'referred to as *triple-quoted strings*).  The backslash ("\\")\n'
+            'character is used to escape characters that otherwise have a '
+            'special\n'
+            'meaning, such as newline, backslash itself, or the quote '
+            'character.\n'
+            'String literals may optionally be prefixed with a letter "\'r\'" '
+            'or\n'
+            '"\'R\'"; such strings are called *raw strings* and use different '
+            'rules\n'
+            'for interpreting backslash escape sequences.  A prefix of "\'u\'" '
+            'or\n'
+            '"\'U\'" makes the string a Unicode string.  Unicode strings use '
+            'the\n'
+            'Unicode character set as defined by the Unicode Consortium and '
+            'ISO\n'
+            '10646.  Some additional escape sequences, described below, are\n'
+            'available in Unicode strings. A prefix of "\'b\'" or "\'B\'" is '
+            'ignored in\n'
+            'Python 2; it indicates that the literal should become a bytes '
+            'literal\n'
+            'in Python 3 (e.g. when code is automatically converted with '
+            '2to3).  A\n'
+            '"\'u\'" or "\'b\'" prefix may be followed by an "\'r\'" prefix.\n'
+            '\n'
+            'In triple-quoted strings, unescaped newlines and quotes are '
+            'allowed\n'
+            '(and are retained), except that three unescaped quotes in a row\n'
+            'terminate the string.  (A "quote" is the character used to open '
+            'the\n'
+            'string, i.e. either "\'" or """.)\n'
+            '\n'
+            'Unless an "\'r\'" or "\'R\'" prefix is present, escape sequences '
+            'in\n'
+            'strings are interpreted according to rules similar to those used '
+            'by\n'
+            'Standard C.  The recognized escape sequences are:\n'
+            '\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| Escape Sequence   | Meaning                           | Notes   '
+            '|\n'
+            '+===================+===================================+=========+\n'
+            '| "\\newline"        | Ignored                           '
+            '|         |\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| "\\\\"              | Backslash ("\\")                   '
+            '|         |\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| "\\\'"              | Single quote ("\'")                '
+            '|         |\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| "\\""              | Double quote (""")                '
+            '|         |\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| "\\a"              | ASCII Bell (BEL)                  '
+            '|         |\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| "\\b"              | ASCII Backspace (BS)              '
+            '|         |\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| "\\f"              | ASCII Formfeed (FF)               '
+            '|         |\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| "\\n"              | ASCII Linefeed (LF)               '
+            '|         |\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| "\\N{name}"        | Character named *name* in the     '
+            '|         |\n'
+            '|                   | Unicode database (Unicode only)   |         '
+            '|\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| "\\r"              | ASCII Carriage Return (CR)        '
+            '|         |\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| "\\t"              | ASCII Horizontal Tab (TAB)        '
+            '|         |\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| "\\uxxxx"          | Character with 16-bit hex value   | '
+            '(1)     |\n'
+            '|                   | *xxxx* (Unicode only)             |         '
+            '|\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| "\\Uxxxxxxxx"      | Character with 32-bit hex value   | '
+            '(2)     |\n'
+            '|                   | *xxxxxxxx* (Unicode only)         |         '
+            '|\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| "\\v"              | ASCII Vertical Tab (VT)           '
+            '|         |\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| "\\ooo"            | Character with octal value *ooo*  | '
+            '(3,5)   |\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '| "\\xhh"            | Character with hex value *hh*     | '
+            '(4,5)   |\n'
+            '+-------------------+-----------------------------------+---------+\n'
+            '\n'
+            'Notes:\n'
+            '\n'
+            '1. Individual code units which form parts of a surrogate pair '
+            'can\n'
+            '   be encoded using this escape sequence.\n'
+            '\n'
+            '2. Any Unicode character can be encoded this way, but characters\n'
+            '   outside the Basic Multilingual Plane (BMP) will be encoded '
+            'using a\n'
+            '   surrogate pair if Python is compiled to use 16-bit code units '
+            '(the\n'
+            '   default).\n'
+            '\n'
+            '3. As in Standard C, up to three octal digits are accepted.\n'
+            '\n'
+            '4. Unlike in Standard C, exactly two hex digits are required.\n'
+            '\n'
+            '5. In a string literal, hexadecimal and octal escapes denote the\n'
+            '   byte with the given value; it is not necessary that the byte\n'
+            '   encodes a character in the source character set. In a Unicode\n'
+            '   literal, these escapes denote a Unicode character with the '
+            'given\n'
+            '   value.\n'
+            '\n'
+            'Unlike Standard C, all unrecognized escape sequences are left in '
+            'the\n'
+            'string unchanged, i.e., *the backslash is left in the string*.  '
+            '(This\n'
+            'behavior is useful when debugging: if an escape sequence is '
+            'mistyped,\n'
+            'the resulting output is more easily recognized as broken.)  It is '
+            'also\n'
+            'important to note that the escape sequences marked as "(Unicode '
+            'only)"\n'
+            'in the table above fall into the category of unrecognized escapes '
+            'for\n'
+            'non-Unicode string literals.\n'
+            '\n'
+            'When an "\'r\'" or "\'R\'" prefix is present, a character '
+            'following a\n'
+            'backslash is included in the string without change, and *all\n'
+            'backslashes are left in the string*.  For example, the string '
+            'literal\n'
+            '"r"\\n"" consists of two characters: a backslash and a lowercase '
+            '"\'n\'".\n'
+            'String quotes can be escaped with a backslash, but the backslash\n'
+            'remains in the string; for example, "r"\\""" is a valid string '
+            'literal\n'
+            'consisting of two characters: a backslash and a double quote; '
+            '"r"\\""\n'
+            'is not a valid string literal (even a raw string cannot end in an '
+            'odd\n'
+            'number of backslashes).  Specifically, *a raw string cannot end '
+            'in a\n'
+            'single backslash* (since the backslash would escape the '
+            'following\n'
+            'quote character).  Note also that a single backslash followed by '
+            'a\n'
+            'newline is interpreted as those two characters as part of the '
+            'string,\n'
+            '*not* as a line continuation.\n'
+            '\n'
+            'When an "\'r\'" or "\'R\'" prefix is used in conjunction with a '
+            '"\'u\'" or\n'
+            '"\'U\'" prefix, then the "\\uXXXX" and "\\UXXXXXXXX" escape '
+            'sequences are\n'
+            'processed while  *all other backslashes are left in the string*. '
+            'For\n'
+            'example, the string literal "ur"\\u0062\\n"" consists of three '
+            'Unicode\n'
+            "characters: 'LATIN SMALL LETTER B', 'REVERSE SOLIDUS', and "
+            "'LATIN\n"
+            "SMALL LETTER N'. Backslashes can be escaped with a preceding\n"
+            'backslash; however, both remain in the string.  As a result, '
+            '"\\uXXXX"\n'
+            'escape sequences are only recognized when there are an odd number '
+            'of\n'
+            'backslashes.\n',
+ 'subscriptions': '\n'
+                  'Subscriptions\n'
+                  '*************\n'
+                  '\n'
+                  'A subscription selects an item of a sequence (string, tuple '
+                  'or list)\n'
+                  'or mapping (dictionary) object:\n'
+                  '\n'
+                  '   subscription ::= primary "[" expression_list "]"\n'
+                  '\n'
+                  'The primary must evaluate to an object of a sequence or '
+                  'mapping type.\n'
+                  '\n'
+                  'If the primary is a mapping, the expression list must '
+                  'evaluate to an\n'
+                  'object whose value is one of the keys of the mapping, and '
+                  'the\n'
+                  'subscription selects the value in the mapping that '
+                  'corresponds to that\n'
+                  'key.  (The expression list is a tuple except if it has '
+                  'exactly one\n'
+                  'item.)\n'
+                  '\n'
+                  'If the primary is a sequence, the expression (list) must '
+                  'evaluate to a\n'
+                  'plain integer.  If this value is negative, the length of '
+                  'the sequence\n'
+                  'is added to it (so that, e.g., "x[-1]" selects the last '
+                  'item of "x".)\n'
+                  'The resulting value must be a nonnegative integer less than '
+                  'the number\n'
+                  'of items in the sequence, and the subscription selects the '
+                  'item whose\n'
+                  'index is that value (counting from zero).\n'
+                  '\n'
+                  "A string's items are characters.  A character is not a "
+                  'separate data\n'
+                  'type but a string of exactly one character.\n',
+ 'truth': '\n'
+          'Truth Value Testing\n'
+          '*******************\n'
+          '\n'
+          'Any object can be tested for truth value, for use in an "if" or\n'
+          '"while" condition or as operand of the Boolean operations below. '
+          'The\n'
+          'following values are considered false:\n'
+          '\n'
+          '* "None"\n'
+          '\n'
+          '* "False"\n'
+          '\n'
+          '* zero of any numeric type, for example, "0", "0L", "0.0", "0j".\n'
+          '\n'
+          '* any empty sequence, for example, "\'\'", "()", "[]".\n'
+          '\n'
+          '* any empty mapping, for example, "{}".\n'
+          '\n'
+          '* instances of user-defined classes, if the class defines a\n'
+          '  "__nonzero__()" or "__len__()" method, when that method returns '
+          'the\n'
+          '  integer zero or "bool" value "False". [1]\n'
+          '\n'
+          'All other values are considered true --- so objects of many types '
+          'are\n'
+          'always true.\n'
+          '\n'
+          'Operations and built-in functions that have a Boolean result '
+          'always\n'
+          'return "0" or "False" for false and "1" or "True" for true, unless\n'
+          'otherwise stated. (Important exception: the Boolean operations '
+          '"or"\n'
+          'and "and" always return one of their operands.)\n',
+ 'try': '\n'
+        'The "try" statement\n'
+        '*******************\n'
+        '\n'
+        'The "try" statement specifies exception handlers and/or cleanup code\n'
+        'for a group of statements:\n'
+        '\n'
+        '   try_stmt  ::= try1_stmt | try2_stmt\n'
+        '   try1_stmt ::= "try" ":" suite\n'
+        '                 ("except" [expression [("as" | ",") identifier]] ":" '
+        'suite)+\n'
+        '                 ["else" ":" suite]\n'
+        '                 ["finally" ":" suite]\n'
+        '   try2_stmt ::= "try" ":" suite\n'
+        '                 "finally" ":" suite\n'
+        '\n'
+        'Changed in version 2.5: In previous versions of Python,\n'
+        '"try"..."except"..."finally" did not work. "try"..."except" had to '
+        'be\n'
+        'nested in "try"..."finally".\n'
+        '\n'
+        'The "except" clause(s) specify one or more exception handlers. When '
+        'no\n'
+        'exception occurs in the "try" clause, no exception handler is\n'
+        'executed. When an exception occurs in the "try" suite, a search for '
+        'an\n'
+        'exception handler is started.  This search inspects the except '
+        'clauses\n'
+        'in turn until one is found that matches the exception.  An '
+        'expression-\n'
+        'less except clause, if present, must be last; it matches any\n'
+        'exception.  For an except clause with an expression, that expression\n'
+        'is evaluated, and the clause matches the exception if the resulting\n'
+        'object is "compatible" with the exception.  An object is compatible\n'
+        'with an exception if it is the class or a base class of the '
+        'exception\n'
+        'object, or a tuple containing an item compatible with the exception.\n'
+        '\n'
+        'If no except clause matches the exception, the search for an '
+        'exception\n'
+        'handler continues in the surrounding code and on the invocation '
+        'stack.\n'
+        '[1]\n'
+        '\n'
+        'If the evaluation of an expression in the header of an except clause\n'
+        'raises an exception, the original search for a handler is canceled '
+        'and\n'
+        'a search starts for the new exception in the surrounding code and on\n'
+        'the call stack (it is treated as if the entire "try" statement '
+        'raised\n'
+        'the exception).\n'
+        '\n'
+        'When a matching except clause is found, the exception is assigned to\n'
+        'the target specified in that except clause, if present, and the '
+        'except\n'
+        "clause's suite is executed.  All except clauses must have an\n"
+        'executable block.  When the end of this block is reached, execution\n'
+        'continues normally after the entire try statement.  (This means that\n'
+        'if two nested handlers exist for the same exception, and the '
+        'exception\n'
+        'occurs in the try clause of the inner handler, the outer handler '
+        'will\n'
+        'not handle the exception.)\n'
+        '\n'
+        "Before an except clause's suite is executed, details about the\n"
+        'exception are assigned to three variables in the "sys" module:\n'
+        '"sys.exc_type" receives the object identifying the exception;\n'
+        '"sys.exc_value" receives the exception\'s parameter;\n'
+        '"sys.exc_traceback" receives a traceback object (see section The\n'
+        'standard type hierarchy) identifying the point in the program where\n'
+        'the exception occurred. These details are also available through the\n'
+        '"sys.exc_info()" function, which returns a tuple "(exc_type,\n'
+        'exc_value, exc_traceback)".  Use of the corresponding variables is\n'
+        'deprecated in favor of this function, since their use is unsafe in a\n'
+        'threaded program.  As of Python 1.5, the variables are restored to\n'
+        'their previous values (before the call) when returning from a '
+        'function\n'
+        'that handled an exception.\n'
+        '\n'
+        'The optional "else" clause is executed if and when control flows off\n'
+        'the end of the "try" clause. [2] Exceptions in the "else" clause are\n'
+        'not handled by the preceding "except" clauses.\n'
+        '\n'
+        'If "finally" is present, it specifies a \'cleanup\' handler.  The '
+        '"try"\n'
+        'clause is executed, including any "except" and "else" clauses.  If '
+        'an\n'
+        'exception occurs in any of the clauses and is not handled, the\n'
+        'exception is temporarily saved. The "finally" clause is executed.  '
+        'If\n'
+        'there is a saved exception, it is re-raised at the end of the\n'
+        '"finally" clause. If the "finally" clause raises another exception '
+        'or\n'
+        'executes a "return" or "break" statement, the saved exception is\n'
+        'discarded:\n'
+        '\n'
+        '   >>> def f():\n'
+        '   ...     try:\n'
+        '   ...         1/0\n'
+        '   ...     finally:\n'
+        '   ...         return 42\n'
+        '   ...\n'
+        '   >>> f()\n'
+        '   42\n'
+        '\n'
+        'The exception information is not available to the program during\n'
+        'execution of the "finally" clause.\n'
+        '\n'
+        'When a "return", "break" or "continue" statement is executed in the\n'
+        '"try" suite of a "try"..."finally" statement, the "finally" clause '
+        'is\n'
+        'also executed \'on the way out.\' A "continue" statement is illegal '
+        'in\n'
+        'the "finally" clause. (The reason is a problem with the current\n'
+        'implementation --- this restriction may be lifted in the future).\n'
+        '\n'
+        'The return value of a function is determined by the last "return"\n'
+        'statement executed.  Since the "finally" clause always executes, a\n'
+        '"return" statement executed in the "finally" clause will always be '
+        'the\n'
+        'last one executed:\n'
+        '\n'
+        '   >>> def foo():\n'
+        '   ...     try:\n'
+        "   ...         return 'try'\n"
+        '   ...     finally:\n'
+        "   ...         return 'finally'\n"
+        '   ...\n'
+        '   >>> foo()\n'
+        "   'finally'\n"
+        '\n'
+        'Additional information on exceptions can be found in section\n'
+        'Exceptions, and information on using the "raise" statement to '
+        'generate\n'
+        'exceptions may be found in section The raise statement.\n',
+ 'types': '\n'
+          'The standard type hierarchy\n'
+          '***************************\n'
+          '\n'
+          'Below is a list of the types that are built into Python.  '
+          'Extension\n'
+          'modules (written in C, Java, or other languages, depending on the\n'
+          'implementation) can define additional types.  Future versions of\n'
+          'Python may add types to the type hierarchy (e.g., rational '
+          'numbers,\n'
+          'efficiently stored arrays of integers, etc.).\n'
+          '\n'
+          'Some of the type descriptions below contain a paragraph listing\n'
+          "'special attributes.'  These are attributes that provide access to "
+          'the\n'
+          'implementation and are not intended for general use.  Their '
+          'definition\n'
+          'may change in the future.\n'
+          '\n'
+          'None\n'
+          '   This type has a single value.  There is a single object with '
+          'this\n'
+          '   value. This object is accessed through the built-in name "None". '
+          'It\n'
+          '   is used to signify the absence of a value in many situations, '
+          'e.g.,\n'
+          "   it is returned from functions that don't explicitly return\n"
+          '   anything. Its truth value is false.\n'
+          '\n'
+          'NotImplemented\n'
+          '   This type has a single value.  There is a single object with '
+          'this\n'
+          '   value. This object is accessed through the built-in name\n'
+          '   "NotImplemented". Numeric methods and rich comparison methods '
+          'may\n'
+          '   return this value if they do not implement the operation for '
+          'the\n'
+          '   operands provided.  (The interpreter will then try the '
+          'reflected\n'
+          '   operation, or some other fallback, depending on the operator.)  '
+          'Its\n'
+          '   truth value is true.\n'
+          '\n'
+          'Ellipsis\n'
+          '   This type has a single value.  There is a single object with '
+          'this\n'
+          '   value. This object is accessed through the built-in name\n'
+          '   "Ellipsis". It is used to indicate the presence of the "..." '
+          'syntax\n'
+          '   in a slice.  Its truth value is true.\n'
+          '\n'
+          '"numbers.Number"\n'
+          '   These are created by numeric literals and returned as results '
+          'by\n'
+          '   arithmetic operators and arithmetic built-in functions.  '
+          'Numeric\n'
+          '   objects are immutable; once created their value never changes.\n'
+          '   Python numbers are of course strongly related to mathematical\n'
+          '   numbers, but subject to the limitations of numerical '
+          'representation\n'
+          '   in computers.\n'
+          '\n'
+          '   Python distinguishes between integers, floating point numbers, '
+          'and\n'
+          '   complex numbers:\n'
+          '\n'
+          '   "numbers.Integral"\n'
+          '      These represent elements from the mathematical set of '
+          'integers\n'
+          '      (positive and negative).\n'
+          '\n'
+          '      There are three types of integers:\n'
+          '\n'
+          '      Plain integers\n'
+          '         These represent numbers in the range -2147483648 through\n'
+          '         2147483647. (The range may be larger on machines with a\n'
+          '         larger natural word size, but not smaller.)  When the '
+          'result\n'
+          '         of an operation would fall outside this range, the result '
+          'is\n'
+          '         normally returned as a long integer (in some cases, the\n'
+          '         exception "OverflowError" is raised instead).  For the\n'
+          '         purpose of shift and mask operations, integers are assumed '
+          'to\n'
+          "         have a binary, 2's complement notation using 32 or more "
+          'bits,\n'
+          '         and hiding no bits from the user (i.e., all 4294967296\n'
+          '         different bit patterns correspond to different values).\n'
+          '\n'
+          '      Long integers\n'
+          '         These represent numbers in an unlimited range, subject to\n'
+          '         available (virtual) memory only.  For the purpose of '
+          'shift\n'
+          '         and mask operations, a binary representation is assumed, '
+          'and\n'
+          "         negative numbers are represented in a variant of 2's\n"
+          '         complement which gives the illusion of an infinite string '
+          'of\n'
+          '         sign bits extending to the left.\n'
+          '\n'
+          '      Booleans\n'
+          '         These represent the truth values False and True.  The two\n'
+          '         objects representing the values "False" and "True" are '
+          'the\n'
+          '         only Boolean objects. The Boolean type is a subtype of '
+          'plain\n'
+          '         integers, and Boolean values behave like the values 0 and '
+          '1,\n'
+          '         respectively, in almost all contexts, the exception being\n'
+          '         that when converted to a string, the strings ""False"" or\n'
+          '         ""True"" are returned, respectively.\n'
+          '\n'
+          '      The rules for integer representation are intended to give '
+          'the\n'
+          '      most meaningful interpretation of shift and mask operations\n'
+          '      involving negative integers and the least surprises when\n'
+          '      switching between the plain and long integer domains.  Any\n'
+          '      operation, if it yields a result in the plain integer '
+          'domain,\n'
+          '      will yield the same result in the long integer domain or '
+          'when\n'
+          '      using mixed operands.  The switch between domains is '
+          'transparent\n'
+          '      to the programmer.\n'
+          '\n'
+          '   "numbers.Real" ("float")\n'
+          '      These represent machine-level double precision floating '
+          'point\n'
+          '      numbers. You are at the mercy of the underlying machine\n'
+          '      architecture (and C or Java implementation) for the accepted\n'
+          '      range and handling of overflow. Python does not support '
+          'single-\n'
+          '      precision floating point numbers; the savings in processor '
+          'and\n'
+          '      memory usage that are usually the reason for using these are\n'
+          '      dwarfed by the overhead of using objects in Python, so there '
+          'is\n'
+          '      no reason to complicate the language with two kinds of '
+          'floating\n'
+          '      point numbers.\n'
+          '\n'
+          '   "numbers.Complex"\n'
+          '      These represent complex numbers as a pair of machine-level\n'
+          '      double precision floating point numbers.  The same caveats '
+          'apply\n'
+          '      as for floating point numbers. The real and imaginary parts '
+          'of a\n'
+          '      complex number "z" can be retrieved through the read-only\n'
+          '      attributes "z.real" and "z.imag".\n'
+          '\n'
+          'Sequences\n'
+          '   These represent finite ordered sets indexed by non-negative\n'
+          '   numbers. The built-in function "len()" returns the number of '
+          'items\n'
+          '   of a sequence. When the length of a sequence is *n*, the index '
+          'set\n'
+          '   contains the numbers 0, 1, ..., *n*-1.  Item *i* of sequence *a* '
+          'is\n'
+          '   selected by "a[i]".\n'
+          '\n'
+          '   Sequences also support slicing: "a[i:j]" selects all items with\n'
+          '   index *k* such that *i* "<=" *k* "<" *j*.  When used as an\n'
+          '   expression, a slice is a sequence of the same type.  This '
+          'implies\n'
+          '   that the index set is renumbered so that it starts at 0.\n'
+          '\n'
+          '   Some sequences also support "extended slicing" with a third '
+          '"step"\n'
+          '   parameter: "a[i:j:k]" selects all items of *a* with index *x* '
+          'where\n'
+          '   "x = i + n*k", *n* ">=" "0" and *i* "<=" *x* "<" *j*.\n'
+          '\n'
+          '   Sequences are distinguished according to their mutability:\n'
+          '\n'
+          '   Immutable sequences\n'
+          '      An object of an immutable sequence type cannot change once it '
+          'is\n'
+          '      created.  (If the object contains references to other '
+          'objects,\n'
+          '      these other objects may be mutable and may be changed; '
+          'however,\n'
+          '      the collection of objects directly referenced by an '
+          'immutable\n'
+          '      object cannot change.)\n'
+          '\n'
+          '      The following types are immutable sequences:\n'
+          '\n'
+          '      Strings\n'
+          '         The items of a string are characters.  There is no '
+          'separate\n'
+          '         character type; a character is represented by a string of '
+          'one\n'
+          '         item. Characters represent (at least) 8-bit bytes.  The\n'
+          '         built-in functions "chr()" and "ord()" convert between\n'
+          '         characters and nonnegative integers representing the byte\n'
+          '         values.  Bytes with the values 0--127 usually represent '
+          'the\n'
+          '         corresponding ASCII values, but the interpretation of '
+          'values\n'
+          '         is up to the program.  The string data type is also used '
+          'to\n'
+          '         represent arrays of bytes, e.g., to hold data read from a\n'
+          '         file.\n'
+          '\n'
+          '         (On systems whose native character set is not ASCII, '
+          'strings\n'
+          '         may use EBCDIC in their internal representation, provided '
+          'the\n'
+          '         functions "chr()" and "ord()" implement a mapping between\n'
+          '         ASCII and EBCDIC, and string comparison preserves the '
+          'ASCII\n'
+          '         order. Or perhaps someone can propose a better rule?)\n'
+          '\n'
+          '      Unicode\n'
+          '         The items of a Unicode object are Unicode code units.  A\n'
+          '         Unicode code unit is represented by a Unicode object of '
+          'one\n'
+          '         item and can hold either a 16-bit or 32-bit value\n'
+          '         representing a Unicode ordinal (the maximum value for the\n'
+          '         ordinal is given in "sys.maxunicode", and depends on how\n'
+          '         Python is configured at compile time).  Surrogate pairs '
+          'may\n'
+          '         be present in the Unicode object, and will be reported as '
+          'two\n'
+          '         separate items.  The built-in functions "unichr()" and\n'
+          '         "ord()" convert between code units and nonnegative '
+          'integers\n'
+          '         representing the Unicode ordinals as defined in the '
+          'Unicode\n'
+          '         Standard 3.0. Conversion from and to other encodings are\n'
+          '         possible through the Unicode method "encode()" and the '
+          'built-\n'
+          '         in function "unicode()".\n'
+          '\n'
+          '      Tuples\n'
+          '         The items of a tuple are arbitrary Python objects. Tuples '
+          'of\n'
+          '         two or more items are formed by comma-separated lists of\n'
+          "         expressions.  A tuple of one item (a 'singleton') can be\n"
+          '         formed by affixing a comma to an expression (an expression '
+          'by\n'
+          '         itself does not create a tuple, since parentheses must be\n'
+          '         usable for grouping of expressions).  An empty tuple can '
+          'be\n'
+          '         formed by an empty pair of parentheses.\n'
+          '\n'
+          '   Mutable sequences\n'
+          '      Mutable sequences can be changed after they are created.  '
+          'The\n'
+          '      subscription and slicing notations can be used as the target '
+          'of\n'
+          '      assignment and "del" (delete) statements.\n'
+          '\n'
+          '      There are currently two intrinsic mutable sequence types:\n'
+          '\n'
+          '      Lists\n'
+          '         The items of a list are arbitrary Python objects.  Lists '
+          'are\n'
+          '         formed by placing a comma-separated list of expressions '
+          'in\n'
+          '         square brackets. (Note that there are no special cases '
+          'needed\n'
+          '         to form lists of length 0 or 1.)\n'
+          '\n'
+          '      Byte Arrays\n'
+          '         A bytearray object is a mutable array. They are created '
+          'by\n'
+          '         the built-in "bytearray()" constructor.  Aside from being\n'
+          '         mutable (and hence unhashable), byte arrays otherwise '
+          'provide\n'
+          '         the same interface and functionality as immutable bytes\n'
+          '         objects.\n'
+          '\n'
+          '      The extension module "array" provides an additional example '
+          'of a\n'
+          '      mutable sequence type.\n'
+          '\n'
+          'Set types\n'
+          '   These represent unordered, finite sets of unique, immutable\n'
+          '   objects. As such, they cannot be indexed by any subscript. '
+          'However,\n'
+          '   they can be iterated over, and the built-in function "len()"\n'
+          '   returns the number of items in a set. Common uses for sets are '
+          'fast\n'
+          '   membership testing, removing duplicates from a sequence, and\n'
+          '   computing mathematical operations such as intersection, union,\n'
+          '   difference, and symmetric difference.\n'
+          '\n'
+          '   For set elements, the same immutability rules apply as for\n'
+          '   dictionary keys. Note that numeric types obey the normal rules '
+          'for\n'
+          '   numeric comparison: if two numbers compare equal (e.g., "1" and\n'
+          '   "1.0"), only one of them can be contained in a set.\n'
+          '\n'
+          '   There are currently two intrinsic set types:\n'
+          '\n'
+          '   Sets\n'
+          '      These represent a mutable set. They are created by the '
+          'built-in\n'
+          '      "set()" constructor and can be modified afterwards by '
+          'several\n'
+          '      methods, such as "add()".\n'
+          '\n'
+          '   Frozen sets\n'
+          '      These represent an immutable set.  They are created by the\n'
+          '      built-in "frozenset()" constructor.  As a frozenset is '
+          'immutable\n'
+          '      and *hashable*, it can be used again as an element of '
+          'another\n'
+          '      set, or as a dictionary key.\n'
+          '\n'
+          'Mappings\n'
+          '   These represent finite sets of objects indexed by arbitrary '
+          'index\n'
+          '   sets. The subscript notation "a[k]" selects the item indexed by '
+          '"k"\n'
+          '   from the mapping "a"; this can be used in expressions and as '
+          'the\n'
+          '   target of assignments or "del" statements. The built-in '
+          'function\n'
+          '   "len()" returns the number of items in a mapping.\n'
+          '\n'
+          '   There is currently a single intrinsic mapping type:\n'
+          '\n'
+          '   Dictionaries\n'
+          '      These represent finite sets of objects indexed by nearly\n'
+          '      arbitrary values.  The only types of values not acceptable '
+          'as\n'
+          '      keys are values containing lists or dictionaries or other\n'
+          '      mutable types that are compared by value rather than by '
+          'object\n'
+          '      identity, the reason being that the efficient implementation '
+          'of\n'
+          "      dictionaries requires a key's hash value to remain constant.\n"
+          '      Numeric types used for keys obey the normal rules for '
+          'numeric\n'
+          '      comparison: if two numbers compare equal (e.g., "1" and '
+          '"1.0")\n'
+          '      then they can be used interchangeably to index the same\n'
+          '      dictionary entry.\n'
+          '\n'
+          '      Dictionaries are mutable; they can be created by the "{...}"\n'
+          '      notation (see section Dictionary displays).\n'
+          '\n'
+          '      The extension modules "dbm", "gdbm", and "bsddb" provide\n'
+          '      additional examples of mapping types.\n'
+          '\n'
+          'Callable types\n'
+          '   These are the types to which the function call operation (see\n'
+          '   section Calls) can be applied:\n'
+          '\n'
+          '   User-defined functions\n'
+          '      A user-defined function object is created by a function\n'
+          '      definition (see section Function definitions).  It should be\n'
+          '      called with an argument list containing the same number of '
+          'items\n'
+          "      as the function's formal parameter list.\n"
+          '\n'
+          '      Special attributes:\n'
+          '\n'
+          '      '
+          '+-------------------------+---------------------------------+-------------+\n'
+          '      | Attribute               | Meaning                         '
+          '|             |\n'
+          '      '
+          '+=========================+=================================+=============+\n'
+          '      | "__doc__" "func_doc"    | The function\'s documentation    '
+          '| Writable    |\n'
+          '      |                         | string, or "None" if            '
+          '|             |\n'
+          '      |                         | unavailable.                    '
+          '|             |\n'
+          '      '
+          '+-------------------------+---------------------------------+-------------+\n'
+          '      | "__name__" "func_name"  | The function\'s name             '
+          '| Writable    |\n'
+          '      '
+          '+-------------------------+---------------------------------+-------------+\n'
+          '      | "__module__"            | The name of the module the      | '
+          'Writable    |\n'
+          '      |                         | function was defined in, or     '
+          '|             |\n'
+          '      |                         | "None" if unavailable.          '
+          '|             |\n'
+          '      '
+          '+-------------------------+---------------------------------+-------------+\n'
+          '      | "__defaults__"          | A tuple containing default      | '
+          'Writable    |\n'
+          '      | "func_defaults"         | argument values for those       '
+          '|             |\n'
+          '      |                         | arguments that have defaults,   '
+          '|             |\n'
+          '      |                         | or "None" if no arguments have  '
+          '|             |\n'
+          '      |                         | a default value.                '
+          '|             |\n'
+          '      '
+          '+-------------------------+---------------------------------+-------------+\n'
+          '      | "__code__" "func_code"  | The code object representing    | '
+          'Writable    |\n'
+          '      |                         | the compiled function body.     '
+          '|             |\n'
+          '      '
+          '+-------------------------+---------------------------------+-------------+\n'
+          '      | "__globals__"           | A reference to the dictionary   | '
+          'Read-only   |\n'
+          '      | "func_globals"          | that holds the function\'s       '
+          '|             |\n'
+          '      |                         | global variables --- the global '
+          '|             |\n'
+          '      |                         | namespace of the module in      '
+          '|             |\n'
+          '      |                         | which the function was defined. '
+          '|             |\n'
+          '      '
+          '+-------------------------+---------------------------------+-------------+\n'
+          '      | "__dict__" "func_dict"  | The namespace supporting        | '
+          'Writable    |\n'
+          '      |                         | arbitrary function attributes.  '
+          '|             |\n'
+          '      '
+          '+-------------------------+---------------------------------+-------------+\n'
+          '      | "__closure__"           | "None" or a tuple of cells that | '
+          'Read-only   |\n'
+          '      | "func_closure"          | contain bindings for the        '
+          '|             |\n'
+          "      |                         | function's free variables.      "
+          '|             |\n'
+          '      '
+          '+-------------------------+---------------------------------+-------------+\n'
+          '\n'
+          '      Most of the attributes labelled "Writable" check the type of '
+          'the\n'
+          '      assigned value.\n'
+          '\n'
+          '      Changed in version 2.4: "func_name" is now writable.\n'
+          '\n'
+          '      Changed in version 2.6: The double-underscore attributes\n'
+          '      "__closure__", "__code__", "__defaults__", and "__globals__"\n'
+          '      were introduced as aliases for the corresponding "func_*"\n'
+          '      attributes for forwards compatibility with Python 3.\n'
+          '\n'
+          '      Function objects also support getting and setting arbitrary\n'
+          '      attributes, which can be used, for example, to attach '
+          'metadata\n'
+          '      to functions.  Regular attribute dot-notation is used to get '
+          'and\n'
+          '      set such attributes. *Note that the current implementation '
+          'only\n'
+          '      supports function attributes on user-defined functions. '
+          'Function\n'
+          '      attributes on built-in functions may be supported in the\n'
+          '      future.*\n'
+          '\n'
+          "      Additional information about a function's definition can be\n"
+          '      retrieved from its code object; see the description of '
+          'internal\n'
+          '      types below.\n'
+          '\n'
+          '   User-defined methods\n'
+          '      A user-defined method object combines a class, a class '
+          'instance\n'
+          '      (or "None") and any callable object (normally a user-defined\n'
+          '      function).\n'
+          '\n'
+          '      Special read-only attributes: "im_self" is the class '
+          'instance\n'
+          '      object, "im_func" is the function object; "im_class" is the\n'
+          '      class of "im_self" for bound methods or the class that asked '
+          'for\n'
+          '      the method for unbound methods; "__doc__" is the method\'s\n'
+          '      documentation (same as "im_func.__doc__"); "__name__" is the\n'
+          '      method name (same as "im_func.__name__"); "__module__" is '
+          'the\n'
+          '      name of the module the method was defined in, or "None" if\n'
+          '      unavailable.\n'
+          '\n'
+          '      Changed in version 2.2: "im_self" used to refer to the class\n'
+          '      that defined the method.\n'
+          '\n'
+          '      Changed in version 2.6: For Python 3 forward-compatibility,\n'
+          '      "im_func" is also available as "__func__", and "im_self" as\n'
+          '      "__self__".\n'
+          '\n'
+          '      Methods also support accessing (but not setting) the '
+          'arbitrary\n'
+          '      function attributes on the underlying function object.\n'
+          '\n'
+          '      User-defined method objects may be created when getting an\n'
+          '      attribute of a class (perhaps via an instance of that class), '
+          'if\n'
+          '      that attribute is a user-defined function object, an unbound\n'
+          '      user-defined method object, or a class method object. When '
+          'the\n'
+          '      attribute is a user-defined method object, a new method '
+          'object\n'
+          '      is only created if the class from which it is being retrieved '
+          'is\n'
+          '      the same as, or a derived class of, the class stored in the\n'
+          '      original method object; otherwise, the original method object '
+          'is\n'
+          '      used as it is.\n'
+          '\n'
+          '      When a user-defined method object is created by retrieving a\n'
+          '      user-defined function object from a class, its "im_self"\n'
+          '      attribute is "None" and the method object is said to be '
+          'unbound.\n'
+          '      When one is created by retrieving a user-defined function '
+          'object\n'
+          '      from a class via one of its instances, its "im_self" '
+          'attribute\n'
+          '      is the instance, and the method object is said to be bound. '
+          'In\n'
+          '      either case, the new method\'s "im_class" attribute is the '
+          'class\n'
+          '      from which the retrieval takes place, and its "im_func"\n'
+          '      attribute is the original function object.\n'
+          '\n'
+          '      When a user-defined method object is created by retrieving\n'
+          '      another method object from a class or instance, the behaviour '
+          'is\n'
+          '      the same as for a function object, except that the "im_func"\n'
+          '      attribute of the new instance is not the original method '
+          'object\n'
+          '      but its "im_func" attribute.\n'
+          '\n'
+          '      When a user-defined method object is created by retrieving a\n'
+          '      class method object from a class or instance, its "im_self"\n'
+          '      attribute is the class itself, and its "im_func" attribute '
+          'is\n'
+          '      the function object underlying the class method.\n'
+          '\n'
+          '      When an unbound user-defined method object is called, the\n'
+          '      underlying function ("im_func") is called, with the '
+          'restriction\n'
+          '      that the first argument must be an instance of the proper '
+          'class\n'
+          '      ("im_class") or of a derived class thereof.\n'
+          '\n'
+          '      When a bound user-defined method object is called, the\n'
+          '      underlying function ("im_func") is called, inserting the '
+          'class\n'
+          '      instance ("im_self") in front of the argument list.  For\n'
+          '      instance, when "C" is a class which contains a definition for '
+          'a\n'
+          '      function "f()", and "x" is an instance of "C", calling '
+          '"x.f(1)"\n'
+          '      is equivalent to calling "C.f(x, 1)".\n'
+          '\n'
+          '      When a user-defined method object is derived from a class '
+          'method\n'
+          '      object, the "class instance" stored in "im_self" will '
+          'actually\n'
+          '      be the class itself, so that calling either "x.f(1)" or '
+          '"C.f(1)"\n'
+          '      is equivalent to calling "f(C,1)" where "f" is the '
+          'underlying\n'
+          '      function.\n'
+          '\n'
+          '      Note that the transformation from function object to (unbound '
+          'or\n'
+          '      bound) method object happens each time the attribute is\n'
+          '      retrieved from the class or instance. In some cases, a '
+          'fruitful\n'
+          '      optimization is to assign the attribute to a local variable '
+          'and\n'
+          '      call that local variable. Also notice that this '
+          'transformation\n'
+          '      only happens for user-defined functions; other callable '
+          'objects\n'
+          '      (and all non-callable objects) are retrieved without\n'
+          '      transformation.  It is also important to note that '
+          'user-defined\n'
+          '      functions which are attributes of a class instance are not\n'
+          '      converted to bound methods; this *only* happens when the\n'
+          '      function is an attribute of the class.\n'
+          '\n'
+          '   Generator functions\n'
+          '      A function or method which uses the "yield" statement (see\n'
+          '      section The yield statement) is called a *generator '
+          'function*.\n'
+          '      Such a function, when called, always returns an iterator '
+          'object\n'
+          '      which can be used to execute the body of the function:  '
+          'calling\n'
+          '      the iterator\'s "next()" method will cause the function to\n'
+          '      execute until it provides a value using the "yield" '
+          'statement.\n'
+          '      When the function executes a "return" statement or falls off '
+          'the\n'
+          '      end, a "StopIteration" exception is raised and the iterator '
+          'will\n'
+          '      have reached the end of the set of values to be returned.\n'
+          '\n'
+          '   Built-in functions\n'
+          '      A built-in function object is a wrapper around a C function.\n'
+          '      Examples of built-in functions are "len()" and "math.sin()"\n'
+          '      ("math" is a standard built-in module). The number and type '
+          'of\n'
+          '      the arguments are determined by the C function. Special '
+          'read-\n'
+          '      only attributes: "__doc__" is the function\'s documentation\n'
+          '      string, or "None" if unavailable; "__name__" is the '
+          "function's\n"
+          '      name; "__self__" is set to "None" (but see the next item);\n'
+          '      "__module__" is the name of the module the function was '
+          'defined\n'
+          '      in or "None" if unavailable.\n'
+          '\n'
+          '   Built-in methods\n'
+          '      This is really a different disguise of a built-in function, '
+          'this\n'
+          '      time containing an object passed to the C function as an\n'
+          '      implicit extra argument.  An example of a built-in method is\n'
+          '      "alist.append()", assuming *alist* is a list object. In this\n'
+          '      case, the special read-only attribute "__self__" is set to '
+          'the\n'
+          '      object denoted by *alist*.\n'
+          '\n'
+          '   Class Types\n'
+          '      Class types, or "new-style classes," are callable.  These\n'
+          '      objects normally act as factories for new instances of\n'
+          '      themselves, but variations are possible for class types that\n'
+          '      override "__new__()".  The arguments of the call are passed '
+          'to\n'
+          '      "__new__()" and, in the typical case, to "__init__()" to\n'
+          '      initialize the new instance.\n'
+          '\n'
+          '   Classic Classes\n'
+          '      Class objects are described below.  When a class object is\n'
+          '      called, a new class instance (also described below) is '
+          'created\n'
+          "      and returned.  This implies a call to the class's "
+          '"__init__()"\n'
+          '      method if it has one.  Any arguments are passed on to the\n'
+          '      "__init__()" method.  If there is no "__init__()" method, '
+          'the\n'
+          '      class must be called without arguments.\n'
+          '\n'
+          '   Class instances\n'
+          '      Class instances are described below.  Class instances are\n'
+          '      callable only when the class has a "__call__()" method;\n'
+          '      "x(arguments)" is a shorthand for "x.__call__(arguments)".\n'
+          '\n'
+          'Modules\n'
+          '   Modules are imported by the "import" statement (see section The\n'
+          '   import statement). A module object has a namespace implemented '
+          'by a\n'
+          '   dictionary object (this is the dictionary referenced by the\n'
+          '   func_globals attribute of functions defined in the module).\n'
+          '   Attribute references are translated to lookups in this '
+          'dictionary,\n'
+          '   e.g., "m.x" is equivalent to "m.__dict__["x"]". A module object\n'
+          '   does not contain the code object used to initialize the module\n'
+          "   (since it isn't needed once the initialization is done).\n"
+          '\n'
+          "   Attribute assignment updates the module's namespace dictionary,\n"
+          '   e.g., "m.x = 1" is equivalent to "m.__dict__["x"] = 1".\n'
+          '\n'
+          '   Special read-only attribute: "__dict__" is the module\'s '
+          'namespace\n'
+          '   as a dictionary object.\n'
+          '\n'
+          '   **CPython implementation detail:** Because of the way CPython\n'
+          '   clears module dictionaries, the module dictionary will be '
+          'cleared\n'
+          '   when the module falls out of scope even if the dictionary still '
+          'has\n'
+          '   live references.  To avoid this, copy the dictionary or keep '
+          'the\n'
+          '   module around while using its dictionary directly.\n'
+          '\n'
+          '   Predefined (writable) attributes: "__name__" is the module\'s '
+          'name;\n'
+          '   "__doc__" is the module\'s documentation string, or "None" if\n'
+          '   unavailable; "__file__" is the pathname of the file from which '
+          'the\n'
+          '   module was loaded, if it was loaded from a file. The "__file__"\n'
+          '   attribute is not present for C modules that are statically '
+          'linked\n'
+          '   into the interpreter; for extension modules loaded dynamically '
+          'from\n'
+          '   a shared library, it is the pathname of the shared library '
+          'file.\n'
+          '\n'
+          'Classes\n'
+          '   Both class types (new-style classes) and class objects (old-\n'
+          '   style/classic classes) are typically created by class '
+          'definitions\n'
+          '   (see section Class definitions).  A class has a namespace\n'
+          '   implemented by a dictionary object. Class attribute references '
+          'are\n'
+          '   translated to lookups in this dictionary, e.g., "C.x" is '
+          'translated\n'
+          '   to "C.__dict__["x"]" (although for new-style classes in '
+          'particular\n'
+          '   there are a number of hooks which allow for other means of '
+          'locating\n'
+          '   attributes). When the attribute name is not found there, the\n'
+          '   attribute search continues in the base classes.  For old-style\n'
+          '   classes, the search is depth-first, left-to-right in the order '
+          'of\n'
+          '   occurrence in the base class list. New-style classes use the '
+          'more\n'
+          '   complex C3 method resolution order which behaves correctly even '
+          'in\n'
+          "   the presence of 'diamond' inheritance structures where there "
+          'are\n'
+          '   multiple inheritance paths leading back to a common ancestor.\n'
+          '   Additional details on the C3 MRO used by new-style classes can '
+          'be\n'
+          '   found in the documentation accompanying the 2.3 release at\n'
+          '   https://www.python.org/download/releases/2.3/mro/.\n'
+          '\n'
+          '   When a class attribute reference (for class "C", say) would '
+          'yield a\n'
+          '   user-defined function object or an unbound user-defined method\n'
+          '   object whose associated class is either "C" or one of its base\n'
+          '   classes, it is transformed into an unbound user-defined method\n'
+          '   object whose "im_class" attribute is "C". When it would yield a\n'
+          '   class method object, it is transformed into a bound '
+          'user-defined\n'
+          '   method object whose "im_self" attribute is "C".  When it would\n'
+          '   yield a static method object, it is transformed into the object\n'
+          '   wrapped by the static method object. See section Implementing\n'
+          '   Descriptors for another way in which attributes retrieved from '
+          'a\n'
+          '   class may differ from those actually contained in its '
+          '"__dict__"\n'
+          '   (note that only new-style classes support descriptors).\n'
+          '\n'
+          "   Class attribute assignments update the class's dictionary, "
+          'never\n'
+          '   the dictionary of a base class.\n'
+          '\n'
+          '   A class object can be called (see above) to yield a class '
+          'instance\n'
+          '   (see below).\n'
+          '\n'
+          '   Special attributes: "__name__" is the class name; "__module__" '
+          'is\n'
+          '   the module name in which the class was defined; "__dict__" is '
+          'the\n'
+          '   dictionary containing the class\'s namespace; "__bases__" is a '
+          'tuple\n'
+          '   (possibly empty or a singleton) containing the base classes, in '
+          'the\n'
+          '   order of their occurrence in the base class list; "__doc__" is '
+          'the\n'
+          '   class\'s documentation string, or "None" if undefined.\n'
+          '\n'
+          'Class instances\n'
+          '   A class instance is created by calling a class object (see '
+          'above).\n'
+          '   A class instance has a namespace implemented as a dictionary '
+          'which\n'
+          '   is the first place in which attribute references are searched.\n'
+          "   When an attribute is not found there, and the instance's class "
+          'has\n'
+          '   an attribute by that name, the search continues with the class\n'
+          '   attributes.  If a class attribute is found that is a '
+          'user-defined\n'
+          '   function object or an unbound user-defined method object whose\n'
+          '   associated class is the class (call it "C") of the instance for\n'
+          '   which the attribute reference was initiated or one of its bases, '
+          'it\n'
+          '   is transformed into a bound user-defined method object whose\n'
+          '   "im_class" attribute is "C" and whose "im_self" attribute is '
+          'the\n'
+          '   instance. Static method and class method objects are also\n'
+          '   transformed, as if they had been retrieved from class "C"; see\n'
+          '   above under "Classes". See section Implementing Descriptors for\n'
+          '   another way in which attributes of a class retrieved via its\n'
+          '   instances may differ from the objects actually stored in the\n'
+          '   class\'s "__dict__". If no class attribute is found, and the\n'
+          '   object\'s class has a "__getattr__()" method, that is called to\n'
+          '   satisfy the lookup.\n'
+          '\n'
+          "   Attribute assignments and deletions update the instance's\n"
+          "   dictionary, never a class's dictionary.  If the class has a\n"
+          '   "__setattr__()" or "__delattr__()" method, this is called '
+          'instead\n'
+          '   of updating the instance dictionary directly.\n'
+          '\n'
+          '   Class instances can pretend to be numbers, sequences, or '
+          'mappings\n'
+          '   if they have methods with certain special names.  See section\n'
+          '   Special method names.\n'
+          '\n'
+          '   Special attributes: "__dict__" is the attribute dictionary;\n'
+          '   "__class__" is the instance\'s class.\n'
+          '\n'
+          'Files\n'
+          '   A file object represents an open file.  File objects are created '
+          'by\n'
+          '   the "open()" built-in function, and also by "os.popen()",\n'
+          '   "os.fdopen()", and the "makefile()" method of socket objects '
+          '(and\n'
+          '   perhaps by other functions or methods provided by extension\n'
+          '   modules).  The objects "sys.stdin", "sys.stdout" and '
+          '"sys.stderr"\n'
+          '   are initialized to file objects corresponding to the '
+          "interpreter's\n"
+          '   standard input, output and error streams.  See File Objects for\n'
+          '   complete documentation of file objects.\n'
+          '\n'
+          'Internal types\n'
+          '   A few types used internally by the interpreter are exposed to '
+          'the\n'
+          '   user. Their definitions may change with future versions of the\n'
+          '   interpreter, but they are mentioned here for completeness.\n'
+          '\n'
+          '   Code objects\n'
+          '      Code objects represent *byte-compiled* executable Python '
+          'code,\n'
+          '      or *bytecode*. The difference between a code object and a\n'
+          '      function object is that the function object contains an '
+          'explicit\n'
+          "      reference to the function's globals (the module in which it "
+          'was\n'
+          '      defined), while a code object contains no context; also the\n'
+          '      default argument values are stored in the function object, '
+          'not\n'
+          '      in the code object (because they represent values calculated '
+          'at\n'
+          '      run-time).  Unlike function objects, code objects are '
+          'immutable\n'
+          '      and contain no references (directly or indirectly) to '
+          'mutable\n'
+          '      objects.\n'
+          '\n'
+          '      Special read-only attributes: "co_name" gives the function '
+          'name;\n'
+          '      "co_argcount" is the number of positional arguments '
+          '(including\n'
+          '      arguments with default values); "co_nlocals" is the number '
+          'of\n'
+          '      local variables used by the function (including arguments);\n'
+          '      "co_varnames" is a tuple containing the names of the local\n'
+          '      variables (starting with the argument names); "co_cellvars" '
+          'is a\n'
+          '      tuple containing the names of local variables that are\n'
+          '      referenced by nested functions; "co_freevars" is a tuple\n'
+          '      containing the names of free variables; "co_code" is a '
+          'string\n'
+          '      representing the sequence of bytecode instructions; '
+          '"co_consts"\n'
+          '      is a tuple containing the literals used by the bytecode;\n'
+          '      "co_names" is a tuple containing the names used by the '
+          'bytecode;\n'
+          '      "co_filename" is the filename from which the code was '
+          'compiled;\n'
+          '      "co_firstlineno" is the first line number of the function;\n'
+          '      "co_lnotab" is a string encoding the mapping from bytecode\n'
+          '      offsets to line numbers (for details see the source code of '
+          'the\n'
+          '      interpreter); "co_stacksize" is the required stack size\n'
+          '      (including local variables); "co_flags" is an integer '
+          'encoding a\n'
+          '      number of flags for the interpreter.\n'
+          '\n'
+          '      The following flag bits are defined for "co_flags": bit '
+          '"0x04"\n'
+          '      is set if the function uses the "*arguments" syntax to accept '
+          'an\n'
+          '      arbitrary number of positional arguments; bit "0x08" is set '
+          'if\n'
+          '      the function uses the "**keywords" syntax to accept '
+          'arbitrary\n'
+          '      keyword arguments; bit "0x20" is set if the function is a\n'
+          '      generator.\n'
+          '\n'
+          '      Future feature declarations ("from __future__ import '
+          'division")\n'
+          '      also use bits in "co_flags" to indicate whether a code '
+          'object\n'
+          '      was compiled with a particular feature enabled: bit "0x2000" '
+          'is\n'
+          '      set if the function was compiled with future division '
+          'enabled;\n'
+          '      bits "0x10" and "0x1000" were used in earlier versions of\n'
+          '      Python.\n'
+          '\n'
+          '      Other bits in "co_flags" are reserved for internal use.\n'
+          '\n'
+          '      If a code object represents a function, the first item in\n'
+          '      "co_consts" is the documentation string of the function, or\n'
+          '      "None" if undefined.\n'
+          '\n'
+          '   Frame objects\n'
+          '      Frame objects represent execution frames.  They may occur in\n'
+          '      traceback objects (see below).\n'
+          '\n'
+          '      Special read-only attributes: "f_back" is to the previous '
+          'stack\n'
+          '      frame (towards the caller), or "None" if this is the bottom\n'
+          '      stack frame; "f_code" is the code object being executed in '
+          'this\n'
+          '      frame; "f_locals" is the dictionary used to look up local\n'
+          '      variables; "f_globals" is used for global variables;\n'
+          '      "f_builtins" is used for built-in (intrinsic) names;\n'
+          '      "f_restricted" is a flag indicating whether the function is\n'
+          '      executing in restricted execution mode; "f_lasti" gives the\n'
+          '      precise instruction (this is an index into the bytecode '
+          'string\n'
+          '      of the code object).\n'
+          '\n'
+          '      Special writable attributes: "f_trace", if not "None", is a\n'
+          '      function called at the start of each source code line (this '
+          'is\n'
+          '      used by the debugger); "f_exc_type", "f_exc_value",\n'
+          '      "f_exc_traceback" represent the last exception raised in the\n'
+          '      parent frame provided another exception was ever raised in '
+          'the\n'
+          '      current frame (in all other cases they are "None"); '
+          '"f_lineno"\n'
+          '      is the current line number of the frame --- writing to this '
+          'from\n'
+          '      within a trace function jumps to the given line (only for '
+          'the\n'
+          '      bottom-most frame).  A debugger can implement a Jump command\n'
+          '      (aka Set Next Statement) by writing to f_lineno.\n'
+          '\n'
+          '   Traceback objects\n'
+          '      Traceback objects represent a stack trace of an exception.  '
+          'A\n'
+          '      traceback object is created when an exception occurs.  When '
+          'the\n'
+          '      search for an exception handler unwinds the execution stack, '
+          'at\n'
+          '      each unwound level a traceback object is inserted in front '
+          'of\n'
+          '      the current traceback.  When an exception handler is '
+          'entered,\n'
+          '      the stack trace is made available to the program. (See '
+          'section\n'
+          '      The try statement.) It is accessible as "sys.exc_traceback", '
+          'and\n'
+          '      also as the third item of the tuple returned by\n'
+          '      "sys.exc_info()".  The latter is the preferred interface, '
+          'since\n'
+          '      it works correctly when the program is using multiple '
+          'threads.\n'
+          '      When the program contains no suitable handler, the stack '
+          'trace\n'
+          '      is written (nicely formatted) to the standard error stream; '
+          'if\n'
+          '      the interpreter is interactive, it is also made available to '
+          'the\n'
+          '      user as "sys.last_traceback".\n'
+          '\n'
+          '      Special read-only attributes: "tb_next" is the next level in '
+          'the\n'
+          '      stack trace (towards the frame where the exception occurred), '
+          'or\n'
+          '      "None" if there is no next level; "tb_frame" points to the\n'
+          '      execution frame of the current level; "tb_lineno" gives the '
+          'line\n'
+          '      number where the exception occurred; "tb_lasti" indicates '
+          'the\n'
+          '      precise instruction.  The line number and last instruction '
+          'in\n'
+          '      the traceback may differ from the line number of its frame\n'
+          '      object if the exception occurred in a "try" statement with '
+          'no\n'
+          '      matching except clause or with a finally clause.\n'
+          '\n'
+          '   Slice objects\n'
+          '      Slice objects are used to represent slices when *extended '
+          'slice\n'
+          '      syntax* is used. This is a slice using two colons, or '
+          'multiple\n'
+          '      slices or ellipses separated by commas, e.g., "a[i:j:step]",\n'
+          '      "a[i:j, k:l]", or "a[..., i:j]".  They are also created by '
+          'the\n'
+          '      built-in "slice()" function.\n'
+          '\n'
+          '      Special read-only attributes: "start" is the lower bound; '
+          '"stop"\n'
+          '      is the upper bound; "step" is the step value; each is "None" '
+          'if\n'
+          '      omitted.  These attributes can have any type.\n'
+          '\n'
+          '      Slice objects support one method:\n'
+          '\n'
+          '      slice.indices(self, length)\n'
+          '\n'
+          '         This method takes a single integer argument *length* and\n'
+          '         computes information about the extended slice that the '
+          'slice\n'
+          '         object would describe if applied to a sequence of '
+          '*length*\n'
+          '         items.  It returns a tuple of three integers; '
+          'respectively\n'
+          '         these are the *start* and *stop* indices and the *step* '
+          'or\n'
+          '         stride length of the slice. Missing or out-of-bounds '
+          'indices\n'
+          '         are handled in a manner consistent with regular slices.\n'
+          '\n'
+          '         New in version 2.3.\n'
+          '\n'
+          '   Static method objects\n'
+          '      Static method objects provide a way of defeating the\n'
+          '      transformation of function objects to method objects '
+          'described\n'
+          '      above. A static method object is a wrapper around any other\n'
+          '      object, usually a user-defined method object. When a static\n'
+          '      method object is retrieved from a class or a class instance, '
+          'the\n'
+          '      object actually returned is the wrapped object, which is not\n'
+          '      subject to any further transformation. Static method objects '
+          'are\n'
+          '      not themselves callable, although the objects they wrap '
+          'usually\n'
+          '      are. Static method objects are created by the built-in\n'
+          '      "staticmethod()" constructor.\n'
+          '\n'
+          '   Class method objects\n'
+          '      A class method object, like a static method object, is a '
+          'wrapper\n'
+          '      around another object that alters the way in which that '
+          'object\n'
+          '      is retrieved from classes and class instances. The behaviour '
+          'of\n'
+          '      class method objects upon such retrieval is described above,\n'
+          '      under "User-defined methods". Class method objects are '
+          'created\n'
+          '      by the built-in "classmethod()" constructor.\n',
+ 'typesfunctions': '\n'
+                   'Functions\n'
+                   '*********\n'
+                   '\n'
+                   'Function objects are created by function definitions.  The '
+                   'only\n'
+                   'operation on a function object is to call it: '
+                   '"func(argument-list)".\n'
+                   '\n'
+                   'There are really two flavors of function objects: built-in '
+                   'functions\n'
+                   'and user-defined functions.  Both support the same '
+                   'operation (to call\n'
+                   'the function), but the implementation is different, hence '
+                   'the\n'
+                   'different object types.\n'
+                   '\n'
+                   'See Function definitions for more information.\n',
+ 'typesmapping': '\n'
+                 'Mapping Types --- "dict"\n'
+                 '************************\n'
+                 '\n'
+                 'A *mapping* object maps *hashable* values to arbitrary '
+                 'objects.\n'
+                 'Mappings are mutable objects.  There is currently only one '
+                 'standard\n'
+                 'mapping type, the *dictionary*.  (For other containers see '
+                 'the built\n'
+                 'in "list", "set", and "tuple" classes, and the "collections" '
+                 'module.)\n'
+                 '\n'
+                 "A dictionary's keys are *almost* arbitrary values.  Values "
+                 'that are\n'
+                 'not *hashable*, that is, values containing lists, '
+                 'dictionaries or\n'
+                 'other mutable types (that are compared by value rather than '
+                 'by object\n'
+                 'identity) may not be used as keys.  Numeric types used for '
+                 'keys obey\n'
+                 'the normal rules for numeric comparison: if two numbers '
+                 'compare equal\n'
+                 '(such as "1" and "1.0") then they can be used '
+                 'interchangeably to index\n'
+                 'the same dictionary entry.  (Note however, that since '
+                 'computers store\n'
+                 'floating-point numbers as approximations it is usually '
+                 'unwise to use\n'
+                 'them as dictionary keys.)\n'
+                 '\n'
+                 'Dictionaries can be created by placing a comma-separated '
+                 'list of "key:\n'
+                 'value" pairs within braces, for example: "{\'jack\': 4098, '
+                 "'sjoerd':\n"
+                 '4127}" or "{4098: \'jack\', 4127: \'sjoerd\'}", or by the '
+                 '"dict"\n'
+                 'constructor.\n'
+                 '\n'
+                 'class dict(**kwarg)\n'
+                 'class dict(mapping, **kwarg)\n'
+                 'class dict(iterable, **kwarg)\n'
+                 '\n'
+                 '   Return a new dictionary initialized from an optional '
+                 'positional\n'
+                 '   argument and a possibly empty set of keyword arguments.\n'
+                 '\n'
+                 '   If no positional argument is given, an empty dictionary '
+                 'is created.\n'
+                 '   If a positional argument is given and it is a mapping '
+                 'object, a\n'
+                 '   dictionary is created with the same key-value pairs as '
+                 'the mapping\n'
+                 '   object.  Otherwise, the positional argument must be an '
+                 '*iterable*\n'
+                 '   object.  Each item in the iterable must itself be an '
+                 'iterable with\n'
+                 '   exactly two objects.  The first object of each item '
+                 'becomes a key\n'
+                 '   in the new dictionary, and the second object the '
+                 'corresponding\n'
+                 '   value.  If a key occurs more than once, the last value '
+                 'for that key\n'
+                 '   becomes the corresponding value in the new dictionary.\n'
+                 '\n'
+                 '   If keyword arguments are given, the keyword arguments and '
+                 'their\n'
+                 '   values are added to the dictionary created from the '
+                 'positional\n'
+                 '   argument.  If a key being added is already present, the '
+                 'value from\n'
+                 '   the keyword argument replaces the value from the '
+                 'positional\n'
+                 '   argument.\n'
+                 '\n'
+                 '   To illustrate, the following examples all return a '
+                 'dictionary equal\n'
+                 '   to "{"one": 1, "two": 2, "three": 3}":\n'
+                 '\n'
+                 '      >>> a = dict(one=1, two=2, three=3)\n'
+                 "      >>> b = {'one': 1, 'two': 2, 'three': 3}\n"
+                 "      >>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))\n"
+                 "      >>> d = dict([('two', 2), ('one', 1), ('three', 3)])\n"
+                 "      >>> e = dict({'three': 3, 'one': 1, 'two': 2})\n"
+                 '      >>> a == b == c == d == e\n'
+                 '      True\n'
+                 '\n'
+                 '   Providing keyword arguments as in the first example only '
+                 'works for\n'
+                 '   keys that are valid Python identifiers.  Otherwise, any '
+                 'valid keys\n'
+                 '   can be used.\n'
+                 '\n'
+                 '   New in version 2.2.\n'
+                 '\n'
+                 '   Changed in version 2.3: Support for building a dictionary '
+                 'from\n'
+                 '   keyword arguments added.\n'
+                 '\n'
+                 '   These are the operations that dictionaries support (and '
+                 'therefore,\n'
+                 '   custom mapping types should support too):\n'
+                 '\n'
+                 '   len(d)\n'
+                 '\n'
+                 '      Return the number of items in the dictionary *d*.\n'
+                 '\n'
+                 '   d[key]\n'
+                 '\n'
+                 '      Return the item of *d* with key *key*.  Raises a '
+                 '"KeyError" if\n'
+                 '      *key* is not in the map.\n'
+                 '\n'
+                 '      If a subclass of dict defines a method "__missing__()" '
+                 'and *key*\n'
+                 '      is not present, the "d[key]" operation calls that '
+                 'method with\n'
+                 '      the key *key* as argument.  The "d[key]" operation '
+                 'then returns\n'
+                 '      or raises whatever is returned or raised by the\n'
+                 '      "__missing__(key)" call. No other operations or '
+                 'methods invoke\n'
+                 '      "__missing__()". If "__missing__()" is not defined, '
+                 '"KeyError"\n'
+                 '      is raised. "__missing__()" must be a method; it cannot '
+                 'be an\n'
+                 '      instance variable:\n'
+                 '\n'
+                 '         >>> class Counter(dict):\n'
+                 '         ...     def __missing__(self, key):\n'
+                 '         ...         return 0\n'
+                 '         >>> c = Counter()\n'
+                 "         >>> c['red']\n"
+                 '         0\n'
+                 "         >>> c['red'] += 1\n"
+                 "         >>> c['red']\n"
+                 '         1\n'
+                 '\n'
+                 '      The example above shows part of the implementation of\n'
+                 '      "collections.Counter".  A different "__missing__" '
+                 'method is used\n'
+                 '      by "collections.defaultdict".\n'
+                 '\n'
+                 '      New in version 2.5: Recognition of __missing__ methods '
+                 'of dict\n'
+                 '      subclasses.\n'
+                 '\n'
+                 '   d[key] = value\n'
+                 '\n'
+                 '      Set "d[key]" to *value*.\n'
+                 '\n'
+                 '   del d[key]\n'
+                 '\n'
+                 '      Remove "d[key]" from *d*.  Raises a "KeyError" if '
+                 '*key* is not\n'
+                 '      in the map.\n'
+                 '\n'
+                 '   key in d\n'
+                 '\n'
+                 '      Return "True" if *d* has a key *key*, else "False".\n'
+                 '\n'
+                 '      New in version 2.2.\n'
+                 '\n'
+                 '   key not in d\n'
+                 '\n'
+                 '      Equivalent to "not key in d".\n'
+                 '\n'
+                 '      New in version 2.2.\n'
+                 '\n'
+                 '   iter(d)\n'
+                 '\n'
+                 '      Return an iterator over the keys of the dictionary.  '
+                 'This is a\n'
+                 '      shortcut for "iterkeys()".\n'
+                 '\n'
+                 '   clear()\n'
+                 '\n'
+                 '      Remove all items from the dictionary.\n'
+                 '\n'
+                 '   copy()\n'
+                 '\n'
+                 '      Return a shallow copy of the dictionary.\n'
+                 '\n'
+                 '   fromkeys(seq[, value])\n'
+                 '\n'
+                 '      Create a new dictionary with keys from *seq* and '
+                 'values set to\n'
+                 '      *value*.\n'
+                 '\n'
+                 '      "fromkeys()" is a class method that returns a new '
+                 'dictionary.\n'
+                 '      *value* defaults to "None".\n'
+                 '\n'
+                 '      New in version 2.3.\n'
+                 '\n'
+                 '   get(key[, default])\n'
+                 '\n'
+                 '      Return the value for *key* if *key* is in the '
+                 'dictionary, else\n'
+                 '      *default*. If *default* is not given, it defaults to '
+                 '"None", so\n'
+                 '      that this method never raises a "KeyError".\n'
+                 '\n'
+                 '   has_key(key)\n'
+                 '\n'
+                 '      Test for the presence of *key* in the dictionary.  '
+                 '"has_key()"\n'
+                 '      is deprecated in favor of "key in d".\n'
+                 '\n'
+                 '   items()\n'
+                 '\n'
+                 '      Return a copy of the dictionary\'s list of "(key, '
+                 'value)" pairs.\n'
+                 '\n'
+                 '      **CPython implementation detail:** Keys and values are '
+                 'listed in\n'
+                 '      an arbitrary order which is non-random, varies across '
+                 'Python\n'
+                 "      implementations, and depends on the dictionary's "
+                 'history of\n'
+                 '      insertions and deletions.\n'
+                 '\n'
+                 '      If "items()", "keys()", "values()", "iteritems()", '
+                 '"iterkeys()",\n'
+                 '      and "itervalues()" are called with no intervening '
+                 'modifications\n'
+                 '      to the dictionary, the lists will directly '
+                 'correspond.  This\n'
+                 '      allows the creation of "(value, key)" pairs using '
+                 '"zip()":\n'
+                 '      "pairs = zip(d.values(), d.keys())".  The same '
+                 'relationship\n'
+                 '      holds for the "iterkeys()" and "itervalues()" methods: '
+                 '"pairs =\n'
+                 '      zip(d.itervalues(), d.iterkeys())" provides the same '
+                 'value for\n'
+                 '      "pairs". Another way to create the same list is "pairs '
+                 '= [(v, k)\n'
+                 '      for (k, v) in d.iteritems()]".\n'
+                 '\n'
+                 '   iteritems()\n'
+                 '\n'
+                 '      Return an iterator over the dictionary\'s "(key, '
+                 'value)" pairs.\n'
+                 '      See the note for "dict.items()".\n'
+                 '\n'
+                 '      Using "iteritems()" while adding or deleting entries '
+                 'in the\n'
+                 '      dictionary may raise a "RuntimeError" or fail to '
+                 'iterate over\n'
+                 '      all entries.\n'
+                 '\n'
+                 '      New in version 2.2.\n'
+                 '\n'
+                 '   iterkeys()\n'
+                 '\n'
+                 "      Return an iterator over the dictionary's keys.  See "
+                 'the note for\n'
+                 '      "dict.items()".\n'
+                 '\n'
+                 '      Using "iterkeys()" while adding or deleting entries in '
+                 'the\n'
+                 '      dictionary may raise a "RuntimeError" or fail to '
+                 'iterate over\n'
+                 '      all entries.\n'
+                 '\n'
+                 '      New in version 2.2.\n'
+                 '\n'
+                 '   itervalues()\n'
+                 '\n'
+                 "      Return an iterator over the dictionary's values.  See "
+                 'the note\n'
+                 '      for "dict.items()".\n'
+                 '\n'
+                 '      Using "itervalues()" while adding or deleting entries '
+                 'in the\n'
+                 '      dictionary may raise a "RuntimeError" or fail to '
+                 'iterate over\n'
+                 '      all entries.\n'
+                 '\n'
+                 '      New in version 2.2.\n'
+                 '\n'
+                 '   keys()\n'
+                 '\n'
+                 "      Return a copy of the dictionary's list of keys.  See "
+                 'the note\n'
+                 '      for "dict.items()".\n'
+                 '\n'
+                 '   pop(key[, default])\n'
+                 '\n'
+                 '      If *key* is in the dictionary, remove it and return '
+                 'its value,\n'
+                 '      else return *default*.  If *default* is not given and '
+                 '*key* is\n'
+                 '      not in the dictionary, a "KeyError" is raised.\n'
+                 '\n'
+                 '      New in version 2.3.\n'
+                 '\n'
+                 '   popitem()\n'
+                 '\n'
+                 '      Remove and return an arbitrary "(key, value)" pair '
+                 'from the\n'
+                 '      dictionary.\n'
+                 '\n'
+                 '      "popitem()" is useful to destructively iterate over a\n'
+                 '      dictionary, as often used in set algorithms.  If the '
+                 'dictionary\n'
+                 '      is empty, calling "popitem()" raises a "KeyError".\n'
+                 '\n'
+                 '   setdefault(key[, default])\n'
+                 '\n'
+                 '      If *key* is in the dictionary, return its value.  If '
+                 'not, insert\n'
+                 '      *key* with a value of *default* and return *default*.  '
+                 '*default*\n'
+                 '      defaults to "None".\n'
+                 '\n'
+                 '   update([other])\n'
+                 '\n'
+                 '      Update the dictionary with the key/value pairs from '
+                 '*other*,\n'
+                 '      overwriting existing keys.  Return "None".\n'
+                 '\n'
+                 '      "update()" accepts either another dictionary object or '
+                 'an\n'
+                 '      iterable of key/value pairs (as tuples or other '
+                 'iterables of\n'
+                 '      length two).  If keyword arguments are specified, the '
+                 'dictionary\n'
+                 '      is then updated with those key/value pairs: '
+                 '"d.update(red=1,\n'
+                 '      blue=2)".\n'
+                 '\n'
+                 '      Changed in version 2.4: Allowed the argument to be an '
+                 'iterable\n'
+                 '      of key/value pairs and allowed keyword arguments.\n'
+                 '\n'
+                 '   values()\n'
+                 '\n'
+                 "      Return a copy of the dictionary's list of values.  See "
+                 'the note\n'
+                 '      for "dict.items()".\n'
+                 '\n'
+                 '   viewitems()\n'
+                 '\n'
+                 '      Return a new view of the dictionary\'s items ("(key, '
+                 'value)"\n'
+                 '      pairs).  See below for documentation of view objects.\n'
+                 '\n'
+                 '      New in version 2.7.\n'
+                 '\n'
+                 '   viewkeys()\n'
+                 '\n'
+                 "      Return a new view of the dictionary's keys.  See below "
+                 'for\n'
+                 '      documentation of view objects.\n'
+                 '\n'
+                 '      New in version 2.7.\n'
+                 '\n'
+                 '   viewvalues()\n'
+                 '\n'
+                 "      Return a new view of the dictionary's values.  See "
+                 'below for\n'
+                 '      documentation of view objects.\n'
+                 '\n'
+                 '      New in version 2.7.\n'
+                 '\n'
+                 '   Dictionaries compare equal if and only if they have the '
+                 'same "(key,\n'
+                 '   value)" pairs.\n'
+                 '\n'
+                 '\n'
+                 'Dictionary view objects\n'
+                 '=======================\n'
+                 '\n'
+                 'The objects returned by "dict.viewkeys()", '
+                 '"dict.viewvalues()" and\n'
+                 '"dict.viewitems()" are *view objects*.  They provide a '
+                 'dynamic view on\n'
+                 "the dictionary's entries, which means that when the "
+                 'dictionary\n'
+                 'changes, the view reflects these changes.\n'
+                 '\n'
+                 'Dictionary views can be iterated over to yield their '
+                 'respective data,\n'
+                 'and support membership tests:\n'
+                 '\n'
+                 'len(dictview)\n'
+                 '\n'
+                 '   Return the number of entries in the dictionary.\n'
+                 '\n'
+                 'iter(dictview)\n'
+                 '\n'
+                 '   Return an iterator over the keys, values or items '
+                 '(represented as\n'
+                 '   tuples of "(key, value)") in the dictionary.\n'
+                 '\n'
+                 '   Keys and values are iterated over in an arbitrary order '
+                 'which is\n'
+                 '   non-random, varies across Python implementations, and '
+                 'depends on\n'
+                 "   the dictionary's history of insertions and deletions. If "
+                 'keys,\n'
+                 '   values and items views are iterated over with no '
+                 'intervening\n'
+                 '   modifications to the dictionary, the order of items will '
+                 'directly\n'
+                 '   correspond.  This allows the creation of "(value, key)" '
+                 'pairs using\n'
+                 '   "zip()": "pairs = zip(d.values(), d.keys())".  Another '
+                 'way to\n'
+                 '   create the same list is "pairs = [(v, k) for (k, v) in '
+                 'd.items()]".\n'
+                 '\n'
+                 '   Iterating views while adding or deleting entries in the '
+                 'dictionary\n'
+                 '   may raise a "RuntimeError" or fail to iterate over all '
+                 'entries.\n'
+                 '\n'
+                 'x in dictview\n'
+                 '\n'
+                 '   Return "True" if *x* is in the underlying dictionary\'s '
+                 'keys, values\n'
+                 '   or items (in the latter case, *x* should be a "(key, '
+                 'value)"\n'
+                 '   tuple).\n'
+                 '\n'
+                 'Keys views are set-like since their entries are unique and '
+                 'hashable.\n'
+                 'If all values are hashable, so that (key, value) pairs are '
+                 'unique and\n'
+                 'hashable, then the items view is also set-like.  (Values '
+                 'views are not\n'
+                 'treated as set-like since the entries are generally not '
+                 'unique.)  Then\n'
+                 'these set operations are available ("other" refers either to '
+                 'another\n'
+                 'view or a set):\n'
+                 '\n'
+                 'dictview & other\n'
+                 '\n'
+                 '   Return the intersection of the dictview and the other '
+                 'object as a\n'
+                 '   new set.\n'
+                 '\n'
+                 'dictview | other\n'
+                 '\n'
+                 '   Return the union of the dictview and the other object as '
+                 'a new set.\n'
+                 '\n'
+                 'dictview - other\n'
+                 '\n'
+                 '   Return the difference between the dictview and the other '
+                 'object\n'
+                 "   (all elements in *dictview* that aren't in *other*) as a "
+                 'new set.\n'
+                 '\n'
+                 'dictview ^ other\n'
+                 '\n'
+                 '   Return the symmetric difference (all elements either in '
+                 '*dictview*\n'
+                 '   or *other*, but not in both) of the dictview and the '
+                 'other object\n'
+                 '   as a new set.\n'
+                 '\n'
+                 'An example of dictionary view usage:\n'
+                 '\n'
+                 "   >>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, "
+                 "'spam': 500}\n"
+                 '   >>> keys = dishes.viewkeys()\n'
+                 '   >>> values = dishes.viewvalues()\n'
+                 '\n'
+                 '   >>> # iteration\n'
+                 '   >>> n = 0\n'
+                 '   >>> for val in values:\n'
+                 '   ...     n += val\n'
+                 '   >>> print(n)\n'
+                 '   504\n'
+                 '\n'
+                 '   >>> # keys and values are iterated over in the same '
+                 'order\n'
+                 '   >>> list(keys)\n'
+                 "   ['eggs', 'bacon', 'sausage', 'spam']\n"
+                 '   >>> list(values)\n'
+                 '   [2, 1, 1, 500]\n'
+                 '\n'
+                 '   >>> # view objects are dynamic and reflect dict changes\n'
+                 "   >>> del dishes['eggs']\n"
+                 "   >>> del dishes['sausage']\n"
+                 '   >>> list(keys)\n'
+                 "   ['spam', 'bacon']\n"
+                 '\n'
+                 '   >>> # set operations\n'
+                 "   >>> keys & {'eggs', 'bacon', 'salad'}\n"
+                 "   {'bacon'}\n",
+ 'typesmethods': '\n'
+                 'Methods\n'
+                 '*******\n'
+                 '\n'
+                 'Methods are functions that are called using the attribute '
+                 'notation.\n'
+                 'There are two flavors: built-in methods (such as "append()" '
+                 'on lists)\n'
+                 'and class instance methods.  Built-in methods are described '
+                 'with the\n'
+                 'types that support them.\n'
+                 '\n'
+                 'The implementation adds two special read-only attributes to '
+                 'class\n'
+                 'instance methods: "m.im_self" is the object on which the '
+                 'method\n'
+                 'operates, and "m.im_func" is the function implementing the '
+                 'method.\n'
+                 'Calling "m(arg-1, arg-2, ..., arg-n)" is completely '
+                 'equivalent to\n'
+                 'calling "m.im_func(m.im_self, arg-1, arg-2, ..., arg-n)".\n'
+                 '\n'
+                 'Class instance methods are either *bound* or *unbound*, '
+                 'referring to\n'
+                 'whether the method was accessed through an instance or a '
+                 'class,\n'
+                 'respectively.  When a method is unbound, its "im_self" '
+                 'attribute will\n'
+                 'be "None" and if called, an explicit "self" object must be '
+                 'passed as\n'
+                 'the first argument.  In this case, "self" must be an '
+                 'instance of the\n'
+                 "unbound method's class (or a subclass of that class), "
+                 'otherwise a\n'
+                 '"TypeError" is raised.\n'
+                 '\n'
+                 'Like function objects, methods objects support getting '
+                 'arbitrary\n'
+                 'attributes. However, since method attributes are actually '
+                 'stored on\n'
+                 'the underlying function object ("meth.im_func"), setting '
+                 'method\n'
+                 'attributes on either bound or unbound methods is '
+                 'disallowed.\n'
+                 'Attempting to set an attribute on a method results in an\n'
+                 '"AttributeError" being raised.  In order to set a method '
+                 'attribute,\n'
+                 'you need to explicitly set it on the underlying function '
+                 'object:\n'
+                 '\n'
+                 '   >>> class C:\n'
+                 '   ...     def method(self):\n'
+                 '   ...         pass\n'
+                 '   ...\n'
+                 '   >>> c = C()\n'
+                 "   >>> c.method.whoami = 'my name is method'  # can't set on "
+                 'the method\n'
+                 '   Traceback (most recent call last):\n'
+                 '     File "<stdin>", line 1, in <module>\n'
+                 "   AttributeError: 'instancemethod' object has no attribute "
+                 "'whoami'\n"
+                 "   >>> c.method.im_func.whoami = 'my name is method'\n"
+                 '   >>> c.method.whoami\n'
+                 "   'my name is method'\n"
+                 '\n'
+                 'See The standard type hierarchy for more information.\n',
+ 'typesmodules': '\n'
+                 'Modules\n'
+                 '*******\n'
+                 '\n'
+                 'The only special operation on a module is attribute access: '
+                 '"m.name",\n'
+                 'where *m* is a module and *name* accesses a name defined in '
+                 "*m*'s\n"
+                 'symbol table. Module attributes can be assigned to.  (Note '
+                 'that the\n'
+                 '"import" statement is not, strictly speaking, an operation '
+                 'on a module\n'
+                 'object; "import foo" does not require a module object named '
+                 '*foo* to\n'
+                 'exist, rather it requires an (external) *definition* for a '
+                 'module\n'
+                 'named *foo* somewhere.)\n'
+                 '\n'
+                 'A special attribute of every module is "__dict__". This is '
+                 'the\n'
+                 "dictionary containing the module's symbol table. Modifying "
+                 'this\n'
+                 "dictionary will actually change the module's symbol table, "
+                 'but direct\n'
+                 'assignment to the "__dict__" attribute is not possible (you '
+                 'can write\n'
+                 '"m.__dict__[\'a\'] = 1", which defines "m.a" to be "1", but '
+                 "you can't\n"
+                 'write "m.__dict__ = {}").  Modifying "__dict__" directly is '
+                 'not\n'
+                 'recommended.\n'
+                 '\n'
+                 'Modules built into the interpreter are written like this: '
+                 '"<module\n'
+                 '\'sys\' (built-in)>".  If loaded from a file, they are '
+                 'written as\n'
+                 '"<module \'os\' from '
+                 '\'/usr/local/lib/pythonX.Y/os.pyc\'>".\n',
+ 'typesseq': '\n'
+             'Sequence Types --- "str", "unicode", "list", "tuple", '
+             '"bytearray", "buffer", "xrange"\n'
+             '*************************************************************************************\n'
+             '\n'
+             'There are seven sequence types: strings, Unicode strings, '
+             'lists,\n'
+             'tuples, bytearrays, buffers, and xrange objects.\n'
+             '\n'
+             'For other containers see the built in "dict" and "set" classes, '
+             'and\n'
+             'the "collections" module.\n'
+             '\n'
+             'String literals are written in single or double quotes: '
+             '"\'xyzzy\'",\n'
+             '""frobozz"".  See String literals for more about string '
+             'literals.\n'
+             'Unicode strings are much like strings, but are specified in the '
+             'syntax\n'
+             'using a preceding "\'u\'" character: "u\'abc\'", "u"def"". In '
+             'addition to\n'
+             'the functionality described here, there are also '
+             'string-specific\n'
+             'methods described in the String Methods section. Lists are '
+             'constructed\n'
+             'with square brackets, separating items with commas: "[a, b, '
+             'c]".\n'
+             'Tuples are constructed by the comma operator (not within square\n'
+             'brackets), with or without enclosing parentheses, but an empty '
+             'tuple\n'
+             'must have the enclosing parentheses, such as "a, b, c" or "()".  '
+             'A\n'
+             'single item tuple must have a trailing comma, such as "(d,)".\n'
+             '\n'
+             'Bytearray objects are created with the built-in function\n'
+             '"bytearray()".\n'
+             '\n'
+             'Buffer objects are not directly supported by Python syntax, but '
+             'can be\n'
+             'created by calling the built-in function "buffer()".  They '
+             "don't\n"
+             'support concatenation or repetition.\n'
+             '\n'
+             'Objects of type xrange are similar to buffers in that there is '
+             'no\n'
+             'specific syntax to create them, but they are created using the\n'
+             '"xrange()" function.  They don\'t support slicing, concatenation '
+             'or\n'
+             'repetition, and using "in", "not in", "min()" or "max()" on them '
+             'is\n'
+             'inefficient.\n'
+             '\n'
+             'Most sequence types support the following operations.  The "in" '
+             'and\n'
+             '"not in" operations have the same priorities as the comparison\n'
+             'operations.  The "+" and "*" operations have the same priority '
+             'as the\n'
+             'corresponding numeric operations. [3] Additional methods are '
+             'provided\n'
+             'for Mutable Sequence Types.\n'
+             '\n'
+             'This table lists the sequence operations sorted in ascending '
+             'priority.\n'
+             'In the table, *s* and *t* are sequences of the same type; *n*, '
+             '*i* and\n'
+             '*j* are integers:\n'
+             '\n'
+             '+--------------------+----------------------------------+------------+\n'
+             '| Operation          | Result                           | '
+             'Notes      |\n'
+             '+====================+==================================+============+\n'
+             '| "x in s"           | "True" if an item of *s* is      | '
+             '(1)        |\n'
+             '|                    | equal to *x*, else "False"       '
+             '|            |\n'
+             '+--------------------+----------------------------------+------------+\n'
+             '| "x not in s"       | "False" if an item of *s* is     | '
+             '(1)        |\n'
+             '|                    | equal to *x*, else "True"        '
+             '|            |\n'
+             '+--------------------+----------------------------------+------------+\n'
+             '| "s + t"            | the concatenation of *s* and *t* | '
+             '(6)        |\n'
+             '+--------------------+----------------------------------+------------+\n'
+             '| "s * n, n * s"     | equivalent to adding *s* to      | '
+             '(2)        |\n'
+             '|                    | itself *n* times                 '
+             '|            |\n'
+             '+--------------------+----------------------------------+------------+\n'
+             '| "s[i]"             | *i*th item of *s*, origin 0      | '
+             '(3)        |\n'
+             '+--------------------+----------------------------------+------------+\n'
+             '| "s[i:j]"           | slice of *s* from *i* to *j*     | '
+             '(3)(4)     |\n'
+             '+--------------------+----------------------------------+------------+\n'
+             '| "s[i:j:k]"         | slice of *s* from *i* to *j*     | '
+             '(3)(5)     |\n'
+             '|                    | with step *k*                    '
+             '|            |\n'
+             '+--------------------+----------------------------------+------------+\n'
+             '| "len(s)"           | length of *s*                    '
+             '|            |\n'
+             '+--------------------+----------------------------------+------------+\n'
+             '| "min(s)"           | smallest item of *s*             '
+             '|            |\n'
+             '+--------------------+----------------------------------+------------+\n'
+             '| "max(s)"           | largest item of *s*              '
+             '|            |\n'
+             '+--------------------+----------------------------------+------------+\n'
+             '| "s.index(x)"       | index of the first occurrence of '
+             '|            |\n'
+             '|                    | *x* in *s*                       '
+             '|            |\n'
+             '+--------------------+----------------------------------+------------+\n'
+             '| "s.count(x)"       | total number of occurrences of   '
+             '|            |\n'
+             '|                    | *x* in *s*                       '
+             '|            |\n'
+             '+--------------------+----------------------------------+------------+\n'
+             '\n'
+             'Sequence types also support comparisons. In particular, tuples '
+             'and\n'
+             'lists are compared lexicographically by comparing corresponding\n'
+             'elements. This means that to compare equal, every element must '
+             'compare\n'
+             'equal and the two sequences must be of the same type and have '
+             'the same\n'
+             'length. (For full details see Comparisons in the language '
+             'reference.)\n'
+             '\n'
+             'Notes:\n'
+             '\n'
+             '1. When *s* is a string or Unicode string object the "in" and '
+             '"not\n'
+             '   in" operations act like a substring test.  In Python '
+             'versions\n'
+             '   before 2.3, *x* had to be a string of length 1. In Python 2.3 '
+             'and\n'
+             '   beyond, *x* may be a string of any length.\n'
+             '\n'
+             '2. Values of *n* less than "0" are treated as "0" (which yields '
+             'an\n'
+             '   empty sequence of the same type as *s*).  Note that items in '
+             'the\n'
+             '   sequence *s* are not copied; they are referenced multiple '
+             'times.\n'
+             '   This often haunts new Python programmers; consider:\n'
+             '\n'
+             '   >>> lists = [[]] * 3\n'
+             '   >>> lists\n'
+             '   [[], [], []]\n'
+             '   >>> lists[0].append(3)\n'
+             '   >>> lists\n'
+             '   [[3], [3], [3]]\n'
+             '\n'
+             '   What has happened is that "[[]]" is a one-element list '
+             'containing\n'
+             '   an empty list, so all three elements of "[[]] * 3" are '
+             'references\n'
+             '   to this single empty list.  Modifying any of the elements of\n'
+             '   "lists" modifies this single list. You can create a list of\n'
+             '   different lists this way:\n'
+             '\n'
+             '   >>> lists = [[] for i in range(3)]\n'
+             '   >>> lists[0].append(3)\n'
+             '   >>> lists[1].append(5)\n'
+             '   >>> lists[2].append(7)\n'
+             '   >>> lists\n'
+             '   [[3], [5], [7]]\n'
+             '\n'
+             '   Further explanation is available in the FAQ entry How do I '
+             'create a\n'
+             '   multidimensional list?.\n'
+             '\n'
+             '3. If *i* or *j* is negative, the index is relative to the end '
+             'of\n'
+             '   sequence *s*: "len(s) + i" or "len(s) + j" is substituted.  '
+             'But\n'
+             '   note that "-0" is still "0".\n'
+             '\n'
+             '4. The slice of *s* from *i* to *j* is defined as the sequence '
+             'of\n'
+             '   items with index *k* such that "i <= k < j".  If *i* or *j* '
+             'is\n'
+             '   greater than "len(s)", use "len(s)".  If *i* is omitted or '
+             '"None",\n'
+             '   use "0".  If *j* is omitted or "None", use "len(s)".  If *i* '
+             'is\n'
+             '   greater than or equal to *j*, the slice is empty.\n'
+             '\n'
+             '5. The slice of *s* from *i* to *j* with step *k* is defined as '
+             'the\n'
+             '   sequence of items with index  "x = i + n*k" such that "0 <= n '
+             '<\n'
+             '   (j-i)/k".  In other words, the indices are "i", "i+k", '
+             '"i+2*k",\n'
+             '   "i+3*k" and so on, stopping when *j* is reached (but never\n'
+             '   including *j*).  When *k* is positive, *i* and *j* are '
+             'reduced to\n'
+             '   "len(s)" if they are greater. When *k* is negative, *i* and '
+             '*j* are\n'
+             '   reduced to "len(s) - 1" if they are greater.  If *i* or *j* '
+             'are\n'
+             '   omitted or "None", they become "end" values (which end '
+             'depends on\n'
+             '   the sign of *k*).  Note, *k* cannot be zero. If *k* is '
+             '"None", it\n'
+             '   is treated like "1".\n'
+             '\n'
+             '6. **CPython implementation detail:** If *s* and *t* are both\n'
+             '   strings, some Python implementations such as CPython can '
+             'usually\n'
+             '   perform an in-place optimization for assignments of the form '
+             '"s = s\n'
+             '   + t" or "s += t".  When applicable, this optimization makes\n'
+             '   quadratic run-time much less likely.  This optimization is '
+             'both\n'
+             '   version and implementation dependent.  For performance '
+             'sensitive\n'
+             '   code, it is preferable to use the "str.join()" method which '
+             'assures\n'
+             '   consistent linear concatenation performance across versions '
+             'and\n'
+             '   implementations.\n'
+             '\n'
+             '   Changed in version 2.4: Formerly, string concatenation never\n'
+             '   occurred in-place.\n'
+             '\n'
+             '\n'
+             'String Methods\n'
+             '==============\n'
+             '\n'
+             'Below are listed the string methods which both 8-bit strings '
+             'and\n'
+             'Unicode objects support.  Some of them are also available on\n'
+             '"bytearray" objects.\n'
+             '\n'
+             "In addition, Python's strings support the sequence type methods\n"
+             'described in the Sequence Types --- str, unicode, list, tuple,\n'
+             'bytearray, buffer, xrange section. To output formatted strings '
+             'use\n'
+             'template strings or the "%" operator described in the String\n'
+             'Formatting Operations section. Also, see the "re" module for '
+             'string\n'
+             'functions based on regular expressions.\n'
+             '\n'
+             'str.capitalize()\n'
+             '\n'
+             '   Return a copy of the string with its first character '
+             'capitalized\n'
+             '   and the rest lowercased.\n'
+             '\n'
+             '   For 8-bit strings, this method is locale-dependent.\n'
+             '\n'
+             'str.center(width[, fillchar])\n'
+             '\n'
+             '   Return centered in a string of length *width*. Padding is '
+             'done\n'
+             '   using the specified *fillchar* (default is a space).\n'
+             '\n'
+             '   Changed in version 2.4: Support for the *fillchar* argument.\n'
+             '\n'
+             'str.count(sub[, start[, end]])\n'
+             '\n'
+             '   Return the number of non-overlapping occurrences of substring '
+             '*sub*\n'
+             '   in the range [*start*, *end*].  Optional arguments *start* '
+             'and\n'
+             '   *end* are interpreted as in slice notation.\n'
+             '\n'
+             'str.decode([encoding[, errors]])\n'
+             '\n'
+             '   Decodes the string using the codec registered for '
+             '*encoding*.\n'
+             '   *encoding* defaults to the default string encoding.  *errors* '
+             'may\n'
+             '   be given to set a different error handling scheme.  The '
+             'default is\n'
+             '   "\'strict\'", meaning that encoding errors raise '
+             '"UnicodeError".\n'
+             '   Other possible values are "\'ignore\'", "\'replace\'" and any '
+             'other\n'
+             '   name registered via "codecs.register_error()", see section '
+             'Codec\n'
+             '   Base Classes.\n'
+             '\n'
+             '   New in version 2.2.\n'
+             '\n'
+             '   Changed in version 2.3: Support for other error handling '
+             'schemes\n'
+             '   added.\n'
+             '\n'
+             '   Changed in version 2.7: Support for keyword arguments added.\n'
+             '\n'
+             'str.encode([encoding[, errors]])\n'
+             '\n'
+             '   Return an encoded version of the string.  Default encoding is '
+             'the\n'
+             '   current default string encoding.  *errors* may be given to '
+             'set a\n'
+             '   different error handling scheme.  The default for *errors* '
+             'is\n'
+             '   "\'strict\'", meaning that encoding errors raise a '
+             '"UnicodeError".\n'
+             '   Other possible values are "\'ignore\'", "\'replace\'",\n'
+             '   "\'xmlcharrefreplace\'", "\'backslashreplace\'" and any other '
+             'name\n'
+             '   registered via "codecs.register_error()", see section Codec '
+             'Base\n'
+             '   Classes. For a list of possible encodings, see section '
+             'Standard\n'
+             '   Encodings.\n'
+             '\n'
+             '   New in version 2.0.\n'
+             '\n'
+             '   Changed in version 2.3: Support for "\'xmlcharrefreplace\'" '
+             'and\n'
+             '   "\'backslashreplace\'" and other error handling schemes '
+             'added.\n'
+             '\n'
+             '   Changed in version 2.7: Support for keyword arguments added.\n'
+             '\n'
+             'str.endswith(suffix[, start[, end]])\n'
+             '\n'
+             '   Return "True" if the string ends with the specified '
+             '*suffix*,\n'
+             '   otherwise return "False".  *suffix* can also be a tuple of '
+             'suffixes\n'
+             '   to look for.  With optional *start*, test beginning at that\n'
+             '   position.  With optional *end*, stop comparing at that '
+             'position.\n'
+             '\n'
+             '   Changed in version 2.5: Accept tuples as *suffix*.\n'
+             '\n'
+             'str.expandtabs([tabsize])\n'
+             '\n'
+             '   Return a copy of the string where all tab characters are '
+             'replaced\n'
+             '   by one or more spaces, depending on the current column and '
+             'the\n'
+             '   given tab size.  Tab positions occur every *tabsize* '
+             'characters\n'
+             '   (default is 8, giving tab positions at columns 0, 8, 16 and '
+             'so on).\n'
+             '   To expand the string, the current column is set to zero and '
+             'the\n'
+             '   string is examined character by character.  If the character '
+             'is a\n'
+             '   tab ("\\t"), one or more space characters are inserted in the '
+             'result\n'
+             '   until the current column is equal to the next tab position. '
+             '(The\n'
+             '   tab character itself is not copied.)  If the character is a '
+             'newline\n'
+             '   ("\\n") or return ("\\r"), it is copied and the current '
+             'column is\n'
+             '   reset to zero.  Any other character is copied unchanged and '
+             'the\n'
+             '   current column is incremented by one regardless of how the\n'
+             '   character is represented when printed.\n'
+             '\n'
+             "   >>> '01\\t012\\t0123\\t01234'.expandtabs()\n"
+             "   '01      012     0123    01234'\n"
+             "   >>> '01\\t012\\t0123\\t01234'.expandtabs(4)\n"
+             "   '01  012 0123    01234'\n"
+             '\n'
+             'str.find(sub[, start[, end]])\n'
+             '\n'
+             '   Return the lowest index in the string where substring *sub* '
+             'is\n'
+             '   found within the slice "s[start:end]".  Optional arguments '
+             '*start*\n'
+             '   and *end* are interpreted as in slice notation.  Return "-1" '
+             'if\n'
+             '   *sub* is not found.\n'
+             '\n'
+             '   Note: The "find()" method should be used only if you need to '
+             'know\n'
+             '     the position of *sub*.  To check if *sub* is a substring or '
+             'not,\n'
+             '     use the "in" operator:\n'
+             '\n'
+             "        >>> 'Py' in 'Python'\n"
+             '        True\n'
+             '\n'
+             'str.format(*args, **kwargs)\n'
+             '\n'
+             '   Perform a string formatting operation.  The string on which '
+             'this\n'
+             '   method is called can contain literal text or replacement '
+             'fields\n'
+             '   delimited by braces "{}".  Each replacement field contains '
+             'either\n'
+             '   the numeric index of a positional argument, or the name of a\n'
+             '   keyword argument.  Returns a copy of the string where each\n'
+             '   replacement field is replaced with the string value of the\n'
+             '   corresponding argument.\n'
+             '\n'
+             '   >>> "The sum of 1 + 2 is {0}".format(1+2)\n'
+             "   'The sum of 1 + 2 is 3'\n"
+             '\n'
+             '   See Format String Syntax for a description of the various\n'
+             '   formatting options that can be specified in format strings.\n'
+             '\n'
+             '   This method of string formatting is the new standard in '
+             'Python 3,\n'
+             '   and should be preferred to the "%" formatting described in '
+             'String\n'
+             '   Formatting Operations in new code.\n'
+             '\n'
+             '   New in version 2.6.\n'
+             '\n'
+             'str.index(sub[, start[, end]])\n'
+             '\n'
+             '   Like "find()", but raise "ValueError" when the substring is '
+             'not\n'
+             '   found.\n'
+             '\n'
+             'str.isalnum()\n'
+             '\n'
+             '   Return true if all characters in the string are alphanumeric '
+             'and\n'
+             '   there is at least one character, false otherwise.\n'
+             '\n'
+             '   For 8-bit strings, this method is locale-dependent.\n'
+             '\n'
+             'str.isalpha()\n'
+             '\n'
+             '   Return true if all characters in the string are alphabetic '
+             'and\n'
+             '   there is at least one character, false otherwise.\n'
+             '\n'
+             '   For 8-bit strings, this method is locale-dependent.\n'
+             '\n'
+             'str.isdigit()\n'
+             '\n'
+             '   Return true if all characters in the string are digits and '
+             'there is\n'
+             '   at least one character, false otherwise.\n'
+             '\n'
+             '   For 8-bit strings, this method is locale-dependent.\n'
+             '\n'
+             'str.islower()\n'
+             '\n'
+             '   Return true if all cased characters [4] in the string are '
+             'lowercase\n'
+             '   and there is at least one cased character, false otherwise.\n'
+             '\n'
+             '   For 8-bit strings, this method is locale-dependent.\n'
+             '\n'
+             'str.isspace()\n'
+             '\n'
+             '   Return true if there are only whitespace characters in the '
+             'string\n'
+             '   and there is at least one character, false otherwise.\n'
+             '\n'
+             '   For 8-bit strings, this method is locale-dependent.\n'
+             '\n'
+             'str.istitle()\n'
+             '\n'
+             '   Return true if the string is a titlecased string and there is '
+             'at\n'
+             '   least one character, for example uppercase characters may '
+             'only\n'
+             '   follow uncased characters and lowercase characters only cased '
+             'ones.\n'
+             '   Return false otherwise.\n'
+             '\n'
+             '   For 8-bit strings, this method is locale-dependent.\n'
+             '\n'
+             'str.isupper()\n'
+             '\n'
+             '   Return true if all cased characters [4] in the string are '
+             'uppercase\n'
+             '   and there is at least one cased character, false otherwise.\n'
+             '\n'
+             '   For 8-bit strings, this method is locale-dependent.\n'
+             '\n'
+             'str.join(iterable)\n'
+             '\n'
+             '   Return a string which is the concatenation of the strings in\n'
+             '   *iterable*. A "TypeError" will be raised if there are any '
+             'non-\n'
+             '   string values in *iterable*, including "bytes" objects.  The\n'
+             '   separator between elements is the string providing this '
+             'method.\n'
+             '\n'
+             'str.ljust(width[, fillchar])\n'
+             '\n'
+             '   Return the string left justified in a string of length '
+             '*width*.\n'
+             '   Padding is done using the specified *fillchar* (default is a\n'
+             '   space).  The original string is returned if *width* is less '
+             'than or\n'
+             '   equal to "len(s)".\n'
+             '\n'
+             '   Changed in version 2.4: Support for the *fillchar* argument.\n'
+             '\n'
+             'str.lower()\n'
+             '\n'
+             '   Return a copy of the string with all the cased characters '
+             '[4]\n'
+             '   converted to lowercase.\n'
+             '\n'
+             '   For 8-bit strings, this method is locale-dependent.\n'
+             '\n'
+             'str.lstrip([chars])\n'
+             '\n'
+             '   Return a copy of the string with leading characters removed.  '
+             'The\n'
+             '   *chars* argument is a string specifying the set of characters '
+             'to be\n'
+             '   removed.  If omitted or "None", the *chars* argument defaults '
+             'to\n'
+             '   removing whitespace.  The *chars* argument is not a prefix; '
+             'rather,\n'
+             '   all combinations of its values are stripped:\n'
+             '\n'
+             "   >>> '   spacious   '.lstrip()\n"
+             "   'spacious   '\n"
+             "   >>> 'www.example.com'.lstrip('cmowz.')\n"
+             "   'example.com'\n"
+             '\n'
+             '   Changed in version 2.2.2: Support for the *chars* argument.\n'
+             '\n'
+             'str.partition(sep)\n'
+             '\n'
+             '   Split the string at the first occurrence of *sep*, and return '
+             'a\n'
+             '   3-tuple containing the part before the separator, the '
+             'separator\n'
+             '   itself, and the part after the separator.  If the separator '
+             'is not\n'
+             '   found, return a 3-tuple containing the string itself, '
+             'followed by\n'
+             '   two empty strings.\n'
+             '\n'
+             '   New in version 2.5.\n'
+             '\n'
+             'str.replace(old, new[, count])\n'
+             '\n'
+             '   Return a copy of the string with all occurrences of substring '
+             '*old*\n'
+             '   replaced by *new*.  If the optional argument *count* is '
+             'given, only\n'
+             '   the first *count* occurrences are replaced.\n'
+             '\n'
+             'str.rfind(sub[, start[, end]])\n'
+             '\n'
+             '   Return the highest index in the string where substring *sub* '
+             'is\n'
+             '   found, such that *sub* is contained within "s[start:end]".\n'
+             '   Optional arguments *start* and *end* are interpreted as in '
+             'slice\n'
+             '   notation.  Return "-1" on failure.\n'
+             '\n'
+             'str.rindex(sub[, start[, end]])\n'
+             '\n'
+             '   Like "rfind()" but raises "ValueError" when the substring '
+             '*sub* is\n'
+             '   not found.\n'
+             '\n'
+             'str.rjust(width[, fillchar])\n'
+             '\n'
+             '   Return the string right justified in a string of length '
+             '*width*.\n'
+             '   Padding is done using the specified *fillchar* (default is a\n'
+             '   space). The original string is returned if *width* is less '
+             'than or\n'
+             '   equal to "len(s)".\n'
+             '\n'
+             '   Changed in version 2.4: Support for the *fillchar* argument.\n'
+             '\n'
+             'str.rpartition(sep)\n'
+             '\n'
+             '   Split the string at the last occurrence of *sep*, and return '
+             'a\n'
+             '   3-tuple containing the part before the separator, the '
+             'separator\n'
+             '   itself, and the part after the separator.  If the separator '
+             'is not\n'
+             '   found, return a 3-tuple containing two empty strings, '
+             'followed by\n'
+             '   the string itself.\n'
+             '\n'
+             '   New in version 2.5.\n'
+             '\n'
+             'str.rsplit([sep[, maxsplit]])\n'
+             '\n'
+             '   Return a list of the words in the string, using *sep* as the\n'
+             '   delimiter string. If *maxsplit* is given, at most *maxsplit* '
+             'splits\n'
+             '   are done, the *rightmost* ones.  If *sep* is not specified '
+             'or\n'
+             '   "None", any whitespace string is a separator.  Except for '
+             'splitting\n'
+             '   from the right, "rsplit()" behaves like "split()" which is\n'
+             '   described in detail below.\n'
+             '\n'
+             '   New in version 2.4.\n'
+             '\n'
+             'str.rstrip([chars])\n'
+             '\n'
+             '   Return a copy of the string with trailing characters '
+             'removed.  The\n'
+             '   *chars* argument is a string specifying the set of characters '
+             'to be\n'
+             '   removed.  If omitted or "None", the *chars* argument defaults '
+             'to\n'
+             '   removing whitespace.  The *chars* argument is not a suffix; '
+             'rather,\n'
+             '   all combinations of its values are stripped:\n'
+             '\n'
+             "   >>> '   spacious   '.rstrip()\n"
+             "   '   spacious'\n"
+             "   >>> 'mississippi'.rstrip('ipz')\n"
+             "   'mississ'\n"
+             '\n'
+             '   Changed in version 2.2.2: Support for the *chars* argument.\n'
+             '\n'
+             'str.split([sep[, maxsplit]])\n'
+             '\n'
+             '   Return a list of the words in the string, using *sep* as the\n'
+             '   delimiter string.  If *maxsplit* is given, at most '
+             '*maxsplit*\n'
+             '   splits are done (thus, the list will have at most '
+             '"maxsplit+1"\n'
+             '   elements).  If *maxsplit* is not specified or "-1", then '
+             'there is\n'
+             '   no limit on the number of splits (all possible splits are '
+             'made).\n'
+             '\n'
+             '   If *sep* is given, consecutive delimiters are not grouped '
+             'together\n'
+             '   and are deemed to delimit empty strings (for example,\n'
+             '   "\'1,,2\'.split(\',\')" returns "[\'1\', \'\', \'2\']").  The '
+             '*sep* argument\n'
+             '   may consist of multiple characters (for example,\n'
+             '   "\'1<>2<>3\'.split(\'<>\')" returns "[\'1\', \'2\', \'3\']"). '
+             'Splitting an\n'
+             '   empty string with a specified separator returns "[\'\']".\n'
+             '\n'
+             '   If *sep* is not specified or is "None", a different '
+             'splitting\n'
+             '   algorithm is applied: runs of consecutive whitespace are '
+             'regarded\n'
+             '   as a single separator, and the result will contain no empty '
+             'strings\n'
+             '   at the start or end if the string has leading or trailing\n'
+             '   whitespace.  Consequently, splitting an empty string or a '
+             'string\n'
+             '   consisting of just whitespace with a "None" separator returns '
+             '"[]".\n'
+             '\n'
+             '   For example, "\' 1  2   3  \'.split()" returns "[\'1\', '
+             '\'2\', \'3\']", and\n'
+             '   "\'  1  2   3  \'.split(None, 1)" returns "[\'1\', \'2   3  '
+             '\']".\n'
+             '\n'
+             'str.splitlines([keepends])\n'
+             '\n'
+             '   Return a list of the lines in the string, breaking at line\n'
+             '   boundaries. This method uses the *universal newlines* '
+             'approach to\n'
+             '   splitting lines. Line breaks are not included in the '
+             'resulting list\n'
+             '   unless *keepends* is given and true.\n'
+             '\n'
+             '   Python recognizes ""\\r"", ""\\n"", and ""\\r\\n"" as line '
+             'boundaries\n'
+             '   for 8-bit strings.\n'
+             '\n'
+             '   For example:\n'
+             '\n'
+             "      >>> 'ab c\\n\\nde fg\\rkl\\r\\n'.splitlines()\n"
+             "      ['ab c', '', 'de fg', 'kl']\n"
+             "      >>> 'ab c\\n\\nde fg\\rkl\\r\\n'.splitlines(True)\n"
+             "      ['ab c\\n', '\\n', 'de fg\\r', 'kl\\r\\n']\n"
+             '\n'
+             '   Unlike "split()" when a delimiter string *sep* is given, '
+             'this\n'
+             '   method returns an empty list for the empty string, and a '
+             'terminal\n'
+             '   line break does not result in an extra line:\n'
+             '\n'
+             '      >>> "".splitlines()\n'
+             '      []\n'
+             '      >>> "One line\\n".splitlines()\n'
+             "      ['One line']\n"
+             '\n'
+             '   For comparison, "split(\'\\n\')" gives:\n'
+             '\n'
+             "      >>> ''.split('\\n')\n"
+             "      ['']\n"
+             "      >>> 'Two lines\\n'.split('\\n')\n"
+             "      ['Two lines', '']\n"
+             '\n'
+             'unicode.splitlines([keepends])\n'
+             '\n'
+             '   Return a list of the lines in the string, like '
+             '"str.splitlines()".\n'
+             '   However, the Unicode method splits on the following line\n'
+             '   boundaries, which are a superset of the *universal newlines*\n'
+             '   recognized for 8-bit strings.\n'
+             '\n'
+             '   +-------------------------+-------------------------------+\n'
+             '   | Representation          | Description                   |\n'
+             '   +=========================+===============================+\n'
+             '   | "\\n"                    | Line Feed                     |\n'
+             '   +-------------------------+-------------------------------+\n'
+             '   | "\\r"                    | Carriage Return               |\n'
+             '   +-------------------------+-------------------------------+\n'
+             '   | "\\r\\n"                  | Carriage Return + Line Feed   '
+             '|\n'
+             '   +-------------------------+-------------------------------+\n'
+             '   | "\\v" or "\\x0b"          | Line Tabulation               '
+             '|\n'
+             '   +-------------------------+-------------------------------+\n'
+             '   | "\\f" or "\\x0c"          | Form Feed                     '
+             '|\n'
+             '   +-------------------------+-------------------------------+\n'
+             '   | "\\x1c"                  | File Separator                |\n'
+             '   +-------------------------+-------------------------------+\n'
+             '   | "\\x1d"                  | Group Separator               |\n'
+             '   +-------------------------+-------------------------------+\n'
+             '   | "\\x1e"                  | Record Separator              |\n'
+             '   +-------------------------+-------------------------------+\n'
+             '   | "\\x85"                  | Next Line (C1 Control Code)   |\n'
+             '   +-------------------------+-------------------------------+\n'
+             '   | "\\u2028"                | Line Separator                |\n'
+             '   +-------------------------+-------------------------------+\n'
+             '   | "\\u2029"                | Paragraph Separator           |\n'
+             '   +-------------------------+-------------------------------+\n'
+             '\n'
+             '   Changed in version 2.7: "\\v" and "\\f" added to list of '
+             'line\n'
+             '   boundaries.\n'
+             '\n'
+             'str.startswith(prefix[, start[, end]])\n'
+             '\n'
+             '   Return "True" if string starts with the *prefix*, otherwise '
+             'return\n'
+             '   "False". *prefix* can also be a tuple of prefixes to look '
+             'for.\n'
+             '   With optional *start*, test string beginning at that '
+             'position.\n'
+             '   With optional *end*, stop comparing string at that position.\n'
+             '\n'
+             '   Changed in version 2.5: Accept tuples as *prefix*.\n'
+             '\n'
+             'str.strip([chars])\n'
+             '\n'
+             '   Return a copy of the string with the leading and trailing\n'
+             '   characters removed. The *chars* argument is a string '
+             'specifying the\n'
+             '   set of characters to be removed. If omitted or "None", the '
+             '*chars*\n'
+             '   argument defaults to removing whitespace. The *chars* '
+             'argument is\n'
+             '   not a prefix or suffix; rather, all combinations of its '
+             'values are\n'
+             '   stripped:\n'
+             '\n'
+             "   >>> '   spacious   '.strip()\n"
+             "   'spacious'\n"
+             "   >>> 'www.example.com'.strip('cmowz.')\n"
+             "   'example'\n"
+             '\n'
+             '   Changed in version 2.2.2: Support for the *chars* argument.\n'
+             '\n'
+             'str.swapcase()\n'
+             '\n'
+             '   Return a copy of the string with uppercase characters '
+             'converted to\n'
+             '   lowercase and vice versa.\n'
+             '\n'
+             '   For 8-bit strings, this method is locale-dependent.\n'
+             '\n'
+             'str.title()\n'
+             '\n'
+             '   Return a titlecased version of the string where words start '
+             'with an\n'
+             '   uppercase character and the remaining characters are '
+             'lowercase.\n'
+             '\n'
+             '   The algorithm uses a simple language-independent definition '
+             'of a\n'
+             '   word as groups of consecutive letters.  The definition works '
+             'in\n'
+             '   many contexts but it means that apostrophes in contractions '
+             'and\n'
+             '   possessives form word boundaries, which may not be the '
+             'desired\n'
+             '   result:\n'
+             '\n'
+             '      >>> "they\'re bill\'s friends from the UK".title()\n'
+             '      "They\'Re Bill\'S Friends From The Uk"\n'
+             '\n'
+             '   A workaround for apostrophes can be constructed using '
+             'regular\n'
+             '   expressions:\n'
+             '\n'
+             '      >>> import re\n'
+             '      >>> def titlecase(s):\n'
+             '      ...     return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n'
+             '      ...                   lambda mo: mo.group(0)[0].upper() +\n'
+             '      ...                              mo.group(0)[1:].lower(),\n'
+             '      ...                   s)\n'
+             '      ...\n'
+             '      >>> titlecase("they\'re bill\'s friends.")\n'
+             '      "They\'re Bill\'s Friends."\n'
+             '\n'
+             '   For 8-bit strings, this method is locale-dependent.\n'
+             '\n'
+             'str.translate(table[, deletechars])\n'
+             '\n'
+             '   Return a copy of the string where all characters occurring in '
+             'the\n'
+             '   optional argument *deletechars* are removed, and the '
+             'remaining\n'
+             '   characters have been mapped through the given translation '
+             'table,\n'
+             '   which must be a string of length 256.\n'
+             '\n'
+             '   You can use the "maketrans()" helper function in the '
+             '"string"\n'
+             '   module to create a translation table. For string objects, set '
+             'the\n'
+             '   *table* argument to "None" for translations that only delete\n'
+             '   characters:\n'
+             '\n'
+             "   >>> 'read this short text'.translate(None, 'aeiou')\n"
+             "   'rd ths shrt txt'\n"
+             '\n'
+             '   New in version 2.6: Support for a "None" *table* argument.\n'
+             '\n'
+             '   For Unicode objects, the "translate()" method does not accept '
+             'the\n'
+             '   optional *deletechars* argument.  Instead, it returns a copy '
+             'of the\n'
+             '   *s* where all characters have been mapped through the given\n'
+             '   translation table which must be a mapping of Unicode ordinals '
+             'to\n'
+             '   Unicode ordinals, Unicode strings or "None". Unmapped '
+             'characters\n'
+             '   are left untouched. Characters mapped to "None" are deleted.  '
+             'Note,\n'
+             '   a more flexible approach is to create a custom character '
+             'mapping\n'
+             '   codec using the "codecs" module (see "encodings.cp1251" for '
+             'an\n'
+             '   example).\n'
+             '\n'
+             'str.upper()\n'
+             '\n'
+             '   Return a copy of the string with all the cased characters '
+             '[4]\n'
+             '   converted to uppercase.  Note that "str.upper().isupper()" '
+             'might be\n'
+             '   "False" if "s" contains uncased characters or if the Unicode\n'
+             '   category of the resulting character(s) is not "Lu" (Letter,\n'
+             '   uppercase), but e.g. "Lt" (Letter, titlecase).\n'
+             '\n'
+             '   For 8-bit strings, this method is locale-dependent.\n'
+             '\n'
+             'str.zfill(width)\n'
+             '\n'
+             '   Return the numeric string left filled with zeros in a string '
+             'of\n'
+             '   length *width*.  A sign prefix is handled correctly.  The '
+             'original\n'
+             '   string is returned if *width* is less than or equal to '
+             '"len(s)".\n'
+             '\n'
+             '   New in version 2.2.2.\n'
+             '\n'
+             'The following methods are present only on unicode objects:\n'
+             '\n'
+             'unicode.isnumeric()\n'
+             '\n'
+             '   Return "True" if there are only numeric characters in S, '
+             '"False"\n'
+             '   otherwise. Numeric characters include digit characters, and '
+             'all\n'
+             '   characters that have the Unicode numeric value property, '
+             'e.g.\n'
+             '   U+2155, VULGAR FRACTION ONE FIFTH.\n'
+             '\n'
+             'unicode.isdecimal()\n'
+             '\n'
+             '   Return "True" if there are only decimal characters in S, '
+             '"False"\n'
+             '   otherwise. Decimal characters include digit characters, and '
+             'all\n'
+             '   characters that can be used to form decimal-radix numbers, '
+             'e.g.\n'
+             '   U+0660, ARABIC-INDIC DIGIT ZERO.\n'
+             '\n'
+             '\n'
+             'String Formatting Operations\n'
+             '============================\n'
+             '\n'
+             'String and Unicode objects have one unique built-in operation: '
+             'the "%"\n'
+             'operator (modulo).  This is also known as the string '
+             '*formatting* or\n'
+             '*interpolation* operator.  Given "format % values" (where '
+             '*format* is\n'
+             'a string or Unicode object), "%" conversion specifications in '
+             '*format*\n'
+             'are replaced with zero or more elements of *values*.  The effect '
+             'is\n'
+             'similar to the using "sprintf()" in the C language.  If *format* '
+             'is a\n'
+             'Unicode object, or if any of the objects being converted using '
+             'the\n'
+             '"%s" conversion are Unicode objects, the result will also be a '
+             'Unicode\n'
+             'object.\n'
+             '\n'
+             'If *format* requires a single argument, *values* may be a single '
+             'non-\n'
+             'tuple object. [5]  Otherwise, *values* must be a tuple with '
+             'exactly\n'
+             'the number of items specified by the format string, or a single\n'
+             'mapping object (for example, a dictionary).\n'
+             '\n'
+             'A conversion specifier contains two or more characters and has '
+             'the\n'
+             'following components, which must occur in this order:\n'
+             '\n'
+             '1. The "\'%\'" character, which marks the start of the '
+             'specifier.\n'
+             '\n'
+             '2. Mapping key (optional), consisting of a parenthesised '
+             'sequence\n'
+             '   of characters (for example, "(somename)").\n'
+             '\n'
+             '3. Conversion flags (optional), which affect the result of some\n'
+             '   conversion types.\n'
+             '\n'
+             '4. Minimum field width (optional).  If specified as an "\'*\'"\n'
+             '   (asterisk), the actual width is read from the next element of '
+             'the\n'
+             '   tuple in *values*, and the object to convert comes after the\n'
+             '   minimum field width and optional precision.\n'
+             '\n'
+             '5. Precision (optional), given as a "\'.\'" (dot) followed by '
+             'the\n'
+             '   precision.  If specified as "\'*\'" (an asterisk), the actual '
+             'width\n'
+             '   is read from the next element of the tuple in *values*, and '
+             'the\n'
+             '   value to convert comes after the precision.\n'
+             '\n'
+             '6. Length modifier (optional).\n'
+             '\n'
+             '7. Conversion type.\n'
+             '\n'
+             'When the right argument is a dictionary (or other mapping type), '
+             'then\n'
+             'the formats in the string *must* include a parenthesised mapping '
+             'key\n'
+             'into that dictionary inserted immediately after the "\'%\'" '
+             'character.\n'
+             'The mapping key selects the value to be formatted from the '
+             'mapping.\n'
+             'For example:\n'
+             '\n'
+             ">>> print '%(language)s has %(number)03d quote types.' % \\\n"
+             '...       {"language": "Python", "number": 2}\n'
+             'Python has 002 quote types.\n'
+             '\n'
+             'In this case no "*" specifiers may occur in a format (since '
+             'they\n'
+             'require a sequential parameter list).\n'
+             '\n'
+             'The conversion flag characters are:\n'
+             '\n'
+             '+-----------+-----------------------------------------------------------------------+\n'
+             '| Flag      | '
+             'Meaning                                                               '
+             '|\n'
+             '+===========+=======================================================================+\n'
+             '| "\'#\'"     | The value conversion will use the "alternate '
+             'form" (where defined     |\n'
+             '|           | '
+             'below).                                                               '
+             '|\n'
+             '+-----------+-----------------------------------------------------------------------+\n'
+             '| "\'0\'"     | The conversion will be zero padded for numeric '
+             'values.                |\n'
+             '+-----------+-----------------------------------------------------------------------+\n'
+             '| "\'-\'"     | The converted value is left adjusted (overrides '
+             'the "\'0\'" conversion  |\n'
+             '|           | if both are '
+             'given).                                                   |\n'
+             '+-----------+-----------------------------------------------------------------------+\n'
+             '| "\' \'"     | (a space) A blank should be left before a '
+             'positive number (or empty   |\n'
+             '|           | string) produced by a signed '
+             'conversion.                              |\n'
+             '+-----------+-----------------------------------------------------------------------+\n'
+             '| "\'+\'"     | A sign character ("\'+\'" or "\'-\'") will '
+             'precede the conversion         |\n'
+             '|           | (overrides a "space" '
+             'flag).                                           |\n'
+             '+-----------+-----------------------------------------------------------------------+\n'
+             '\n'
+             'A length modifier ("h", "l", or "L") may be present, but is '
+             'ignored as\n'
+             'it is not necessary for Python -- so e.g. "%ld" is identical to '
+             '"%d".\n'
+             '\n'
+             'The conversion types are:\n'
+             '\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| Conversion   | '
+             'Meaning                                               | Notes   '
+             '|\n'
+             '+==============+=======================================================+=========+\n'
+             '| "\'d\'"        | Signed integer '
+             'decimal.                               |         |\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| "\'i\'"        | Signed integer '
+             'decimal.                               |         |\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| "\'o\'"        | Signed octal '
+             'value.                                   | (1)     |\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| "\'u\'"        | Obsolete type -- it is identical to '
+             '"\'d\'".            | (7)     |\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| "\'x\'"        | Signed hexadecimal '
+             '(lowercase).                       | (2)     |\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| "\'X\'"        | Signed hexadecimal '
+             '(uppercase).                       | (2)     |\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| "\'e\'"        | Floating point exponential format '
+             '(lowercase).        | (3)     |\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| "\'E\'"        | Floating point exponential format '
+             '(uppercase).        | (3)     |\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| "\'f\'"        | Floating point decimal '
+             'format.                        | (3)     |\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| "\'F\'"        | Floating point decimal '
+             'format.                        | (3)     |\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| "\'g\'"        | Floating point format. Uses lowercase '
+             'exponential     | (4)     |\n'
+             '|              | format if exponent is less than -4 or not less '
+             'than   |         |\n'
+             '|              | precision, decimal format '
+             'otherwise.                  |         |\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| "\'G\'"        | Floating point format. Uses uppercase '
+             'exponential     | (4)     |\n'
+             '|              | format if exponent is less than -4 or not less '
+             'than   |         |\n'
+             '|              | precision, decimal format '
+             'otherwise.                  |         |\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| "\'c\'"        | Single character (accepts integer or single '
+             'character |         |\n'
+             '|              | '
+             'string).                                              |         '
+             '|\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| "\'r\'"        | String (converts any Python object using '
+             'repr()).     | (5)     |\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| "\'s\'"        | String (converts any Python object using '
+             '"str()").    | (6)     |\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '| "\'%\'"        | No argument is converted, results in a '
+             '"\'%\'"          |         |\n'
+             '|              | character in the '
+             'result.                              |         |\n'
+             '+--------------+-------------------------------------------------------+---------+\n'
+             '\n'
+             'Notes:\n'
+             '\n'
+             '1. The alternate form causes a leading zero ("\'0\'") to be '
+             'inserted\n'
+             '   between left-hand padding and the formatting of the number if '
+             'the\n'
+             '   leading character of the result is not already a zero.\n'
+             '\n'
+             '2. The alternate form causes a leading "\'0x\'" or "\'0X\'" '
+             '(depending\n'
+             '   on whether the "\'x\'" or "\'X\'" format was used) to be '
+             'inserted\n'
+             '   before the first digit.\n'
+             '\n'
+             '3. The alternate form causes the result to always contain a '
+             'decimal\n'
+             '   point, even if no digits follow it.\n'
+             '\n'
+             '   The precision determines the number of digits after the '
+             'decimal\n'
+             '   point and defaults to 6.\n'
+             '\n'
+             '4. The alternate form causes the result to always contain a '
+             'decimal\n'
+             '   point, and trailing zeroes are not removed as they would '
+             'otherwise\n'
+             '   be.\n'
+             '\n'
+             '   The precision determines the number of significant digits '
+             'before\n'
+             '   and after the decimal point and defaults to 6.\n'
+             '\n'
+             '5. The "%r" conversion was added in Python 2.0.\n'
+             '\n'
+             '   The precision determines the maximal number of characters '
+             'used.\n'
+             '\n'
+             '6. If the object or format provided is a "unicode" string, the\n'
+             '   resulting string will also be "unicode".\n'
+             '\n'
+             '   The precision determines the maximal number of characters '
+             'used.\n'
+             '\n'
+             '7. See **PEP 237**.\n'
+             '\n'
+             'Since Python strings have an explicit length, "%s" conversions '
+             'do not\n'
+             'assume that "\'\\0\'" is the end of the string.\n'
+             '\n'
+             'Changed in version 2.7: "%f" conversions for numbers whose '
+             'absolute\n'
+             'value is over 1e50 are no longer replaced by "%g" conversions.\n'
+             '\n'
+             'Additional string operations are defined in standard modules '
+             '"string"\n'
+             'and "re".\n'
+             '\n'
+             '\n'
+             'XRange Type\n'
+             '===========\n'
+             '\n'
+             'The "xrange" type is an immutable sequence which is commonly '
+             'used for\n'
+             'looping.  The advantage of the "xrange" type is that an '
+             '"xrange"\n'
+             'object will always take the same amount of memory, no matter the '
+             'size\n'
+             'of the range it represents.  There are no consistent '
+             'performance\n'
+             'advantages.\n'
+             '\n'
+             'XRange objects have very little behavior: they only support '
+             'indexing,\n'
+             'iteration, and the "len()" function.\n'
+             '\n'
+             '\n'
+             'Mutable Sequence Types\n'
+             '======================\n'
+             '\n'
+             'List and "bytearray" objects support additional operations that '
+             'allow\n'
+             'in-place modification of the object. Other mutable sequence '
+             'types\n'
+             '(when added to the language) should also support these '
+             'operations.\n'
+             'Strings and tuples are immutable sequence types: such objects '
+             'cannot\n'
+             'be modified once created. The following operations are defined '
+             'on\n'
+             'mutable sequence types (where *x* is an arbitrary object):\n'
+             '\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '| Operation                      | '
+             'Result                           | Notes                 |\n'
+             '+================================+==================================+=======================+\n'
+             '| "s[i] = x"                     | item *i* of *s* is replaced '
+             'by   |                       |\n'
+             '|                                | '
+             '*x*                              |                       |\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '| "s[i:j] = t"                   | slice of *s* from *i* to *j* '
+             'is  |                       |\n'
+             '|                                | replaced by the contents of '
+             'the  |                       |\n'
+             '|                                | iterable '
+             '*t*                     |                       |\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '| "del s[i:j]"                   | same as "s[i:j] = '
+             '[]"            |                       |\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '| "s[i:j:k] = t"                 | the elements of "s[i:j:k]" '
+             'are   | (1)                   |\n'
+             '|                                | replaced by those of '
+             '*t*         |                       |\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '| "del s[i:j:k]"                 | removes the elements '
+             'of          |                       |\n'
+             '|                                | "s[i:j:k]" from the '
+             'list         |                       |\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '| "s.append(x)"                  | same as "s[len(s):len(s)] = '
+             '[x]" | (2)                   |\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '| "s.extend(t)" or "s += t"      | for the most part the same '
+             'as    | (3)                   |\n'
+             '|                                | "s[len(s):len(s)] = '
+             't"           |                       |\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '| "s *= n"                       | updates *s* with its '
+             'contents    | (11)                  |\n'
+             '|                                | repeated *n* '
+             'times               |                       |\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '| "s.count(x)"                   | return number of *i*\'s for '
+             'which |                       |\n'
+             '|                                | "s[i] == '
+             'x"                      |                       |\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '| "s.index(x[, i[, j]])"         | return smallest *k* such '
+             'that    | (4)                   |\n'
+             '|                                | "s[k] == x" and "i <= k < '
+             'j"     |                       |\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '| "s.insert(i, x)"               | same as "s[i:i] = '
+             '[x]"           | (5)                   |\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '| "s.pop([i])"                   | same as "x = s[i]; del '
+             's[i];     | (6)                   |\n'
+             '|                                | return '
+             'x"                        |                       |\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '| "s.remove(x)"                  | same as "del '
+             's[s.index(x)]"      | (4)                   |\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '| "s.reverse()"                  | reverses the items of *s* '
+             'in     | (7)                   |\n'
+             '|                                | '
+             'place                            |                       |\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '| "s.sort([cmp[, key[,           | sort the items of *s* in '
+             'place   | (7)(8)(9)(10)         |\n'
+             '| reverse]]])"                   '
+             '|                                  |                       |\n'
+             '+--------------------------------+----------------------------------+-----------------------+\n'
+             '\n'
+             'Notes:\n'
+             '\n'
+             '1. *t* must have the same length as the slice it is  replacing.\n'
+             '\n'
+             '2. The C implementation of Python has historically accepted\n'
+             '   multiple parameters and implicitly joined them into a tuple; '
+             'this\n'
+             '   no longer works in Python 2.0.  Use of this misfeature has '
+             'been\n'
+             '   deprecated since Python 1.4.\n'
+             '\n'
+             '3. *t* can be any iterable object.\n'
+             '\n'
+             '4. Raises "ValueError" when *x* is not found in *s*. When a\n'
+             '   negative index is passed as the second or third parameter to '
+             'the\n'
+             '   "index()" method, the list length is added, as for slice '
+             'indices.\n'
+             '   If it is still negative, it is truncated to zero, as for '
+             'slice\n'
+             '   indices.\n'
+             '\n'
+             '   Changed in version 2.3: Previously, "index()" didn\'t have '
+             'arguments\n'
+             '   for specifying start and stop positions.\n'
+             '\n'
+             '5. When a negative index is passed as the first parameter to '
+             'the\n'
+             '   "insert()" method, the list length is added, as for slice '
+             'indices.\n'
+             '   If it is still negative, it is truncated to zero, as for '
+             'slice\n'
+             '   indices.\n'
+             '\n'
+             '   Changed in version 2.3: Previously, all negative indices '
+             'were\n'
+             '   truncated to zero.\n'
+             '\n'
+             '6. The "pop()" method\'s optional argument *i* defaults to "-1", '
+             'so\n'
+             '   that by default the last item is removed and returned.\n'
+             '\n'
+             '7. The "sort()" and "reverse()" methods modify the list in '
+             'place\n'
+             '   for economy of space when sorting or reversing a large list.  '
+             'To\n'
+             "   remind you that they operate by side effect, they don't "
+             'return the\n'
+             '   sorted or reversed list.\n'
+             '\n'
+             '8. The "sort()" method takes optional arguments for controlling '
+             'the\n'
+             '   comparisons.\n'
+             '\n'
+             '   *cmp* specifies a custom comparison function of two arguments '
+             '(list\n'
+             '   items) which should return a negative, zero or positive '
+             'number\n'
+             '   depending on whether the first argument is considered smaller '
+             'than,\n'
+             '   equal to, or larger than the second argument: "cmp=lambda '
+             'x,y:\n'
+             '   cmp(x.lower(), y.lower())".  The default value is "None".\n'
+             '\n'
+             '   *key* specifies a function of one argument that is used to '
+             'extract\n'
+             '   a comparison key from each list element: "key=str.lower".  '
+             'The\n'
+             '   default value is "None".\n'
+             '\n'
+             '   *reverse* is a boolean value.  If set to "True", then the '
+             'list\n'
+             '   elements are sorted as if each comparison were reversed.\n'
+             '\n'
+             '   In general, the *key* and *reverse* conversion processes are '
+             'much\n'
+             '   faster than specifying an equivalent *cmp* function.  This '
+             'is\n'
+             '   because *cmp* is called multiple times for each list element '
+             'while\n'
+             '   *key* and *reverse* touch each element only once.  Use\n'
+             '   "functools.cmp_to_key()" to convert an old-style *cmp* '
+             'function to\n'
+             '   a *key* function.\n'
+             '\n'
+             '   Changed in version 2.3: Support for "None" as an equivalent '
+             'to\n'
+             '   omitting *cmp* was added.\n'
+             '\n'
+             '   Changed in version 2.4: Support for *key* and *reverse* was '
+             'added.\n'
+             '\n'
+             '9. Starting with Python 2.3, the "sort()" method is guaranteed '
+             'to\n'
+             '   be stable.  A sort is stable if it guarantees not to change '
+             'the\n'
+             '   relative order of elements that compare equal --- this is '
+             'helpful\n'
+             '   for sorting in multiple passes (for example, sort by '
+             'department,\n'
+             '   then by salary grade).\n'
+             '\n'
+             '10. **CPython implementation detail:** While a list is being\n'
+             '    sorted, the effect of attempting to mutate, or even inspect, '
+             'the\n'
+             '    list is undefined.  The C implementation of Python 2.3 and '
+             'newer\n'
+             '    makes the list appear empty for the duration, and raises\n'
+             '    "ValueError" if it can detect that the list has been '
+             'mutated\n'
+             '    during a sort.\n'
+             '\n'
+             '11. The value *n* is an integer, or an object implementing\n'
+             '    "__index__()".  Zero and negative values of *n* clear the\n'
+             '    sequence.  Items in the sequence are not copied; they are\n'
+             '    referenced multiple times, as explained for "s * n" under '
+             'Sequence\n'
+             '    Types --- str, unicode, list, tuple, bytearray, buffer, '
+             'xrange.\n',
+ 'typesseq-mutable': '\n'
+                     'Mutable Sequence Types\n'
+                     '**********************\n'
+                     '\n'
+                     'List and "bytearray" objects support additional '
+                     'operations that allow\n'
+                     'in-place modification of the object. Other mutable '
+                     'sequence types\n'
+                     '(when added to the language) should also support these '
+                     'operations.\n'
+                     'Strings and tuples are immutable sequence types: such '
+                     'objects cannot\n'
+                     'be modified once created. The following operations are '
+                     'defined on\n'
+                     'mutable sequence types (where *x* is an arbitrary '
+                     'object):\n'
+                     '\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '| Operation                      | '
+                     'Result                           | Notes                 '
+                     '|\n'
+                     '+================================+==================================+=======================+\n'
+                     '| "s[i] = x"                     | item *i* of *s* is '
+                     'replaced by   |                       |\n'
+                     '|                                | '
+                     '*x*                              |                       '
+                     '|\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '| "s[i:j] = t"                   | slice of *s* from *i* '
+                     'to *j* is  |                       |\n'
+                     '|                                | replaced by the '
+                     'contents of the  |                       |\n'
+                     '|                                | iterable '
+                     '*t*                     |                       |\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '| "del s[i:j]"                   | same as "s[i:j] = '
+                     '[]"            |                       |\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '| "s[i:j:k] = t"                 | the elements of '
+                     '"s[i:j:k]" are   | (1)                   |\n'
+                     '|                                | replaced by those of '
+                     '*t*         |                       |\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '| "del s[i:j:k]"                 | removes the elements '
+                     'of          |                       |\n'
+                     '|                                | "s[i:j:k]" from the '
+                     'list         |                       |\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '| "s.append(x)"                  | same as '
+                     '"s[len(s):len(s)] = [x]" | (2)                   |\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '| "s.extend(t)" or "s += t"      | for the most part the '
+                     'same as    | (3)                   |\n'
+                     '|                                | "s[len(s):len(s)] = '
+                     't"           |                       |\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '| "s *= n"                       | updates *s* with its '
+                     'contents    | (11)                  |\n'
+                     '|                                | repeated *n* '
+                     'times               |                       |\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '| "s.count(x)"                   | return number of '
+                     "*i*'s for which |                       |\n"
+                     '|                                | "s[i] == '
+                     'x"                      |                       |\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '| "s.index(x[, i[, j]])"         | return smallest *k* '
+                     'such that    | (4)                   |\n'
+                     '|                                | "s[k] == x" and "i <= '
+                     'k < j"     |                       |\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '| "s.insert(i, x)"               | same as "s[i:i] = '
+                     '[x]"           | (5)                   |\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '| "s.pop([i])"                   | same as "x = s[i]; '
+                     'del s[i];     | (6)                   |\n'
+                     '|                                | return '
+                     'x"                        |                       |\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '| "s.remove(x)"                  | same as "del '
+                     's[s.index(x)]"      | (4)                   |\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '| "s.reverse()"                  | reverses the items of '
+                     '*s* in     | (7)                   |\n'
+                     '|                                | '
+                     'place                            |                       '
+                     '|\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '| "s.sort([cmp[, key[,           | sort the items of *s* '
+                     'in place   | (7)(8)(9)(10)         |\n'
+                     '| reverse]]])"                   '
+                     '|                                  '
+                     '|                       |\n'
+                     '+--------------------------------+----------------------------------+-----------------------+\n'
+                     '\n'
+                     'Notes:\n'
+                     '\n'
+                     '1. *t* must have the same length as the slice it is  '
+                     'replacing.\n'
+                     '\n'
+                     '2. The C implementation of Python has historically '
+                     'accepted\n'
+                     '   multiple parameters and implicitly joined them into a '
+                     'tuple; this\n'
+                     '   no longer works in Python 2.0.  Use of this '
+                     'misfeature has been\n'
+                     '   deprecated since Python 1.4.\n'
+                     '\n'
+                     '3. *t* can be any iterable object.\n'
+                     '\n'
+                     '4. Raises "ValueError" when *x* is not found in *s*. '
+                     'When a\n'
+                     '   negative index is passed as the second or third '
+                     'parameter to the\n'
+                     '   "index()" method, the list length is added, as for '
+                     'slice indices.\n'
+                     '   If it is still negative, it is truncated to zero, as '
+                     'for slice\n'
+                     '   indices.\n'
+                     '\n'
+                     '   Changed in version 2.3: Previously, "index()" didn\'t '
+                     'have arguments\n'
+                     '   for specifying start and stop positions.\n'
+                     '\n'
+                     '5. When a negative index is passed as the first '
+                     'parameter to the\n'
+                     '   "insert()" method, the list length is added, as for '
+                     'slice indices.\n'
+                     '   If it is still negative, it is truncated to zero, as '
+                     'for slice\n'
+                     '   indices.\n'
+                     '\n'
+                     '   Changed in version 2.3: Previously, all negative '
+                     'indices were\n'
+                     '   truncated to zero.\n'
+                     '\n'
+                     '6. The "pop()" method\'s optional argument *i* defaults '
+                     'to "-1", so\n'
+                     '   that by default the last item is removed and '
+                     'returned.\n'
+                     '\n'
+                     '7. The "sort()" and "reverse()" methods modify the list '
+                     'in place\n'
+                     '   for economy of space when sorting or reversing a '
+                     'large list.  To\n'
+                     '   remind you that they operate by side effect, they '
+                     "don't return the\n"
+                     '   sorted or reversed list.\n'
+                     '\n'
+                     '8. The "sort()" method takes optional arguments for '
+                     'controlling the\n'
+                     '   comparisons.\n'
+                     '\n'
+                     '   *cmp* specifies a custom comparison function of two '
+                     'arguments (list\n'
+                     '   items) which should return a negative, zero or '
+                     'positive number\n'
+                     '   depending on whether the first argument is considered '
+                     'smaller than,\n'
+                     '   equal to, or larger than the second argument: '
+                     '"cmp=lambda x,y:\n'
+                     '   cmp(x.lower(), y.lower())".  The default value is '
+                     '"None".\n'
+                     '\n'
+                     '   *key* specifies a function of one argument that is '
+                     'used to extract\n'
+                     '   a comparison key from each list element: '
+                     '"key=str.lower".  The\n'
+                     '   default value is "None".\n'
+                     '\n'
+                     '   *reverse* is a boolean value.  If set to "True", then '
+                     'the list\n'
+                     '   elements are sorted as if each comparison were '
+                     'reversed.\n'
+                     '\n'
+                     '   In general, the *key* and *reverse* conversion '
+                     'processes are much\n'
+                     '   faster than specifying an equivalent *cmp* function.  '
+                     'This is\n'
+                     '   because *cmp* is called multiple times for each list '
+                     'element while\n'
+                     '   *key* and *reverse* touch each element only once.  '
+                     'Use\n'
+                     '   "functools.cmp_to_key()" to convert an old-style '
+                     '*cmp* function to\n'
+                     '   a *key* function.\n'
+                     '\n'
+                     '   Changed in version 2.3: Support for "None" as an '
+                     'equivalent to\n'
+                     '   omitting *cmp* was added.\n'
+                     '\n'
+                     '   Changed in version 2.4: Support for *key* and '
+                     '*reverse* was added.\n'
+                     '\n'
+                     '9. Starting with Python 2.3, the "sort()" method is '
+                     'guaranteed to\n'
+                     '   be stable.  A sort is stable if it guarantees not to '
+                     'change the\n'
+                     '   relative order of elements that compare equal --- '
+                     'this is helpful\n'
+                     '   for sorting in multiple passes (for example, sort by '
+                     'department,\n'
+                     '   then by salary grade).\n'
+                     '\n'
+                     '10. **CPython implementation detail:** While a list is '
+                     'being\n'
+                     '    sorted, the effect of attempting to mutate, or even '
+                     'inspect, the\n'
+                     '    list is undefined.  The C implementation of Python '
+                     '2.3 and newer\n'
+                     '    makes the list appear empty for the duration, and '
+                     'raises\n'
+                     '    "ValueError" if it can detect that the list has been '
+                     'mutated\n'
+                     '    during a sort.\n'
+                     '\n'
+                     '11. The value *n* is an integer, or an object '
+                     'implementing\n'
+                     '    "__index__()".  Zero and negative values of *n* '
+                     'clear the\n'
+                     '    sequence.  Items in the sequence are not copied; '
+                     'they are\n'
+                     '    referenced multiple times, as explained for "s * n" '
+                     'under Sequence\n'
+                     '    Types --- str, unicode, list, tuple, bytearray, '
+                     'buffer, xrange.\n',
+ 'unary': '\n'
+          'Unary arithmetic and bitwise operations\n'
+          '***************************************\n'
+          '\n'
+          'All unary arithmetic and bitwise operations have the same '
+          'priority:\n'
+          '\n'
+          '   u_expr ::= power | "-" u_expr | "+" u_expr | "~" u_expr\n'
+          '\n'
+          'The unary "-" (minus) operator yields the negation of its numeric\n'
+          'argument.\n'
+          '\n'
+          'The unary "+" (plus) operator yields its numeric argument '
+          'unchanged.\n'
+          '\n'
+          'The unary "~" (invert) operator yields the bitwise inversion of '
+          'its\n'
+          'plain or long integer argument.  The bitwise inversion of "x" is\n'
+          'defined as "-(x+1)".  It only applies to integral numbers.\n'
+          '\n'
+          'In all three cases, if the argument does not have the proper type, '
+          'a\n'
+          '"TypeError" exception is raised.\n',
+ 'while': '\n'
+          'The "while" statement\n'
+          '*********************\n'
+          '\n'
+          'The "while" statement is used for repeated execution as long as an\n'
+          'expression is true:\n'
+          '\n'
+          '   while_stmt ::= "while" expression ":" suite\n'
+          '                  ["else" ":" suite]\n'
+          '\n'
+          'This repeatedly tests the expression and, if it is true, executes '
+          'the\n'
+          'first suite; if the expression is false (which may be the first '
+          'time\n'
+          'it is tested) the suite of the "else" clause, if present, is '
+          'executed\n'
+          'and the loop terminates.\n'
+          '\n'
+          'A "break" statement executed in the first suite terminates the '
+          'loop\n'
+          'without executing the "else" clause\'s suite.  A "continue" '
+          'statement\n'
+          'executed in the first suite skips the rest of the suite and goes '
+          'back\n'
+          'to testing the expression.\n',
+ 'with': '\n'
+         'The "with" statement\n'
+         '********************\n'
+         '\n'
+         'New in version 2.5.\n'
+         '\n'
+         'The "with" statement is used to wrap the execution of a block with\n'
+         'methods defined by a context manager (see section With Statement\n'
+         'Context Managers). This allows common "try"..."except"..."finally"\n'
+         'usage patterns to be encapsulated for convenient reuse.\n'
+         '\n'
+         '   with_stmt ::= "with" with_item ("," with_item)* ":" suite\n'
+         '   with_item ::= expression ["as" target]\n'
+         '\n'
+         'The execution of the "with" statement with one "item" proceeds as\n'
+         'follows:\n'
+         '\n'
+         '1. The context expression (the expression given in the "with_item")\n'
+         '   is evaluated to obtain a context manager.\n'
+         '\n'
+         '2. The context manager\'s "__exit__()" is loaded for later use.\n'
+         '\n'
+         '3. The context manager\'s "__enter__()" method is invoked.\n'
+         '\n'
+         '4. If a target was included in the "with" statement, the return\n'
+         '   value from "__enter__()" is assigned to it.\n'
+         '\n'
+         '   Note: The "with" statement guarantees that if the "__enter__()"\n'
+         '     method returns without an error, then "__exit__()" will always '
+         'be\n'
+         '     called. Thus, if an error occurs during the assignment to the\n'
+         '     target list, it will be treated the same as an error occurring\n'
+         '     within the suite would be. See step 6 below.\n'
+         '\n'
+         '5. The suite is executed.\n'
+         '\n'
+         '6. The context manager\'s "__exit__()" method is invoked. If an\n'
+         '   exception caused the suite to be exited, its type, value, and\n'
+         '   traceback are passed as arguments to "__exit__()". Otherwise, '
+         'three\n'
+         '   "None" arguments are supplied.\n'
+         '\n'
+         '   If the suite was exited due to an exception, and the return '
+         'value\n'
+         '   from the "__exit__()" method was false, the exception is '
+         'reraised.\n'
+         '   If the return value was true, the exception is suppressed, and\n'
+         '   execution continues with the statement following the "with"\n'
+         '   statement.\n'
+         '\n'
+         '   If the suite was exited for any reason other than an exception, '
+         'the\n'
+         '   return value from "__exit__()" is ignored, and execution '
+         'proceeds\n'
+         '   at the normal location for the kind of exit that was taken.\n'
+         '\n'
+         'With more than one item, the context managers are processed as if\n'
+         'multiple "with" statements were nested:\n'
+         '\n'
+         '   with A() as a, B() as b:\n'
+         '       suite\n'
+         '\n'
+         'is equivalent to\n'
+         '\n'
+         '   with A() as a:\n'
+         '       with B() as b:\n'
+         '           suite\n'
+         '\n'
+         'Note: In Python 2.5, the "with" statement is only allowed when the\n'
+         '  "with_statement" feature has been enabled.  It is always enabled '
+         'in\n'
+         '  Python 2.6.\n'
+         '\n'
+         'Changed in version 2.7: Support for multiple context expressions.\n'
+         '\n'
+         'See also:\n'
+         '\n'
+         '  **PEP 343** - The "with" statement\n'
+         '     The specification, background, and examples for the Python '
+         '"with"\n'
+         '     statement.\n',
+ 'yield': '\n'
+          'The "yield" statement\n'
+          '*********************\n'
+          '\n'
+          '   yield_stmt ::= yield_expression\n'
+          '\n'
+          'The "yield" statement is only used when defining a generator '
+          'function,\n'
+          'and is only used in the body of the generator function. Using a\n'
+          '"yield" statement in a function definition is sufficient to cause '
+          'that\n'
+          'definition to create a generator function instead of a normal\n'
+          'function.\n'
+          '\n'
+          'When a generator function is called, it returns an iterator known '
+          'as a\n'
+          'generator iterator, or more commonly, a generator.  The body of '
+          'the\n'
+          "generator function is executed by calling the generator's "
+          '"next()"\n'
+          'method repeatedly until it raises an exception.\n'
+          '\n'
+          'When a "yield" statement is executed, the state of the generator '
+          'is\n'
+          'frozen and the value of "expression_list" is returned to '
+          '"next()"\'s\n'
+          'caller.  By "frozen" we mean that all local state is retained,\n'
+          'including the current bindings of local variables, the instruction\n'
+          'pointer, and the internal evaluation stack: enough information is\n'
+          'saved so that the next time "next()" is invoked, the function can\n'
+          'proceed exactly as if the "yield" statement were just another '
+          'external\n'
+          'call.\n'
+          '\n'
+          'As of Python version 2.5, the "yield" statement is now allowed in '
+          'the\n'
+          '"try" clause of a "try" ...  "finally" construct.  If the generator '
+          'is\n'
+          'not resumed before it is finalized (by reaching a zero reference '
+          'count\n'
+          "or by being garbage collected), the generator-iterator's "
+          '"close()"\n'
+          'method will be called, allowing any pending "finally" clauses to\n'
+          'execute.\n'
+          '\n'
+          'For full details of "yield" semantics, refer to the Yield '
+          'expressions\n'
+          'section.\n'
+          '\n'
+          'Note: In Python 2.2, the "yield" statement was only allowed when '
+          'the\n'
+          '  "generators" feature has been enabled.  This "__future__" import\n'
+          '  statement was used to enable the feature:\n'
+          '\n'
+          '     from __future__ import generators\n'
+          '\n'
+          'See also:\n'
+          '\n'
+          '  **PEP 255** - Simple Generators\n'
+          '     The proposal for adding generators and the "yield" statement '
+          'to\n'
+          '     Python.\n'
+          '\n'
+          '  **PEP 342** - Coroutines via Enhanced Generators\n'
+          '     The proposal that, among other generator enhancements, '
+          'proposed\n'
+          '     allowing "yield" to appear inside a "try" ... "finally" '
+          'block.\n'}
diff --git a/Lib/random.py b/Lib/random.py
index 3f96a37..11fd35b 100644
--- a/Lib/random.py
+++ b/Lib/random.py
@@ -98,12 +98,14 @@
         self.gauss_next = None
 
     def seed(self, a=None):
-        """Initialize internal state from hashable object.
+        """Initialize internal state of the random number generator.
 
         None or no argument seeds from current time or from an operating
         system specific randomness source if available.
 
-        If a is not None or an int or long, hash(a) is used instead.
+        If a is not None or is an int or long, hash(a) is used instead.
+        Hash values for some types are nondeterministic when the
+        PYTHONHASHSEED environment variable is enabled.
         """
 
         if a is None:
diff --git a/Lib/robotparser.py b/Lib/robotparser.py
index a7137a3..4e13f7f 100644
--- a/Lib/robotparser.py
+++ b/Lib/robotparser.py
@@ -160,7 +160,10 @@
 
 
     def __str__(self):
-        return ''.join([str(entry) + "\n" for entry in self.entries])
+        entries = self.entries
+        if self.default_entry is not None:
+            entries = entries + [self.default_entry]
+        return '\n'.join(map(str, entries)) + '\n'
 
 
 class RuleLine:
diff --git a/Lib/shutil.py b/Lib/shutil.py
index 388906f..0ab1a06 100644
--- a/Lib/shutil.py
+++ b/Lib/shutil.py
@@ -13,6 +13,20 @@
 import errno
 
 try:
+    import zlib
+    del zlib
+    _ZLIB_SUPPORTED = True
+except ImportError:
+    _ZLIB_SUPPORTED = False
+
+try:
+    import bz2
+    del bz2
+    _BZ2_SUPPORTED = True
+except ImportError:
+    _BZ2_SUPPORTED = False
+
+try:
     from pwd import getpwnam
 except ImportError:
     getpwnam = None
@@ -351,15 +365,18 @@
 
     Returns the output filename.
     """
-    tar_compression = {'gzip': 'gz', 'bzip2': 'bz2', None: ''}
-    compress_ext = {'gzip': '.gz', 'bzip2': '.bz2'}
+    if compress is None:
+        tar_compression = ''
+    elif _ZLIB_SUPPORTED and compress == 'gzip':
+        tar_compression = 'gz'
+    elif _BZ2_SUPPORTED and compress == 'bzip2':
+        tar_compression = 'bz2'
+    else:
+        raise ValueError("bad value for 'compress', or compression format not "
+                         "supported : {0}".format(compress))
 
-    # flags for compression program, each element of list will be an argument
-    if compress is not None and compress not in compress_ext.keys():
-        raise ValueError, \
-              ("bad value for 'compress': must be None, 'gzip' or 'bzip2'")
-
-    archive_name = base_name + '.tar' + compress_ext.get(compress, '')
+    compress_ext = '.' + tar_compression if compress else ''
+    archive_name = base_name + '.tar' + compress_ext
     archive_dir = os.path.dirname(archive_name)
 
     if archive_dir and not os.path.exists(archive_dir):
@@ -388,7 +405,7 @@
         return tarinfo
 
     if not dry_run:
-        tar = tarfile.open(archive_name, 'w|%s' % tar_compression[compress])
+        tar = tarfile.open(archive_name, 'w|%s' % tar_compression)
         try:
             tar.add(base_dir, filter=_set_uid_gid)
         finally:
@@ -396,17 +413,21 @@
 
     return archive_name
 
-def _call_external_zip(base_dir, zip_filename, verbose=False, dry_run=False):
+def _call_external_zip(base_dir, zip_filename, verbose, dry_run, logger):
     # XXX see if we want to keep an external call here
     if verbose:
         zipoptions = "-r"
     else:
         zipoptions = "-rq"
-    from distutils.errors import DistutilsExecError
-    from distutils.spawn import spawn
+    cmd = ["zip", zipoptions, zip_filename, base_dir]
+    if logger is not None:
+        logger.info(' '.join(cmd))
+    if dry_run:
+        return
+    import subprocess
     try:
-        spawn(["zip", zipoptions, zip_filename, base_dir], dry_run=dry_run)
-    except DistutilsExecError:
+        subprocess.check_call(cmd)
+    except subprocess.CalledProcessError:
         # XXX really should distinguish between "couldn't find
         # external 'zip' command" and "zip failed".
         raise ExecError, \
@@ -435,12 +456,13 @@
     # If zipfile module is not available, try spawning an external 'zip'
     # command.
     try:
+        import zlib
         import zipfile
     except ImportError:
         zipfile = None
 
     if zipfile is None:
-        _call_external_zip(base_dir, zip_filename, verbose, dry_run)
+        _call_external_zip(base_dir, zip_filename, verbose, dry_run, logger)
     else:
         if logger is not None:
             logger.info("creating '%s' and adding '%s' to it",
@@ -470,11 +492,17 @@
     return zip_filename
 
 _ARCHIVE_FORMATS = {
-    'gztar': (_make_tarball, [('compress', 'gzip')], "gzip'ed tar-file"),
-    'bztar': (_make_tarball, [('compress', 'bzip2')], "bzip2'ed tar-file"),
     'tar':   (_make_tarball, [('compress', None)], "uncompressed tar file"),
-    'zip':   (_make_zipfile, [],"ZIP file")
-    }
+    'zip':   (_make_zipfile, [], "ZIP file")
+}
+
+if _ZLIB_SUPPORTED:
+    _ARCHIVE_FORMATS['gztar'] = (_make_tarball, [('compress', 'gzip')],
+                                "gzip'ed tar-file")
+
+if _BZ2_SUPPORTED:
+    _ARCHIVE_FORMATS['bztar'] = (_make_tarball, [('compress', 'bzip2')],
+                                "bzip2'ed tar-file")
 
 def get_archive_formats():
     """Returns a list of supported formats for archiving and unarchiving.
@@ -515,8 +543,8 @@
     """Create an archive file (eg. zip or tar).
 
     'base_name' is the name of the file to create, minus any format-specific
-    extension; 'format' is the archive format: one of "zip", "tar", "bztar"
-    or "gztar".
+    extension; 'format' is the archive format: one of "zip", "tar", "gztar",
+    or "bztar".  Or any other registered format.
 
     'root_dir' is a directory that will be the root directory of the
     archive; ie. we typically chdir into 'root_dir' before creating the
diff --git a/Lib/smtplib.py b/Lib/smtplib.py
index e1651c0..0c61065 100755
--- a/Lib/smtplib.py
+++ b/Lib/smtplib.py
@@ -255,6 +255,7 @@
         if host:
             (code, msg) = self.connect(host, port)
             if code != 220:
+                self.close()
                 raise SMTPConnectError(code, msg)
         if local_hostname is not None:
             self.local_hostname = local_hostname
diff --git a/Lib/sqlite3/test/regression.py b/Lib/sqlite3/test/regression.py
index 36fec59..7eeac32 100644
--- a/Lib/sqlite3/test/regression.py
+++ b/Lib/sqlite3/test/regression.py
@@ -24,6 +24,8 @@
 import datetime
 import unittest
 import sqlite3 as sqlite
+import weakref
+from test import support
 
 class RegressionTests(unittest.TestCase):
     def setUp(self):
@@ -175,6 +177,9 @@
             pass
         except:
             self.fail("should have raised ProgrammingError")
+        with self.assertRaisesRegexp(sqlite.ProgrammingError,
+                                     r'^Base Cursor\.__init__ not called\.$'):
+            cur.close()
 
     def CheckConnectionConstructorCallCheck(self):
         """
@@ -358,6 +363,22 @@
             counter += 1
         self.assertEqual(counter, 3, "should have returned exactly three rows")
 
+    def CheckBpo31770(self):
+        """
+        The interpreter shouldn't crash in case Cursor.__init__() is called
+        more than once.
+        """
+        def callback(*args):
+            pass
+        con = sqlite.connect(":memory:")
+        cur = sqlite.Cursor(con)
+        ref = weakref.ref(cur, callback)
+        cur.__init__(con)
+        del cur
+        # The interpreter shouldn't crash when ref is collected.
+        del ref
+        support.gc_collect()
+
 
 def suite():
     regression_suite = unittest.makeSuite(RegressionTests, "Check")
diff --git a/Lib/sqlite3/test/types.py b/Lib/sqlite3/test/types.py
index a31446e..fdc21ae 100644
--- a/Lib/sqlite3/test/types.py
+++ b/Lib/sqlite3/test/types.py
@@ -383,8 +383,7 @@
         if sqlite.sqlite_version_info < (3, 1):
             return
 
-        # SQLite's current_timestamp uses UTC time, while datetime.datetime.now() uses local time.
-        now = datetime.datetime.now()
+        now = datetime.datetime.utcnow()
         self.cur.execute("insert into test(ts) values (current_timestamp)")
         self.cur.execute("select ts from test")
         ts = self.cur.fetchone()[0]
diff --git a/Lib/sre_compile.py b/Lib/sre_compile.py
index c5a7e89..b6689fa 100644
--- a/Lib/sre_compile.py
+++ b/Lib/sre_compile.py
@@ -435,7 +435,7 @@
     # this contains min/max pattern width, and an optional literal
     # prefix or a character map
     lo, hi = pattern.getwidth()
-    if lo == 0:
+    if not lo and hi:
         return # not worth it
     # look for a literal prefix
     prefix = []
diff --git a/Lib/sre_parse.py b/Lib/sre_parse.py
index 75f488b..3f6ddd2 100644
--- a/Lib/sre_parse.py
+++ b/Lib/sre_parse.py
@@ -23,6 +23,7 @@
 
 OCTDIGITS = set("01234567")
 HEXDIGITS = set("0123456789abcdefABCDEF")
+ASCIILETTERS = set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
 
 WHITESPACE = set(" \t\n\r\v\f")
 
@@ -233,7 +234,7 @@
             return False
     return True
 
-def _class_escape(source, escape):
+def _class_escape(source, escape, nested):
     # handle escape code inside character class
     code = ESCAPES.get(escape)
     if code:
@@ -260,12 +261,21 @@
         elif c in DIGITS:
             raise error, "bogus escape: %s" % repr(escape)
         if len(escape) == 2:
+            if sys.py3kwarning and c in ASCIILETTERS:
+                import warnings
+                if c in 'Uu':
+                    warnings.warn('bad escape %s; Unicode escapes are '
+                                  'supported only since Python 3.3' % escape,
+                                  FutureWarning, stacklevel=nested + 6)
+                else:
+                    warnings.warnpy3k('bad escape %s' % escape,
+                                      DeprecationWarning, stacklevel=nested + 6)
             return LITERAL, ord(escape[1])
     except ValueError:
         pass
     raise error, "bogus escape: %s" % repr(escape)
 
-def _escape(source, escape, state):
+def _escape(source, escape, state, nested):
     # handle escape code in expression
     code = CATEGORIES.get(escape)
     if code:
@@ -305,23 +315,32 @@
                     import warnings
                     warnings.warn('group references in lookbehind '
                                   'assertions are not supported',
-                                  RuntimeWarning)
+                                  RuntimeWarning, stacklevel=nested + 6)
                 return GROUPREF, group
             raise ValueError
         if len(escape) == 2:
+            if sys.py3kwarning and c in ASCIILETTERS:
+                import warnings
+                if c in 'Uu':
+                    warnings.warn('bad escape %s; Unicode escapes are '
+                                  'supported only since Python 3.3' % escape,
+                                  FutureWarning, stacklevel=nested + 6)
+                else:
+                    warnings.warnpy3k('bad escape %s' % escape,
+                                      DeprecationWarning, stacklevel=nested + 6)
             return LITERAL, ord(escape[1])
     except ValueError:
         pass
     raise error, "bogus escape: %s" % repr(escape)
 
-def _parse_sub(source, state, nested=1):
+def _parse_sub(source, state, nested):
     # parse an alternation: a|b|c
 
     items = []
     itemsappend = items.append
     sourcematch = source.match
     while 1:
-        itemsappend(_parse(source, state))
+        itemsappend(_parse(source, state, nested + 1))
         if sourcematch("|"):
             continue
         if not nested:
@@ -373,10 +392,10 @@
     subpattern.append((BRANCH, (None, items)))
     return subpattern
 
-def _parse_sub_cond(source, state, condgroup):
-    item_yes = _parse(source, state)
+def _parse_sub_cond(source, state, condgroup, nested):
+    item_yes = _parse(source, state, nested + 1)
     if source.match("|"):
-        item_no = _parse(source, state)
+        item_no = _parse(source, state, nested + 1)
         if source.match("|"):
             raise error, "conditional backref with more than two branches"
     else:
@@ -392,7 +411,7 @@
 _LOOKBEHINDASSERTCHARS = set("=!")
 _REPEATCODES = set([MIN_REPEAT, MAX_REPEAT])
 
-def _parse(source, state):
+def _parse(source, state, nested):
     # parse a simple pattern
     subpattern = SubPattern(state)
 
@@ -443,7 +462,7 @@
                 if this == "]" and set != start:
                     break
                 elif this and this[0] == "\\":
-                    code1 = _class_escape(source, this)
+                    code1 = _class_escape(source, this, nested + 1)
                 elif this:
                     code1 = LITERAL, ord(this)
                 else:
@@ -459,7 +478,7 @@
                         break
                     elif this:
                         if this[0] == "\\":
-                            code2 = _class_escape(source, this)
+                            code2 = _class_escape(source, this, nested + 1)
                         else:
                             code2 = LITERAL, ord(this)
                         if code1[0] != LITERAL or code2[0] != LITERAL:
@@ -589,7 +608,7 @@
                             import warnings
                             warnings.warn('group references in lookbehind '
                                           'assertions are not supported',
-                                          RuntimeWarning)
+                                          RuntimeWarning, stacklevel=nested + 6)
                         subpatternappend((GROUPREF, gid))
                         continue
                     else:
@@ -619,7 +638,7 @@
                         dir = -1 # lookbehind
                         char = sourceget()
                         state.lookbehind += 1
-                    p = _parse_sub(source, state)
+                    p = _parse_sub(source, state, nested + 1)
                     if dir < 0:
                         state.lookbehind -= 1
                     if not sourcematch(")"):
@@ -656,7 +675,7 @@
                         import warnings
                         warnings.warn('group references in lookbehind '
                                       'assertions are not supported',
-                                      RuntimeWarning)
+                                      RuntimeWarning, stacklevel=nested + 6)
                 else:
                     # flags
                     if not source.next in FLAGS:
@@ -671,9 +690,9 @@
                 else:
                     group = state.opengroup(name)
                 if condgroup:
-                    p = _parse_sub_cond(source, state, condgroup)
+                    p = _parse_sub_cond(source, state, condgroup, nested + 1)
                 else:
-                    p = _parse_sub(source, state)
+                    p = _parse_sub(source, state, nested + 1)
                 if not sourcematch(")"):
                     raise error, "unbalanced parenthesis"
                 if group is not None:
@@ -695,7 +714,7 @@
             subpattern.append((AT, AT_END))
 
         elif this and this[0] == "\\":
-            code = _escape(source, this, state)
+            code = _escape(source, this, state, nested + 1)
             subpatternappend(code)
 
         else:
@@ -714,6 +733,12 @@
     pattern.str = str
 
     p = _parse_sub(source, pattern, 0)
+    if (sys.py3kwarning and
+        (p.pattern.flags & SRE_FLAG_LOCALE) and
+        (p.pattern.flags & SRE_FLAG_UNICODE)):
+        import warnings
+        warnings.warnpy3k("LOCALE and UNICODE flags are incompatible",
+                          DeprecationWarning, stacklevel=5)
 
     tail = source.get()
     if tail == ")":
@@ -801,7 +826,10 @@
                 try:
                     this = makechar(ESCAPES[this][1])
                 except KeyError:
-                    pass
+                    if sys.py3kwarning and c in ASCIILETTERS:
+                        import warnings
+                        warnings.warnpy3k('bad escape %s' % this,
+                                          DeprecationWarning, stacklevel=4)
                 literal(this)
         else:
             literal(this)
diff --git a/Lib/ssl.py b/Lib/ssl.py
index f28c863..22d478b 100644
--- a/Lib/ssl.py
+++ b/Lib/ssl.py
@@ -123,7 +123,7 @@
 _import_symbols('PROTOCOL_')
 _import_symbols('VERIFY_')
 
-from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN, HAS_ALPN
+from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN, HAS_ALPN, HAS_TLSv1_3
 
 from _ssl import _OPENSSL_API_VERSION
 
@@ -157,6 +157,7 @@
 # (OpenSSL's default setting is 'DEFAULT:!aNULL:!eNULL')
 # Enable a better set of ciphers by default
 # This list has been explicitly chosen to:
+#   * TLS 1.3 ChaCha20 and AES-GCM cipher suites
 #   * Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE)
 #   * Prefer ECDHE over DHE for better performance
 #   * Prefer AEAD over CBC for better performance and security
@@ -168,6 +169,8 @@
 #   * Disable NULL authentication, NULL encryption, 3DES and MD5 MACs
 #     for security reasons
 _DEFAULT_CIPHERS = (
+    'TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:'
+    'TLS13-AES-128-GCM-SHA256:'
     'ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:'
     'ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:'
     '!aNULL:!eNULL:!MD5:!3DES'
@@ -175,6 +178,7 @@
 
 # Restricted and more secure ciphers for the server side
 # This list has been explicitly chosen to:
+#   * TLS 1.3 ChaCha20 and AES-GCM cipher suites
 #   * Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE)
 #   * Prefer ECDHE over DHE for better performance
 #   * Prefer AEAD over CBC for better performance and security
@@ -185,6 +189,8 @@
 #   * Disable NULL authentication, NULL encryption, MD5 MACs, DSS, RC4, and
 #     3DES for security reasons
 _RESTRICTED_SERVER_CIPHERS = (
+    'TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:'
+    'TLS13-AES-128-GCM-SHA256:'
     'ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:'
     'ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:'
     '!aNULL:!eNULL:!MD5:!DSS:!RC4:!3DES'
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index 2022e97..1f2da0f 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -71,6 +71,10 @@
 else:
     import select
     _has_poll = hasattr(select, 'poll')
+    try:
+        import threading
+    except ImportError:
+        threading = None
     import fcntl
     import pickle
 
@@ -507,7 +511,7 @@
                     p2cread, _ = _subprocess.CreatePipe(None, 0)
             elif stdin == PIPE:
                 p2cread, p2cwrite = _subprocess.CreatePipe(None, 0)
-            elif isinstance(stdin, int):
+            elif isinstance(stdin, (int, long)):
                 p2cread = msvcrt.get_osfhandle(stdin)
             else:
                 # Assuming file-like object
@@ -524,7 +528,7 @@
                     _, c2pwrite = _subprocess.CreatePipe(None, 0)
             elif stdout == PIPE:
                 c2pread, c2pwrite = _subprocess.CreatePipe(None, 0)
-            elif isinstance(stdout, int):
+            elif isinstance(stdout, (int, long)):
                 c2pwrite = msvcrt.get_osfhandle(stdout)
             else:
                 # Assuming file-like object
@@ -543,7 +547,7 @@
                 errread, errwrite = _subprocess.CreatePipe(None, 0)
             elif stderr == STDOUT:
                 errwrite = c2pwrite
-            elif isinstance(stderr, int):
+            elif isinstance(stderr, (int, long)):
                 errwrite = msvcrt.get_osfhandle(stderr)
             else:
                 # Assuming file-like object
@@ -720,10 +724,11 @@
                         if e.errno == errno.EPIPE:
                             # communicate() should ignore broken pipe error
                             pass
-                        elif (e.errno == errno.EINVAL
-                              and self.poll() is not None):
-                            # Issue #19612: stdin.write() fails with EINVAL
-                            # if the process already exited before the write
+                        elif e.errno == errno.EINVAL:
+                            # bpo-19612, bpo-30418: On Windows, stdin.write()
+                            # fails with EINVAL if the child process exited or
+                            # if the child process is still running but closed
+                            # the pipe.
                             pass
                         else:
                             raise
@@ -800,7 +805,7 @@
             elif stdin == PIPE:
                 p2cread, p2cwrite = self.pipe_cloexec()
                 to_close.update((p2cread, p2cwrite))
-            elif isinstance(stdin, int):
+            elif isinstance(stdin, (int, long)):
                 p2cread = stdin
             else:
                 # Assuming file-like object
@@ -811,7 +816,7 @@
             elif stdout == PIPE:
                 c2pread, c2pwrite = self.pipe_cloexec()
                 to_close.update((c2pread, c2pwrite))
-            elif isinstance(stdout, int):
+            elif isinstance(stdout, (int, long)):
                 c2pwrite = stdout
             else:
                 # Assuming file-like object
@@ -827,7 +832,7 @@
                     errwrite = c2pwrite
                 else: # child's stdout is not set, use parent's stdout
                     errwrite = sys.__stdout__.fileno()
-            elif isinstance(stderr, int):
+            elif isinstance(stderr, (int, long)):
                 errwrite = stderr
             else:
                 # Assuming file-like object
@@ -877,6 +882,21 @@
                         pass
 
 
+        # Used as a bandaid workaround for https://bugs.python.org/issue27448
+        # to prevent multiple simultaneous subprocess launches from interfering
+        # with one another and leaving gc disabled.
+        if threading:
+            _disabling_gc_lock = threading.Lock()
+        else:
+            class _noop_context_manager(object):
+                # A dummy context manager that does nothing for the rare
+                # user of a --without-threads build.
+                def __enter__(self): pass
+                def __exit__(self, *args): pass
+
+            _disabling_gc_lock = _noop_context_manager()
+
+
         def _execute_child(self, args, executable, preexec_fn, close_fds,
                            cwd, env, universal_newlines,
                            startupinfo, creationflags, shell, to_close,
@@ -908,10 +928,12 @@
             errpipe_read, errpipe_write = self.pipe_cloexec()
             try:
                 try:
-                    gc_was_enabled = gc.isenabled()
-                    # Disable gc to avoid bug where gc -> file_dealloc ->
-                    # write to stderr -> hang.  http://bugs.python.org/issue1336
-                    gc.disable()
+                    with self._disabling_gc_lock:
+                        gc_was_enabled = gc.isenabled()
+                        # Disable gc to avoid bug where gc -> file_dealloc ->
+                        # write to stderr -> hang.
+                        # https://bugs.python.org/issue1336
+                        gc.disable()
                     try:
                         self.pid = os.fork()
                     except:
@@ -985,9 +1007,10 @@
                             exc_value.child_traceback = ''.join(exc_lines)
                             os.write(errpipe_write, pickle.dumps(exc_value))
 
-                        # This exitcode won't be reported to applications, so it
-                        # really doesn't matter what we return.
-                        os._exit(255)
+                        finally:
+                            # This exitcode won't be reported to applications, so it
+                            # really doesn't matter what we return.
+                            os._exit(255)
 
                     # Parent
                     if gc_was_enabled:
@@ -1026,13 +1049,16 @@
 
         def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
                 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
-                _WEXITSTATUS=os.WEXITSTATUS):
+                _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
+                _WSTOPSIG=os.WSTOPSIG):
             # This method is called (indirectly) by __del__, so it cannot
             # refer to anything outside of its local scope.
             if _WIFSIGNALED(sts):
                 self.returncode = -_WTERMSIG(sts)
             elif _WIFEXITED(sts):
                 self.returncode = _WEXITSTATUS(sts)
+            elif _WIFSTOPPED(sts):
+                self.returncode = -_WSTOPSIG(sts)
             else:
                 # Should never happen
                 raise RuntimeError("Unknown child exit status!")
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
index 2a1da5a..9c8350d 100644
--- a/Lib/sysconfig.py
+++ b/Lib/sysconfig.py
@@ -112,6 +112,11 @@
 # PC/VS7.1
 if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower():
     _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir))
+# PC/VS9.0/amd64
+if (os.name == "nt"
+   and os.path.basename(os.path.dirname(os.path.dirname(_PROJECT_BASE))).lower() == "pc"
+   and os.path.basename(os.path.dirname(_PROJECT_BASE)).lower() == "vs9.0"):
+    _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir, pardir))
 # PC/AMD64
 if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower():
     _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir))
diff --git a/Lib/tabnanny.py b/Lib/tabnanny.py
index 76665ac..e48b72a 100755
--- a/Lib/tabnanny.py
+++ b/Lib/tabnanny.py
@@ -59,7 +59,7 @@
 
 class NannyNag(Exception):
     """
-    Raised by tokeneater() if detecting an ambiguous indent.
+    Raised by process_tokens() if detecting an ambiguous indent.
     Captured and handled in check().
     """
     def __init__(self, lineno, msg, line):
diff --git a/Lib/telnetlib.py b/Lib/telnetlib.py
index 2eaa8e3..d0246c0 100644
--- a/Lib/telnetlib.py
+++ b/Lib/telnetlib.py
@@ -317,7 +317,7 @@
                     ready = poller.poll(None if timeout is None
                                         else 1000 * call_timeout)
                 except select.error as e:
-                    if e.errno == errno.EINTR:
+                    if e[0] == errno.EINTR:
                         if timeout is not None:
                             elapsed = time() - time_start
                             call_timeout = timeout-elapsed
@@ -688,7 +688,7 @@
                     ready = poller.poll(None if timeout is None
                                         else 1000 * call_timeout)
                 except select.error as e:
-                    if e.errno == errno.EINTR:
+                    if e[0] == errno.EINTR:
                         if timeout is not None:
                             elapsed = time() - time_start
                             call_timeout = timeout-elapsed
diff --git a/Lib/test/__main__.py b/Lib/test/__main__.py
new file mode 100644
index 0000000..d5fbe15
--- /dev/null
+++ b/Lib/test/__main__.py
@@ -0,0 +1,3 @@
+from test import regrtest
+
+regrtest.main_in_temp_cwd()
diff --git a/Lib/test/allsans.pem b/Lib/test/allsans.pem
index 3ee4f59..bf59f30 100644
--- a/Lib/test/allsans.pem
+++ b/Lib/test/allsans.pem
@@ -1,37 +1,64 @@
 -----BEGIN PRIVATE KEY-----
-MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOoy7/QOtTjQ0niE
-6uDcTwtkC0R2Tvy1AjVnXohCntZfdzbTGDoYTgXSOLsP8A697jUiJ8VCePGH50xG
-Z4DKnAF3a9O3a9nr2pLXb0iY3XOMv+YEBii7CfI+3oxFYgCl0sMgHzDD2ZTVYAsm
-DWgLUVsE2gHEccRwrM2tPf2EgR+FAgMBAAECgYEA3qyfyYVSeTrTYxO93x6ZaVMu
-A2IZp9zSxMQL9bKiI2GRj+cV2ebSCGbg2btFnD6qBor7FWsmYz+8g6FNN/9sY4az
-61rMqMtQvLBe+7L8w70FeTze4qQ4Y1oQri0qD6tBWhDVlpnbI5Py9bkZKD67yVUk
-elcEA/5x4PrYXkuqsAECQQD80NjT0mDvaY0JOOaQFSEpMv6QiUA8GGX8Xli7IoKb
-tAolPG8rQBa+qSpcWfDMTrWw/aWHuMEEQoP/bVDH9W4FAkEA7SYQbBAKnojZ5A3G
-kOHdV7aeivRQxQk/JN8Fb8oKB9Csvpv/BsuGxPKXHdhFa6CBTTsNRtHQw/szPo4l
-xMIjgQJAPoMxqibR+0EBM6+TKzteSL6oPXsCnBl4Vk/J5vPgkbmR7KUl4+7j8N8J
-b2554TrxKEN/w7CGYZRE6UrRd7ATNQJAWD7Yz41sli+wfPdPU2xo1BHljyl4wMk/
-EPZYbI/PCbdyAH/F935WyQTIjNeEhZc1Zkq6FwdOWw8ns3hrv3rKgQJAHXv1BqUa
-czGPIFxX2TNoqtcl6/En4vrxVB1wzsfzkkDAg98kBl7qsF+S3qujSzKikjeaVbI2
-/CyWR2P3yLtOmA==
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD59JyhPgYe7nhZ
+Z2IGhaklNgtRkD+5BVs7lEWovYRBlXpPA6PuaHat25rI8EGYHmlufPherg2Qu6sC
+GmZZKo7TgjlmDcwVS4hkebtFH7OZy5Il7Y2ZIdiK7Xp9Z0EPoqwacYowB0a8WhZY
+I2Vm4EzCNKl6/htkwjgn2JXGizxvGt/1kNqP/GBAX+vjgeahOsn8jVh96KpFHJbS
+g83cX4t8M7FJv7yNoDLvORHnvKCOXbQmr6ZMGcZN8PwS8awQ31khZTpEx+hCe+Pi
+GzeOlxpZimXWDAGWA4tZ58Ka/QvO7VQbD5Ci166ODvvs+tEXfBUExtPcS+02IBJV
+tzhBna9VAgMBAAECggEAPar9DccIqY76QEyCYcuOPLEFv9zP6+0HYj6lpQkE3U1s
+vJvQURyS0zgQCy1Dca1nI6xPdsSIckHq4fzzbWJTlJlXYfdbd5GIGAn0iwxUOkiA
+ST0/px0zmKsYgmH8KkhfH7MNfeX9rLCpPJuXA/eo2G03tzGEPqqwQhxsb2ygv2Qs
+M7OqJz6RJu87K1Y+psWIv9+VhNVja0kvsg52QMK9mtp8layb54qLI5R5e09sIudq
+RHegtnSOBo9kt32H9vWUFaF5PpYt4yks4KYI4ulKGWJGXHMDW4uHUaE/tjNQuYAX
+DuDvjN+ECSJvigiUbu2k0xB2KYIb1fpcxlz/YBdADQKBgQD/Z2VtBUjOFnJKz00f
+xN0akp7XPgd1yCb1/wZq9PQiGvzIAMDIplioTvjOjhOzPJaWD0GICNeypzQ48+0P
+UsPIKbazpIZN6bZncr65plSpg0KANq46hbkPHOo8PHDa7yoxBUSPr8F7P1OCRkn6
++QdgcnrAly7yfqO2ahAWOX7iCwKBgQD6ifXSCKfRF1GUb3Ws7S1rLxeBasWq+EmC
+sUnck0S+AyaMkN+kZ5zejbN+NDuUMQ7+3wUIheTclUhzR0LP3+r5jjHsimJuvOml
+wuV37F+Om5lD/Xx27NfbtRKn/bK6o0zDL8JB2eFB0N7Fh7hRYoUMdrpQs5sU91IC
+pNYlAcLwHwKBgGvLK9eTf2LbvmksjRR3dgodD8UwfN2NGESC2iaSM+ehFEclajhF
+XO3MRt6GwHHJhJTY44OSl9bjEvtmmAr7l34HfQDc04JWvZFzsGOSe/D/YTXT3jz8
+61ohjgrWR5tfjaMa4hDy0Oo/k/NLzzWJnT9rkbtvE3VtVZNLuHZo1dB5AoGBAMHO
+wStV6MO1nzUNN+Gqo8zbY/qIJxsH8I26KaIJBk9azpJEa8yZHl+HDEffjgsoHCqL
+STB7qzv7+0y53nRCClo8ZmBN+LEjUDcbWjl3z7/YnCpdR9ATjTP3kdQETCNWucXw
+Bvy72CX6tqnlQG8soDGxEpXlKl2AqJ9E9icwgqUPAoGAL6xTDdgcYTbk9wxCd41l
+NhHTSvLrGXLAzv61PCnlOJEJbuuezb2VW0ibsud5CA4Mi0tf9ET790XSOFd5nCjQ
+6rr06AkjQsoFvjL1dO9EzVFPW0JrZ3C9y8ZOjdeAfPEmFL2T6VqmQ+IcCUNhSr39
+NBdKrboEFfnKanfbstekhAs=
 -----END PRIVATE KEY-----
 -----BEGIN CERTIFICATE-----
-MIIDcjCCAtugAwIBAgIJAN5dc9TOWjB7MA0GCSqGSIb3DQEBCwUAMF0xCzAJBgNV
+MIIGMDCCBRigAwIBAgIJAJYf8T95ptq5MA0GCSqGSIb3DQEBCwUAMF0xCzAJBgNV
 BAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9u
-IFNvZnR3YXJlIEZvdW5kYXRpb24xEDAOBgNVBAMMB2FsbHNhbnMwHhcNMTYwODA1
-MTAyMTExWhcNMjYwODAzMTAyMTExWjBdMQswCQYDVQQGEwJYWTEXMBUGA1UEBwwO
+IFNvZnR3YXJlIEZvdW5kYXRpb24xEDAOBgNVBAMMB2FsbHNhbnMwHhcNMTgwMTE5
+MTkwOTA3WhcNMjgwMTE3MTkwOTA3WjBdMQswCQYDVQQGEwJYWTEXMBUGA1UEBwwO
 Q2FzdGxlIEFudGhyYXgxIzAhBgNVBAoMGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0
-aW9uMRAwDgYDVQQDDAdhbGxzYW5zMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
-gQDqMu/0DrU40NJ4hOrg3E8LZAtEdk78tQI1Z16IQp7WX3c20xg6GE4F0ji7D/AO
-ve41IifFQnjxh+dMRmeAypwBd2vTt2vZ69qS129ImN1zjL/mBAYouwnyPt6MRWIA
-pdLDIB8ww9mU1WALJg1oC1FbBNoBxHHEcKzNrT39hIEfhQIDAQABo4IBODCCATQw
-ggEwBgNVHREEggEnMIIBI4IHYWxsc2Fuc6AeBgMqAwSgFwwVc29tZSBvdGhlciBp
-ZGVudGlmaWVyoDUGBisGAQUCAqArMCmgEBsOS0VSQkVST1MuUkVBTE2hFTAToAMC
-AQGhDDAKGwh1c2VybmFtZYEQdXNlckBleGFtcGxlLm9yZ4IPd3d3LmV4YW1wbGUu
-b3JnpGcwZTELMAkGA1UEBhMCWFkxFzAVBgNVBAcMDkNhc3RsZSBBbnRocmF4MSMw
-IQYDVQQKDBpQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjEYMBYGA1UEAwwPZGly
-bmFtZSBleGFtcGxlhhdodHRwczovL3d3dy5weXRob24ub3JnL4cEfwAAAYcQAAAA
-AAAAAAAAAAAAAAAAAYgEKgMEBTANBgkqhkiG9w0BAQsFAAOBgQAy16h+F+nOmeiT
-VWR0fc8F/j6FcadbLseAUaogcC15OGxCl4UYpLV88HBkABOoGCpP155qwWTwOrdG
-iYPGJSusf1OnJEbvzFejZf6u078bPd9/ZL4VWLjv+FPGkjd+N+/OaqMvgj8Lu99f
-3Y/C4S7YbHxxwff6C6l2Xli+q6gnuQ==
+aW9uMRAwDgYDVQQDDAdhbGxzYW5zMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEA+fScoT4GHu54WWdiBoWpJTYLUZA/uQVbO5RFqL2EQZV6TwOj7mh2rdua
+yPBBmB5pbnz4Xq4NkLurAhpmWSqO04I5Zg3MFUuIZHm7RR+zmcuSJe2NmSHYiu16
+fWdBD6KsGnGKMAdGvFoWWCNlZuBMwjSpev4bZMI4J9iVxos8bxrf9ZDaj/xgQF/r
+44HmoTrJ/I1YfeiqRRyW0oPN3F+LfDOxSb+8jaAy7zkR57ygjl20Jq+mTBnGTfD8
+EvGsEN9ZIWU6RMfoQnvj4hs3jpcaWYpl1gwBlgOLWefCmv0Lzu1UGw+Qoteujg77
+7PrRF3wVBMbT3EvtNiASVbc4QZ2vVQIDAQABo4IC8TCCAu0wggEwBgNVHREEggEn
+MIIBI4IHYWxsc2Fuc6AeBgMqAwSgFwwVc29tZSBvdGhlciBpZGVudGlmaWVyoDUG
+BisGAQUCAqArMCmgEBsOS0VSQkVST1MuUkVBTE2hFTAToAMCAQGhDDAKGwh1c2Vy
+bmFtZYEQdXNlckBleGFtcGxlLm9yZ4IPd3d3LmV4YW1wbGUub3JnpGcwZTELMAkG
+A1UEBhMCWFkxFzAVBgNVBAcMDkNhc3RsZSBBbnRocmF4MSMwIQYDVQQKDBpQeXRo
+b24gU29mdHdhcmUgRm91bmRhdGlvbjEYMBYGA1UEAwwPZGlybmFtZSBleGFtcGxl
+hhdodHRwczovL3d3dy5weXRob24ub3JnL4cEfwAAAYcQAAAAAAAAAAAAAAAAAAAA
+AYgEKgMEBTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
+AQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFH9ye3+WhBnHqNhtFu059bzY
+SWM8MIGPBgNVHSMEgYcwgYSAFH9ye3+WhBnHqNhtFu059bzYSWM8oWGkXzBdMQsw
+CQYDVQQGEwJYWTEXMBUGA1UEBwwOQ2FzdGxlIEFudGhyYXgxIzAhBgNVBAoMGlB5
+dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uMRAwDgYDVQQDDAdhbGxzYW5zggkAlh/x
+P3mm2rkwgYMGCCsGAQUFBwEBBHcwdTA8BggrBgEFBQcwAoYwaHR0cDovL3Rlc3Rj
+YS5weXRob250ZXN0Lm5ldC90ZXN0Y2EvcHljYWNlcnQuY2VyMDUGCCsGAQUFBzAB
+hilodHRwOi8vdGVzdGNhLnB5dGhvbnRlc3QubmV0L3Rlc3RjYS9vY3NwLzBDBgNV
+HR8EPDA6MDigNqA0hjJodHRwOi8vdGVzdGNhLnB5dGhvbnRlc3QubmV0L3Rlc3Rj
+YS9yZXZvY2F0aW9uLmNybDANBgkqhkiG9w0BAQsFAAOCAQEAYwYJcerUPvnsP7e2
+HGp/It0OZ8Cvpt8Qf7A+NSPvJqkyKakl8zK/50iq/qQKH09CnfEae4rfXLdlYsvV
+2PZYK0LDWnyTcHSJWAVJjlSFIFt3ig9FdHv9GYtSWWod66cZ0sEZOoF2IHZUGby+
+Qa+JQpmv5jEuGIZzjcsh6hSOou8ph7LsCsRdVlQqk8rM97vB7DAgh01vedlbolsq
+JxsuPRydNFV/eWq3AgAWgZL3LdYYIAgaVOTnnd3xARw8DlT1q6+Lzc71GBXrRZYh
+qgd+xC/K1812gMPImTX02bxpkhCuIdVd7cztWi8sdQmSgDEFdYMXo4NzlFTK8dlC
+Y4wa3Q==
 -----END CERTIFICATE-----
diff --git a/Lib/test/bisect_cmd.py b/Lib/test/bisect_cmd.py
new file mode 100755
index 0000000..1bf32ef
--- /dev/null
+++ b/Lib/test/bisect_cmd.py
@@ -0,0 +1,181 @@
+#!/usr/bin/env python2
+"""
+Command line tool to bisect failing CPython tests.
+
+Find the test_os test method which alters the environment:
+
+    ./python -m test.bisect --fail-env-changed test_os
+
+Find a reference leak in "test_os", write the list of failing tests into the
+"bisect" file:
+
+    ./python -m test.bisect -o bisect -R 3:3 test_os
+
+Load an existing list of tests from a file using -i option:
+
+    ./python -m test --list-cases -m FileTests test_os > tests
+    ./python -m test.bisect -i tests test_os
+"""
+from __future__ import print_function
+
+import argparse
+import datetime
+import os.path
+import math
+import random
+import subprocess
+import sys
+import tempfile
+import time
+
+
+def write_tests(filename, tests):
+    with open(filename, "w") as fp:
+        for name in tests:
+            print(name, file=fp)
+        fp.flush()
+
+
+def write_output(filename, tests):
+    if not filename:
+        return
+    print("Write %s tests into %s" % (len(tests), filename))
+    write_tests(filename, tests)
+    return filename
+
+
+def format_shell_args(args):
+    return ' '.join(args)
+
+
+def list_cases(args):
+    cmd = [sys.executable, '-m', 'test', '--list-cases']
+    cmd.extend(args.test_args)
+    proc = subprocess.Popen(cmd,
+                            stdout=subprocess.PIPE,
+                            universal_newlines=True)
+    try:
+        stdout = proc.communicate()[0]
+    except:
+        proc.stdout.close()
+        proc.kill()
+        proc.wait()
+        raise
+    exitcode = proc.wait()
+    if exitcode:
+        cmd = format_shell_args(cmd)
+        print("Failed to list tests: %s failed with exit code %s"
+              % (cmd, exitcode))
+        sys.exit(exitcode)
+    tests = stdout.splitlines()
+    return tests
+
+
+def run_tests(args, tests, huntrleaks=None):
+    tmp = tempfile.mktemp()
+    try:
+        write_tests(tmp, tests)
+
+        cmd = [sys.executable, '-m', 'test', '--matchfile', tmp]
+        cmd.extend(args.test_args)
+        print("+ %s" % format_shell_args(cmd))
+        proc = subprocess.Popen(cmd)
+        try:
+            exitcode = proc.wait()
+        except:
+            proc.kill()
+            proc.wait()
+            raise
+        return exitcode
+    finally:
+        if os.path.exists(tmp):
+            os.unlink(tmp)
+
+
+def parse_args():
+    parser = argparse.ArgumentParser()
+    parser.add_argument('-i', '--input',
+                        help='Test names produced by --list-tests written '
+                             'into a file. If not set, run --list-tests')
+    parser.add_argument('-o', '--output',
+                        help='Result of the bisection')
+    parser.add_argument('-n', '--max-tests', type=int, default=1,
+                        help='Maximum number of tests to stop the bisection '
+                             '(default: 1)')
+    parser.add_argument('-N', '--max-iter', type=int, default=100,
+                        help='Maximum number of bisection iterations '
+                             '(default: 100)')
+    # FIXME: document that following arguments are test arguments
+
+    args, test_args = parser.parse_known_args()
+    args.test_args = test_args
+    return args
+
+
+def main():
+    args = parse_args()
+
+    if args.input:
+        with open(args.input) as fp:
+            tests = [line.strip() for line in fp]
+    else:
+        tests = list_cases(args)
+
+    print("Start bisection with %s tests" % len(tests))
+    print("Test arguments: %s" % format_shell_args(args.test_args))
+    print("Bisection will stop when getting %s or less tests "
+          "(-n/--max-tests option), or after %s iterations "
+          "(-N/--max-iter option)"
+          % (args.max_tests, args.max_iter))
+    output = write_output(args.output, tests)
+    print()
+
+    start_time = time.time()
+    iteration = 1
+    try:
+        while len(tests) > args.max_tests and iteration <= args.max_iter:
+            ntest = len(tests)
+            ntest = max(ntest // 2, 1)
+            subtests = random.sample(tests, ntest)
+
+            print("[+] Iteration %s: run %s tests/%s"
+                  % (iteration, len(subtests), len(tests)))
+            print()
+
+            exitcode = run_tests(args, subtests)
+
+            print("ran %s tests/%s" % (ntest, len(tests)))
+            print("exit", exitcode)
+            if exitcode:
+                print("Tests failed: use this new subtest")
+                tests = subtests
+                output = write_output(args.output, tests)
+            else:
+                print("Tests succeeded: skip this subtest, try a new subbset")
+            print()
+            iteration += 1
+    except KeyboardInterrupt:
+        print()
+        print("Bisection interrupted!")
+        print()
+
+    print("Tests (%s):" % len(tests))
+    for test in tests:
+        print("* %s" % test)
+    print()
+
+    if output:
+        print("Output written into %s" % output)
+
+    dt = math.ceil(time.time() - start_time)
+    if len(tests) <= args.max_tests:
+        print("Bisection completed in %s iterations and %s"
+              % (iteration, datetime.timedelta(seconds=dt)))
+        sys.exit(1)
+    else:
+        print("Bisection failed after %s iterations and %s"
+              % (iteration, datetime.timedelta(seconds=dt)))
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Lib/test/crashers/warnings_del_crasher.py b/Lib/test/crashers/warnings_del_crasher.py
new file mode 100644
index 0000000..02e6805
--- /dev/null
+++ b/Lib/test/crashers/warnings_del_crasher.py
@@ -0,0 +1,29 @@
+"""
+Expose a race in the _warnings module, which is the C backend for the
+warnings module. The "_warnings" module tries to access attributes of the
+"warnings" module (because of the API it has to support), but doing so
+during interpreter shutdown is problematic. Specifically, the call to
+PyImport_GetModuleDict() in Python/_warnings.c:get_warnings_attr will
+abort() if the modules dict has already been cleaned up.
+
+This crasher is timing-dependent, and more threads (NUM_THREADS) may be
+necessary to expose it reliably on different systems.
+"""
+
+import threading
+import warnings
+
+NUM_THREADS = 10
+
+class WarnOnDel(object):
+    def __del__(self):
+        warnings.warn("oh no something went wrong", UserWarning)
+
+def do_work():
+    while True:
+        w = WarnOnDel()
+
+for i in range(NUM_THREADS):
+    t = threading.Thread(target=do_work)
+    t.setDaemon(1)
+    t.start()
diff --git a/Lib/test/dh1024.pem b/Lib/test/dh1024.pem
deleted file mode 100644
index a391176..0000000
--- a/Lib/test/dh1024.pem
+++ /dev/null
@@ -1,7 +0,0 @@
------BEGIN DH PARAMETERS-----
-MIGHAoGBAIbzw1s9CT8SV5yv6L7esdAdZYZjPi3qWFs61CYTFFQnf2s/d09NYaJt
-rrvJhIzWavqnue71qXCf83/J3nz3FEwUU/L0mGyheVbsSHiI64wUo3u50wK5Igo0
-RNs/LD0irs7m0icZ//hijafTU+JOBiuA8zMI+oZfU7BGuc9XrUprAgEC
------END DH PARAMETERS-----
-
-Generated with: openssl dhparam -out dh1024.pem  1024
diff --git a/Lib/test/ffdh3072.pem b/Lib/test/ffdh3072.pem
new file mode 100644
index 0000000..ad69bac
--- /dev/null
+++ b/Lib/test/ffdh3072.pem
@@ -0,0 +1,41 @@
+    DH Parameters: (3072 bit)
+        prime:
+            00:ff:ff:ff:ff:ff:ff:ff:ff:ad:f8:54:58:a2:bb:
+            4a:9a:af:dc:56:20:27:3d:3c:f1:d8:b9:c5:83:ce:
+            2d:36:95:a9:e1:36:41:14:64:33:fb:cc:93:9d:ce:
+            24:9b:3e:f9:7d:2f:e3:63:63:0c:75:d8:f6:81:b2:
+            02:ae:c4:61:7a:d3:df:1e:d5:d5:fd:65:61:24:33:
+            f5:1f:5f:06:6e:d0:85:63:65:55:3d:ed:1a:f3:b5:
+            57:13:5e:7f:57:c9:35:98:4f:0c:70:e0:e6:8b:77:
+            e2:a6:89:da:f3:ef:e8:72:1d:f1:58:a1:36:ad:e7:
+            35:30:ac:ca:4f:48:3a:79:7a:bc:0a:b1:82:b3:24:
+            fb:61:d1:08:a9:4b:b2:c8:e3:fb:b9:6a:da:b7:60:
+            d7:f4:68:1d:4f:42:a3:de:39:4d:f4:ae:56:ed:e7:
+            63:72:bb:19:0b:07:a7:c8:ee:0a:6d:70:9e:02:fc:
+            e1:cd:f7:e2:ec:c0:34:04:cd:28:34:2f:61:91:72:
+            fe:9c:e9:85:83:ff:8e:4f:12:32:ee:f2:81:83:c3:
+            fe:3b:1b:4c:6f:ad:73:3b:b5:fc:bc:2e:c2:20:05:
+            c5:8e:f1:83:7d:16:83:b2:c6:f3:4a:26:c1:b2:ef:
+            fa:88:6b:42:38:61:1f:cf:dc:de:35:5b:3b:65:19:
+            03:5b:bc:34:f4:de:f9:9c:02:38:61:b4:6f:c9:d6:
+            e6:c9:07:7a:d9:1d:26:91:f7:f7:ee:59:8c:b0:fa:
+            c1:86:d9:1c:ae:fe:13:09:85:13:92:70:b4:13:0c:
+            93:bc:43:79:44:f4:fd:44:52:e2:d7:4d:d3:64:f2:
+            e2:1e:71:f5:4b:ff:5c:ae:82:ab:9c:9d:f6:9e:e8:
+            6d:2b:c5:22:36:3a:0d:ab:c5:21:97:9b:0d:ea:da:
+            1d:bf:9a:42:d5:c4:48:4e:0a:bc:d0:6b:fa:53:dd:
+            ef:3c:1b:20:ee:3f:d5:9d:7c:25:e4:1d:2b:66:c6:
+            2e:37:ff:ff:ff:ff:ff:ff:ff:ff
+        generator: 2 (0x2)
+        recommended-private-length: 276 bits
+-----BEGIN DH PARAMETERS-----
+MIIBjAKCAYEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz
++8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a
+87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7
+YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi
+7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD
+ssbzSibBsu/6iGtCOGEfz9zeNVs7ZRkDW7w09N75nAI4YbRvydbmyQd62R0mkff3
+7lmMsPrBhtkcrv4TCYUTknC0EwyTvEN5RPT9RFLi103TZPLiHnH1S/9croKrnJ32
+nuhtK8UiNjoNq8Uhl5sN6todv5pC1cRITgq80Gv6U93vPBsg7j/VnXwl5B0rZsYu
+N///////////AgECAgIBFA==
+-----END DH PARAMETERS-----
diff --git a/Lib/test/fork_wait.py b/Lib/test/fork_wait.py
index 2646cbd..b900463 100644
--- a/Lib/test/fork_wait.py
+++ b/Lib/test/fork_wait.py
@@ -13,8 +13,9 @@
 """
 
 import os, sys, time, unittest
-import test.test_support as test_support
-thread = test_support.import_module('thread')
+import test.support as support
+
+threading = support.import_module('threading')
 
 LONGSLEEP = 2
 SHORTSLEEP = 0.5
@@ -23,8 +24,19 @@
 class ForkWait(unittest.TestCase):
 
     def setUp(self):
+        self._threading_key = support.threading_setup()
         self.alive = {}
         self.stop = 0
+        self.threads = []
+
+    def tearDown(self):
+        # Stop threads
+        self.stop = 1
+        for thread in self.threads:
+            thread.join()
+        thread = None
+        del self.threads[:]
+        support.threading_cleanup(*self._threading_key)
 
     def f(self, id):
         while not self.stop:
@@ -48,7 +60,9 @@
 
     def test_wait(self):
         for i in range(NUM_THREADS):
-            thread.start_new(self.f, (i,))
+            thread = threading.Thread(target=self.f, args=(i,))
+            thread.start()
+            self.threads.append(thread)
 
         time.sleep(LONGSLEEP)
 
@@ -74,6 +88,3 @@
         else:
             # Parent
             self.wait_impl(cpid)
-            # Tell threads to die
-            self.stop = 1
-            time.sleep(2*SHORTSLEEP) # Wait for threads to die
diff --git a/Lib/test/inspect_fodder.py b/Lib/test/inspect_fodder.py
index 5c87ae6..548765c 100644
--- a/Lib/test/inspect_fodder.py
+++ b/Lib/test/inspect_fodder.py
@@ -56,3 +56,9 @@
 
 class FesteringGob(MalodorousPervert, ParrotDroppings):
     pass
+
+currentframe = inspect.currentframe()
+try:
+    raise Exception()
+except:
+    tb = sys.exc_info()[2]
diff --git a/Lib/test/keycert.passwd.pem b/Lib/test/keycert.passwd.pem
index e905748..0ad6960 100644
--- a/Lib/test/keycert.passwd.pem
+++ b/Lib/test/keycert.passwd.pem
@@ -1,33 +1,50 @@
 -----BEGIN RSA PRIVATE KEY-----
 Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,1A8D9D2A02EC698A
+DEK-Info: DES-EDE3-CBC,E74528136B90D2DD
 
-kJYbfZ8L0sfe9Oty3gw0aloNnY5E8fegRfQLZlNoxTl6jNt0nIwI8kDJ36CZgR9c
-u3FDJm/KqrfUoz8vW+qEnWhSG7QPX2wWGPHd4K94Yz/FgrRzZ0DoK7XxXq9gOtVA
-AVGQhnz32p+6WhfGsCr9ArXEwRZrTk/FvzEPaU5fHcoSkrNVAGX8IpSVkSDwEDQr
-Gv17+cfk99UV1OCza6yKHoFkTtrC+PZU71LomBabivS2Oc4B9hYuSR2hF01wTHP+
-YlWNagZOOVtNz4oKK9x9eNQpmfQXQvPPTfusexKIbKfZrMvJoxcm1gfcZ0H/wK6P
-6wmXSG35qMOOztCZNtperjs1wzEBXznyK8QmLcAJBjkfarABJX9vBEzZV0OUKhy+
-noORFwHTllphbmydLhu6ehLUZMHPhzAS5UN7srtpSN81eerDMy0RMUAwA7/PofX1
-94Me85Q8jP0PC9ETdsJcPqLzAPETEYu0ELewKRcrdyWi+tlLFrpE5KT/s5ecbl9l
-7B61U4Kfd1PIXc/siINhU3A3bYK+845YyUArUOnKf1kEox7p1RpD7yFqVT04lRTo
-cibNKATBusXSuBrp2G6GNuhWEOSafWCKJQAzgCYIp6ZTV2khhMUGppc/2H3CF6cO
-zX0KtlPVZC7hLkB6HT8SxYUwF1zqWY7+/XPPdc37MeEZ87Q3UuZwqORLY+Z0hpgt
-L5JXBCoklZhCAaN2GqwFLXtGiRSRFGY7xXIhbDTlE65Wv1WGGgDLMKGE1gOz3yAo
-2jjG1+yAHJUdE69XTFHSqSkvaloA1W03LdMXZ9VuQJ/ySXCie6ABAQ==
+WRHVD2PJXPqjFSHg92HURIsUzvsTE4a9oi0SC5yMBFKNWA5Z933gK3XTifp6jul5
+zpNYi8jBXZ2EqJJBxCuVcefmXSxL0q7CMej25TdIC4BVAFJVveeprHPUFkNB0IM1
+go5Lg4YofYqTCg3OE3k7WvfR3Zg1cRYxksDKO+WNZgWyKBex5X4vjOiyUqDl3GKt
+kQXnkg1VgPV2Vrx93S9XNdELNRTguwf+XG0fkhtYhp/zCto8uKTgy5elK2P/ulGp
+7fe6uj7h/uN9L7EOC6CjRkitywfeBUER739mOcGT4imSFJ9G27TCqPzj2ea3uuaf
+/v1xhkQ4M6lNY/gcRfgVpCXhW43aAQV8XXQRMJTqLmz5Y5hYTKn+Ugq5vJ/ngyRM
+lu1gUJnYYaemBTb4hbm6aBvnYK9mORa891Pmf+vxU9rYuQIdVAhvvXh4KBreSEBI
+1AFy6dFKXl8ZKs6Wrq5wPefmFFkRmZ8OBiiq0fp2ApCRGZw6LsjCgwrRM38JiY7d
+3OdsJpKvRYufgUyuuzUE0xA+E4yMvD48M9pPq2fC8O5giuGL1uEekQWXJuq+6ZRI
+XYKIeSkuQALbX3RAzCPXTUEMtCYXKm/gxrrwJ+Bet4ob2amf3MX0uvWwOuAq++Fk
+J0HFSBxrwvIWOhyQXOPuJdAN8PXA7dWOXfOgOMF0hQYqZCl3T4TiVZJbwVQtg1sN
+dO7oAD5ZPHiKzvveZuB6k1FlBG8j0TyAC+44ChxkPDD3jF4dd6zGe62sDf85p4/d
+W80gxJeD3xnDxG0ePPns+GuKUpUaWS7WvHtDpeFW1JEhvOqf8p1Li9a7RzWVo8ML
+mGTdQgBIYIf6/fk69pFKl0nKtBU75KaunZz4nAmd9bNED4naDurMBg44u5TvODbJ
+vgYIYXIYjNvONbskJatVrrTS8zch2NwVIjCi8L/hecwBXbIXzo1pECpc6BU7sQT8
++i9sDKBeJcRipzfKZNHvnO19mUZaPCY8+a/f9c21DgKXz+bgLcJbohpSaeGM8Gfc
+aZd3Vp9n3OJ3g2zQR1++HO9v1vR/wLELu6MeydkvMduHLmOPCn54gZ9z51ZNPAwa
+qfFIsH+mLh9ks0H74ssF59uIlstkgB9zmZHv/Q0dK9ZfG/VEH6rSgdETWhZxhoMQ
+Z92jXBEFT0zhI3rrIPNY+XS7eJCQIc1wc84Ea3cRk7SP+S1og3JtAxX56ykUwtkM
+LQ/Dwwa6h1aqD0l2d5x1/BSdavtTuSegISRWQ4iOmSvEdlFP7H4g6RZk/okbLzMD
+Evq5gNc7vlXhVawoQU8JCanJ5ZbbWnIRZfiXxBQS4lpYPKvJt4ML9z/x+82XxcXv
+Z93N2Wep7wWW5OwS2LcQcOgZRDSIPompwo/0pMFGOS+5oort0ZDRHdmmGLjvBcCb
+1KQmKQ4+8brI/3rjRzts6uDLjTGNxSCieNsnqhwHUv9Mg9WDSWupcGa+x27L89x3
+rObf6+3umcFLSjIzU8wuv1hx/e/y98Kv7BDBNYpAr6kVMrLnzYjAfJbBmqlxkzkQ
+IgQzgrk2QZoTdgwR+S374NAMO0AE5IlO+/qa6qp2SORGTDX64I3UNw==
 -----END RSA PRIVATE KEY-----
 -----BEGIN CERTIFICATE-----
-MIICVDCCAb2gAwIBAgIJANfHOBkZr8JOMA0GCSqGSIb3DQEBBQUAMF8xCzAJBgNV
-BAYTAlhZMRcwFQYDVQQHEw5DYXN0bGUgQW50aHJheDEjMCEGA1UEChMaUHl0aG9u
-IFNvZnR3YXJlIEZvdW5kYXRpb24xEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xMDEw
-MDgyMzAxNTZaFw0yMDEwMDUyMzAxNTZaMF8xCzAJBgNVBAYTAlhZMRcwFQYDVQQH
-Ew5DYXN0bGUgQW50aHJheDEjMCEGA1UEChMaUHl0aG9uIFNvZnR3YXJlIEZvdW5k
-YXRpb24xEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
-gYkCgYEA21vT5isq7F68amYuuNpSFlKDPrMUCa4YWYqZRt2OZ+/3NKaZ2xAiSwr7
-6MrQF70t5nLbSPpqE5+5VrS58SY+g/sXLiFd6AplH1wJZwh78DofbFYXUggktFMt
-pTyiX8jtP66bkcPkDADA089RI1TQR6Ca+n7HFa7c1fabVV6i3zkCAwEAAaMYMBYw
-FAYDVR0RBA0wC4IJbG9jYWxob3N0MA0GCSqGSIb3DQEBBQUAA4GBAHPctQBEQ4wd
-BJ6+JcpIraopLn8BGhbjNWj40mmRqWB/NAWF6M5ne7KpGAu7tLeG4hb1zLaldK8G
-lxy2GPSRF6LFS48dpEj2HbMv2nvv6xxalDMJ9+DicWgAKTQ6bcX2j3GUkCR0g/T1
-CRlNBAAlvhKzO7Clpf9l0YKBEfraJByX
+MIIDWTCCAkGgAwIBAgIJAPm6B21bar2bMA0GCSqGSIb3DQEBCwUAMF8xCzAJBgNV
+BAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9u
+IFNvZnR3YXJlIEZvdW5kYXRpb24xEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0xODAx
+MTkxOTA5MDZaFw0yODAxMTcxOTA5MDZaMF8xCzAJBgNVBAYTAlhZMRcwFQYDVQQH
+DA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5k
+YXRpb24xEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAKvvsX2gEti4shve3iYMc+jE4Se7WHs1Bol2f21H8qNboDOFdeb1
+RKHjmq3exHpajywOUEgne9nKHJY/3f2phR4Y5klqG6liLgiSpVyRlcBGbeT2qEAj
+9oLiLFUXLGfGDds2mTwivQDLJBWi51j7ff5k2Pr58fN5ugYMn24T9FNyn0moT+qj
+SFoBNm58l9jrdkJSlgWfqPlbiMa+mqDn/SFtrwLF2Trbfzu42Sd9UdIzMaSSrzbN
+sGm53pNhCh8KndWUQ8GPP2IsLPoUU4qAtmZuTxCx2S1cXrN9EkmT69tlOH84YfSn
+96Ih9bWRc7M5y5bfVdEVM+fKQl3hBRf05qMCAwEAAaMYMBYwFAYDVR0RBA0wC4IJ
+bG9jYWxob3N0MA0GCSqGSIb3DQEBCwUAA4IBAQAtQ8f37cCEk7/rAcbYR53ce3iK
+Vpihb0U2ni1QjG9Tg9UIExkIGkwTiCm7kwQL+GEStBu9AG/QVrOjeTriRiddhWkk
+ze8kRaI3AC/63t6Vh9Q1x6PESgeE4OtAO9JpJCf4GILglA789Y/b/GF8zJZQxR13
+qpB4ZwWw7gCBhdEW59u6CFeBmfDa58hM8lWvuVoRrTi7bjUeC6PAn5HVMzZSykhu
+4HaUfBp6bKFjuym2+h/VvM1n8C3chjVSmutsLb6ELdD8IK0vPV/yf5+LN256zSsS
+dyUZYd8XwQaioEMKdbhLvnehyzHiWfQIUR3BdhONxoIJhHv/EAo8eCkHHYIF
 -----END CERTIFICATE-----
diff --git a/Lib/test/keycert.pem b/Lib/test/keycert.pem
index 64318aa..9545dcf 100644
--- a/Lib/test/keycert.pem
+++ b/Lib/test/keycert.pem
@@ -1,31 +1,48 @@
 -----BEGIN PRIVATE KEY-----
-MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANtb0+YrKuxevGpm
-LrjaUhZSgz6zFAmuGFmKmUbdjmfv9zSmmdsQIksK++jK0Be9LeZy20j6ahOfuVa0
-ufEmPoP7Fy4hXegKZR9cCWcIe/A6H2xWF1IIJLRTLaU8ol/I7T+um5HD5AwAwNPP
-USNU0Eegmvp+xxWu3NX2m1Veot85AgMBAAECgYA3ZdZ673X0oexFlq7AAmrutkHt
-CL7LvwrpOiaBjhyTxTeSNWzvtQBkIU8DOI0bIazA4UreAFffwtvEuPmonDb3F+Iq
-SMAu42XcGyVZEl+gHlTPU9XRX7nTOXVt+MlRRRxL6t9GkGfUAXI3XxJDXW3c0vBK
-UL9xqD8cORXOfE06rQJBAP8mEX1ERkR64Ptsoe4281vjTlNfIbs7NMPkUnrn9N/Y
-BLhjNIfQ3HFZG8BTMLfX7kCS9D593DW5tV4Z9BP/c6cCQQDcFzCcVArNh2JSywOQ
-ZfTfRbJg/Z5Lt9Fkngv1meeGNPgIMLN8Sg679pAOOWmzdMO3V706rNPzSVMME7E5
-oPIfAkEA8pDddarP5tCvTTgUpmTFbakm0KoTZm2+FzHcnA4jRh+XNTjTOv98Y6Ik
-eO5d1ZnKXseWvkZncQgxfdnMqqpj5wJAcNq/RVne1DbYlwWchT2Si65MYmmJ8t+F
-0mcsULqjOnEMwf5e+ptq5LzwbyrHZYq5FNk7ocufPv/ZQrcSSC+cFwJBAKvOJByS
-x56qyGeZLOQlWS2JS3KJo59XuLFGqcbgN9Om9xFa41Yb4N9NvplFivsvZdw3m1Q/
-SPIXQuT8RMPDVNQ=
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCr77F9oBLYuLIb
+3t4mDHPoxOEnu1h7NQaJdn9tR/KjW6AzhXXm9USh45qt3sR6Wo8sDlBIJ3vZyhyW
+P939qYUeGOZJahupYi4IkqVckZXARm3k9qhAI/aC4ixVFyxnxg3bNpk8Ir0AyyQV
+oudY+33+ZNj6+fHzeboGDJ9uE/RTcp9JqE/qo0haATZufJfY63ZCUpYFn6j5W4jG
+vpqg5/0hba8Cxdk62387uNknfVHSMzGkkq82zbBpud6TYQofCp3VlEPBjz9iLCz6
+FFOKgLZmbk8QsdktXF6zfRJJk+vbZTh/OGH0p/eiIfW1kXOzOcuW31XRFTPnykJd
+4QUX9OajAgMBAAECggEAHppmXDbuw9Z0FVPg9KLIysioTtsgz6VLiZIm8juZK4x2
+glUh/D7xvWL2uDXrgN+3lh7iGUW13LkFx5SMncbbo9TIwI57Z/XKvcnkVwquve+L
+RfLFVc1Q5lD9lROv2rS86KTaN4LzYz3FKXi6dvMkpPAsUtfEQhMLkmISypQQq/1z
+EJaqo7r85OjN7e0wKazlKZpOzJEa5FQLMVRjTRFhLFNbHXX/tAet2jw+umATKbw8
+hYgiuZ44TwSEd9JeIV/oSYWfI/3HetuYW0ru3caiztRF2NySNu8lcsWgNC7fIku9
+mcHjtSNzs91QN1Qlu7GQvvhpt6OWDirNDCW+49WGaQKBgQDg9SDhfF0jRYslgYbH
+cqO4ggaFdHjrAAYpwnAgvanhFZL/zEqm5G1E7l/e2fCkJ9VOSFO0A208chvwMcr+
+dCjHE2tVdE81aQ2v/Eo83VdS1RcOV4Y75yPH48rMhxPaHvxWD/FFDbf0/P2mtPB7
+SZ3kIeZMkE1wxdaO3AKUbQoozwKBgQDDqYgg7kVtygyICE1mB8Hwp6nUxFTczG7y
+4XcsDqMIrKmw+PbQluvkoHoStxeVrsTloDhkTjIrpmYLyAiazg+PUJdkd6xrfLSj
+VV6X93W0S/1egEb1F1CGFxtk8v/PWH4K76EPL2vxXdxjywz3GWlrL9yDYaB2szzS
+DqgwVMqx7QKBgDCD7UF0Bsoyl13RX3XoPXLvZ+SkR+e2q52Z94C4JskKVBeiwX7Y
+yNAS8M4pBoMArDoj0xmBm69rlKbqtjLGbnzwrTdSzDpim7cWnBQgUFLm7gAD1Elb
+AhZ8BCK0Bw4FnLoa2hfga4oEfdfUMgEE0W5/+SEOBgWKRUmuHUhRc911AoGAY2EN
+YmSDYSM5wDIvVb5k9B3EtevOiqNPSw/XnsoEZtiEC/44JnQxdltIBY93bDBrk5IQ
+cmoBM4h91kgQjshQwOMXMhFSwvmBKmCm/hrTbvMVytTutXfVD3ZXFKwT4DW7N0TF
+ElhsxBh/YzRz7mG62JVjtFt2zDN3ld2Z8YpvtXUCgYEA4EJ4ObS5YyvcXAKHJFo6
+Fxmavyrf8LSm3MFA65uSnFvWukMVqqRMReQc5jvpxHKCis+XvnHzyOfL0gW9ZTi7
+tWGGbBi0TRJCa8BkvgngUZxOxUlMfg/7cVxOIB0TPoUSgxFd/+qVz4GZMvr0dPu7
+eAF7J/8ECVvb0wSPTUI1N3c=
 -----END PRIVATE KEY-----
 -----BEGIN CERTIFICATE-----
-MIICVDCCAb2gAwIBAgIJANfHOBkZr8JOMA0GCSqGSIb3DQEBBQUAMF8xCzAJBgNV
-BAYTAlhZMRcwFQYDVQQHEw5DYXN0bGUgQW50aHJheDEjMCEGA1UEChMaUHl0aG9u
-IFNvZnR3YXJlIEZvdW5kYXRpb24xEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xMDEw
-MDgyMzAxNTZaFw0yMDEwMDUyMzAxNTZaMF8xCzAJBgNVBAYTAlhZMRcwFQYDVQQH
-Ew5DYXN0bGUgQW50aHJheDEjMCEGA1UEChMaUHl0aG9uIFNvZnR3YXJlIEZvdW5k
-YXRpb24xEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
-gYkCgYEA21vT5isq7F68amYuuNpSFlKDPrMUCa4YWYqZRt2OZ+/3NKaZ2xAiSwr7
-6MrQF70t5nLbSPpqE5+5VrS58SY+g/sXLiFd6AplH1wJZwh78DofbFYXUggktFMt
-pTyiX8jtP66bkcPkDADA089RI1TQR6Ca+n7HFa7c1fabVV6i3zkCAwEAAaMYMBYw
-FAYDVR0RBA0wC4IJbG9jYWxob3N0MA0GCSqGSIb3DQEBBQUAA4GBAHPctQBEQ4wd
-BJ6+JcpIraopLn8BGhbjNWj40mmRqWB/NAWF6M5ne7KpGAu7tLeG4hb1zLaldK8G
-lxy2GPSRF6LFS48dpEj2HbMv2nvv6xxalDMJ9+DicWgAKTQ6bcX2j3GUkCR0g/T1
-CRlNBAAlvhKzO7Clpf9l0YKBEfraJByX
+MIIDWTCCAkGgAwIBAgIJAPm6B21bar2bMA0GCSqGSIb3DQEBCwUAMF8xCzAJBgNV
+BAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9u
+IFNvZnR3YXJlIEZvdW5kYXRpb24xEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0xODAx
+MTkxOTA5MDZaFw0yODAxMTcxOTA5MDZaMF8xCzAJBgNVBAYTAlhZMRcwFQYDVQQH
+DA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5k
+YXRpb24xEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAKvvsX2gEti4shve3iYMc+jE4Se7WHs1Bol2f21H8qNboDOFdeb1
+RKHjmq3exHpajywOUEgne9nKHJY/3f2phR4Y5klqG6liLgiSpVyRlcBGbeT2qEAj
+9oLiLFUXLGfGDds2mTwivQDLJBWi51j7ff5k2Pr58fN5ugYMn24T9FNyn0moT+qj
+SFoBNm58l9jrdkJSlgWfqPlbiMa+mqDn/SFtrwLF2Trbfzu42Sd9UdIzMaSSrzbN
+sGm53pNhCh8KndWUQ8GPP2IsLPoUU4qAtmZuTxCx2S1cXrN9EkmT69tlOH84YfSn
+96Ih9bWRc7M5y5bfVdEVM+fKQl3hBRf05qMCAwEAAaMYMBYwFAYDVR0RBA0wC4IJ
+bG9jYWxob3N0MA0GCSqGSIb3DQEBCwUAA4IBAQAtQ8f37cCEk7/rAcbYR53ce3iK
+Vpihb0U2ni1QjG9Tg9UIExkIGkwTiCm7kwQL+GEStBu9AG/QVrOjeTriRiddhWkk
+ze8kRaI3AC/63t6Vh9Q1x6PESgeE4OtAO9JpJCf4GILglA789Y/b/GF8zJZQxR13
+qpB4ZwWw7gCBhdEW59u6CFeBmfDa58hM8lWvuVoRrTi7bjUeC6PAn5HVMzZSykhu
+4HaUfBp6bKFjuym2+h/VvM1n8C3chjVSmutsLb6ELdD8IK0vPV/yf5+LN256zSsS
+dyUZYd8XwQaioEMKdbhLvnehyzHiWfQIUR3BdhONxoIJhHv/EAo8eCkHHYIF
 -----END CERTIFICATE-----
diff --git a/Lib/test/keycert2.pem b/Lib/test/keycert2.pem
index c4a18bf..bb5fa65 100644
--- a/Lib/test/keycert2.pem
+++ b/Lib/test/keycert2.pem
@@ -1,31 +1,49 @@
 -----BEGIN PRIVATE KEY-----
-MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBANcLaMB7T/Wi9DBc
-PltGzgt8cxsv55m7PQPHMZvn6Ke8xmNqcmEzib8opRwKGrCV6TltKeFlNSg8dwQK
-Tl4ktyTkGCVweRQJ37AkBayvEBml5s+QD4vlhqkJPsL/Nsd+fnqngOGc5+59+C6r
-s3XpiLlF5ah/z8q92Mnw54nypw1JAgMBAAECgYBE3t2Mj7GbDLZB6rj5yKJioVfI
-BD6bSJEQ7bGgqdQkLFwpKMU7BiN+ekjuwvmrRkesYZ7BFgXBPiQrwhU5J28Tpj5B
-EOMYSIOHfzdalhxDGM1q2oK9LDFiCotTaSdEzMYadel5rmKXJ0zcK2Jho0PCuECf
-tf/ghRxK+h1Hm0tKgQJBAO6MdGDSmGKYX6/5kPDje7we/lSLorSDkYmV0tmVShsc
-JxgaGaapazceA/sHL3Myx7Eenkip+yPYDXEDFvAKNDECQQDmxsT9NOp6mo7ISvky
-GFr2vVHsJ745BMWoma4rFjPBVnS8RkgK+b2EpDCdZSrQ9zw2r8sKTgrEyrDiGTEg
-wJyZAkA8OOc0flYMJg2aHnYR6kwVjPmGHI5h5gk648EMPx0rROs1sXkiUwkHLCOz
-HvhCq+Iv+9vX2lnVjbiu/CmxRdIxAkA1YEfzoKeTD+hyXxTgB04Sv5sRGegfXAEz
-i8gC4zG5R/vcCA1lrHmvEiLEZL/QcT6WD3bQvVg0SAU9ZkI8pxARAkA7yqMSvP1l
-gJXy44R+rzpLYb1/PtiLkIkaKG3x9TUfPnfD2jY09fPkZlfsRU3/uS09IkhSwimV
-d5rWoljEfdou
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC3ulRNfhbOAey/
+B+wIVYx+d5az7EV4riR6yi/qE6G+bxbTvay2pqySHtDweuaYSh2cVmcasBKKIFJm
+rCD1zR8UmLb5i2XFIina1t3eePCuBZMrvZZwkzlQUSM1AZtjGOO/W0I3FwO6y645
+9xA5PduKI7SMYkH/VL3zE5W1JwMovv6bvNiT+GU5l6mB9ylCTgLpmUqoQhRqz/35
+zCzVyoh+ppDvVcpWYfvXywsXsgQwbAF0QJm8SSFi0TZm5ykv4WE16afQp08yuZS0
+3U4K3MJCa4rxO58edcxBopWYfQ29K3iINM8enRfr5q+u5mAAbALAEEvyFjgLWl/u
+7arxn7bJAgMBAAECggEBAJfMt8KfHzBunrDnVrk8FayYGkfmOzAOkc1yKEx6k/TH
+zFB+Mqlm5MaF95P5t3S0J+r36JBAUdEWC38RUNpF9BwMYYGlDxzlsTdCuGYL/q+J
+o6NMLXQt7/jQUQqGnWAvPFzqhbcGqOo5R2ZVH25sEWv9PDuRI35XAepIkDTwWsfa
+P6UcJJoP+4v9B++fb3sSL4zNwp1BqS4wxR8YTR0t1zQqOxJ5BGPw1J8aBMs1sq5t
+qyosAQAT63kLrdqWotHaM26QxjqEQUMlh12XMWb5GdBXUxbvyGtEabsqskGa/f8B
+RdHE437J8D8l+jxb2mZLzrlaH3dq2tbFGCe1rT8qLRECgYEA5CWIvoD/YnQydLGA
+OlEhCSocqURuqcotg9Ev0nt/C60jkr/NHFLGppz9lhqjIDjixt3sIMGZMFzxRtwM
+pSYal3XiR7rZuHau9iM35yDhpuytEiGbYy1ADakJRzY5jq/Qa8RfPP9Atua5xAeP
+q6DiSnq9vhHv9G+O4MxzHBmrw9sCgYEAziiJWFthcwvuXn3Jv9xFYKEb/06puZAx
+EgQCz/3rPzv5fmGD/sKVo1U/K4z/eA82DNeKG8QRTFJCxT8TCNRxOmGV7HdCYo/B
+4BTNNvbKcdi3l0j75kKoADg+nt5CD5lz6gLG0GrUEnVO1y5HVfCTb3BEAfa36C85
+9i0sfQGiwysCgYEAuus9k8cgdct5oz3iLuVVSark/JGCkT2B+OOkaLChsDFUWeEm
+7TOsaclpwldkmvvAYOplkZjMJ2GelE2pVo1XcAw3LkmaI5WpVyQXoxe/iQGT8qzy
+IFlsh0Scw2lb0tmcyw6CcPk4TiHOxRrkzNrtS9QwLM+JZx0XVHptPPKTVc0CgYAu
+j/VFYY5G/8Dc0qhIjyWUR48dQNUQtkJ/ASzpcT46z/7vznKTjbtiYpSb74KbyUO5
+7sygrM4DYOj3x+Eys1jHiNbly6HQxQtS4x/edCsRP5NntfI+9XsgYZOzKhvdjhki
+F3J0DEzNxnUCIM+311hVaRPTJbgv1srOkTFlIoNydQKBgQC6/OHGaC/OewQqRlRK
+Mg5KZm01/pk4iKrpA5nG7OTAeoa70NzXNtG8J3WnaJ4mWanNwNUOyRMAMrsUAy9q
+EeGqHM5mMFpY4TeVuNLL21lu/x3KYw6mKL3Ctinn+JLAoYoqEy8deZnEA5/tjYlz
+YhFBchnUicjoUN1chdpM6SpV2Q==
 -----END PRIVATE KEY-----
 -----BEGIN CERTIFICATE-----
-MIICXTCCAcagAwIBAgIJALVQzebTtrXFMA0GCSqGSIb3DQEBBQUAMGIxCzAJBgNV
+MIIDYjCCAkqgAwIBAgIJALJXRr8qF6oIMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNV
 BAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9u
 IFNvZnR3YXJlIEZvdW5kYXRpb24xFTATBgNVBAMMDGZha2Vob3N0bmFtZTAeFw0x
-NDExMjMxNzAwMDdaFw0yNDExMjAxNzAwMDdaMGIxCzAJBgNVBAYTAlhZMRcwFQYD
+ODAxMTkxOTA5MDZaFw0yODAxMTcxOTA5MDZaMGIxCzAJBgNVBAYTAlhZMRcwFQYD
 VQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZv
-dW5kYXRpb24xFTATBgNVBAMMDGZha2Vob3N0bmFtZTCBnzANBgkqhkiG9w0BAQEF
-AAOBjQAwgYkCgYEA1wtowHtP9aL0MFw+W0bOC3xzGy/nmbs9A8cxm+fop7zGY2py
-YTOJvyilHAoasJXpOW0p4WU1KDx3BApOXiS3JOQYJXB5FAnfsCQFrK8QGaXmz5AP
-i+WGqQk+wv82x35+eqeA4Zzn7n34LquzdemIuUXlqH/Pyr3YyfDnifKnDUkCAwEA
-AaMbMBkwFwYDVR0RBBAwDoIMZmFrZWhvc3RuYW1lMA0GCSqGSIb3DQEBBQUAA4GB
-AKuay3vDKfWzt5+ch/HHBsert84ISot4fUjzXDA/oOgTOEjVcSShHxqNShMOW1oA
-QYBpBB/5Kx5RkD/w6imhucxt2WQPRgjX4x4bwMipVH/HvFDp03mG51/Cpi1TyZ74
-El7qa/Pd4lHhOLzMKBA6503fpeYSFUIBxZbGLqylqRK7
+dW5kYXRpb24xFTATBgNVBAMMDGZha2Vob3N0bmFtZTCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBALe6VE1+Fs4B7L8H7AhVjH53lrPsRXiuJHrKL+oTob5v
+FtO9rLamrJIe0PB65phKHZxWZxqwEoogUmasIPXNHxSYtvmLZcUiKdrW3d548K4F
+kyu9lnCTOVBRIzUBm2MY479bQjcXA7rLrjn3EDk924ojtIxiQf9UvfMTlbUnAyi+
+/pu82JP4ZTmXqYH3KUJOAumZSqhCFGrP/fnMLNXKiH6mkO9VylZh+9fLCxeyBDBs
+AXRAmbxJIWLRNmbnKS/hYTXpp9CnTzK5lLTdTgrcwkJrivE7nx51zEGilZh9Db0r
+eIg0zx6dF+vmr67mYABsAsAQS/IWOAtaX+7tqvGftskCAwEAAaMbMBkwFwYDVR0R
+BBAwDoIMZmFrZWhvc3RuYW1lMA0GCSqGSIb3DQEBCwUAA4IBAQCZhHhGItpkqhEq
+ntMRd6Hv0GoOJixNvgeMwK4NJSRT/no3OirtUTzccn46h+SWibSa2eVssAV+pAVJ
+HbzkN/DH27A1mMx1zJL1ekcOKA1AF6MXhUnrUGXMqW36YNtzHfXJLrwvpLJ13OQg
+/Kxo4Nw68bGzM+PyRtKU/mpgYyfcvwR+ZSeIDh1fvUZK/IEVCf8ub42GPVs5wPfv
+M+k5aHxWTxeif3K1byTRzxHupYNG2yWO4XEdnBGOuOwzzN4/iQyNcsuQKeuKHGrt
+YvIlG/ri04CQ7xISZCj74yjTZ+/A2bXre2mQXAHqKPumHL7cl34+erzbUaxYxbTE
+u5FcOmLQ
 -----END CERTIFICATE-----
diff --git a/Lib/test/keycert3.pem b/Lib/test/keycert3.pem
index 5bfa62c..621eb08 100644
--- a/Lib/test/keycert3.pem
+++ b/Lib/test/keycert3.pem
@@ -1,73 +1,132 @@
 -----BEGIN PRIVATE KEY-----
-MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMLgD0kAKDb5cFyP
-jbwNfR5CtewdXC+kMXAWD8DLxiTTvhMW7qVnlwOm36mZlszHKvsRf05lT4pegiFM
-9z2j1OlaN+ci/X7NU22TNN6crYSiN77FjYJP464j876ndSxyD+rzys386T+1r1aZ
-aggEdkj1TsSsv1zWIYKlPIjlvhuxAgMBAAECgYA0aH+T2Vf3WOPv8KdkcJg6gCRe
-yJKXOWgWRcicx/CUzOEsTxmFIDPLxqAWA3k7v0B+3vjGw5Y9lycV/5XqXNoQI14j
-y09iNsumds13u5AKkGdTJnZhQ7UKdoVHfuP44ZdOv/rJ5/VD6F4zWywpe90pcbK+
-AWDVtusgGQBSieEl1QJBAOyVrUG5l2yoUBtd2zr/kiGm/DYyXlIthQO/A3/LngDW
-5/ydGxVsT7lAVOgCsoT+0L4efTh90PjzW8LPQrPBWVMCQQDS3h/FtYYd5lfz+FNL
-9CEe1F1w9l8P749uNUD0g317zv1tatIqVCsQWHfVHNdVvfQ+vSFw38OORO00Xqs9
-1GJrAkBkoXXEkxCZoy4PteheO/8IWWLGGr6L7di6MzFl1lIqwT6D8L9oaV2vynFT
-DnKop0pa09Unhjyw57KMNmSE2SUJAkEArloTEzpgRmCq4IK2/NpCeGdHS5uqRlbh
-1VIa/xGps7EWQl5Mn8swQDel/YP3WGHTjfx7pgSegQfkyaRtGpZ9OQJAa9Vumj8m
-JAAtI0Bnga8hgQx7BhTQY4CadDxyiRGOGYhwUzYVCqkb2sbVRH9HnwUaJT7cWBY3
-RnJdHOMXWem7/w==
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDgV4G+Zzf2DT5n
+oAisIGFhn/bz7Vn5WiXUqbDsxROJOh/7BtOlduZka0pPhFylGbnxS8l1kEWHRI2T
+6hOoWzumB6ItKiN+T5J30lAvSyo7iwdFoAQ/S5nPXQfhNARQe/NEOhRtpcuNdyx4
+BWdPdPuJQA1ASNJCLwcLOoRxaLbKLvb2V5T5FCAkeNPtRvPuT4gKQItMmiHfAhoV
+C8MZWF/GC0RukHINys5MwqeFexam8CznmQPMYrLdhmKTj3DTivCPoh97EDIFGlgZ
+SCaaYDVQA+aqlo/q2pi52PFwC1KzhNEA7EeOqSwC1NQjwjHuhcnf9WbxrgTq2zh3
+rv5YEW2ZAgMBAAECggEAPfSMtTumPcJskIumuXp7yk02EyliZrWZqwBuBwVqHsS5
+nkbFXnXWrLbgn9MrDsFrE5NdgKUmPnQVMVs8sIr5jyGejSCNCs4I4iRn1pfIgwcj
+K/xEEALd6GGF0pDd/CgvB5GOoLVf4KKf2kmLvWrOKJpSzoUN5A8+v8AaYYOMr4sC
+czbvfGomzEIewEG+Rw9zOVUDlmwyEKPQZ47E7PQ+EEA7oeFdR+1Zj6eT9ndegf8B
+54frySYCLRUCk/sHCpWhaJBtBrcpht7Y8CfY7hiH/7x866fvuLnYPz4YALtUb0wN
+7zUCNS9ol3n4LbjFFKfZtiRjKaCBRzMjK0rz6ydFcQKBgQDyLI3oGbnW73vqcDe/
+6eR0w++fiCAVhfMs3AO/gOaJi2la2JHlJ5u+cIHQIOFwEhn6Zq0AtdmnFx1TS5IQ
+C0MdXI0XoQQw7rEF8EJcvfe85Z0QxENVhzydtdb8QpJfnQGfBfLyQlaaRYzRRHB6
+VdYUHF3EIPVIhbjbghal+Qep/QKBgQDtJlRPHkWwTMevu0J0fYbWN1ywtVTFUR//
+k7VyORSf8yuuSnaQRop4cbcqONxmDKH6Or1fl3NYBsAxtXkkOK1E2OZNo2sfQdRa
+wpA7o7mPHRhztQFpT5vflp+8P6+PEFat8D04eBOhNwrwwfhiPjD4gv5KvN4XutRW
+VWv/2pnmzQKBgHPvHGg2mJ7quvm6ixXW1MWJX1eSBToIjCe3lBvDi5nhIaiZ8Q4w
+7gA3QA3xD7tlDwauzLeAVxgEmsdbcCs6GQEfY3QiYy1Bt4FOSZa4YrcNfSmfq1Rw
+j3Y4rRjKjeQz96i3YlzToT3tecJc7zPBj+DEy6au2H3Fdn+vQURneWHJAoGBANG7
+XES8mRVaUh/wlM1BVsaNH8SIGfiHzqzRjV7/bGYpQTBbWpAuUrhCmaMVtpXqBjav
+TFwGLVRkZAWSYRjPpy2ERenT5SE3rv61o6mbGrifGsj6A82HQmtzYsGx8SmtYXtj
+REF0sKebbmmOooUAS379GrguYJzL9o6D7YfRZNrhAoGAVfb/tiFU4S67DSpYpQey
+ULhgfsFpDByICY6Potsg67gVFf9jIaB83NPTx3u/r6sHFgxFw7lQsuZcgSuWMu7t
+glzOXVIP11Y5sl5CJ5OsfeK1/0umMZF5MWPyAQCx/qrPlZL86vXjt24Y/VaOxsAi
+CZYdyJsjgOrJrWoMbo5ta54=
 -----END PRIVATE KEY-----
 Certificate:
     Data:
-        Version: 1 (0x0)
-        Serial Number: 12723342612721443281 (0xb09264b1f2da21d1)
+        Version: 3 (0x2)
+        Serial Number:
+            82:ed:bf:41:c8:80:91:9c
     Signature Algorithm: sha1WithRSAEncryption
         Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server
         Validity
-            Not Before: Jan  4 19:47:07 2013 GMT
-            Not After : Nov 13 19:47:07 2022 GMT
+            Not Before: Jan 19 19:09:06 2018 GMT
+            Not After : Nov 28 19:09:06 2027 GMT
         Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=localhost
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-                Public-Key: (1024 bit)
+                Public-Key: (2048 bit)
                 Modulus:
-                    00:c2:e0:0f:49:00:28:36:f9:70:5c:8f:8d:bc:0d:
-                    7d:1e:42:b5:ec:1d:5c:2f:a4:31:70:16:0f:c0:cb:
-                    c6:24:d3:be:13:16:ee:a5:67:97:03:a6:df:a9:99:
-                    96:cc:c7:2a:fb:11:7f:4e:65:4f:8a:5e:82:21:4c:
-                    f7:3d:a3:d4:e9:5a:37:e7:22:fd:7e:cd:53:6d:93:
-                    34:de:9c:ad:84:a2:37:be:c5:8d:82:4f:e3:ae:23:
-                    f3:be:a7:75:2c:72:0f:ea:f3:ca:cd:fc:e9:3f:b5:
-                    af:56:99:6a:08:04:76:48:f5:4e:c4:ac:bf:5c:d6:
-                    21:82:a5:3c:88:e5:be:1b:b1
+                    00:e0:57:81:be:67:37:f6:0d:3e:67:a0:08:ac:20:
+                    61:61:9f:f6:f3:ed:59:f9:5a:25:d4:a9:b0:ec:c5:
+                    13:89:3a:1f:fb:06:d3:a5:76:e6:64:6b:4a:4f:84:
+                    5c:a5:19:b9:f1:4b:c9:75:90:45:87:44:8d:93:ea:
+                    13:a8:5b:3b:a6:07:a2:2d:2a:23:7e:4f:92:77:d2:
+                    50:2f:4b:2a:3b:8b:07:45:a0:04:3f:4b:99:cf:5d:
+                    07:e1:34:04:50:7b:f3:44:3a:14:6d:a5:cb:8d:77:
+                    2c:78:05:67:4f:74:fb:89:40:0d:40:48:d2:42:2f:
+                    07:0b:3a:84:71:68:b6:ca:2e:f6:f6:57:94:f9:14:
+                    20:24:78:d3:ed:46:f3:ee:4f:88:0a:40:8b:4c:9a:
+                    21:df:02:1a:15:0b:c3:19:58:5f:c6:0b:44:6e:90:
+                    72:0d:ca:ce:4c:c2:a7:85:7b:16:a6:f0:2c:e7:99:
+                    03:cc:62:b2:dd:86:62:93:8f:70:d3:8a:f0:8f:a2:
+                    1f:7b:10:32:05:1a:58:19:48:26:9a:60:35:50:03:
+                    e6:aa:96:8f:ea:da:98:b9:d8:f1:70:0b:52:b3:84:
+                    d1:00:ec:47:8e:a9:2c:02:d4:d4:23:c2:31:ee:85:
+                    c9:df:f5:66:f1:ae:04:ea:db:38:77:ae:fe:58:11:
+                    6d:99
                 Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Subject Alternative Name: 
+                DNS:localhost
+            X509v3 Key Usage: critical
+                Digital Signature, Key Encipherment
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+            X509v3 Basic Constraints: critical
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                85:11:BE:16:47:04:D1:30:EE:86:8A:18:70:BE:A8:28:6F:82:3D:CE
+            X509v3 Authority Key Identifier: 
+                keyid:9A:CF:CF:6E:EB:71:3D:DB:3C:F1:AE:88:6B:56:72:03:CB:08:A7:48
+                DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server
+                serial:82:ED:BF:41:C8:80:91:9B
+
+            Authority Information Access: 
+                CA Issuers - URI:http://testca.pythontest.net/testca/pycacert.cer
+                OCSP - URI:http://testca.pythontest.net/testca/ocsp/
+
+            X509v3 CRL Distribution Points: 
+
+                Full Name:
+                  URI:http://testca.pythontest.net/testca/revocation.crl
+
     Signature Algorithm: sha1WithRSAEncryption
-         2f:42:5f:a3:09:2c:fa:51:88:c7:37:7f:ea:0e:63:f0:a2:9a:
-         e5:5a:e2:c8:20:f0:3f:60:bc:c8:0f:b6:c6:76:ce:db:83:93:
-         f5:a3:33:67:01:8e:04:cd:00:9a:73:fd:f3:35:86:fa:d7:13:
-         e2:46:c6:9d:c0:29:53:d4:a9:90:b8:77:4b:e6:83:76:e4:92:
-         d6:9c:50:cf:43:d0:c6:01:77:61:9a:de:9b:70:f7:72:cd:59:
-         00:31:69:d9:b4:ca:06:9c:6d:c3:c7:80:8c:68:e6:b5:a2:f8:
-         ef:1d:bb:16:9f:77:77:ef:87:62:22:9b:4d:69:a4:3a:1a:f1:
-         21:5e:8c:32:ac:92:fd:15:6b:18:c2:7f:15:0d:98:30:ca:75:
-         8f:1a:71:df:da:1d:b2:ef:9a:e8:2d:2e:02:fd:4a:3c:aa:96:
-         0b:06:5d:35:b3:3d:24:87:4b:e0:b0:58:60:2f:45:ac:2e:48:
-         8a:b0:99:10:65:27:ff:cc:b1:d8:fd:bd:26:6b:b9:0c:05:2a:
-         f4:45:63:35:51:07:ed:83:85:fe:6f:69:cb:bb:40:a8:ae:b6:
-         3b:56:4a:2d:a4:ed:6d:11:2c:4d:ed:17:24:fd:47:bc:d3:41:
-         a2:d3:06:fe:0c:90:d8:d8:94:26:c4:ff:cc:a1:d8:42:77:eb:
-         fc:a9:94:71
+         7f:a1:7e:3e:68:01:b0:32:b8:57:b8:03:68:13:13:b3:e3:f4:
+         70:2f:15:e5:0f:87:b9:fd:e0:12:e3:16:f2:91:53:c7:4e:25:
+         af:ca:cb:a7:d9:9d:57:4d:bf:a2:80:d4:78:aa:04:31:fd:6d:
+         cc:6d:82:43:e9:62:16:0d:0e:26:8b:e7:f1:3d:57:5c:68:02:
+         9c:2b:b6:c9:fd:62:2f:10:85:88:cc:44:a5:e7:a2:3e:89:f2:
+         1f:02:6a:3f:d0:3c:6c:24:2d:bc:51:62:7a:ec:25:c5:86:87:
+         77:35:8f:f9:7e:d0:17:3d:77:56:bf:1a:0c:be:09:78:ee:ea:
+         73:97:65:60:94:91:35:b3:5c:46:8a:5e:6d:94:52:de:48:b7:
+         1f:6c:28:79:7f:ff:08:8d:e4:7d:d0:b9:0b:7c:ae:c4:1d:2a:
+         a1:b3:50:11:82:03:5e:6c:e7:26:fa:05:32:39:07:83:49:b9:
+         a2:fa:04:da:0d:e5:ff:4c:db:97:d0:c3:a7:43:37:4c:16:de:
+         3c:b5:e9:7e:82:d4:b3:10:df:d1:c1:66:72:9c:15:67:19:3b:
+         7b:91:0a:82:07:67:c5:06:03:5f:80:54:08:81:8a:b1:5c:7c:
+         4c:d2:07:38:92:eb:12:f5:71:ae:de:05:15:c8:e1:33:f0:e4:
+         96:0f:0f:1e
 -----BEGIN CERTIFICATE-----
-MIICpDCCAYwCCQCwkmSx8toh0TANBgkqhkiG9w0BAQUFADBNMQswCQYDVQQGEwJY
-WTEmMCQGA1UECgwdUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0ExFjAUBgNV
-BAMMDW91ci1jYS1zZXJ2ZXIwHhcNMTMwMTA0MTk0NzA3WhcNMjIxMTEzMTk0NzA3
-WjBfMQswCQYDVQQGEwJYWTEXMBUGA1UEBxMOQ2FzdGxlIEFudGhyYXgxIzAhBgNV
-BAoTGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uMRIwEAYDVQQDEwlsb2NhbGhv
-c3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMLgD0kAKDb5cFyPjbwNfR5C
-tewdXC+kMXAWD8DLxiTTvhMW7qVnlwOm36mZlszHKvsRf05lT4pegiFM9z2j1Ola
-N+ci/X7NU22TNN6crYSiN77FjYJP464j876ndSxyD+rzys386T+1r1aZaggEdkj1
-TsSsv1zWIYKlPIjlvhuxAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAC9CX6MJLPpR
-iMc3f+oOY/CimuVa4sgg8D9gvMgPtsZ2ztuDk/WjM2cBjgTNAJpz/fM1hvrXE+JG
-xp3AKVPUqZC4d0vmg3bkktacUM9D0MYBd2Ga3ptw93LNWQAxadm0ygacbcPHgIxo
-5rWi+O8duxafd3fvh2Iim01ppDoa8SFejDKskv0VaxjCfxUNmDDKdY8acd/aHbLv
-mugtLgL9SjyqlgsGXTWzPSSHS+CwWGAvRawuSIqwmRBlJ//Msdj9vSZruQwFKvRF
-YzVRB+2Dhf5vacu7QKiutjtWSi2k7W0RLE3tFyT9R7zTQaLTBv4MkNjYlCbE/8yh
-2EJ36/yplHE=
+MIIE8TCCA9mgAwIBAgIJAILtv0HIgJGcMA0GCSqGSIb3DQEBBQUAME0xCzAJBgNV
+BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW
+MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODAxMTkxOTA5MDZaFw0yNzExMjgx
+OTA5MDZaMF8xCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj
+MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xEjAQBgNVBAMMCWxv
+Y2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOBXgb5nN/YN
+PmegCKwgYWGf9vPtWflaJdSpsOzFE4k6H/sG06V25mRrSk+EXKUZufFLyXWQRYdE
+jZPqE6hbO6YHoi0qI35PknfSUC9LKjuLB0WgBD9Lmc9dB+E0BFB780Q6FG2ly413
+LHgFZ090+4lADUBI0kIvBws6hHFotsou9vZXlPkUICR40+1G8+5PiApAi0yaId8C
+GhULwxlYX8YLRG6Qcg3KzkzCp4V7FqbwLOeZA8xist2GYpOPcNOK8I+iH3sQMgUa
+WBlIJppgNVAD5qqWj+ramLnY8XALUrOE0QDsR46pLALU1CPCMe6Fyd/1ZvGuBOrb
+OHeu/lgRbZkCAwEAAaOCAcAwggG8MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDAOBgNV
+HQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1Ud
+EwEB/wQCMAAwHQYDVR0OBBYEFIURvhZHBNEw7oaKGHC+qChvgj3OMH0GA1UdIwR2
+MHSAFJrPz27rcT3bPPGuiGtWcgPLCKdIoVGkTzBNMQswCQYDVQQGEwJYWTEmMCQG
+A1UECgwdUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0ExFjAUBgNVBAMMDW91
+ci1jYS1zZXJ2ZXKCCQCC7b9ByICRmzCBgwYIKwYBBQUHAQEEdzB1MDwGCCsGAQUF
+BzAChjBodHRwOi8vdGVzdGNhLnB5dGhvbnRlc3QubmV0L3Rlc3RjYS9weWNhY2Vy
+dC5jZXIwNQYIKwYBBQUHMAGGKWh0dHA6Ly90ZXN0Y2EucHl0aG9udGVzdC5uZXQv
+dGVzdGNhL29jc3AvMEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly90ZXN0Y2EucHl0
+aG9udGVzdC5uZXQvdGVzdGNhL3Jldm9jYXRpb24uY3JsMA0GCSqGSIb3DQEBBQUA
+A4IBAQB/oX4+aAGwMrhXuANoExOz4/RwLxXlD4e5/eAS4xbykVPHTiWvysun2Z1X
+Tb+igNR4qgQx/W3MbYJD6WIWDQ4mi+fxPVdcaAKcK7bJ/WIvEIWIzESl56I+ifIf
+Amo/0DxsJC28UWJ67CXFhod3NY/5ftAXPXdWvxoMvgl47upzl2VglJE1s1xGil5t
+lFLeSLcfbCh5f/8IjeR90LkLfK7EHSqhs1ARggNebOcm+gUyOQeDSbmi+gTaDeX/
+TNuX0MOnQzdMFt48tel+gtSzEN/RwWZynBVnGTt7kQqCB2fFBgNfgFQIgYqxXHxM
+0gc4kusS9XGu3gUVyOEz8OSWDw8e
 -----END CERTIFICATE-----
diff --git a/Lib/test/keycert4.pem b/Lib/test/keycert4.pem
index 53355c8..b7df7f3 100644
--- a/Lib/test/keycert4.pem
+++ b/Lib/test/keycert4.pem
@@ -1,73 +1,132 @@
 -----BEGIN PRIVATE KEY-----
-MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAK5UQiMI5VkNs2Qv
-L7gUaiDdFevNUXRjU4DHAe3ZzzYLZNE69h9gO9VCSS16tJ5fT5VEu0EZyGr0e3V2
-NkX0ZoU0Hc/UaY4qx7LHmn5SYZpIxhJnkf7SyHJK1zUaGlU0/LxYqIuGCtF5dqx1
-L2OQhEx1GM6RydHdgX69G64LXcY5AgMBAAECgYAhsRMfJkb9ERLMl/oG/5sLQu9L
-pWDKt6+ZwdxzlZbggQ85CMYshjLKIod2DLL/sLf2x1PRXyRG131M1E3k8zkkz6de
-R1uDrIN/x91iuYzfLQZGh8bMY7Yjd2eoroa6R/7DjpElGejLxOAaDWO0ST2IFQy9
-myTGS2jSM97wcXfsSQJBANP3jelJoS5X6BRjTSneY21wcocxVuQh8pXpErALVNsT
-drrFTeaBuZp7KvbtnIM5g2WRNvaxLZlAY/hXPJvi6ncCQQDSix1cebml6EmPlEZS
-Mm8gwI2F9ufUunwJmBJcz826Do0ZNGByWDAM/JQZH4FX4GfAFNuj8PUb+GQfadkx
-i1DPAkEA0lVsNHojvuDsIo8HGuzarNZQT2beWjJ1jdxh9t7HrTx7LIps6rb/fhOK
-Zs0R6gVAJaEbcWAPZ2tFyECInAdnsQJAUjaeXXjuxFkjOFym5PvqpvhpivEx78Bu
-JPTr3rAKXmfGMxxfuOa0xK1wSyshP6ZR/RBn/+lcXPKubhHQDOegwwJAJF1DBQnN
-+/tLmOPULtDwfP4Zixn+/8GmGOahFoRcu6VIGHmRilJTn6MOButw7Glv2YdeC6l/
-e83Gq6ffLVfKNQ==
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDH/76hZAZH4cSV
+CmVZa5HEqKCjCKrcPwBECs9BS+3ibwN4x9NnFNP+tCeFGgJXl7WGFoeXgg3oK+1p
+FsOWpsRHuF3BdqkCnShSydmT8bLaGHwKeL0cPxJP5T/uW7ezPKW2VWXGMwmwRaRJ
+9dj2VCUu20vDZWSGFr9zjnjoJczBtH3RsVUgpK7euEHuQ5pIM9QSOaCo+5FPR7s7
+1nU7YqbFWtd+NhC8Og1G497B31DQlHciF6BRm6/cNGAmHaAErKUGBFdkGtFPHBn4
+vktoEg9fwxJAZLvGpoTZWrB4HRsRwVTmFdGvK+JXK225xF23AXRXp/snhSuSFeLj
+E5cpyJJ7AgMBAAECggEAQOv527X2e/sDr0XSpHZQuT/r9UBpBlnFIlFH+fBF5k0X
+GWv0ae/O6U1dzs0kmX57xG0n0ry6+vTXeleTYiH8cTOd66EzN9AAOO+hG29IGZf9
+HAEZkkO/FARc/mjzdtFnEYsjIHWM3ZWdwQx3Q28JKu6w51rQiN51g3NqOCGdF/uF
+rE5XPKsKndn+nLHvsNuApFgUYZEwdrozgUueEgRaPTUCNhzotcA9eWoBdA24XNhk
+x8Cm/bZWabXm7gBO75zl3Cu2F21ay+EuwyOZTsx6lZi6YX9/zo1mkO81Zi3tQk50
+NMEI0feLNwsdxTbmOcVJadjOgd+QVghlFyr5HGBWMQKBgQD3AH3rhnAo6tOyNkGN
++IzIU1MhUS452O7IavykUYO9sM24BVChpRtlI9Dpev4yE/q3BAO3+oWT3cJrN7/3
+iyo1dzAkpGvI65XWfElXFM4nLjEiZzx4W9fiPN91Oucpr0ED6+BZXTtz4gVm0TP/
+TUc2xvTB6EKvIyWmKOYEi0snxQKBgQDPSOjbz9jWOrC9XY7PmtLB6QJDDz7XSGVK
+wzD+gDAPpAwhk58BEokdOhBx2Lwl8zMJi0CRHgH2vNvkRyhvUQ4UFzisrqann/Tw
+klp5sw3iWC6ERC8z9zL7GfHs7sK3mOVeAdK6ffowPM3JrZ2vPusVBdr0MN3oZwki
+CtNXqbY1PwKBgGheQNbAW6wubX0kB9chavtKmhm937Z5v4vYCSC1gOEqUAKt3EAx
+L74wwBmn6rjmUE382EVpCgBM99WuHONQXmlxD1qsTw763LlgkuzE0cckcYaD8L06
+saHa7uDuHrcyYlpx1L5t8q0ol/e19i6uTKUMtGcq6OJwC3yGU4sgAIWxAoGBAMVq
+qiQXm2vFL+jafxYoXUvDMJ1PmskMsTP4HOR2j8+FrOwZnVk3HxGP6HOVOPRn4JbZ
+YiAT1Uj6a+7I+rCyINdvmlGUcTK6fFzW9oZryvBkjcD483/pkktmVWwTpa2YV/Ml
+h16IdsyUTGYlDUYHhXtbPUJOfDpIT4F1j/0wrFGfAoGAO82BcUsehEUQE0xvQLIn
+7QaFtUI5z19WW730jVuEobiYlh9Ka4DPbKMvka8MwyOxEwhk39gZQavmfG6+wZm+
+kjERU23LhHziJGWS2Um4yIhC7myKbWaLzjHEq72dszLpQku4BzE5fT60fxI7cURD
+WGm/Z3Q2weS3ZGIoMj1RNPI=
 -----END PRIVATE KEY-----
 Certificate:
     Data:
-        Version: 1 (0x0)
-        Serial Number: 12723342612721443282 (0xb09264b1f2da21d2)
+        Version: 3 (0x2)
+        Serial Number:
+            82:ed:bf:41:c8:80:91:9d
     Signature Algorithm: sha1WithRSAEncryption
         Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server
         Validity
-            Not Before: Jan  4 19:47:07 2013 GMT
-            Not After : Nov 13 19:47:07 2022 GMT
+            Not Before: Jan 19 19:09:06 2018 GMT
+            Not After : Nov 28 19:09:06 2027 GMT
         Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=fakehostname
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-                Public-Key: (1024 bit)
+                Public-Key: (2048 bit)
                 Modulus:
-                    00:ae:54:42:23:08:e5:59:0d:b3:64:2f:2f:b8:14:
-                    6a:20:dd:15:eb:cd:51:74:63:53:80:c7:01:ed:d9:
-                    cf:36:0b:64:d1:3a:f6:1f:60:3b:d5:42:49:2d:7a:
-                    b4:9e:5f:4f:95:44:bb:41:19:c8:6a:f4:7b:75:76:
-                    36:45:f4:66:85:34:1d:cf:d4:69:8e:2a:c7:b2:c7:
-                    9a:7e:52:61:9a:48:c6:12:67:91:fe:d2:c8:72:4a:
-                    d7:35:1a:1a:55:34:fc:bc:58:a8:8b:86:0a:d1:79:
-                    76:ac:75:2f:63:90:84:4c:75:18:ce:91:c9:d1:dd:
-                    81:7e:bd:1b:ae:0b:5d:c6:39
+                    00:c7:ff:be:a1:64:06:47:e1:c4:95:0a:65:59:6b:
+                    91:c4:a8:a0:a3:08:aa:dc:3f:00:44:0a:cf:41:4b:
+                    ed:e2:6f:03:78:c7:d3:67:14:d3:fe:b4:27:85:1a:
+                    02:57:97:b5:86:16:87:97:82:0d:e8:2b:ed:69:16:
+                    c3:96:a6:c4:47:b8:5d:c1:76:a9:02:9d:28:52:c9:
+                    d9:93:f1:b2:da:18:7c:0a:78:bd:1c:3f:12:4f:e5:
+                    3f:ee:5b:b7:b3:3c:a5:b6:55:65:c6:33:09:b0:45:
+                    a4:49:f5:d8:f6:54:25:2e:db:4b:c3:65:64:86:16:
+                    bf:73:8e:78:e8:25:cc:c1:b4:7d:d1:b1:55:20:a4:
+                    ae:de:b8:41:ee:43:9a:48:33:d4:12:39:a0:a8:fb:
+                    91:4f:47:bb:3b:d6:75:3b:62:a6:c5:5a:d7:7e:36:
+                    10:bc:3a:0d:46:e3:de:c1:df:50:d0:94:77:22:17:
+                    a0:51:9b:af:dc:34:60:26:1d:a0:04:ac:a5:06:04:
+                    57:64:1a:d1:4f:1c:19:f8:be:4b:68:12:0f:5f:c3:
+                    12:40:64:bb:c6:a6:84:d9:5a:b0:78:1d:1b:11:c1:
+                    54:e6:15:d1:af:2b:e2:57:2b:6d:b9:c4:5d:b7:01:
+                    74:57:a7:fb:27:85:2b:92:15:e2:e3:13:97:29:c8:
+                    92:7b
                 Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Subject Alternative Name: 
+                DNS:fakehostname
+            X509v3 Key Usage: critical
+                Digital Signature, Key Encipherment
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+            X509v3 Basic Constraints: critical
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                F8:76:79:CB:11:85:F0:46:E5:95:E6:7E:69:CB:12:5E:4E:AA:EC:4D
+            X509v3 Authority Key Identifier: 
+                keyid:9A:CF:CF:6E:EB:71:3D:DB:3C:F1:AE:88:6B:56:72:03:CB:08:A7:48
+                DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server
+                serial:82:ED:BF:41:C8:80:91:9B
+
+            Authority Information Access: 
+                CA Issuers - URI:http://testca.pythontest.net/testca/pycacert.cer
+                OCSP - URI:http://testca.pythontest.net/testca/ocsp/
+
+            X509v3 CRL Distribution Points: 
+
+                Full Name:
+                  URI:http://testca.pythontest.net/testca/revocation.crl
+
     Signature Algorithm: sha1WithRSAEncryption
-         ad:45:8a:8e:ef:c6:ef:04:41:5c:2c:4a:84:dc:02:76:0c:d0:
-         66:0f:f0:16:04:58:4d:fd:68:b7:b8:d3:a8:41:a5:5c:3c:6f:
-         65:3c:d1:f8:ce:43:35:e7:41:5f:53:3d:c9:2c:c3:7d:fc:56:
-         4a:fa:47:77:38:9d:bb:97:28:0a:3b:91:19:7f:bc:74:ae:15:
-         6b:bd:20:36:67:45:a5:1e:79:d7:75:e6:89:5c:6d:54:84:d1:
-         95:d7:a7:b4:33:3c:af:37:c4:79:8f:5e:75:dc:75:c2:18:fb:
-         61:6f:2d:dc:38:65:5b:ba:67:28:d0:88:d7:8d:b9:23:5a:8e:
-         e8:c6:bb:db:ce:d5:b8:41:2a:ce:93:08:b6:95:ad:34:20:18:
-         d5:3b:37:52:74:50:0b:07:2c:b0:6d:a4:4c:7b:f4:e0:fd:d1:
-         af:17:aa:20:cd:62:e3:f0:9d:37:69:db:41:bd:d4:1c:fb:53:
-         20:da:88:9d:76:26:67:ce:01:90:a7:80:1d:a9:5b:39:73:68:
-         54:0a:d1:2a:03:1b:8f:3c:43:5d:5d:c4:51:f1:a7:e7:11:da:
-         31:2c:49:06:af:04:f4:b8:3c:99:c4:20:b9:06:36:a2:00:92:
-         61:1d:0c:6d:24:05:e2:82:e1:47:db:a0:5f:ba:b9:fb:ba:fa:
-         49:12:1e:ce
+         6d:50:8d:fb:ee:4e:93:8b:eb:47:56:ba:38:cc:80:e1:9d:c7:
+         e1:9e:1f:9c:22:0c:d2:08:9b:ed:bf:31:d9:00:ee:af:8c:56:
+         78:92:d1:7c:ba:4e:81:7f:82:1f:f4:68:99:86:91:c6:cb:57:
+         d3:b9:41:12:fa:75:53:fd:22:32:21:50:af:6b:4c:b1:34:36:
+         d1:a8:25:0a:d0:f0:f8:81:7d:69:58:6e:af:e3:d2:c4:32:87:
+         79:d7:cd:ad:0c:56:f3:15:27:10:0c:f9:57:59:53:00:ed:af:
+         5d:4d:07:86:7a:e5:f3:97:88:bc:86:b4:f1:17:46:33:55:28:
+         66:7b:70:d3:a5:12:b9:4f:c7:ed:e6:13:20:2d:f0:9e:ec:17:
+         64:cf:fd:13:14:1b:76:ba:64:ac:c5:51:b6:cd:13:0a:93:b1:
+         fd:43:09:a0:0b:44:6c:77:45:43:0b:e5:ed:70:b2:76:dc:08:
+         4a:5b:73:5f:c1:fc:7f:63:70:f8:b9:ca:3c:98:06:5f:fd:98:
+         d1:e4:e6:61:5f:09:8f:6c:18:86:98:9c:cb:3f:73:7b:3f:38:
+         f5:a7:09:20:ee:a5:63:1c:ff:8b:a6:d1:8c:e8:f4:84:3d:99:
+         38:0f:cc:e0:52:03:f9:18:05:23:76:39:de:52:ce:8e:fb:a6:
+         6e:f5:4f:c3
 -----BEGIN CERTIFICATE-----
-MIICpzCCAY8CCQCwkmSx8toh0jANBgkqhkiG9w0BAQUFADBNMQswCQYDVQQGEwJY
+MIIE9zCCA9+gAwIBAgIJAILtv0HIgJGdMA0GCSqGSIb3DQEBBQUAME0xCzAJBgNV
+BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW
+MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODAxMTkxOTA5MDZaFw0yNzExMjgx
+OTA5MDZaMGIxCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj
+MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xFTATBgNVBAMMDGZh
+a2Vob3N0bmFtZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMf/vqFk
+BkfhxJUKZVlrkcSooKMIqtw/AEQKz0FL7eJvA3jH02cU0/60J4UaAleXtYYWh5eC
+Degr7WkWw5amxEe4XcF2qQKdKFLJ2ZPxstoYfAp4vRw/Ek/lP+5bt7M8pbZVZcYz
+CbBFpEn12PZUJS7bS8NlZIYWv3OOeOglzMG0fdGxVSCkrt64Qe5Dmkgz1BI5oKj7
+kU9HuzvWdTtipsVa1342ELw6DUbj3sHfUNCUdyIXoFGbr9w0YCYdoASspQYEV2Qa
+0U8cGfi+S2gSD1/DEkBku8amhNlasHgdGxHBVOYV0a8r4lcrbbnEXbcBdFen+yeF
+K5IV4uMTlynIknsCAwEAAaOCAcMwggG/MBcGA1UdEQQQMA6CDGZha2Vob3N0bmFt
+ZTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC
+MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFPh2ecsRhfBG5ZXmfmnLEl5OquxNMH0G
+A1UdIwR2MHSAFJrPz27rcT3bPPGuiGtWcgPLCKdIoVGkTzBNMQswCQYDVQQGEwJY
 WTEmMCQGA1UECgwdUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0ExFjAUBgNV
-BAMMDW91ci1jYS1zZXJ2ZXIwHhcNMTMwMTA0MTk0NzA3WhcNMjIxMTEzMTk0NzA3
-WjBiMQswCQYDVQQGEwJYWTEXMBUGA1UEBxMOQ2FzdGxlIEFudGhyYXgxIzAhBgNV
-BAoTGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uMRUwEwYDVQQDEwxmYWtlaG9z
-dG5hbWUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK5UQiMI5VkNs2QvL7gU
-aiDdFevNUXRjU4DHAe3ZzzYLZNE69h9gO9VCSS16tJ5fT5VEu0EZyGr0e3V2NkX0
-ZoU0Hc/UaY4qx7LHmn5SYZpIxhJnkf7SyHJK1zUaGlU0/LxYqIuGCtF5dqx1L2OQ
-hEx1GM6RydHdgX69G64LXcY5AgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAK1Fio7v
-xu8EQVwsSoTcAnYM0GYP8BYEWE39aLe406hBpVw8b2U80fjOQzXnQV9TPcksw338
-Vkr6R3c4nbuXKAo7kRl/vHSuFWu9IDZnRaUeedd15olcbVSE0ZXXp7QzPK83xHmP
-XnXcdcIY+2FvLdw4ZVu6ZyjQiNeNuSNajujGu9vO1bhBKs6TCLaVrTQgGNU7N1J0
-UAsHLLBtpEx79OD90a8XqiDNYuPwnTdp20G91Bz7UyDaiJ12JmfOAZCngB2pWzlz
-aFQK0SoDG488Q11dxFHxp+cR2jEsSQavBPS4PJnEILkGNqIAkmEdDG0kBeKC4Ufb
-oF+6ufu6+kkSHs4=
+BAMMDW91ci1jYS1zZXJ2ZXKCCQCC7b9ByICRmzCBgwYIKwYBBQUHAQEEdzB1MDwG
+CCsGAQUFBzAChjBodHRwOi8vdGVzdGNhLnB5dGhvbnRlc3QubmV0L3Rlc3RjYS9w
+eWNhY2VydC5jZXIwNQYIKwYBBQUHMAGGKWh0dHA6Ly90ZXN0Y2EucHl0aG9udGVz
+dC5uZXQvdGVzdGNhL29jc3AvMEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly90ZXN0
+Y2EucHl0aG9udGVzdC5uZXQvdGVzdGNhL3Jldm9jYXRpb24uY3JsMA0GCSqGSIb3
+DQEBBQUAA4IBAQBtUI377k6Ti+tHVro4zIDhncfhnh+cIgzSCJvtvzHZAO6vjFZ4
+ktF8uk6Bf4If9GiZhpHGy1fTuUES+nVT/SIyIVCva0yxNDbRqCUK0PD4gX1pWG6v
+49LEMod5182tDFbzFScQDPlXWVMA7a9dTQeGeuXzl4i8hrTxF0YzVShme3DTpRK5
+T8ft5hMgLfCe7Bdkz/0TFBt2umSsxVG2zRMKk7H9QwmgC0Rsd0VDC+XtcLJ23AhK
+W3Nfwfx/Y3D4uco8mAZf/ZjR5OZhXwmPbBiGmJzLP3N7Pzj1pwkg7qVjHP+LptGM
+6PSEPZk4D8zgUgP5GAUjdjneUs6O+6Zu9U/D
 -----END CERTIFICATE-----
diff --git a/Lib/test/list_tests.py b/Lib/test/list_tests.py
index ed606db..54cfb97 100644
--- a/Lib/test/list_tests.py
+++ b/Lib/test/list_tests.py
@@ -45,10 +45,11 @@
         self.assertEqual(str(a2), "[0, 1, 2, [...], 3]")
         self.assertEqual(repr(a2), "[0, 1, 2, [...], 3]")
 
-        l0 = []
-        for i in xrange(sys.getrecursionlimit() + 100):
-            l0 = [l0]
-        self.assertRaises(RuntimeError, repr, l0)
+    def test_repr_deep(self):
+        a = self.type2test([])
+        for i in range(sys.getrecursionlimit() + 100):
+            a = self.type2test([a])
+        self.assertRaises(RuntimeError, repr, a)
 
     def test_print(self):
         d = self.type2test(xrange(200))
diff --git a/Lib/test/lock_tests.py b/Lib/test/lock_tests.py
index efc464f..836f3e9 100644
--- a/Lib/test/lock_tests.py
+++ b/Lib/test/lock_tests.py
@@ -347,22 +347,40 @@
         self.assertRaises(RuntimeError, cond.notify)
 
     def _check_notify(self, cond):
+        # Note that this test is sensitive to timing.  If the worker threads
+        # don't execute in a timely fashion, the main thread may think they
+        # are further along then they are.  The main thread therefore issues
+        # _wait() statements to try to make sure that it doesn't race ahead
+        # of the workers.
+        # Secondly, this test assumes that condition variables are not subject
+        # to spurious wakeups.  The absence of spurious wakeups is an implementation
+        # detail of Condition Cariables in current CPython, but in general, not
+        # a guaranteed property of condition variables as a programming
+        # construct.  In particular, it is possible that this can no longer
+        # be conveniently guaranteed should their implementation ever change.
         N = 5
+        ready = []
         results1 = []
         results2 = []
         phase_num = 0
         def f():
             cond.acquire()
+            ready.append(phase_num)
             cond.wait()
             cond.release()
             results1.append(phase_num)
             cond.acquire()
+            ready.append(phase_num)
             cond.wait()
             cond.release()
             results2.append(phase_num)
         b = Bunch(f, N)
         b.wait_for_started()
-        _wait()
+        # first wait, to ensure all workers settle into cond.wait() before
+        # we continue. See issues #8799 and #30727.
+        while len(ready) < 5:
+            _wait()
+        ready = []
         self.assertEqual(results1, [])
         # Notify 3 threads at first
         cond.acquire()
@@ -374,6 +392,9 @@
             _wait()
         self.assertEqual(results1, [1] * 3)
         self.assertEqual(results2, [])
+        # make sure all awaken workers settle into cond.wait()
+        while len(ready) < 3:
+            _wait()
         # Notify 5 threads: they might be in their first or second wait
         cond.acquire()
         cond.notify(5)
@@ -384,6 +405,9 @@
             _wait()
         self.assertEqual(results1, [1] * 3 + [2] * 2)
         self.assertEqual(results2, [2] * 3)
+        # make sure all workers settle into cond.wait()
+        while len(ready) < 5:
+            _wait()
         # Notify all threads: they are all in their second wait
         cond.acquire()
         cond.notify_all()
diff --git a/Lib/test/mapping_tests.py b/Lib/test/mapping_tests.py
index f43750b..248dee2 100644
--- a/Lib/test/mapping_tests.py
+++ b/Lib/test/mapping_tests.py
@@ -2,6 +2,7 @@
 import unittest
 import UserDict
 import test_support
+import sys
 
 
 class BasicTestMappingProtocol(unittest.TestCase):
@@ -645,6 +646,14 @@
         d = self._full_mapping({1: BadRepr()})
         self.assertRaises(Exc, repr, d)
 
+    def test_repr_deep(self):
+        d = self._empty_mapping()
+        for i in range(sys.getrecursionlimit() + 100):
+            d0 = d
+            d = self._empty_mapping()
+            d[1] = d0
+        self.assertRaises(RuntimeError, repr, d)
+
     def test_le(self):
         self.assertTrue(not (self._empty_mapping() < self._empty_mapping()))
         self.assertTrue(not (self._full_mapping({1: 2}) < self._full_mapping({1L: 2L})))
diff --git a/Lib/test/test_multibytecodec_support.py b/Lib/test/multibytecodec_support.py
similarity index 99%
rename from Lib/test/test_multibytecodec_support.py
rename to Lib/test/multibytecodec_support.py
index 1631e46..5b2329b 100644
--- a/Lib/test/test_multibytecodec_support.py
+++ b/Lib/test/multibytecodec_support.py
@@ -1,4 +1,4 @@
-# test_multibytecodec_support.py
+# multibytecodec_support.py
 #   Common Unittest Routines for CJK codecs
 #
 
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index 022789d..0256bca 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -147,6 +147,17 @@
 class H(object):
     pass
 
+class MyErr(Exception):
+    def __init__(self):
+        pass
+
+class I:
+    def __init__(self, *args, **kwargs):
+        raise MyErr()
+
+    def __getinitargs__(self):
+        return ()
+
 # Hashable mutable key
 class K(object):
     def __init__(self, value):
@@ -156,7 +167,7 @@
         # Shouldn't support the recursion itself
         return K, (self.value,)
 
-import __main__
+__main__ = sys.modules['__main__']
 __main__.C = C
 C.__module__ = "__main__"
 __main__.D = D
@@ -165,6 +176,8 @@
 E.__module__ = "__main__"
 __main__.H = H
 H.__module__ = "__main__"
+__main__.I = I
+I.__module__ = "__main__"
 __main__.K = K
 K.__module__ = "__main__"
 
@@ -623,6 +636,36 @@
                        'q\x00oq\x01}q\x02b.').replace('X', xname)
             self.assert_is_copy(X(*args), self.loads(pickle2))
 
+    def test_load_classic_instance_error(self):
+        # Issue #28925.
+        # Protocol 0 (text mode pickle):
+        """
+         0: (    MARK
+         1: i        INST       '__main__ I' (MARK at 0)
+        13: (    MARK
+        14: d        DICT       (MARK at 13)
+        15: b    BUILD
+        16: .    STOP
+        """
+        pickle0 = ('(i__main__\n'
+                   'I\n'
+                   '(db.')
+        self.assertRaises(MyErr, self.loads, pickle0)
+
+        # Protocol 1 (binary mode pickle)
+        """
+         0: (    MARK
+         1: c        GLOBAL     '__main__ I'
+        13: o        OBJ        (MARK at 0)
+        14: }    EMPTY_DICT
+        15: b    BUILD
+        16: .    STOP
+        """
+        pickle1 = ('(c__main__\n'
+                   'I\n'
+                   'o}b.')
+        self.assertRaises(MyErr, self.loads, pickle1)
+
     def test_load_str(self):
         # From Python 2: pickle.dumps('a\x00\xa0', protocol=0)
         self.assertEqual(self.loads("S'a\\x00\\xa0'\n."), 'a\x00\xa0')
diff --git a/Lib/test/pycacert.pem b/Lib/test/pycacert.pem
index 09b1f3e..850fa32 100644
--- a/Lib/test/pycacert.pem
+++ b/Lib/test/pycacert.pem
@@ -1,78 +1,79 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number: 12723342612721443280 (0xb09264b1f2da21d0)
+        Serial Number:
+            82:ed:bf:41:c8:80:91:9b
     Signature Algorithm: sha1WithRSAEncryption
         Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server
         Validity
-            Not Before: Jan  4 19:47:07 2013 GMT
-            Not After : Jan  2 19:47:07 2023 GMT
+            Not Before: Jan 19 19:09:06 2018 GMT
+            Not After : Jan 17 19:09:06 2028 GMT
         Subject: C=XY, O=Python Software Foundation CA, CN=our-ca-server
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e7:de:e9:e3:0c:9f:00:b6:a1:fd:2b:5b:96:d2:
-                    6f:cc:e0:be:86:b9:20:5e:ec:03:7a:55:ab:ea:a4:
-                    e9:f9:49:85:d2:66:d5:ed:c7:7a:ea:56:8e:2d:8f:
-                    e7:42:e2:62:28:a9:9f:d6:1b:8e:eb:b5:b4:9c:9f:
-                    14:ab:df:e6:94:8b:76:1d:3e:6d:24:61:ed:0c:bf:
-                    00:8a:61:0c:df:5c:c8:36:73:16:00:cd:47:ba:6d:
-                    a4:a4:74:88:83:23:0a:19:fc:09:a7:3c:4a:4b:d3:
-                    e7:1d:2d:e4:ea:4c:54:21:f3:26:db:89:37:18:d4:
-                    02:bb:40:32:5f:a4:ff:2d:1c:f7:d4:bb:ec:8e:cf:
-                    5c:82:ac:e6:7c:08:6c:48:85:61:07:7f:25:e0:5c:
-                    e0:bc:34:5f:e0:b9:04:47:75:c8:47:0b:8d:bc:d6:
-                    c8:68:5f:33:83:62:d2:20:44:35:b1:ad:81:1a:8a:
-                    cd:bc:35:b0:5c:8b:47:d6:18:e9:9c:18:97:cc:01:
-                    3c:29:cc:e8:1e:e4:e4:c1:b8:de:e7:c2:11:18:87:
-                    5a:93:34:d8:a6:25:f7:14:71:eb:e4:21:a2:d2:0f:
-                    2e:2e:d4:62:00:35:d3:d6:ef:5c:60:4b:4c:a9:14:
-                    e2:dd:15:58:46:37:33:26:b7:e7:2e:5d:ed:42:e4:
-                    c5:4d
+                    00:c3:18:69:6b:c9:47:29:98:8e:b1:56:c2:2e:fa:
+                    0e:5e:bc:23:80:b3:07:62:24:d2:42:5b:f1:4a:bf:
+                    a9:c8:21:75:c8:e3:e6:2c:1f:87:3c:6e:7c:1b:ed:
+                    39:32:95:b7:40:b2:60:48:c3:9a:16:08:fe:6d:67:
+                    88:34:3b:77:77:70:1c:70:5a:d1:1f:5f:04:21:54:
+                    b9:0c:e3:41:85:1d:58:ee:2f:ed:f3:0e:ef:d8:23:
+                    a1:fa:73:fb:4c:28:e0:e5:e6:4d:0b:02:52:49:86:
+                    c7:be:7e:bd:e6:56:76:8b:70:8e:0a:8f:06:33:20:
+                    1d:7b:5b:aa:d0:c5:1b:ab:9b:cc:54:09:3c:bf:e4:
+                    40:66:f1:fb:d6:f7:16:9d:c4:19:d4:c3:f2:ff:07:
+                    bc:6f:5a:9e:25:1b:02:4a:a5:ec:42:96:3a:70:d2:
+                    6c:99:2b:ce:be:e8:d2:01:ef:d5:ba:b0:cf:94:3e:
+                    82:d0:01:d6:4b:71:80:03:0a:12:45:86:79:81:d8:
+                    4b:d2:e8:b5:b7:2c:6c:9a:4c:8a:10:10:e4:e4:f5:
+                    df:ce:84:91:ca:d1:46:e0:84:73:17:66:db:69:43:
+                    78:80:83:be:14:4d:f1:3e:1a:d6:6c:f5:de:45:f3:
+                    39:af:91:d5:3d:54:44:bf:41:cc:73:68:1a:fc:24:
+                    db:91
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                BC:DD:62:D9:76:DA:1B:D2:54:6B:CF:E0:66:9B:1E:1E:7B:56:0C:0B
+                9A:CF:CF:6E:EB:71:3D:DB:3C:F1:AE:88:6B:56:72:03:CB:08:A7:48
             X509v3 Authority Key Identifier: 
-                keyid:BC:DD:62:D9:76:DA:1B:D2:54:6B:CF:E0:66:9B:1E:1E:7B:56:0C:0B
+                keyid:9A:CF:CF:6E:EB:71:3D:DB:3C:F1:AE:88:6B:56:72:03:CB:08:A7:48
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha1WithRSAEncryption
-         7d:0a:f5:cb:8d:d3:5d:bd:99:8e:f8:2b:0f:ba:eb:c2:d9:a6:
-         27:4f:2e:7b:2f:0e:64:d8:1c:35:50:4e:ee:fc:90:b9:8d:6d:
-         a8:c5:c6:06:b0:af:f3:2d:bf:3b:b8:42:07:dd:18:7d:6d:95:
-         54:57:85:18:60:47:2f:eb:78:1b:f9:e8:17:fd:5a:0d:87:17:
-         28:ac:4c:6a:e6:bc:29:f4:f4:55:70:29:42:de:85:ea:ab:6c:
-         23:06:64:30:75:02:8e:53:bc:5e:01:33:37:cc:1e:cd:b8:a4:
-         fd:ca:e4:5f:65:3b:83:1c:86:f1:55:02:a0:3a:8f:db:91:b7:
-         40:14:b4:e7:8d:d2:ee:73:ba:e3:e5:34:2d:bc:94:6f:4e:24:
-         06:f7:5f:8b:0e:a7:8e:6b:de:5e:75:f4:32:9a:50:b1:44:33:
-         9a:d0:05:e2:78:82:ff:db:da:8a:63:eb:a9:dd:d1:bf:a0:61:
-         ad:e3:9e:8a:24:5d:62:0e:e7:4c:91:7f:ef:df:34:36:3b:2f:
-         5d:f5:84:b2:2f:c4:6d:93:96:1a:6f:30:28:f1:da:12:9a:64:
-         b4:40:33:1d:bd:de:2b:53:a8:ea:be:d6:bc:4e:96:f5:44:fb:
-         32:18:ae:d5:1f:f6:69:af:b6:4e:7b:1d:58:ec:3b:a9:53:a3:
-         5e:58:c8:9e
+         10:25:c8:dc:0c:55:5c:cb:83:6e:79:ef:77:ec:0d:8e:0c:06:
+         c1:4b:0c:d6:f7:75:52:21:b8:17:4a:38:88:9d:b3:78:c4:42:
+         fb:b8:7c:14:38:10:fb:ac:da:11:00:5b:42:87:5e:45:9f:6d:
+         4e:42:a4:9a:18:06:39:0f:45:a6:96:89:32:d6:59:b3:d3:8e:
+         e3:95:b6:c4:a2:4b:74:2f:67:c1:fb:bb:f9:72:6f:37:4a:e7:
+         f4:48:33:71:df:b8:f5:e6:41:3f:d5:d5:2f:26:09:f8:0e:92:
+         ff:70:ea:f6:ab:58:fb:90:04:d6:43:2e:8f:b1:fb:06:ab:69:
+         d0:dc:a8:f8:5b:07:f2:d4:66:1f:63:f8:5d:c1:9e:41:44:bb:
+         c9:e8:7d:e0:46:e4:a7:c8:32:5f:31:62:e5:1c:5c:89:dd:b7:
+         a2:4f:9e:0d:13:b8:5f:b1:84:53:4c:1f:ce:19:e1:01:00:5e:
+         bf:41:55:94:a9:a5:13:db:f2:59:f3:d6:4e:b9:9d:9d:b9:0a:
+         d9:b2:18:6d:7c:b1:f7:96:aa:bd:f6:f9:95:0f:4a:6e:3c:7c:
+         46:5b:df:d4:78:ec:9a:dc:e2:e3:01:e6:88:77:39:93:9c:ba:
+         2a:63:f9:25:4b:4f:ac:08:79:39:c6:7b:df:07:35:ba:c0:c2:
+         50:bf:5a:81
 -----BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIJALCSZLHy2iHQMA0GCSqGSIb3DQEBBQUAME0xCzAJBgNV
+MIIDbTCCAlWgAwIBAgIJAILtv0HIgJGbMA0GCSqGSIb3DQEBBQUAME0xCzAJBgNV
 BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW
-MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xMzAxMDQxOTQ3MDdaFw0yMzAxMDIx
-OTQ3MDdaME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg
+MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODAxMTkxOTA5MDZaFw0yODAxMTcx
+OTA5MDZaME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg
 Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAOfe6eMMnwC2of0rW5bSb8zgvoa5IF7sA3pV
-q+qk6flJhdJm1e3HeupWji2P50LiYiipn9Ybjuu1tJyfFKvf5pSLdh0+bSRh7Qy/
-AIphDN9cyDZzFgDNR7ptpKR0iIMjChn8Cac8SkvT5x0t5OpMVCHzJtuJNxjUArtA
-Ml+k/y0c99S77I7PXIKs5nwIbEiFYQd/JeBc4Lw0X+C5BEd1yEcLjbzWyGhfM4Ni
-0iBENbGtgRqKzbw1sFyLR9YY6ZwYl8wBPCnM6B7k5MG43ufCERiHWpM02KYl9xRx
-6+QhotIPLi7UYgA109bvXGBLTKkU4t0VWEY3Mya35y5d7ULkxU0CAwEAAaNQME4w
-HQYDVR0OBBYEFLzdYtl22hvSVGvP4GabHh57VgwLMB8GA1UdIwQYMBaAFLzdYtl2
-2hvSVGvP4GabHh57VgwLMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB
-AH0K9cuN0129mY74Kw+668LZpidPLnsvDmTYHDVQTu78kLmNbajFxgawr/Mtvzu4
-QgfdGH1tlVRXhRhgRy/reBv56Bf9Wg2HFyisTGrmvCn09FVwKULeheqrbCMGZDB1
-Ao5TvF4BMzfMHs24pP3K5F9lO4MchvFVAqA6j9uRt0AUtOeN0u5zuuPlNC28lG9O
-JAb3X4sOp45r3l519DKaULFEM5rQBeJ4gv/b2opj66nd0b+gYa3jnookXWIO50yR
-f+/fNDY7L131hLIvxG2TlhpvMCjx2hKaZLRAMx293itTqOq+1rxOlvVE+zIYrtUf
-9mmvtk57HVjsO6lTo15YyJ4=
+hvcNAQEBBQADggEPADCCAQoCggEBAMMYaWvJRymYjrFWwi76Dl68I4CzB2Ik0kJb
+8Uq/qcghdcjj5iwfhzxufBvtOTKVt0CyYEjDmhYI/m1niDQ7d3dwHHBa0R9fBCFU
+uQzjQYUdWO4v7fMO79gjofpz+0wo4OXmTQsCUkmGx75+veZWdotwjgqPBjMgHXtb
+qtDFG6ubzFQJPL/kQGbx+9b3Fp3EGdTD8v8HvG9aniUbAkql7EKWOnDSbJkrzr7o
+0gHv1bqwz5Q+gtAB1ktxgAMKEkWGeYHYS9LotbcsbJpMihAQ5OT1386EkcrRRuCE
+cxdm22lDeICDvhRN8T4a1mz13kXzOa+R1T1URL9BzHNoGvwk25ECAwEAAaNQME4w
+HQYDVR0OBBYEFJrPz27rcT3bPPGuiGtWcgPLCKdIMB8GA1UdIwQYMBaAFJrPz27r
+cT3bPPGuiGtWcgPLCKdIMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB
+ABAlyNwMVVzLg25573fsDY4MBsFLDNb3dVIhuBdKOIids3jEQvu4fBQ4EPus2hEA
+W0KHXkWfbU5CpJoYBjkPRaaWiTLWWbPTjuOVtsSiS3QvZ8H7u/lybzdK5/RIM3Hf
+uPXmQT/V1S8mCfgOkv9w6varWPuQBNZDLo+x+waradDcqPhbB/LUZh9j+F3BnkFE
+u8nofeBG5KfIMl8xYuUcXIndt6JPng0TuF+xhFNMH84Z4QEAXr9BVZSppRPb8lnz
+1k65nZ25CtmyGG18sfeWqr32+ZUPSm48fEZb39R47Jrc4uMB5oh3OZOcuipj+SVL
+T6wIeTnGe98HNbrAwlC/WoE=
 -----END CERTIFICATE-----
diff --git a/Lib/test/pythoninfo.py b/Lib/test/pythoninfo.py
new file mode 100644
index 0000000..d588353
--- /dev/null
+++ b/Lib/test/pythoninfo.py
@@ -0,0 +1,598 @@
+"""
+Collect various information about Python to help debugging test failures.
+"""
+from __future__ import print_function
+import errno
+import re
+import sys
+import traceback
+
+
+def normalize_text(text):
+    if text is None:
+        return None
+    text = str(text)
+    text = re.sub(r'\s+', ' ', text)
+    return text.strip()
+
+
+class PythonInfo:
+    def __init__(self):
+        self.info = {}
+
+    def add(self, key, value):
+        if key in self.info:
+            raise ValueError("duplicate key: %r" % key)
+
+        if value is None:
+            return
+
+        if not isinstance(value, int):
+            if not isinstance(value, str):
+                # convert other objects like sys.flags to string
+                value = str(value)
+
+            value = value.strip()
+            if not value:
+                return
+
+        self.info[key] = value
+
+    def get_infos(self):
+        """
+        Get information as a key:value dictionary where values are strings.
+        """
+        return {key: str(value) for key, value in self.info.items()}
+
+
+def copy_attributes(info_add, obj, name_fmt, attributes, formatter=None):
+    for attr in attributes:
+        value = getattr(obj, attr, None)
+        if value is None:
+            continue
+        name = name_fmt % attr
+        if formatter is not None:
+            value = formatter(attr, value)
+        info_add(name, value)
+
+
+def copy_attr(info_add, name, mod, attr_name):
+    try:
+        value = getattr(mod, attr_name)
+    except AttributeError:
+        return
+    info_add(name, value)
+
+
+def call_func(info_add, name, mod, func_name, formatter=None):
+    try:
+        func = getattr(mod, func_name)
+    except AttributeError:
+        return
+    value = func()
+    if formatter is not None:
+        value = formatter(value)
+    info_add(name, value)
+
+
+def collect_sys(info_add):
+    attributes = (
+        '_framework',
+        'abiflags',
+        'api_version',
+        'builtin_module_names',
+        'byteorder',
+        'dont_write_bytecode',
+        'executable',
+        'flags',
+        'float_info',
+        'float_repr_style',
+        'hash_info',
+        'hexversion',
+        'implementation',
+        'int_info',
+        'maxsize',
+        'maxunicode',
+        'path',
+        'platform',
+        'prefix',
+        'thread_info',
+        'version',
+        'version_info',
+        'winver',
+    )
+    copy_attributes(info_add, sys, 'sys.%s', attributes)
+
+    call_func(info_add, 'sys.androidapilevel', sys, 'getandroidapilevel')
+    call_func(info_add, 'sys.windowsversion', sys, 'getwindowsversion')
+
+    encoding = sys.getfilesystemencoding()
+    if hasattr(sys, 'getfilesystemencodeerrors'):
+        encoding = '%s/%s' % (encoding, sys.getfilesystemencodeerrors())
+    info_add('sys.filesystem_encoding', encoding)
+
+    for name in ('stdin', 'stdout', 'stderr'):
+        stream = getattr(sys, name)
+        if stream is None:
+            continue
+        encoding = getattr(stream, 'encoding', None)
+        if not encoding:
+            continue
+        errors = getattr(stream, 'errors', None)
+        if errors:
+            encoding = '%s/%s' % (encoding, errors)
+        info_add('sys.%s.encoding' % name, encoding)
+
+    # Were we compiled --with-pydebug or with #define Py_DEBUG?
+    Py_DEBUG = hasattr(sys, 'gettotalrefcount')
+    if Py_DEBUG:
+        text = 'Yes (sys.gettotalrefcount() present)'
+    else:
+        text = 'No (sys.gettotalrefcount() missing)'
+    info_add('Py_DEBUG', text)
+
+
+def collect_platform(info_add):
+    import platform
+
+    arch = platform.architecture()
+    arch = ' '.join(filter(bool, arch))
+    info_add('platform.architecture', arch)
+
+    info_add('platform.python_implementation',
+             platform.python_implementation())
+    info_add('platform.platform',
+             platform.platform(aliased=True, terse=True))
+
+
+def collect_locale(info_add):
+    import locale
+
+    info_add('locale.encoding', locale.getpreferredencoding(False))
+
+
+def collect_builtins(info_add):
+    info_add('builtins.float.float_format', float.__getformat__("float"))
+    info_add('builtins.float.double_format', float.__getformat__("double"))
+
+
+def collect_os(info_add):
+    import os
+
+    def format_attr(attr, value):
+        if attr in ('supports_follow_symlinks', 'supports_fd',
+                    'supports_effective_ids'):
+            return str(sorted(func.__name__ for func in value))
+        else:
+            return value
+
+    attributes = (
+        'name',
+        'supports_bytes_environ',
+        'supports_effective_ids',
+        'supports_fd',
+        'supports_follow_symlinks',
+    )
+    copy_attributes(info_add, os, 'os.%s', attributes, formatter=format_attr)
+
+    call_func(info_add, 'os.cwd', os, 'getcwd')
+
+    call_func(info_add, 'os.uid', os, 'getuid')
+    call_func(info_add, 'os.gid', os, 'getgid')
+    call_func(info_add, 'os.uname', os, 'uname')
+
+    def format_groups(groups):
+        return ', '.join(map(str, groups))
+
+    call_func(info_add, 'os.groups', os, 'getgroups', formatter=format_groups)
+
+    if hasattr(os, 'getlogin'):
+        try:
+            login = os.getlogin()
+        except OSError:
+            # getlogin() fails with "OSError: [Errno 25] Inappropriate ioctl
+            # for device" on Travis CI
+            pass
+        else:
+            info_add("os.login", login)
+
+    call_func(info_add, 'os.cpu_count', os, 'cpu_count')
+    call_func(info_add, 'os.loadavg', os, 'getloadavg')
+
+    # Get environment variables: filter to list
+    # to not leak sensitive information
+    ENV_VARS = (
+        "CC",
+        "COMSPEC",
+        "DISPLAY",
+        "DISTUTILS_USE_SDK",
+        "DYLD_LIBRARY_PATH",
+        "HOME",
+        "HOMEDRIVE",
+        "HOMEPATH",
+        "LANG",
+        "LD_LIBRARY_PATH",
+        "MACOSX_DEPLOYMENT_TARGET",
+        "MAKEFLAGS",
+        "MSSDK",
+        "PATH",
+        "SDK_TOOLS_BIN",
+        "SHELL",
+        "TEMP",
+        "TERM",
+        "TMP",
+        "TMPDIR",
+        "USERPROFILE",
+        "WAYLAND_DISPLAY",
+    )
+    for name, value in os.environ.items():
+        uname = name.upper()
+        if (uname in ENV_VARS
+           # Copy PYTHON* and LC_* variables
+           or uname.startswith(("PYTHON", "LC_"))
+           # Visual Studio: VS140COMNTOOLS
+           or (uname.startswith("VS") and uname.endswith("COMNTOOLS"))):
+            info_add('os.environ[%s]' % name, value)
+
+    if hasattr(os, 'umask'):
+        mask = os.umask(0)
+        os.umask(mask)
+        info_add("os.umask", '%03o' % mask)
+
+    if hasattr(os, 'getrandom'):
+        # PEP 524: Check if system urandom is initialized
+        try:
+            try:
+                os.getrandom(1, os.GRND_NONBLOCK)
+                state = 'ready (initialized)'
+            except BlockingIOError as exc:
+                state = 'not seeded yet (%s)' % exc
+            info_add('os.getrandom', state)
+        except OSError as exc:
+            # Python was compiled on a more recent Linux version
+            # than the current Linux kernel: ignore OSError(ENOSYS)
+            if exc.errno != errno.ENOSYS:
+                raise
+
+
+def collect_readline(info_add):
+    try:
+        import readline
+    except ImportError:
+        return
+
+    def format_attr(attr, value):
+        if isinstance(value, int):
+            return "%#x" % value
+        else:
+            return value
+
+    attributes = (
+        "_READLINE_VERSION",
+        "_READLINE_RUNTIME_VERSION",
+        "_READLINE_LIBRARY_VERSION",
+    )
+    copy_attributes(info_add, readline, 'readline.%s', attributes,
+                    formatter=format_attr)
+
+    if not hasattr(readline, "_READLINE_LIBRARY_VERSION"):
+        # _READLINE_LIBRARY_VERSION has been added to CPython 3.7
+        doc = getattr(readline, '__doc__', '')
+        if 'libedit readline' in doc:
+            info_add('readline.library', 'libedit readline')
+        elif 'GNU readline' in doc:
+            info_add('readline.library', 'GNU readline')
+
+
+def collect_gdb(info_add):
+    import subprocess
+
+    try:
+        proc = subprocess.Popen(["gdb", "-nx", "--version"],
+                                stdout=subprocess.PIPE,
+                                stderr=subprocess.PIPE,
+                                universal_newlines=True)
+        version = proc.communicate()[0]
+    except OSError:
+        return
+
+    # Only keep the first line
+    version = version.splitlines()[0]
+    info_add('gdb_version', version)
+
+
+def collect_tkinter(info_add):
+    try:
+        import _tkinter
+    except ImportError:
+        pass
+    else:
+        attributes = ('TK_VERSION', 'TCL_VERSION')
+        copy_attributes(info_add, _tkinter, 'tkinter.%s', attributes)
+
+    try:
+        import tkinter
+    except ImportError:
+        pass
+    else:
+        tcl = tkinter.Tcl()
+        patchlevel = tcl.call('info', 'patchlevel')
+        info_add('tkinter.info_patchlevel', patchlevel)
+
+
+def collect_time(info_add):
+    import time
+
+    info_add('time.time', time.time())
+
+    attributes = (
+        'altzone',
+        'daylight',
+        'timezone',
+        'tzname',
+    )
+    copy_attributes(info_add, time, 'time.%s', attributes)
+
+    if hasattr(time, 'get_clock_info'):
+        for clock in ('time', 'perf_counter'):
+            tinfo = time.get_clock_info(clock)
+            info_add('time.get_clock_info(%s)' % clock, tinfo)
+
+
+def collect_datetime(info_add):
+    try:
+        import datetime
+    except ImportError:
+        return
+
+    info_add('datetime.datetime.now', datetime.datetime.now())
+
+
+def collect_sysconfig(info_add):
+    import sysconfig
+
+    for name in (
+        'ABIFLAGS',
+        'ANDROID_API_LEVEL',
+        'CC',
+        'CCSHARED',
+        'CFLAGS',
+        'CFLAGSFORSHARED',
+        'CONFIG_ARGS',
+        'HOST_GNU_TYPE',
+        'MACHDEP',
+        'MULTIARCH',
+        'OPT',
+        'PY_CFLAGS',
+        'PY_CFLAGS_NODIST',
+        'PY_LDFLAGS',
+        'Py_DEBUG',
+        'Py_ENABLE_SHARED',
+        'SHELL',
+        'SOABI',
+        'prefix',
+    ):
+        value = sysconfig.get_config_var(name)
+        if name == 'ANDROID_API_LEVEL' and not value:
+            # skip ANDROID_API_LEVEL=0
+            continue
+        value = normalize_text(value)
+        info_add('sysconfig[%s]' % name, value)
+
+
+def collect_ssl(info_add):
+    try:
+        import ssl
+    except ImportError:
+        return
+
+    def format_attr(attr, value):
+        if attr.startswith('OP_'):
+            return '%#8x' % value
+        else:
+            return value
+
+    attributes = (
+        'OPENSSL_VERSION',
+        'OPENSSL_VERSION_INFO',
+        'HAS_SNI',
+        'OP_ALL',
+        'OP_NO_TLSv1_1',
+    )
+    copy_attributes(info_add, ssl, 'ssl.%s', attributes, formatter=format_attr)
+
+
+def collect_socket(info_add):
+    import socket
+
+    hostname = socket.gethostname()
+    info_add('socket.hostname', hostname)
+
+
+def collect_sqlite(info_add):
+    try:
+        import sqlite3
+    except ImportError:
+        return
+
+    attributes = ('version', 'sqlite_version')
+    copy_attributes(info_add, sqlite3, 'sqlite3.%s', attributes)
+
+
+def collect_zlib(info_add):
+    try:
+        import zlib
+    except ImportError:
+        return
+
+    attributes = ('ZLIB_VERSION', 'ZLIB_RUNTIME_VERSION')
+    copy_attributes(info_add, zlib, 'zlib.%s', attributes)
+
+
+def collect_expat(info_add):
+    try:
+        from xml.parsers import expat
+    except ImportError:
+        return
+
+    attributes = ('EXPAT_VERSION',)
+    copy_attributes(info_add, expat, 'expat.%s', attributes)
+
+
+def collect_decimal(info_add):
+    try:
+        import _decimal
+    except ImportError:
+        return
+
+    attributes = ('__libmpdec_version__',)
+    copy_attributes(info_add, _decimal, '_decimal.%s', attributes)
+
+
+def collect_testcapi(info_add):
+    try:
+        import _testcapi
+    except ImportError:
+        return
+
+    call_func(info_add, 'pymem.allocator', _testcapi, 'pymem_getallocatorsname')
+    copy_attr(info_add, 'pymem.with_pymalloc', _testcapi, 'WITH_PYMALLOC')
+
+
+def collect_resource(info_add):
+    try:
+        import resource
+    except ImportError:
+        return
+
+    limits = [attr for attr in dir(resource) if attr.startswith('RLIMIT_')]
+    for name in limits:
+        key = getattr(resource, name)
+        value = resource.getrlimit(key)
+        info_add('resource.%s' % name, value)
+
+
+def collect_test_socket(info_add):
+    try:
+        from test import test_socket
+    except ImportError:
+        return
+
+    # all check attributes like HAVE_SOCKET_CAN
+    attributes = [name for name in dir(test_socket)
+                  if name.startswith('HAVE_')]
+    copy_attributes(info_add, test_socket, 'test_socket.%s', attributes)
+
+
+def collect_test_support(info_add):
+    try:
+        from test import support
+    except ImportError:
+        return
+
+    attributes = ('IPV6_ENABLED',)
+    copy_attributes(info_add, support, 'test_support.%s', attributes)
+
+    call_func(info_add, 'test_support._is_gui_available', support, '_is_gui_available')
+    call_func(info_add, 'test_support.python_is_optimized', support, 'python_is_optimized')
+
+
+def collect_cc(info_add):
+    import subprocess
+    import sysconfig
+
+    CC = sysconfig.get_config_var('CC')
+    if not CC:
+        return
+
+    try:
+        import shlex
+        args = shlex.split(CC)
+    except ImportError:
+        args = CC.split()
+    args.append('--version')
+    proc = subprocess.Popen(args,
+                            stdout=subprocess.PIPE,
+                            stderr=subprocess.STDOUT,
+                            universal_newlines=True)
+    stdout = proc.communicate()[0]
+    if proc.returncode:
+        # CC --version failed: ignore error
+        return
+
+    text = stdout.splitlines()[0]
+    text = normalize_text(text)
+    info_add('CC.version', text)
+
+
+def collect_info(info):
+    error = False
+    info_add = info.add
+
+    for collect_func in (
+        # collect_os() should be the first, to check the getrandom() status
+        collect_os,
+
+        collect_builtins,
+        collect_gdb,
+        collect_locale,
+        collect_platform,
+        collect_readline,
+        collect_socket,
+        collect_sqlite,
+        collect_ssl,
+        collect_sys,
+        collect_sysconfig,
+        collect_time,
+        collect_datetime,
+        collect_tkinter,
+        collect_zlib,
+        collect_expat,
+        collect_decimal,
+        collect_testcapi,
+        collect_resource,
+        collect_cc,
+
+        # Collecting from tests should be last as they have side effects.
+        collect_test_socket,
+        collect_test_support,
+    ):
+        try:
+            collect_func(info_add)
+        except Exception as exc:
+            error = True
+            print("ERROR: %s() failed" % (collect_func.__name__),
+                  file=sys.stderr)
+            traceback.print_exc(file=sys.stderr)
+            print(file=sys.stderr)
+            sys.stderr.flush()
+
+    return error
+
+
+def dump_info(info, file=None):
+    title = "Python debug information"
+    print(title)
+    print("=" * len(title))
+    print()
+
+    infos = info.get_infos()
+    infos = sorted(infos.items())
+    for key, value in infos:
+        value = value.replace("\n", " ")
+        print("%s: %s" % (key, value))
+    print()
+
+
+def main():
+    info = PythonInfo()
+    error = collect_info(info)
+    dump_info(info)
+
+    if error:
+        print("Collection failed: exit with error", file=sys.stderr)
+        sys.exit(1)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index 8017de9..6b49daf 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -27,7 +27,7 @@
 -w/--verbose2   -- re-run failed tests in verbose mode
 -W/--verbose3   -- re-run failed tests in verbose mode immediately
 -q/--quiet      -- no output unless one or more tests fail
--S/--slow       -- print the slowest 10 tests
+-S/--slowest    -- print the slowest 10 tests
    --header     -- print header with interpreter info
 
 Selecting tests
@@ -37,6 +37,9 @@
 -f/--fromfile   -- read names of tests to run from a file (see below)
 -x/--exclude    -- arguments are tests to *exclude*
 -s/--single     -- single step through a set of tests (see below)
+-m/--match PAT  -- match test cases and methods with glob pattern PAT
+--matchfile FILENAME -- filters tests using a text file, one pattern per line
+-G/--failfast   -- fail as soon as a test fails (only with -v or -W)
 -u/--use RES1,RES2,...
                 -- specify which special resource intensive tests to run
 -M/--memlimit LIMIT
@@ -58,6 +61,14 @@
                 -- call gc.set_threshold(THRESHOLD)
 -F/--forever    -- run the specified tests in a loop, until an error happens
 -P/--pgo        -- enable Profile Guided Optimization training
+--testdir       -- execute test files in the specified directory
+                   (instead of the Python stdlib test suite)
+--list-tests    -- only write the name of tests that will be run,
+                   don't execute them
+--list-cases    -- only write the name of test cases that will be run,
+                   don't execute them
+--fail-env-changed  -- if a test file alters the environment, mark the test
+                       as failed
 
 
 Additional Option Details:
@@ -151,24 +162,33 @@
 To enable all resources except one, use '-uall,-<resource>'.  For
 example, to run all the tests except for the bsddb tests, give the
 option '-uall,-bsddb'.
+
+--matchfile filters tests using a text file, one pattern per line.
+Pattern examples:
+
+- test method: test_stat_attributes
+- test class: FileTests
+- test identifier: test_os.FileTests.test_stat_attributes
 """
 
 import StringIO
+import datetime
 import getopt
+import imp
 import json
+import math
 import os
+import platform
 import random
 import re
 import shutil
 import sys
+import sysconfig
+import tempfile
 import time
 import traceback
-import warnings
 import unittest
-import tempfile
-import imp
-import platform
-import sysconfig
+import warnings
 
 
 # Some times __path__ and __file__ are not absolute (e.g. while running from
@@ -220,12 +240,26 @@
 SKIPPED = -2
 RESOURCE_DENIED = -3
 INTERRUPTED = -4
+CHILD_ERROR = -5   # error in a child process
 
-from test import test_support
+# Minimum duration of a test to display its duration or to mention that
+# the test is running in background
+PROGRESS_MIN_TIME = 30.0   # seconds
 
-RESOURCE_NAMES = ('audio', 'curses', 'largefile', 'network', 'bsddb',
-                  'decimal', 'cpu', 'subprocess', 'urlfetch', 'gui',
-                  'xpickle')
+# Display the running tests if nothing happened last N seconds
+PROGRESS_UPDATE = 30.0   # seconds
+
+from test import support
+
+ALL_RESOURCES = ('audio', 'curses', 'largefile', 'network', 'bsddb',
+                 'decimal', 'cpu', 'subprocess', 'urlfetch', 'gui',
+                 'xpickle')
+
+# Other resources excluded from --use=all:
+#
+# - extralagefile (ex: test_zipfile64): really too slow to be enabled
+#   "by default"
+RESOURCE_NAMES = ALL_RESOURCES + ('extralargefile',)
 
 TEMPDIR = os.path.abspath(tempfile.gettempdir())
 
@@ -236,12 +270,75 @@
     sys.exit(code)
 
 
+def format_duration(seconds):
+    ms = int(math.ceil(seconds * 1e3))
+    seconds, ms = divmod(ms, 1000)
+    minutes, seconds = divmod(seconds, 60)
+    hours, minutes = divmod(minutes, 60)
+
+    parts = []
+    if hours:
+        parts.append('%s hour' % hours)
+    if minutes:
+        parts.append('%s min' % minutes)
+    if seconds:
+        parts.append('%s sec' % seconds)
+    if ms:
+        parts.append('%s ms' % ms)
+    if not parts:
+        return '0 ms'
+
+    parts = parts[:2]
+    return ' '.join(parts)
+
+
+_FORMAT_TEST_RESULT = {
+    PASSED: '%s passed',
+    FAILED: '%s failed',
+    ENV_CHANGED: '%s failed (env changed)',
+    SKIPPED: '%s skipped',
+    RESOURCE_DENIED: '%s skipped (resource denied)',
+    INTERRUPTED: '%s interrupted',
+    CHILD_ERROR: '%s crashed',
+}
+
+
+def format_test_result(test_name, result):
+    fmt = _FORMAT_TEST_RESULT.get(result, "%s")
+    return fmt % test_name
+
+
+def cpu_count():
+    # first try os.sysconf() to prevent loading the big multiprocessing module
+    try:
+        return os.sysconf('SC_NPROCESSORS_ONLN')
+    except (AttributeError, ValueError):
+        pass
+
+    # try multiprocessing.cpu_count()
+    try:
+        import multiprocessing
+    except ImportError:
+        pass
+    else:
+        return multiprocessing.cpu_count()
+
+    return None
+
+
+def unload_test_modules(save_modules):
+    # Unload the newly imported modules (best effort finalization)
+    for module in sys.modules.keys():
+        if module not in save_modules and module.startswith("test."):
+            support.unload(module)
+
+
 def main(tests=None, testdir=None, verbose=0, quiet=False,
          exclude=False, single=False, randomize=False, fromfile=None,
          findleaks=False, use_resources=None, trace=False, coverdir='coverage',
          runleaks=False, huntrleaks=False, verbose2=False, print_slow=False,
          random_seed=None, use_mp=None, verbose3=False, forever=False,
-         header=False, pgo=False):
+         header=False, pgo=False, failfast=False, match_tests=None):
     """Execute a test suite.
 
     This also parses command-line options and modifies its behavior
@@ -264,15 +361,19 @@
     directly to set the values that would normally be set by flags
     on the command line.
     """
+    regrtest_start_time = time.time()
 
-    test_support.record_original_stdout(sys.stdout)
+    support.record_original_stdout(sys.stdout)
     try:
-        opts, args = getopt.getopt(sys.argv[1:], 'hvqxsSrf:lu:t:TD:NLR:FwWM:j:P',
+        opts, args = getopt.getopt(sys.argv[1:], 'hvqxsSrf:lu:t:TD:NLR:FwWM:j:PGm:',
             ['help', 'verbose', 'verbose2', 'verbose3', 'quiet',
-             'exclude', 'single', 'slow', 'randomize', 'fromfile=', 'findleaks',
+             'exclude', 'single', 'slow', 'slowest', 'randomize', 'fromfile=',
+             'findleaks',
              'use=', 'threshold=', 'trace', 'coverdir=', 'nocoverdir',
              'runleaks', 'huntrleaks=', 'memlimit=', 'randseed=',
-             'multiprocess=', 'slaveargs=', 'forever', 'header', 'pgo'])
+             'multiprocess=', 'slaveargs=', 'forever', 'header', 'pgo',
+             'failfast', 'match=', 'testdir=', 'list-tests', 'list-cases',
+             'coverage', 'matchfile=', 'fail-env-changed'])
     except getopt.error, msg:
         usage(2, msg)
 
@@ -281,6 +382,10 @@
         random_seed = random.randrange(10000000)
     if use_resources is None:
         use_resources = []
+    slaveargs = None
+    list_tests = False
+    list_cases_opt = False
+    fail_env_changed = False
     for o, a in opts:
         if o in ('-h', '--help'):
             usage(0)
@@ -290,6 +395,8 @@
             verbose2 = True
         elif o in ('-W', '--verbose3'):
             verbose3 = True
+        elif o in ('-G', '--failfast'):
+            failfast = True
         elif o in ('-q', '--quiet'):
             quiet = True;
             verbose = 0
@@ -297,7 +404,7 @@
             exclude = True
         elif o in ('-s', '--single'):
             single = True
-        elif o in ('-S', '--slow'):
+        elif o in ('-S', '--slow', '--slowest'):
             print_slow = True
         elif o in ('-r', '--randomize'):
             randomize = True
@@ -305,6 +412,17 @@
             random_seed = int(a)
         elif o in ('-f', '--fromfile'):
             fromfile = a
+        elif o in ('-m', '--match'):
+            if match_tests is None:
+                match_tests = []
+            match_tests.append(a)
+        elif o == '--matchfile':
+            if match_tests is None:
+                match_tests = []
+            filename = os.path.join(support.SAVEDCWD, a)
+            with open(filename) as fp:
+                for line in fp:
+                    match_tests.append(line.strip())
         elif o in ('-l', '--findleaks'):
             findleaks = True
         elif o in ('-L', '--runleaks'):
@@ -334,12 +452,12 @@
             if len(huntrleaks) == 2 or not huntrleaks[2]:
                 huntrleaks[2:] = ["reflog.txt"]
         elif o in ('-M', '--memlimit'):
-            test_support.set_memlimit(a)
+            support.set_memlimit(a)
         elif o in ('-u', '--use'):
             u = [x.lower() for x in a.split(',')]
             for r in u:
                 if r == 'all':
-                    use_resources[:] = RESOURCE_NAMES
+                    use_resources[:] = ALL_RESOURCES
                     continue
                 remove = False
                 if r[0] == '-':
@@ -359,16 +477,17 @@
         elif o == '--header':
             header = True
         elif o == '--slaveargs':
-            args, kwargs = json.loads(a)
-            try:
-                result = runtest(*args, **kwargs)
-            except BaseException, e:
-                result = INTERRUPTED, e.__class__.__name__
-            print   # Force a newline (just in case)
-            print json.dumps(result)
-            sys.exit(0)
+            slaveargs = a
         elif o in ('-P', '--pgo'):
             pgo = True
+        elif o == '--testdir':
+            testdir = a
+        elif o == '--list-tests':
+            list_tests = True
+        elif o == '--list-cases':
+            list_cases_opt = True
+        elif o == '--fail-env-changed':
+            fail_env_changed = True
         else:
             print >>sys.stderr, ("No handler for option {}.  Please "
                 "report this as a bug at http://bugs.python.org.").format(o)
@@ -379,12 +498,57 @@
         usage(2, "-T and -j don't go together!")
     if use_mp and findleaks:
         usage(2, "-l and -j don't go together!")
+    if failfast and not (verbose or verbose3):
+        usage("-G/--failfast needs either -v or -W")
+
+    if testdir:
+        testdir = os.path.abspath(testdir)
+
+        # Prepend test directory to sys.path, so runtest() will be able
+        # to locate tests
+        sys.path.insert(0, testdir)
+
+    # Make sure that '' and Lib/test/ are not in sys.path
+    regrtest_dir = os.path.abspath(os.path.dirname(__file__))
+    for path in ('', regrtest_dir):
+        try:
+            sys.path.remove(path)
+        except ValueError:
+            pass
+
+    if huntrleaks:
+        warmup, repetitions, _ = huntrleaks
+        if warmup < 1 or repetitions < 1:
+            msg = ("Invalid values for the --huntrleaks/-R parameters. The "
+                   "number of warmups and repetitions must be at least 1 "
+                   "each (1:1).")
+            print >>sys.stderr, msg
+            sys.exit(2)
+
+    if slaveargs is not None:
+        args, kwargs = json.loads(slaveargs)
+        if kwargs['huntrleaks']:
+            warm_caches()
+        if testdir:
+            kwargs['testdir'] = testdir
+        try:
+            result = runtest(*args, **kwargs)
+        except BaseException, e:
+            result = INTERRUPTED, e.__class__.__name__
+        print   # Force a newline (just in case)
+        print json.dumps(result)
+        sys.exit(0)
+
+    if huntrleaks:
+        warm_caches()
 
     good = []
     bad = []
     skipped = []
     resource_denieds = []
     environment_changed = []
+    rerun = []
+    first_result = None
     interrupted = False
 
     if findleaks:
@@ -412,7 +576,7 @@
 
     if fromfile:
         tests = []
-        fp = open(os.path.join(test_support.SAVEDCWD, fromfile))
+        fp = open(os.path.join(support.SAVEDCWD, fromfile))
         for line in fp:
             guts = line.split() # assuming no test has whitespace in its name
             if guts and not guts[0].startswith('#'):
@@ -432,17 +596,13 @@
             nottests.add(arg)
         args = []
 
-    # For a partial run, we do not need to clutter the output.
-    if verbose or header or not (quiet or single or tests or args):
-        if not pgo:
-            # Print basic platform information
-            print "==", platform.python_implementation(), \
-                        " ".join(sys.version.split())
-            print "==  ", platform.platform(aliased=True), \
-                          "%s-endian" % sys.byteorder
-            print "==  ", os.getcwd()
-            print "Testing with flags:", sys.flags
+    if huntrleaks:
+        # FIXME: bpo-31731: test_io hangs with --huntrleaks
+        print("Warning: bpo-31731: test_io hangs with --huntrleaks: "
+              "exclude the test")
+        nottests.add('test_io')
 
+    display_header = (verbose or header or not (quiet or single or tests or args)) and (not pgo)
     alltests = findtests(testdir, stdtests, nottests)
     selected = tests or args or alltests
     if single:
@@ -451,25 +611,31 @@
             next_single_test = alltests[alltests.index(selected[0])+1]
         except IndexError:
             next_single_test = None
-    if randomize:
-        random.seed(random_seed)
-        print "Using random seed", random_seed
-        random.shuffle(selected)
+
+    if list_tests:
+        for name in selected:
+            print(name)
+        sys.exit(0)
+
+    if list_cases_opt:
+        list_cases(testdir, selected, match_tests)
+        sys.exit(0)
+
     if trace:
         import trace
-        tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix],
-                             trace=False, count=True)
+        tracer = trace.Trace(trace=False, count=True)
 
     test_times = []
-    test_support.use_resources = use_resources
+    support.use_resources = use_resources
     save_modules = set(sys.modules)
 
     def accumulate_result(test, result):
         ok, test_time = result
-        test_times.append((test_time, test))
+        if ok not in (CHILD_ERROR, INTERRUPTED):
+            test_times.append((test_time, test))
         if ok == PASSED:
             good.append(test)
-        elif ok == FAILED:
+        elif ok in (FAILED, CHILD_ERROR):
             bad.append(test)
         elif ok == ENV_CHANGED:
             environment_changed.append(test)
@@ -478,6 +644,8 @@
         elif ok == RESOURCE_DENIED:
             skipped.append(test)
             resource_denieds.append(test)
+        elif ok != INTERRUPTED:
+            raise ValueError("invalid test result: %r" % ok)
 
     if forever:
         def test_forever(tests=list(selected)):
@@ -486,6 +654,8 @@
                     yield test
                     if bad:
                         return
+                    if fail_env_changed and environment_changed:
+                        return
         tests = test_forever()
         test_count = ''
         test_count_width = 3
@@ -494,13 +664,60 @@
         test_count = '/{}'.format(len(selected))
         test_count_width = len(test_count) - 1
 
+    def display_progress(test_index, test):
+        # "[ 51/405/1] test_tcl"
+        line = "{1:{0}}{2}".format(test_count_width, test_index, test_count)
+        fails = len(bad) + len(environment_changed)
+        if fails and not pgo:
+            line = '{}/{}'.format(line, fails)
+        line = '[{}]'.format(line)
+
+        # add the system load prefix: "load avg: 1.80 "
+        if hasattr(os, 'getloadavg'):
+            load_avg_1min = os.getloadavg()[0]
+            line = "load avg: {:.2f} {}".format(load_avg_1min, line)
+
+        # add the timestamp prefix:  "0:01:05 "
+        test_time = time.time() - regrtest_start_time
+        test_time = datetime.timedelta(seconds=int(test_time))
+        line = "%s %s" % (test_time, line)
+
+        # add the test name
+        line = "{} {}".format(line, test)
+
+        print(line)
+        sys.stdout.flush()
+
+    # For a partial run, we do not need to clutter the output.
+    if display_header:
+        # Print basic platform information
+        print "==", platform.python_implementation(), \
+                    " ".join(sys.version.split())
+        print "==  ", platform.platform(aliased=True), \
+                      "%s-endian" % sys.byteorder
+        print "==  ", os.getcwd()
+        ncpu = cpu_count()
+        if ncpu:
+            print "== CPU count:", ncpu
+
+    if huntrleaks:
+        warmup, repetitions, _ = huntrleaks
+        if warmup < 3:
+            print("WARNING: Running tests with --huntrleaks/-R and less than "
+                  "3 warmup repetitions can give false positives!")
+
+    if randomize:
+        random.seed(random_seed)
+        print "Using random seed", random_seed
+        random.shuffle(selected)
+
     if use_mp:
         try:
             from threading import Thread
         except ImportError:
             print "Multiprocess option requires thread support"
             sys.exit(2)
-        from Queue import Queue
+        from Queue import Queue, Empty
         from subprocess import Popen, PIPE
         debug_output_pat = re.compile(r"\[\d+ refs\]$")
         output = Queue()
@@ -509,68 +726,130 @@
                 args_tuple = (
                     (test, verbose, quiet),
                     dict(huntrleaks=huntrleaks, use_resources=use_resources,
+                         failfast=failfast,
+                         match_tests=match_tests,
                          pgo=pgo)
                 )
                 yield (test, args_tuple)
         pending = tests_and_args()
-        opt_args = test_support.args_from_interpreter_flags()
+        opt_args = support.args_from_interpreter_flags()
         base_cmd = [sys.executable] + opt_args + ['-m', 'test.regrtest']
         # required to spawn a new process with PGO flag on/off
         if pgo:
             base_cmd = base_cmd + ['--pgo']
-        def work():
-            # A worker thread.
-            try:
-                while True:
-                    try:
-                        test, args_tuple = next(pending)
-                    except StopIteration:
-                        output.put((None, None, None, None))
-                        return
-                    # -E is needed by some tests, e.g. test_import
-                    popen = Popen(base_cmd + ['--slaveargs', json.dumps(args_tuple)],
-                                   stdout=PIPE, stderr=PIPE,
-                                   universal_newlines=True,
-                                   close_fds=(os.name != 'nt'))
+
+        class MultiprocessThread(Thread):
+            current_test = None
+            start_time = None
+
+            def runtest(self):
+                try:
+                    test, args_tuple = next(pending)
+                except StopIteration:
+                    output.put((None, None, None, None))
+                    return True
+
+                # -E is needed by some tests, e.g. test_import
+                args = base_cmd + ['--slaveargs', json.dumps(args_tuple)]
+                if testdir:
+                    args.extend(('--testdir', testdir))
+                try:
+                    self.start_time = time.time()
+                    self.current_test = test
+                    popen = Popen(args,
+                                  stdout=PIPE, stderr=PIPE,
+                                  universal_newlines=True,
+                                  close_fds=(os.name != 'nt'))
                     stdout, stderr = popen.communicate()
-                    # Strip last refcount output line if it exists, since it
-                    # comes from the shutdown of the interpreter in the subcommand.
-                    stderr = debug_output_pat.sub("", stderr)
+                    retcode = popen.wait()
+                finally:
+                    self.current_test = None
+
+                # Strip last refcount output line if it exists, since it
+                # comes from the shutdown of the interpreter in the subcommand.
+                stderr = debug_output_pat.sub("", stderr)
+
+                if retcode == 0:
                     stdout, _, result = stdout.strip().rpartition("\n")
                     if not result:
                         output.put((None, None, None, None))
-                        return
+                        return True
+
                     result = json.loads(result)
-                    output.put((test, stdout.rstrip(), stderr.rstrip(), result))
-            except BaseException:
-                output.put((None, None, None, None))
-                raise
-        workers = [Thread(target=work) for i in range(use_mp)]
+                else:
+                    result = (CHILD_ERROR, "Exit code %s" % retcode)
+
+                output.put((test, stdout.rstrip(), stderr.rstrip(), result))
+                return False
+
+            def run(self):
+                try:
+                    stop = False
+                    while not stop:
+                        stop = self.runtest()
+                except BaseException:
+                    output.put((None, None, None, None))
+                    raise
+
+        workers = [MultiprocessThread() for i in range(use_mp)]
+        print("Run tests in parallel using %s child processes"
+              % len(workers))
         for worker in workers:
             worker.start()
+
+        def get_running(workers):
+            running = []
+            for worker in workers:
+                current_test = worker.current_test
+                if not current_test:
+                    continue
+                dt = time.time() - worker.start_time
+                if dt >= PROGRESS_MIN_TIME:
+                    running.append('%s (%s)' % (current_test, format_duration(dt)))
+            return running
+
         finished = 0
         test_index = 1
+        get_timeout = max(PROGRESS_UPDATE, PROGRESS_MIN_TIME)
         try:
             while finished < use_mp:
-                test, stdout, stderr, result = output.get()
+                try:
+                    item = output.get(timeout=get_timeout)
+                except Empty:
+                    running = get_running(workers)
+                    if running and not pgo:
+                        print('running: %s' % ', '.join(running))
+                        sys.stdout.flush()
+                    continue
+
+                test, stdout, stderr, result = item
                 if test is None:
                     finished += 1
                     continue
+                accumulate_result(test, result)
+                if not quiet:
+                    ok, test_time = result
+                    text = format_test_result(test, ok)
+                    if (ok not in (CHILD_ERROR, INTERRUPTED)
+                        and test_time >= PROGRESS_MIN_TIME
+                        and not pgo):
+                        text += ' (%s)' % format_duration(test_time)
+                    running = get_running(workers)
+                    if running and not pgo:
+                        text += ' -- running: %s' % ', '.join(running)
+                    display_progress(test_index, text)
+
                 if stdout:
-                    print stdout
+                    print(stdout)
+                sys.stdout.flush()
                 if stderr and not pgo:
                     print >>sys.stderr, stderr
-                sys.stdout.flush()
                 sys.stderr.flush()
+
                 if result[0] == INTERRUPTED:
                     assert result[1] == 'KeyboardInterrupt'
                     raise KeyboardInterrupt   # What else?
-                accumulate_result(test, result)
-                if not quiet:
-                    fmt = "[{1:{0}}{2}/{3}] {4}" if bad else "[{1:{0}}{2}] {4}"
-                    print(fmt.format(
-                        test_count_width, test_index, test_count,
-                        len(bad), test))
+
                 test_index += 1
         except KeyboardInterrupt:
             interrupted = True
@@ -578,30 +857,55 @@
         for worker in workers:
             worker.join()
     else:
+        print("Run tests sequentially")
+
+        previous_test = None
         for test_index, test in enumerate(tests, 1):
             if not quiet:
-                fmt = "[{1:{0}}{2}/{3}] {4}" if bad else "[{1:{0}}{2}] {4}"
-                print(fmt.format(
-                    test_count_width, test_index, test_count, len(bad), test))
-                sys.stdout.flush()
+                text = test
+                if previous_test:
+                    text = '%s -- %s' % (text, previous_test)
+                display_progress(test_index, text)
+
+            def local_runtest():
+                result = runtest(test, verbose, quiet, huntrleaks, None, pgo,
+                                 failfast=failfast,
+                                 match_tests=match_tests,
+                                 testdir=testdir)
+                accumulate_result(test, result)
+                return result
+
+            start_time = time.time()
             if trace:
                 # If we're tracing code coverage, then we don't exit with status
                 # if on a false return value from main.
-                tracer.runctx('runtest(test, verbose, quiet)',
-                              globals=globals(), locals=vars())
+                ns = dict(locals())
+                tracer.runctx('result = local_runtest()',
+                              globals=globals(), locals=ns)
+                result = ns['result']
             else:
                 try:
-                    result = runtest(test, verbose, quiet, huntrleaks, None, pgo)
-                    accumulate_result(test, result)
+                    result = local_runtest()
                     if verbose3 and result[0] == FAILED:
                         if not pgo:
                             print "Re-running test %r in verbose mode" % test
-                        runtest(test, True, quiet, huntrleaks, None, pgo)
+                        runtest(test, True, quiet, huntrleaks, None, pgo,
+                                testdir=testdir)
                 except KeyboardInterrupt:
                     interrupted = True
                     break
                 except:
                     raise
+
+            test_time = time.time() - start_time
+            previous_test = format_test_result(test, result[0])
+            if test_time >= PROGRESS_MIN_TIME:
+                previous_test = "%s in %s" % (previous_test,
+                                              format_duration(test_time))
+            elif result[0] == PASSED:
+                # be quiet: say nothing if the test passed shortly
+                previous_test = None
+
             if findleaks:
                 gc.collect()
                 if gc.garbage:
@@ -611,60 +915,105 @@
                     # them again
                     found_garbage.extend(gc.garbage)
                     del gc.garbage[:]
-            # Unload the newly imported modules (best effort finalization)
-            for module in sys.modules.keys():
-                if module not in save_modules and module.startswith("test."):
-                    test_support.unload(module)
 
-    if interrupted and not pgo:
+            unload_test_modules(save_modules)
+
+
+    def get_tests_result():
+        result = []
+        if bad:
+            result.append("FAILURE")
+        elif fail_env_changed and environment_changed:
+            result.append("ENV CHANGED")
+
+        if interrupted:
+            result.append("INTERRUPTED")
+
+        if not result:
+            result.append("SUCCESS")
+
+        result = ', '.join(result)
+        if first_result:
+            result = '%s then %s' % (first_result, result)
+        return result
+
+
+    def display_result():
         # print a newline after ^C
         print
-        print "Test suite interrupted by signal SIGINT."
-        omitted = set(selected) - set(good) - set(bad) - set(skipped)
-        print count(len(omitted), "test"), "omitted:"
-        printlist(omitted)
-    if good and not quiet and not pgo:
-        if not bad and not skipped and not interrupted and len(good) > 1:
-            print "All",
-        print count(len(good), "test"), "OK."
-    if print_slow:
-        test_times.sort(reverse=True)
-        print "10 slowest tests:"
-        for time, test in test_times[:10]:
-            print "%s: %.1fs" % (test, time)
-    if bad and not pgo:
-        print count(len(bad), "test"), "failed:"
-        printlist(bad)
-    if environment_changed and not pgo:
-        print "{} altered the execution environment:".format(
-            count(len(environment_changed), "test"))
-        printlist(environment_changed)
-    if skipped and not quiet and not pgo:
-        print count(len(skipped), "test"), "skipped:"
-        printlist(skipped)
+        print("== Tests result: %s ==" % get_tests_result())
 
-        e = _ExpectedSkips()
-        plat = sys.platform
-        if e.isvalid():
-            surprise = set(skipped) - e.getexpected() - set(resource_denieds)
-            if surprise:
-                print count(len(surprise), "skip"), \
-                      "unexpected on", plat + ":"
-                printlist(surprise)
+        if interrupted and not pgo:
+            print
+            print "Test suite interrupted by signal SIGINT."
+            omitted = set(selected) - set(good) - set(bad) - set(skipped)
+            print count(len(omitted), "test"), "omitted:"
+            printlist(omitted)
+
+        if good and not quiet and not pgo:
+            print
+            if not bad and not skipped and not interrupted and len(good) > 1:
+                print "All",
+            print count(len(good), "test"), "OK."
+
+        if print_slow:
+            test_times.sort(reverse=True)
+            print
+            print "10 slowest tests:"
+            for test_time, test in test_times[:10]:
+                print("- %s: %.1fs" % (test, test_time))
+
+        if bad and not pgo:
+            print
+            print count(len(bad), "test"), "failed:"
+            printlist(bad)
+
+        if environment_changed and not pgo:
+            print
+            print "{} altered the execution environment:".format(
+                count(len(environment_changed), "test"))
+            printlist(environment_changed)
+
+        if skipped and not quiet and not pgo:
+            print
+            print count(len(skipped), "test"), "skipped:"
+            printlist(skipped)
+
+            e = _ExpectedSkips()
+            plat = sys.platform
+            if e.isvalid():
+                surprise = set(skipped) - e.getexpected() - set(resource_denieds)
+                if surprise:
+                    print count(len(surprise), "skip"), \
+                          "unexpected on", plat + ":"
+                    printlist(surprise)
+                else:
+                    print "Those skips are all expected on", plat + "."
             else:
-                print "Those skips are all expected on", plat + "."
-        else:
-            print "Ask someone to teach regrtest.py about which tests are"
-            print "expected to get skipped on", plat + "."
+                print "Ask someone to teach regrtest.py about which tests are"
+                print "expected to get skipped on", plat + "."
+
+        if rerun:
+            print
+            print("%s:" % count(len(rerun), "re-run test"))
+            printlist(rerun)
+
+
+    display_result()
 
     if verbose2 and bad:
+        first_result = get_tests_result()
+
+        print
         print "Re-running failed tests in verbose mode"
-        for test in bad[:]:
+        rerun = bad[:]
+        for test in rerun:
             print "Re-running test %r in verbose mode" % test
             sys.stdout.flush()
             try:
-                test_support.verbose = True
-                ok = runtest(test, True, quiet, huntrleaks, None, pgo)
+                support.verbose = True
+                ok = runtest(test, True, quiet, huntrleaks, None, pgo,
+                             match_tests=match_tests, testdir=testdir)
             except KeyboardInterrupt:
                 # print a newline separate from the ^C
                 print
@@ -677,6 +1026,8 @@
                 print count(len(bad), "test"), "failed again:"
                 printlist(bad)
 
+        display_result()
+
     if single:
         if next_single_test:
             with open(filename, 'w') as fp:
@@ -691,7 +1042,19 @@
     if runleaks:
         os.system("leaks %d" % os.getpid())
 
-    sys.exit(len(bad) > 0 or interrupted)
+    print
+    duration = time.time() - regrtest_start_time
+    print("Total duration: %s" % format_duration(duration))
+
+    print("Tests result: %s" % get_tests_result())
+
+    if bad:
+        sys.exit(2)
+    if interrupted:
+        sys.exit(130)
+    if fail_env_changed and environment_changed:
+        sys.exit(3)
+    sys.exit(0)
 
 
 STDTESTS = [
@@ -725,7 +1088,8 @@
     return stdtests + sorted(tests)
 
 def runtest(test, verbose, quiet,
-            huntrleaks=False, use_resources=None, pgo=False):
+            huntrleaks=False, use_resources=None, pgo=False,
+            failfast=False, match_tests=None, testdir=None):
     """Run a single test.
 
     test -- the name of the test
@@ -738,6 +1102,7 @@
            for Profile Guided Optimization build
 
     Returns one of the test result constants:
+        CHILD_ERROR      Child process crashed
         INTERRUPTED      KeyboardInterrupt when run under -j
         RESOURCE_DENIED  test skipped because resource denied
         SKIPPED          test skipped for some other reason
@@ -746,11 +1111,18 @@
         PASSED           test passed
     """
 
-    test_support.verbose = verbose  # Tell tests to be moderately quiet
+    support.verbose = verbose  # Tell tests to be moderately quiet
     if use_resources is not None:
-        test_support.use_resources = use_resources
+        support.use_resources = use_resources
     try:
-        return runtest_inner(test, verbose, quiet, huntrleaks, pgo)
+        support.set_match_tests(match_tests)
+        # reset the environment_altered flag to detect if a test altered
+        # the environment
+        support.environment_altered = False
+        if failfast:
+            support.failfast = True
+
+        return runtest_inner(test, verbose, quiet, huntrleaks, pgo, testdir)
     finally:
         cleanup_test_droppings(test, verbose)
 
@@ -849,31 +1221,31 @@
             asyncore.close_all(ignore_all=True)
             asyncore.socket_map.update(saved_map)
 
-    def get_test_support_TESTFN(self):
-        if os.path.isfile(test_support.TESTFN):
+    def get_support_TESTFN(self):
+        if os.path.isfile(support.TESTFN):
             result = 'f'
-        elif os.path.isdir(test_support.TESTFN):
+        elif os.path.isdir(support.TESTFN):
             result = 'd'
         else:
             result = None
         return result
-    def restore_test_support_TESTFN(self, saved_value):
+    def restore_support_TESTFN(self, saved_value):
         if saved_value is None:
-            if os.path.isfile(test_support.TESTFN):
-                os.unlink(test_support.TESTFN)
-            elif os.path.isdir(test_support.TESTFN):
-                shutil.rmtree(test_support.TESTFN)
+            if os.path.isfile(support.TESTFN):
+                os.unlink(support.TESTFN)
+            elif os.path.isdir(support.TESTFN):
+                shutil.rmtree(support.TESTFN)
 
     def get_files(self):
         return sorted(fn + ('/' if os.path.isdir(fn) else '')
                       for fn in os.listdir(os.curdir))
     def restore_files(self, saved_value):
-        fn = test_support.TESTFN
+        fn = support.TESTFN
         if fn not in saved_value and (fn + '/') not in saved_value:
             if os.path.isfile(fn):
-                test_support.unlink(fn)
+                support.unlink(fn)
             elif os.path.isdir(fn):
-                test_support.rmtree(fn)
+                support.rmtree(fn)
 
     def resource_info(self):
         for name in self.resources:
@@ -890,6 +1262,10 @@
     def __exit__(self, exc_type, exc_val, exc_tb):
         saved_values = self.saved_values
         del self.saved_values
+
+        # Read support.environment_altered, set by support helper functions
+        self.changed |= support.environment_altered
+
         for name, get, restore in self.resource_info():
             current = get()
             original = saved_values.pop(name)
@@ -901,10 +1277,9 @@
                     print >>sys.stderr, (
                           "Warning -- {} was modified by {}".format(
                                                  name, self.testname))
-                    if self.verbose > 1 and not self.pgo:
-                        print >>sys.stderr, (
-                              "  Before: {}\n  After:  {} ".format(
-                                                  original, current))
+                    print >>sys.stderr, (
+                          "  Before: {}\n  After:  {} ".format(
+                                              original, current))
             # XXX (ncoghlan): for most resources (e.g. sys.path) identity
             # matters at least as much as value. For others (e.g. cwd),
             # identity is irrelevant. Should we add a mechanism to check
@@ -912,8 +1287,11 @@
         return False
 
 
-def runtest_inner(test, verbose, quiet, huntrleaks=False, pgo=False):
-    test_support.unload(test)
+def post_test_cleanup():
+    support.reap_children()
+
+def runtest_inner(test, verbose, quiet, huntrleaks=False, pgo=False, testdir=None):
+    support.unload(test)
     if verbose:
         capture_stdout = None
     else:
@@ -926,29 +1304,30 @@
         try:
             if capture_stdout:
                 sys.stdout = capture_stdout
-            if test.startswith('test.'):
-                abstest = test
-            else:
-                # Always import it from the test package
-                abstest = 'test.' + test
+            abstest = get_abs_module(testdir, test)
             clear_caches()
             with saved_test_environment(test, verbose, quiet, pgo) as environment:
                 start_time = time.time()
                 the_package = __import__(abstest, globals(), locals(), [])
-                the_module = getattr(the_package, test)
+                if abstest.startswith('test.'):
+                    the_module = getattr(the_package, test)
+                else:
+                    the_module = the_package
                 # Old tests run to completion simply as a side-effect of
                 # being imported.  For tests based on unittest or doctest,
                 # explicitly invoke their test_main() function (if it exists).
                 indirect_test = getattr(the_module, "test_main", None)
-                if indirect_test is not None:
-                    indirect_test()
                 if huntrleaks:
                     refleak = dash_R(the_module, test, indirect_test,
                         huntrleaks)
+                else:
+                    if indirect_test is not None:
+                        indirect_test()
                 test_time = time.time() - start_time
+            post_test_cleanup()
         finally:
             sys.stdout = save_stdout
-    except test_support.ResourceDenied, msg:
+    except support.ResourceDenied, msg:
         if not quiet and not pgo:
             print test, "skipped --", msg
             sys.stdout.flush()
@@ -960,7 +1339,7 @@
         return SKIPPED, test_time
     except KeyboardInterrupt:
         raise
-    except test_support.TestFailed, msg:
+    except support.TestFailed, msg:
         if not pgo:
             print >>sys.stderr, "test", test, "failed --", msg
         sys.stderr.flush()
@@ -1005,7 +1384,7 @@
     # since if a test leaves a file open, it cannot be deleted by name (while
     # there's nothing we can do about that here either, we can display the
     # name of the offending test, which is a real help).
-    for name in (test_support.TESTFN,
+    for name in (support.TESTFN,
                  "db_home",
                 ):
         if not os.path.exists(name):
@@ -1072,28 +1451,61 @@
 
     deltas = []
     nwarmup, ntracked, fname = huntrleaks
-    fname = os.path.join(test_support.SAVEDCWD, fname)
+    fname = os.path.join(support.SAVEDCWD, fname)
     repcount = nwarmup + ntracked
+    rc_deltas = [0] * ntracked
+    fd_deltas = [0] * ntracked
+
     print >> sys.stderr, "beginning", repcount, "repetitions"
     print >> sys.stderr, ("1234567890"*(repcount//10 + 1))[:repcount]
     dash_R_cleanup(fs, ps, pic, zdc, abcs)
+    # initialize variables to make pyflakes quiet
+    rc_before = fd_before = 0
     for i in range(repcount):
-        rc_before = sys.gettotalrefcount()
         run_the_test()
         sys.stderr.write('.')
         dash_R_cleanup(fs, ps, pic, zdc, abcs)
         rc_after = sys.gettotalrefcount()
+        fd_after = support.fd_count()
         if i >= nwarmup:
-            deltas.append(rc_after - rc_before)
+            rc_deltas[i - nwarmup] = rc_after - rc_before
+            fd_deltas[i - nwarmup] = fd_after - fd_before
+        rc_before = rc_after
+        fd_before = fd_after
     print >> sys.stderr
-    if any(deltas):
-        msg = '%s leaked %s references, sum=%s' % (test, deltas, sum(deltas))
-        print >> sys.stderr, msg
-        with open(fname, "a") as refrep:
-            print >> refrep, msg
-            refrep.flush()
-        return True
-    return False
+
+    # These checkers return False on success, True on failure
+    def check_rc_deltas(deltas):
+        # Checker for reference counters and memomry blocks.
+        #
+        # bpo-30776: Try to ignore false positives:
+        #
+        #   [3, 0, 0]
+        #   [0, 1, 0]
+        #   [8, -8, 1]
+        #
+        # Expected leaks:
+        #
+        #   [5, 5, 6]
+        #   [10, 1, 1]
+        return all(delta >= 1 for delta in deltas)
+
+    def check_fd_deltas(deltas):
+        return any(deltas)
+
+    failed = False
+    for deltas, item_name, checker in [
+        (rc_deltas, 'references', check_rc_deltas),
+        (fd_deltas, 'file descriptors', check_fd_deltas)
+    ]:
+        if checker(deltas):
+            msg = '%s leaked %s %s, sum=%s' % (test, deltas, item_name, sum(deltas))
+            print >> sys.stderr, msg
+            with open(fname, "a") as refrep:
+                print >> refrep, msg
+                refrep.flush()
+            failed = True
+    return failed
 
 def dash_R_cleanup(fs, ps, pic, zdc, abcs):
     import gc, copy_reg
@@ -1222,6 +1634,18 @@
     # Collect cyclic trash.
     gc.collect()
 
+def warm_caches():
+    """Create explicitly internal singletons which are created on demand
+    to prevent false positive when hunting reference leaks."""
+    # char cache
+    for i in range(256):
+        chr(i)
+    # unicode cache
+    for i in range(256):
+        unichr(i)
+    # int cache
+    list(range(-5, 257))
+
 def findtestdir(path=None):
     return path or os.path.dirname(__file__) or os.curdir
 
@@ -1239,7 +1663,7 @@
     else:
         return "%d %ss" % (n, word)
 
-def printlist(x, width=70, indent=4):
+def printlist(x, width=70, indent=4, file=None):
     """Print the elements of iterable x to stdout.
 
     Optional arg width (default 70) is the maximum line length.
@@ -1250,8 +1674,44 @@
     from textwrap import fill
     blanks = ' ' * indent
     # Print the sorted list: 'x' may be a '--random' list or a set()
-    print fill(' '.join(str(elt) for elt in sorted(x)), width,
-               initial_indent=blanks, subsequent_indent=blanks)
+    print >>file, fill(' '.join(str(elt) for elt in sorted(x)), width,
+                       initial_indent=blanks, subsequent_indent=blanks)
+
+def get_abs_module(testdir, test):
+    if test.startswith('test.') or testdir:
+        return test
+    else:
+        # Always import it from the test package
+        return 'test.' + test
+
+def _list_cases(suite):
+    for test in suite:
+        if isinstance(test, unittest.TestSuite):
+            _list_cases(test)
+        elif isinstance(test, unittest.TestCase):
+            if support.match_test(test):
+                print(test.id())
+
+def list_cases(testdir, selected, match_tests):
+    support.verbose = False
+    support.set_match_tests(match_tests)
+
+    save_modules = set(sys.modules)
+    skipped = []
+    for test in selected:
+        abstest = get_abs_module(testdir, test)
+        try:
+            suite = unittest.defaultTestLoader.loadTestsFromName(abstest)
+            _list_cases(suite)
+        except unittest.SkipTest:
+            skipped.append(test)
+
+        unload_test_modules(save_modules)
+
+    if skipped:
+        print >>sys.stderr
+        print >>sys.stderr, count(len(skipped), "test"), "skipped:"
+        printlist(skipped, file=sys.stderr)
 
 # Map sys.platform to a string containing the basenames of tests
 # expected to be skipped on that platform.
@@ -1645,15 +2105,9 @@
         assert self.isvalid()
         return self.expected
 
-if __name__ == '__main__':
-    # findtestdir() gets the dirname out of __file__, so we have to make it
-    # absolute before changing the working directory.
-    # For example __file__ may be relative when running trace or profile.
-    # See issue #9323.
-    __file__ = os.path.abspath(__file__)
-
-    # sanity check
-    assert __file__ == os.path.abspath(sys.argv[0])
+def main_in_temp_cwd():
+    """Run main() in a temporary working directory."""
+    global TEMPDIR
 
     # When tests are run from the Python build directory, it is best practice
     # to keep the test files in a subfolder.  It eases the cleanup of leftover
@@ -1674,6 +2128,19 @@
     # Run the tests in a context manager that temporary changes the CWD to a
     # temporary and writable directory. If it's not possible to create or
     # change the CWD, the original CWD will be used. The original CWD is
-    # available from test_support.SAVEDCWD.
-    with test_support.temp_cwd(TESTCWD, quiet=True):
+    # available from support.SAVEDCWD.
+    with support.temp_cwd(TESTCWD, quiet=True):
         main()
+
+if __name__ == '__main__':
+    # findtestdir() gets the dirname out of __file__, so we have to make it
+    # absolute before changing the working directory.
+    # For example __file__ may be relative when running trace or profile.
+    # See issue #9323.
+    global __file__
+    __file__ = os.path.abspath(__file__)
+
+    # sanity check
+    assert __file__ == os.path.abspath(sys.argv[0])
+
+    main_in_temp_cwd()
diff --git a/Lib/test/revocation.crl b/Lib/test/revocation.crl
index 6d89b08..53cb4b3 100644
--- a/Lib/test/revocation.crl
+++ b/Lib/test/revocation.crl
@@ -1,11 +1,11 @@
 -----BEGIN X509 CRL-----
 MIIBpjCBjwIBATANBgkqhkiG9w0BAQUFADBNMQswCQYDVQQGEwJYWTEmMCQGA1UE
 CgwdUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0ExFjAUBgNVBAMMDW91ci1j
-YS1zZXJ2ZXIXDTEzMTEyMTE3MDg0N1oXDTIzMDkzMDE3MDg0N1qgDjAMMAoGA1Ud
-FAQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQCNJXC2mVKauEeN3LlQ3ZtM5gkH3ExH
-+i4bmJjtJn497WwvvoIeUdrmVXgJQR93RtV37hZwN0SXMLlNmUZPH4rHhihayw4m
-unCzVj/OhCCY7/TPjKuJ1O/0XhaLBpBVjQN7R/1ujoRKbSia/CD3vcn7Fqxzw7LK
-fSRCKRGTj1CZiuxrphtFchwALXSiFDy9mr2ZKhImcyq1PydfgEzU78APpOkMQsIC
-UNJ/cf3c9emzf+dUtcMEcejQ3mynBo4eIGg1EW42bz4q4hSjzQlKcBV0muw5qXhc
-HOxH2iTFhQ7SrvVuK/dM14rYM4B5mSX3nRC1kNmXpS9j3wJDhuwmjHed
+YS1zZXJ2ZXIXDTE4MDExOTE5MDkwNloXDTI3MTEyODE5MDkwNlqgDjAMMAoGA1Ud
+FAQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBYVzH8n2LdyJJ/t8CpWjz652hZJ0sY
+DeNYcwuTPzR9CbSwEwNbf0kY9bgWXGfoRD2SnnCnuNNJXO2MuXtxf6qYx2ZjhJm8
+qgxXs0Bz4agRswNMbumjHCmqIv1t88vbrO0+ItEZDK7RJVIMBtVJ0XYOHvD/IG/i
+zqa1Fl3uCTvQbTJ2TrqzJeP/Vl40hOD+VdBBZK3j0r4AkCKU3tAiHYTGmHKhPxy1
+f8Yet+4SRMGp1BdDezTI1bICpSZhRJ4geW0UzuCZnXPW8IZzioUmdUBAmAMHPWFr
+B0sTTc/ntD4jHG1/T5b0oiDMbXIbh5Iz9iQNcY0IbotkCw39h+K90wY6
 -----END X509 CRL-----
diff --git a/Lib/test/script_helper.py b/Lib/test/script_helper.py
index 6be47bd..99ec114 100644
--- a/Lib/test/script_helper.py
+++ b/Lib/test/script_helper.py
@@ -1,170 +1 @@
-# Common utility functions used by various script execution tests
-#  e.g. test_cmd_line, test_cmd_line_script and test_runpy
-
-import sys
-import os
-import re
-import os.path
-import tempfile
-import subprocess
-import py_compile
-import contextlib
-import shutil
-try:
-    import zipfile
-except ImportError:
-    # If Python is build without Unicode support, importing _io will
-    # fail, which, in turn, means that zipfile cannot be imported
-    # Most of this module can then still be used.
-    pass
-
-from test.test_support import strip_python_stderr
-
-# Executing the interpreter in a subprocess
-def _assert_python(expected_success, *args, **env_vars):
-    cmd_line = [sys.executable]
-    if not env_vars:
-        cmd_line.append('-E')
-    cmd_line.extend(args)
-    # Need to preserve the original environment, for in-place testing of
-    # shared library builds.
-    env = os.environ.copy()
-    env.update(env_vars)
-    p = subprocess.Popen(cmd_line, stdin=subprocess.PIPE,
-                         stdout=subprocess.PIPE, stderr=subprocess.PIPE,
-                         env=env)
-    try:
-        out, err = p.communicate()
-    finally:
-        subprocess._cleanup()
-        p.stdout.close()
-        p.stderr.close()
-    rc = p.returncode
-    err =  strip_python_stderr(err)
-    if (rc and expected_success) or (not rc and not expected_success):
-        raise AssertionError(
-            "Process return code is %d, "
-            "stderr follows:\n%s" % (rc, err.decode('ascii', 'ignore')))
-    return rc, out, err
-
-def assert_python_ok(*args, **env_vars):
-    """
-    Assert that running the interpreter with `args` and optional environment
-    variables `env_vars` is ok and return a (return code, stdout, stderr) tuple.
-    """
-    return _assert_python(True, *args, **env_vars)
-
-def assert_python_failure(*args, **env_vars):
-    """
-    Assert that running the interpreter with `args` and optional environment
-    variables `env_vars` fails and return a (return code, stdout, stderr) tuple.
-    """
-    return _assert_python(False, *args, **env_vars)
-
-def python_exit_code(*args):
-    cmd_line = [sys.executable, '-E']
-    cmd_line.extend(args)
-    with open(os.devnull, 'w') as devnull:
-        return subprocess.call(cmd_line, stdout=devnull,
-                                stderr=subprocess.STDOUT)
-
-def spawn_python(*args, **kwargs):
-    cmd_line = [sys.executable, '-E']
-    cmd_line.extend(args)
-    return subprocess.Popen(cmd_line, stdin=subprocess.PIPE,
-                            stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
-                            **kwargs)
-
-def kill_python(p):
-    p.stdin.close()
-    data = p.stdout.read()
-    p.stdout.close()
-    # try to cleanup the child so we don't appear to leak when running
-    # with regrtest -R.
-    p.wait()
-    subprocess._cleanup()
-    return data
-
-def run_python(*args, **kwargs):
-    if __debug__:
-        p = spawn_python(*args, **kwargs)
-    else:
-        p = spawn_python('-O', *args, **kwargs)
-    stdout_data = kill_python(p)
-    return p.wait(), stdout_data
-
-# Script creation utilities
-@contextlib.contextmanager
-def temp_dir():
-    dirname = tempfile.mkdtemp()
-    dirname = os.path.realpath(dirname)
-    try:
-        yield dirname
-    finally:
-        shutil.rmtree(dirname)
-
-def make_script(script_dir, script_basename, source):
-    script_filename = script_basename+os.extsep+'py'
-    script_name = os.path.join(script_dir, script_filename)
-    script_file = open(script_name, 'w')
-    script_file.write(source)
-    script_file.close()
-    return script_name
-
-def compile_script(script_name):
-    py_compile.compile(script_name, doraise=True)
-    if __debug__:
-        compiled_name = script_name + 'c'
-    else:
-        compiled_name = script_name + 'o'
-    return compiled_name
-
-def make_zip_script(zip_dir, zip_basename, script_name, name_in_zip=None):
-    zip_filename = zip_basename+os.extsep+'zip'
-    zip_name = os.path.join(zip_dir, zip_filename)
-    zip_file = zipfile.ZipFile(zip_name, 'w')
-    if name_in_zip is None:
-        name_in_zip = os.path.basename(script_name)
-    zip_file.write(script_name, name_in_zip)
-    zip_file.close()
-    #if test.test_support.verbose:
-    #    zip_file = zipfile.ZipFile(zip_name, 'r')
-    #    print 'Contents of %r:' % zip_name
-    #    zip_file.printdir()
-    #    zip_file.close()
-    return zip_name, os.path.join(zip_name, name_in_zip)
-
-def make_pkg(pkg_dir, init_source=''):
-    os.mkdir(pkg_dir)
-    make_script(pkg_dir, '__init__', init_source)
-
-def make_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename,
-                 source, depth=1, compiled=False):
-    unlink = []
-    init_name = make_script(zip_dir, '__init__', '')
-    unlink.append(init_name)
-    init_basename = os.path.basename(init_name)
-    script_name = make_script(zip_dir, script_basename, source)
-    unlink.append(script_name)
-    if compiled:
-        init_name = compile_script(init_name)
-        script_name = compile_script(script_name)
-        unlink.extend((init_name, script_name))
-    pkg_names = [os.sep.join([pkg_name]*i) for i in range(1, depth+1)]
-    script_name_in_zip = os.path.join(pkg_names[-1], os.path.basename(script_name))
-    zip_filename = zip_basename+os.extsep+'zip'
-    zip_name = os.path.join(zip_dir, zip_filename)
-    zip_file = zipfile.ZipFile(zip_name, 'w')
-    for name in pkg_names:
-        init_name_in_zip = os.path.join(name, init_basename)
-        zip_file.write(init_name, init_name_in_zip)
-    zip_file.write(script_name, script_name_in_zip)
-    zip_file.close()
-    for name in unlink:
-        os.unlink(name)
-    #if test.test_support.verbose:
-    #    zip_file = zipfile.ZipFile(zip_name, 'r')
-    #    print 'Contents of %r:' % zip_name
-    #    zip_file.printdir()
-    #    zip_file.close()
-    return zip_name, os.path.join(zip_name, script_name_in_zip)
+from test.support.script_helper import *
diff --git a/Lib/test/sha256.pem b/Lib/test/sha256.pem
deleted file mode 100644
index d3db4b8..0000000
--- a/Lib/test/sha256.pem
+++ /dev/null
@@ -1,128 +0,0 @@
-# Certificate chain for https://sha256.tbs-internet.com
- 0 s:/C=FR/postalCode=14000/ST=Calvados/L=CAEN/street=22 rue de Bretagne/O=TBS INTERNET/OU=0002 440443810/OU=sha-256 production/CN=sha256.tbs-internet.com
-   i:/C=FR/ST=Calvados/L=Caen/O=TBS INTERNET/OU=Terms and Conditions: http://www.tbs-internet.com/CA/repository/OU=TBS INTERNET CA/CN=TBS X509 CA SGC
------BEGIN CERTIFICATE-----
-MIIGXDCCBUSgAwIBAgIRAKpVmHgg9nfCodAVwcP4siwwDQYJKoZIhvcNAQELBQAw
-gcQxCzAJBgNVBAYTAkZSMREwDwYDVQQIEwhDYWx2YWRvczENMAsGA1UEBxMEQ2Fl
-bjEVMBMGA1UEChMMVEJTIElOVEVSTkVUMUgwRgYDVQQLEz9UZXJtcyBhbmQgQ29u
-ZGl0aW9uczogaHR0cDovL3d3dy50YnMtaW50ZXJuZXQuY29tL0NBL3JlcG9zaXRv
-cnkxGDAWBgNVBAsTD1RCUyBJTlRFUk5FVCBDQTEYMBYGA1UEAxMPVEJTIFg1MDkg
-Q0EgU0dDMB4XDTEyMDEwNDAwMDAwMFoXDTE0MDIxNzIzNTk1OVowgcsxCzAJBgNV
-BAYTAkZSMQ4wDAYDVQQREwUxNDAwMDERMA8GA1UECBMIQ2FsdmFkb3MxDTALBgNV
-BAcTBENBRU4xGzAZBgNVBAkTEjIyIHJ1ZSBkZSBCcmV0YWduZTEVMBMGA1UEChMM
-VEJTIElOVEVSTkVUMRcwFQYDVQQLEw4wMDAyIDQ0MDQ0MzgxMDEbMBkGA1UECxMS
-c2hhLTI1NiBwcm9kdWN0aW9uMSAwHgYDVQQDExdzaGEyNTYudGJzLWludGVybmV0
-LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKQIX/zdJcyxty0m
-PM1XQSoSSifueS3AVcgqMsaIKS/u+rYzsv4hQ/qA6vLn5m5/ewUcZDj7zdi6rBVf
-PaVNXJ6YinLX0tkaW8TEjeVuZG5yksGZlhCt1CJ1Ho9XLiLaP4uJ7MCoNUntpJ+E
-LfrOdgsIj91kPmwjDJeztVcQCvKzhjVJA/KxdInc0JvOATn7rpaSmQI5bvIjufgo
-qVsTPwVFzuUYULXBk7KxRT7MiEqnd5HvviNh0285QC478zl3v0I0Fb5El4yD3p49
-IthcRnxzMKc0UhU5ogi0SbONyBfm/mzONVfSxpM+MlyvZmJqrbuuLoEDzJD+t8PU
-xSuzgbcCAwEAAaOCAj4wggI6MB8GA1UdIwQYMBaAFAdEdoWTKLx/bXjSCuv6TEvf
-2YIfMB0GA1UdDgQWBBT/qTGYdaj+f61c2IRFL/B1eEsM8DAOBgNVHQ8BAf8EBAMC
-BaAwDAYDVR0TAQH/BAIwADA0BgNVHSUELTArBggrBgEFBQcDAQYIKwYBBQUHAwIG
-CisGAQQBgjcKAwMGCWCGSAGG+EIEATBLBgNVHSAERDBCMEAGCisGAQQB5TcCBAEw
-MjAwBggrBgEFBQcCARYkaHR0cHM6Ly93d3cudGJzLWludGVybmV0LmNvbS9DQS9D
-UFM0MG0GA1UdHwRmMGQwMqAwoC6GLGh0dHA6Ly9jcmwudGJzLWludGVybmV0LmNv
-bS9UQlNYNTA5Q0FTR0MuY3JsMC6gLKAqhihodHRwOi8vY3JsLnRicy14NTA5LmNv
-bS9UQlNYNTA5Q0FTR0MuY3JsMIGmBggrBgEFBQcBAQSBmTCBljA4BggrBgEFBQcw
-AoYsaHR0cDovL2NydC50YnMtaW50ZXJuZXQuY29tL1RCU1g1MDlDQVNHQy5jcnQw
-NAYIKwYBBQUHMAKGKGh0dHA6Ly9jcnQudGJzLXg1MDkuY29tL1RCU1g1MDlDQVNH
-Qy5jcnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnRicy14NTA5LmNvbTA/BgNV
-HREEODA2ghdzaGEyNTYudGJzLWludGVybmV0LmNvbYIbd3d3LnNoYTI1Ni50YnMt
-aW50ZXJuZXQuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQA0pOuL8QvAa5yksTbGShzX
-ABApagunUGoEydv4YJT1MXy9tTp7DrWaozZSlsqBxrYAXP1d9r2fuKbEniYHxaQ0
-UYaf1VSIlDo1yuC8wE7wxbHDIpQ/E5KAyxiaJ8obtDhFstWAPAH+UoGXq0kj2teN
-21sFQ5dXgA95nldvVFsFhrRUNB6xXAcaj0VZFhttI0ZfQZmQwEI/P+N9Jr40OGun
-aa+Dn0TMeUH4U20YntfLbu2nDcJcYfyurm+8/0Tr4HznLnedXu9pCPYj0TaddrgT
-XO0oFiyy7qGaY6+qKh71yD64Y3ycCJ/HR9Wm39mjZYc9ezYwT4noP6r7Lk8YO7/q
------END CERTIFICATE-----
- 1 s:/C=FR/ST=Calvados/L=Caen/O=TBS INTERNET/OU=Terms and Conditions: http://www.tbs-internet.com/CA/repository/OU=TBS INTERNET CA/CN=TBS X509 CA SGC
-   i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
------BEGIN CERTIFICATE-----
-MIIFVjCCBD6gAwIBAgIQXpDZ0ETJMV02WTx3GTnhhTANBgkqhkiG9w0BAQUFADBv
-MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk
-ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF
-eHRlcm5hbCBDQSBSb290MB4XDTA1MTIwMTAwMDAwMFoXDTE5MDYyNDE5MDYzMFow
-gcQxCzAJBgNVBAYTAkZSMREwDwYDVQQIEwhDYWx2YWRvczENMAsGA1UEBxMEQ2Fl
-bjEVMBMGA1UEChMMVEJTIElOVEVSTkVUMUgwRgYDVQQLEz9UZXJtcyBhbmQgQ29u
-ZGl0aW9uczogaHR0cDovL3d3dy50YnMtaW50ZXJuZXQuY29tL0NBL3JlcG9zaXRv
-cnkxGDAWBgNVBAsTD1RCUyBJTlRFUk5FVCBDQTEYMBYGA1UEAxMPVEJTIFg1MDkg
-Q0EgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsgOkO3f7wzN6
-rOjg45tR5vjBfzK7qmV9IBxb/QW9EEXxG+E7FNhZqQLtwGBKoSsHTnQqV75wWMk0
-9tinWvftBkSpj5sTi/8cbzJfUvTSVYh3Qxv6AVVjMMH/ruLjE6y+4PoaPs8WoYAQ
-ts5R4Z1g8c/WnTepLst2x0/Wv7GmuoQi+gXvHU6YrBiu7XkeYhzc95QdviWSJRDk
-owhb5K43qhcvjRmBfO/paGlCliDGZp8mHwrI21mwobWpVjTxZRwYO3bd4+TGcI4G
-Ie5wmHwE8F7SK1tgSqbBacKjDa93j7txKkfz/Yd2n7TGqOXiHPsJpG655vrKtnXk
-9vs1zoDeJQIDAQABo4IBljCCAZIwHQYDVR0OBBYEFAdEdoWTKLx/bXjSCuv6TEvf
-2YIfMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMCAGA1UdJQQZ
-MBcGCisGAQQBgjcKAwMGCWCGSAGG+EIEATAYBgNVHSAEETAPMA0GCysGAQQBgOU3
-AgQBMHsGA1UdHwR0MHIwOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0Fk
-ZFRydXN0RXh0ZXJuYWxDQVJvb3QuY3JsMDagNKAyhjBodHRwOi8vY3JsLmNvbW9k
-by5uZXQvQWRkVHJ1c3RFeHRlcm5hbENBUm9vdC5jcmwwgYAGCCsGAQUFBwEBBHQw
-cjA4BggrBgEFBQcwAoYsaHR0cDovL2NydC5jb21vZG9jYS5jb20vQWRkVHJ1c3RV
-VE5TR0NDQS5jcnQwNgYIKwYBBQUHMAKGKmh0dHA6Ly9jcnQuY29tb2RvLm5ldC9B
-ZGRUcnVzdFVUTlNHQ0NBLmNydDARBglghkgBhvhCAQEEBAMCAgQwDQYJKoZIhvcN
-AQEFBQADggEBAK2zEzs+jcIrVK9oDkdDZNvhuBYTdCfpxfFs+OAujW0bIfJAy232
-euVsnJm6u/+OrqKudD2tad2BbejLLXhMZViaCmK7D9nrXHx4te5EP8rL19SUVqLY
-1pTnv5dhNgEgvA7n5lIzDSYs7yRLsr7HJsYPr6SeYSuZizyX1SNz7ooJ32/F3X98
-RB0Mlc/E0OyOrkQ9/y5IrnpnaSora8CnUrV5XNOg+kyCz9edCyx4D5wXYcwZPVWz
-8aDqquESrezPyjtfi4WRO4s/VD3HLZvOxzMrWAVYCDG9FxaOhF0QGuuG1F7F3GKV
-v6prNyCl016kRl2j1UT+a7gLd8fA25A4C9E=
------END CERTIFICATE-----
- 2 s:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
-   i:/C=US/ST=UT/L=Salt Lake City/O=The USERTRUST Network/OU=http://www.usertrust.com/CN=UTN - DATACorp SGC
------BEGIN CERTIFICATE-----
-MIIEZjCCA06gAwIBAgIQUSYKkxzif5zDpV954HKugjANBgkqhkiG9w0BAQUFADCB
-kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
-IFNHQzAeFw0wNTA2MDcwODA5MTBaFw0xOTA2MjQxOTA2MzBaMG8xCzAJBgNVBAYT
-AlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0
-ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
-IFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC39xoz5vIABC05
-4E5b7R+8bA/Ntfojts7emxEzl6QpTH2Tn71KvJPtAxrjj8/lbVBa1pcplFqAsEl6
-2y6V/bjKvzc4LR4+kUGtcFbH8E8/6DKedMrIkFTpxl8PeJ2aQDwOrGGqXhSPnoeh
-alDc15pOrwWzpnGUnHGzUGAKxxOdOAeGAqjpqGkmGJCrTLBPI6s6T4TY386f4Wlv
-u9dC12tE5Met7m1BX3JacQg3s3llpFmglDf3AC8NwpJy2tA4ctsUqEXEXSp9t7TW
-xO6szRNEt8kr3UMAJfphuWlqWCMRt6czj1Z1WfXNKddGtworZbbTQm8Vsrh7++/p
-XVPVNFonAgMBAAGjgdgwgdUwHwYDVR0jBBgwFoAUUzLRs89/+uDxoF2FTpLSnkUd
-tE8wHQYDVR0OBBYEFK29mHo0tCb3+sQmVO8DveAky1QaMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MBEGCWCGSAGG+EIBAQQEAwIBAjAgBgNVHSUEGTAX
-BgorBgEEAYI3CgMDBglghkgBhvhCBAEwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDov
-L2NybC51c2VydHJ1c3QuY29tL1VUTi1EQVRBQ29ycFNHQy5jcmwwDQYJKoZIhvcN
-AQEFBQADggEBAMbuUxdoFLJRIh6QWA2U/b3xcOWGLcM2MY9USEbnLQg3vGwKYOEO
-rVE04BKT6b64q7gmtOmWPSiPrmQH/uAB7MXjkesYoPF1ftsK5p+R26+udd8jkWjd
-FwBaS/9kbHDrARrQkNnHptZt9hPk/7XJ0h4qy7ElQyZ42TCbTg0evmnv3+r+LbPM
-+bDdtRTKkdSytaX7ARmjR3mfnYyVhzT4HziS2jamEfpr62vp3EV4FTkG101B5CHI
-3C+H0be/SGB1pWLLJN47YaApIKa+xWycxOkKaSLvkTr6Jq/RW0GnOuL4OAdCq8Fb
-+M5tug8EPzI0rNwEKNdwMBQmBsTkm5jVz3g=
------END CERTIFICATE-----
- 3 s:/C=US/ST=UT/L=Salt Lake City/O=The USERTRUST Network/OU=http://www.usertrust.com/CN=UTN - DATACorp SGC
-   i:/C=US/ST=UT/L=Salt Lake City/O=The USERTRUST Network/OU=http://www.usertrust.com/CN=UTN - DATACorp SGC
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
-kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
-IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
-EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
-VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
-dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
-E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
-D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
-4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
-lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
-bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
-o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
-MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
-LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
-BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
-AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
-j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
-KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
-2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
-mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
diff --git a/Lib/test/ssl_cert.pem b/Lib/test/ssl_cert.pem
index 47a7d7e..b1dd3f3 100644
--- a/Lib/test/ssl_cert.pem
+++ b/Lib/test/ssl_cert.pem
@@ -1,15 +1,20 @@
 -----BEGIN CERTIFICATE-----
-MIICVDCCAb2gAwIBAgIJANfHOBkZr8JOMA0GCSqGSIb3DQEBBQUAMF8xCzAJBgNV
-BAYTAlhZMRcwFQYDVQQHEw5DYXN0bGUgQW50aHJheDEjMCEGA1UEChMaUHl0aG9u
-IFNvZnR3YXJlIEZvdW5kYXRpb24xEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xMDEw
-MDgyMzAxNTZaFw0yMDEwMDUyMzAxNTZaMF8xCzAJBgNVBAYTAlhZMRcwFQYDVQQH
-Ew5DYXN0bGUgQW50aHJheDEjMCEGA1UEChMaUHl0aG9uIFNvZnR3YXJlIEZvdW5k
-YXRpb24xEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
-gYkCgYEA21vT5isq7F68amYuuNpSFlKDPrMUCa4YWYqZRt2OZ+/3NKaZ2xAiSwr7
-6MrQF70t5nLbSPpqE5+5VrS58SY+g/sXLiFd6AplH1wJZwh78DofbFYXUggktFMt
-pTyiX8jtP66bkcPkDADA089RI1TQR6Ca+n7HFa7c1fabVV6i3zkCAwEAAaMYMBYw
-FAYDVR0RBA0wC4IJbG9jYWxob3N0MA0GCSqGSIb3DQEBBQUAA4GBAHPctQBEQ4wd
-BJ6+JcpIraopLn8BGhbjNWj40mmRqWB/NAWF6M5ne7KpGAu7tLeG4hb1zLaldK8G
-lxy2GPSRF6LFS48dpEj2HbMv2nvv6xxalDMJ9+DicWgAKTQ6bcX2j3GUkCR0g/T1
-CRlNBAAlvhKzO7Clpf9l0YKBEfraJByX
+MIIDWTCCAkGgAwIBAgIJAPm6B21bar2bMA0GCSqGSIb3DQEBCwUAMF8xCzAJBgNV
+BAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9u
+IFNvZnR3YXJlIEZvdW5kYXRpb24xEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0xODAx
+MTkxOTA5MDZaFw0yODAxMTcxOTA5MDZaMF8xCzAJBgNVBAYTAlhZMRcwFQYDVQQH
+DA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5k
+YXRpb24xEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAKvvsX2gEti4shve3iYMc+jE4Se7WHs1Bol2f21H8qNboDOFdeb1
+RKHjmq3exHpajywOUEgne9nKHJY/3f2phR4Y5klqG6liLgiSpVyRlcBGbeT2qEAj
+9oLiLFUXLGfGDds2mTwivQDLJBWi51j7ff5k2Pr58fN5ugYMn24T9FNyn0moT+qj
+SFoBNm58l9jrdkJSlgWfqPlbiMa+mqDn/SFtrwLF2Trbfzu42Sd9UdIzMaSSrzbN
+sGm53pNhCh8KndWUQ8GPP2IsLPoUU4qAtmZuTxCx2S1cXrN9EkmT69tlOH84YfSn
+96Ih9bWRc7M5y5bfVdEVM+fKQl3hBRf05qMCAwEAAaMYMBYwFAYDVR0RBA0wC4IJ
+bG9jYWxob3N0MA0GCSqGSIb3DQEBCwUAA4IBAQAtQ8f37cCEk7/rAcbYR53ce3iK
+Vpihb0U2ni1QjG9Tg9UIExkIGkwTiCm7kwQL+GEStBu9AG/QVrOjeTriRiddhWkk
+ze8kRaI3AC/63t6Vh9Q1x6PESgeE4OtAO9JpJCf4GILglA789Y/b/GF8zJZQxR13
+qpB4ZwWw7gCBhdEW59u6CFeBmfDa58hM8lWvuVoRrTi7bjUeC6PAn5HVMzZSykhu
+4HaUfBp6bKFjuym2+h/VvM1n8C3chjVSmutsLb6ELdD8IK0vPV/yf5+LN256zSsS
+dyUZYd8XwQaioEMKdbhLvnehyzHiWfQIUR3BdhONxoIJhHv/EAo8eCkHHYIF
 -----END CERTIFICATE-----
diff --git a/Lib/test/ssl_key.passwd.pem b/Lib/test/ssl_key.passwd.pem
index 2524672..669c7ce 100644
--- a/Lib/test/ssl_key.passwd.pem
+++ b/Lib/test/ssl_key.passwd.pem
@@ -1,18 +1,30 @@
 -----BEGIN RSA PRIVATE KEY-----
 Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,1A8D9D2A02EC698A
+DEK-Info: DES-EDE3-CBC,2D5DD30B9D440DBB
 
-kJYbfZ8L0sfe9Oty3gw0aloNnY5E8fegRfQLZlNoxTl6jNt0nIwI8kDJ36CZgR9c
-u3FDJm/KqrfUoz8vW+qEnWhSG7QPX2wWGPHd4K94Yz/FgrRzZ0DoK7XxXq9gOtVA
-AVGQhnz32p+6WhfGsCr9ArXEwRZrTk/FvzEPaU5fHcoSkrNVAGX8IpSVkSDwEDQr
-Gv17+cfk99UV1OCza6yKHoFkTtrC+PZU71LomBabivS2Oc4B9hYuSR2hF01wTHP+
-YlWNagZOOVtNz4oKK9x9eNQpmfQXQvPPTfusexKIbKfZrMvJoxcm1gfcZ0H/wK6P
-6wmXSG35qMOOztCZNtperjs1wzEBXznyK8QmLcAJBjkfarABJX9vBEzZV0OUKhy+
-noORFwHTllphbmydLhu6ehLUZMHPhzAS5UN7srtpSN81eerDMy0RMUAwA7/PofX1
-94Me85Q8jP0PC9ETdsJcPqLzAPETEYu0ELewKRcrdyWi+tlLFrpE5KT/s5ecbl9l
-7B61U4Kfd1PIXc/siINhU3A3bYK+845YyUArUOnKf1kEox7p1RpD7yFqVT04lRTo
-cibNKATBusXSuBrp2G6GNuhWEOSafWCKJQAzgCYIp6ZTV2khhMUGppc/2H3CF6cO
-zX0KtlPVZC7hLkB6HT8SxYUwF1zqWY7+/XPPdc37MeEZ87Q3UuZwqORLY+Z0hpgt
-L5JXBCoklZhCAaN2GqwFLXtGiRSRFGY7xXIhbDTlE65Wv1WGGgDLMKGE1gOz3yAo
-2jjG1+yAHJUdE69XTFHSqSkvaloA1W03LdMXZ9VuQJ/ySXCie6ABAQ==
+01gIwpy3XxPGsY0PoK59vAxdLhkVj3odO0Z1ULamUzIte6ThKL1HqnZiUlXpYKfK
+XqHVVeQ1xouxiDRNFLJ4CqBG4HbRtqTkl+sfaNTVveL18lOOMAZy6W3dCGAnWOTZ
+Z0RJyZlQxxjNQLuko4tIvFkrShXIgdiVFjwAhRU0KTUb7UQ2xfFA9R0Kfde30pzz
+zSjb/OmYqAIhkdvafGXvJxzZAorQkU9akDh+uJ6cht5B/RGZsbKACYDSv2WSV5yW
+r+fKVYcTup33r0Jj8hAD6fVY15K8BJknpkF9HfSlZnmmr2WDaffLokOOnCV/I1ie
+WD7ENA7K//48km5D3Ogh2b2/0Iwuzjq8Mvd8aR39N9nINbGR+HNT85pawoo1S0W9
+pQTU4XTmxfXjtR2287C6XZyQ/tBwvNDMFPVhlxsGOdLYwoV5e/L1t1qIfkTlbuvd
+JaMzOhSSLjiC156IFoH7PTPe+g75hw2b32XJURFGlaYknHF7P4BmCiwXOQYo5CCo
+MQGGlw5qBCqODrIsc03wpL2jUzgvyPqLyaw395ITuSoGX+WO7vUQaGW0Tz/sOoTs
+3pK+bTi2QmqZMe7xBOj07CYMMOo4QPrM6NpbObt+Jja2UXaxvKa9BwqCEQzA4pQZ
+8ZHHfEWIaDffKTGkAlqm+S8qCtsrEZJhIn3aI/ikzK8v+YkWw6w+8t/tR1V8ET/s
+CoYGIR7I8WhdfKAwgx2QT5bt1jkYKJyKPm4Iacp2mNh9gNFVq+JSKF318e7BrR3+
+wyqMkDxRYnov3ybtf6kiICxPREDqa6UG1xRq3SbWz6NnIF/1hoHs79YlSYbMfXNU
+ffIxBaXNCcH6jM9duP2YRnO29jLwfLM/mmokTBBjyOBaKZia9GPa4naXoATXW3z+
+Xx4EKIUkKdb53kiV6NtEKMPialAnkeoHTEjyLPgaV8mCHLvGQbnxbYwvpPJH0e2f
+CWgiw6ci4ROOzcZ7HJHIDUprwK0xRKn43hoI44fivlSHOFX6da6o3wIqhEUqMKwL
+JQDS1GORRk1ndRXP+7Ub1dO+Vo/DqO1VcTr2o5RwZ1LWPnzLqbCG50mvTLH4djB+
++hf6vlmnFC30N3yUFXWE5vS10nJHYP88dD9CB2RsaWzpxD9Zxl+PKcRsppen6HyO
+u3b71a/TBOkJcI+lkOatEFvbuqzBAqhMceMctO+Dl55RFsbxfIw/IXZjdP0PYZ0C
+t20DrIdBsvl9F/mfYpmkV4DF7yci78DqnRBcxylVNF2vwX7o+2fq/TsEwsHn3KnT
+kvcF5Cq8Vr5C8ugWX8JfveNym0BjLu6Lr58qS4a6qCNGEGPFKyB+xkm4KEScbarQ
+aLbEbfulMM7q9//sEOOLexIx7mNoLd29Xzn5hsLCAZLWX6wMq6JVJ/zbBOAHDbBT
+yhi03yd5Kvw3swSt4QZj+uR3qTFwxkXUFiVvrSfxRZoyKsxsLr9Z7D8aoH9Rkb2L
+6KjZ31nt9Drh7NJfh6ReANBW6INdDW0Y2mbzoDozLszAYjVfuUUEE76iJqXY0N4W
+kNr0OQQTUtDpVk0AZZZvy17xV+rkqGgwlOqTvHbwFYEQvgwVz4EKUw==
 -----END RSA PRIVATE KEY-----
diff --git a/Lib/test/ssl_key.pem b/Lib/test/ssl_key.pem
index 3fd3bbd..b63f38b 100644
--- a/Lib/test/ssl_key.pem
+++ b/Lib/test/ssl_key.pem
@@ -1,16 +1,28 @@
 -----BEGIN PRIVATE KEY-----
-MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANtb0+YrKuxevGpm
-LrjaUhZSgz6zFAmuGFmKmUbdjmfv9zSmmdsQIksK++jK0Be9LeZy20j6ahOfuVa0
-ufEmPoP7Fy4hXegKZR9cCWcIe/A6H2xWF1IIJLRTLaU8ol/I7T+um5HD5AwAwNPP
-USNU0Eegmvp+xxWu3NX2m1Veot85AgMBAAECgYA3ZdZ673X0oexFlq7AAmrutkHt
-CL7LvwrpOiaBjhyTxTeSNWzvtQBkIU8DOI0bIazA4UreAFffwtvEuPmonDb3F+Iq
-SMAu42XcGyVZEl+gHlTPU9XRX7nTOXVt+MlRRRxL6t9GkGfUAXI3XxJDXW3c0vBK
-UL9xqD8cORXOfE06rQJBAP8mEX1ERkR64Ptsoe4281vjTlNfIbs7NMPkUnrn9N/Y
-BLhjNIfQ3HFZG8BTMLfX7kCS9D593DW5tV4Z9BP/c6cCQQDcFzCcVArNh2JSywOQ
-ZfTfRbJg/Z5Lt9Fkngv1meeGNPgIMLN8Sg679pAOOWmzdMO3V706rNPzSVMME7E5
-oPIfAkEA8pDddarP5tCvTTgUpmTFbakm0KoTZm2+FzHcnA4jRh+XNTjTOv98Y6Ik
-eO5d1ZnKXseWvkZncQgxfdnMqqpj5wJAcNq/RVne1DbYlwWchT2Si65MYmmJ8t+F
-0mcsULqjOnEMwf5e+ptq5LzwbyrHZYq5FNk7ocufPv/ZQrcSSC+cFwJBAKvOJByS
-x56qyGeZLOQlWS2JS3KJo59XuLFGqcbgN9Om9xFa41Yb4N9NvplFivsvZdw3m1Q/
-SPIXQuT8RMPDVNQ=
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCr77F9oBLYuLIb
+3t4mDHPoxOEnu1h7NQaJdn9tR/KjW6AzhXXm9USh45qt3sR6Wo8sDlBIJ3vZyhyW
+P939qYUeGOZJahupYi4IkqVckZXARm3k9qhAI/aC4ixVFyxnxg3bNpk8Ir0AyyQV
+oudY+33+ZNj6+fHzeboGDJ9uE/RTcp9JqE/qo0haATZufJfY63ZCUpYFn6j5W4jG
+vpqg5/0hba8Cxdk62387uNknfVHSMzGkkq82zbBpud6TYQofCp3VlEPBjz9iLCz6
+FFOKgLZmbk8QsdktXF6zfRJJk+vbZTh/OGH0p/eiIfW1kXOzOcuW31XRFTPnykJd
+4QUX9OajAgMBAAECggEAHppmXDbuw9Z0FVPg9KLIysioTtsgz6VLiZIm8juZK4x2
+glUh/D7xvWL2uDXrgN+3lh7iGUW13LkFx5SMncbbo9TIwI57Z/XKvcnkVwquve+L
+RfLFVc1Q5lD9lROv2rS86KTaN4LzYz3FKXi6dvMkpPAsUtfEQhMLkmISypQQq/1z
+EJaqo7r85OjN7e0wKazlKZpOzJEa5FQLMVRjTRFhLFNbHXX/tAet2jw+umATKbw8
+hYgiuZ44TwSEd9JeIV/oSYWfI/3HetuYW0ru3caiztRF2NySNu8lcsWgNC7fIku9
+mcHjtSNzs91QN1Qlu7GQvvhpt6OWDirNDCW+49WGaQKBgQDg9SDhfF0jRYslgYbH
+cqO4ggaFdHjrAAYpwnAgvanhFZL/zEqm5G1E7l/e2fCkJ9VOSFO0A208chvwMcr+
+dCjHE2tVdE81aQ2v/Eo83VdS1RcOV4Y75yPH48rMhxPaHvxWD/FFDbf0/P2mtPB7
+SZ3kIeZMkE1wxdaO3AKUbQoozwKBgQDDqYgg7kVtygyICE1mB8Hwp6nUxFTczG7y
+4XcsDqMIrKmw+PbQluvkoHoStxeVrsTloDhkTjIrpmYLyAiazg+PUJdkd6xrfLSj
+VV6X93W0S/1egEb1F1CGFxtk8v/PWH4K76EPL2vxXdxjywz3GWlrL9yDYaB2szzS
+DqgwVMqx7QKBgDCD7UF0Bsoyl13RX3XoPXLvZ+SkR+e2q52Z94C4JskKVBeiwX7Y
+yNAS8M4pBoMArDoj0xmBm69rlKbqtjLGbnzwrTdSzDpim7cWnBQgUFLm7gAD1Elb
+AhZ8BCK0Bw4FnLoa2hfga4oEfdfUMgEE0W5/+SEOBgWKRUmuHUhRc911AoGAY2EN
+YmSDYSM5wDIvVb5k9B3EtevOiqNPSw/XnsoEZtiEC/44JnQxdltIBY93bDBrk5IQ
+cmoBM4h91kgQjshQwOMXMhFSwvmBKmCm/hrTbvMVytTutXfVD3ZXFKwT4DW7N0TF
+ElhsxBh/YzRz7mG62JVjtFt2zDN3ld2Z8YpvtXUCgYEA4EJ4ObS5YyvcXAKHJFo6
+Fxmavyrf8LSm3MFA65uSnFvWukMVqqRMReQc5jvpxHKCis+XvnHzyOfL0gW9ZTi7
+tWGGbBi0TRJCa8BkvgngUZxOxUlMfg/7cVxOIB0TPoUSgxFd/+qVz4GZMvr0dPu7
+eAF7J/8ECVvb0wSPTUI1N3c=
 -----END PRIVATE KEY-----
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
new file mode 100644
index 0000000..6da2597
--- /dev/null
+++ b/Lib/test/support/__init__.py
@@ -0,0 +1,2161 @@
+"""Supporting definitions for the Python regression tests."""
+
+if __name__ != 'test.support':
+    raise ImportError('test.support must be imported from the test package')
+
+import contextlib
+import errno
+import fnmatch
+import functools
+import gc
+import socket
+import stat
+import sys
+import os
+import platform
+import shutil
+import warnings
+import unittest
+import importlib
+import UserDict
+import re
+import time
+import struct
+import sysconfig
+import types
+
+try:
+    import thread
+except ImportError:
+    thread = None
+
+__all__ = ["Error", "TestFailed", "ResourceDenied", "import_module",
+           "verbose", "use_resources", "max_memuse", "record_original_stdout",
+           "get_original_stdout", "unload", "unlink", "rmtree", "forget",
+           "is_resource_enabled", "requires", "requires_mac_ver",
+           "find_unused_port", "bind_port",
+           "fcmp", "have_unicode", "is_jython", "TESTFN", "HOST", "FUZZ",
+           "SAVEDCWD", "temp_cwd", "findfile", "sortdict", "check_syntax_error",
+           "open_urlresource", "check_warnings", "check_py3k_warnings",
+           "CleanImport", "EnvironmentVarGuard", "captured_output",
+           "captured_stdout", "TransientResource", "transient_internet",
+           "run_with_locale", "set_memlimit", "bigmemtest", "bigaddrspacetest",
+           "BasicTestRunner", "run_unittest", "run_doctest", "threading_setup",
+           "threading_cleanup", "reap_threads", "start_threads", "cpython_only",
+           "check_impl_detail", "get_attribute", "py3k_bytes",
+           "import_fresh_module", "threading_cleanup", "reap_children",
+           "strip_python_stderr", "IPV6_ENABLED", "run_with_tz",
+           "SuppressCrashReport"]
+
+class Error(Exception):
+    """Base class for regression test exceptions."""
+
+class TestFailed(Error):
+    """Test failed."""
+
+class ResourceDenied(unittest.SkipTest):
+    """Test skipped because it requested a disallowed resource.
+
+    This is raised when a test calls requires() for a resource that
+    has not been enabled.  It is used to distinguish between expected
+    and unexpected skips.
+    """
+
+@contextlib.contextmanager
+def _ignore_deprecated_imports(ignore=True):
+    """Context manager to suppress package and module deprecation
+    warnings when importing them.
+
+    If ignore is False, this context manager has no effect."""
+    if ignore:
+        with warnings.catch_warnings():
+            warnings.filterwarnings("ignore", ".+ (module|package)",
+                                    DeprecationWarning)
+            yield
+    else:
+        yield
+
+
+def import_module(name, deprecated=False):
+    """Import and return the module to be tested, raising SkipTest if
+    it is not available.
+
+    If deprecated is True, any module or package deprecation messages
+    will be suppressed."""
+    with _ignore_deprecated_imports(deprecated):
+        try:
+            return importlib.import_module(name)
+        except ImportError, msg:
+            raise unittest.SkipTest(str(msg))
+
+
+def _save_and_remove_module(name, orig_modules):
+    """Helper function to save and remove a module from sys.modules
+
+       Raise ImportError if the module can't be imported."""
+    # try to import the module and raise an error if it can't be imported
+    if name not in sys.modules:
+        __import__(name)
+        del sys.modules[name]
+    for modname in list(sys.modules):
+        if modname == name or modname.startswith(name + '.'):
+            orig_modules[modname] = sys.modules[modname]
+            del sys.modules[modname]
+
+def _save_and_block_module(name, orig_modules):
+    """Helper function to save and block a module in sys.modules
+
+       Return True if the module was in sys.modules, False otherwise."""
+    saved = True
+    try:
+        orig_modules[name] = sys.modules[name]
+    except KeyError:
+        saved = False
+    sys.modules[name] = None
+    return saved
+
+
+def import_fresh_module(name, fresh=(), blocked=(), deprecated=False):
+    """Imports and returns a module, deliberately bypassing the sys.modules cache
+    and importing a fresh copy of the module. Once the import is complete,
+    the sys.modules cache is restored to its original state.
+
+    Modules named in fresh are also imported anew if needed by the import.
+    If one of these modules can't be imported, None is returned.
+
+    Importing of modules named in blocked is prevented while the fresh import
+    takes place.
+
+    If deprecated is True, any module or package deprecation messages
+    will be suppressed."""
+    # NOTE: test_heapq, test_json, and test_warnings include extra sanity
+    # checks to make sure that this utility function is working as expected
+    with _ignore_deprecated_imports(deprecated):
+        # Keep track of modules saved for later restoration as well
+        # as those which just need a blocking entry removed
+        orig_modules = {}
+        names_to_remove = []
+        _save_and_remove_module(name, orig_modules)
+        try:
+            for fresh_name in fresh:
+                _save_and_remove_module(fresh_name, orig_modules)
+            for blocked_name in blocked:
+                if not _save_and_block_module(blocked_name, orig_modules):
+                    names_to_remove.append(blocked_name)
+            fresh_module = importlib.import_module(name)
+        except ImportError:
+            fresh_module = None
+        finally:
+            for orig_name, module in orig_modules.items():
+                sys.modules[orig_name] = module
+            for name_to_remove in names_to_remove:
+                del sys.modules[name_to_remove]
+        return fresh_module
+
+
+def get_attribute(obj, name):
+    """Get an attribute, raising SkipTest if AttributeError is raised."""
+    try:
+        attribute = getattr(obj, name)
+    except AttributeError:
+        if isinstance(obj, types.ModuleType):
+            msg = "module %r has no attribute %r" % (obj.__name__, name)
+        elif isinstance(obj, types.ClassType):
+            msg = "class %s has no attribute %r" % (obj.__name__, name)
+        elif isinstance(obj, types.InstanceType):
+            msg = "%s instance has no attribute %r" % (obj.__class__.__name__, name)
+        elif isinstance(obj, type):
+            msg = "type object %r has no attribute %r" % (obj.__name__, name)
+        else:
+            msg = "%r object has no attribute %r" % (type(obj).__name__, name)
+        raise unittest.SkipTest(msg)
+    else:
+        return attribute
+
+
+verbose = 1              # Flag set to 0 by regrtest.py
+use_resources = None     # Flag set to [] by regrtest.py
+max_memuse = 0           # Disable bigmem tests (they will still be run with
+                         # small sizes, to make sure they work.)
+real_max_memuse = 0
+failfast = False
+
+# _original_stdout is meant to hold stdout at the time regrtest began.
+# This may be "the real" stdout, or IDLE's emulation of stdout, or whatever.
+# The point is to have some flavor of stdout the user can actually see.
+_original_stdout = None
+def record_original_stdout(stdout):
+    global _original_stdout
+    _original_stdout = stdout
+
+def get_original_stdout():
+    return _original_stdout or sys.stdout
+
+def unload(name):
+    try:
+        del sys.modules[name]
+    except KeyError:
+        pass
+
+def _force_run(path, func, *args):
+    try:
+        return func(*args)
+    except EnvironmentError as err:
+        if verbose >= 2:
+            print('%s: %s' % (err.__class__.__name__, err))
+            print('re-run %s%r' % (func.__name__, args))
+        os.chmod(path, stat.S_IRWXU)
+        return func(*args)
+
+if sys.platform.startswith("win"):
+    def _waitfor(func, pathname, waitall=False):
+        # Perform the operation
+        func(pathname)
+        # Now setup the wait loop
+        if waitall:
+            dirname = pathname
+        else:
+            dirname, name = os.path.split(pathname)
+            dirname = dirname or '.'
+        # Check for `pathname` to be removed from the filesystem.
+        # The exponential backoff of the timeout amounts to a total
+        # of ~1 second after which the deletion is probably an error
+        # anyway.
+        # Testing on an i7@4.3GHz shows that usually only 1 iteration is
+        # required when contention occurs.
+        timeout = 0.001
+        while timeout < 1.0:
+            # Note we are only testing for the existence of the file(s) in
+            # the contents of the directory regardless of any security or
+            # access rights.  If we have made it this far, we have sufficient
+            # permissions to do that much using Python's equivalent of the
+            # Windows API FindFirstFile.
+            # Other Windows APIs can fail or give incorrect results when
+            # dealing with files that are pending deletion.
+            L = os.listdir(dirname)
+            if not (L if waitall else name in L):
+                return
+            # Increase the timeout and try again
+            time.sleep(timeout)
+            timeout *= 2
+        warnings.warn('tests may fail, delete still pending for ' + pathname,
+                      RuntimeWarning, stacklevel=4)
+
+    def _unlink(filename):
+        _waitfor(os.unlink, filename)
+
+    def _rmdir(dirname):
+        _waitfor(os.rmdir, dirname)
+
+    def _rmtree(path):
+        def _rmtree_inner(path):
+            for name in _force_run(path, os.listdir, path):
+                fullname = os.path.join(path, name)
+                if os.path.isdir(fullname):
+                    _waitfor(_rmtree_inner, fullname, waitall=True)
+                    _force_run(fullname, os.rmdir, fullname)
+                else:
+                    _force_run(fullname, os.unlink, fullname)
+        _waitfor(_rmtree_inner, path, waitall=True)
+        _waitfor(lambda p: _force_run(p, os.rmdir, p), path)
+else:
+    _unlink = os.unlink
+    _rmdir = os.rmdir
+
+    def _rmtree(path):
+        try:
+            shutil.rmtree(path)
+            return
+        except EnvironmentError:
+            pass
+
+        def _rmtree_inner(path):
+            for name in _force_run(path, os.listdir, path):
+                fullname = os.path.join(path, name)
+                try:
+                    mode = os.lstat(fullname).st_mode
+                except EnvironmentError:
+                    mode = 0
+                if stat.S_ISDIR(mode):
+                    _rmtree_inner(fullname)
+                    _force_run(path, os.rmdir, fullname)
+                else:
+                    _force_run(path, os.unlink, fullname)
+        _rmtree_inner(path)
+        os.rmdir(path)
+
+def unlink(filename):
+    try:
+        _unlink(filename)
+    except OSError as exc:
+        if exc.errno not in (errno.ENOENT, errno.ENOTDIR):
+            raise
+
+def rmdir(dirname):
+    try:
+        _rmdir(dirname)
+    except OSError as error:
+        # The directory need not exist.
+        if error.errno != errno.ENOENT:
+            raise
+
+def rmtree(path):
+    try:
+        _rmtree(path)
+    except OSError, e:
+        # Unix returns ENOENT, Windows returns ESRCH.
+        if e.errno not in (errno.ENOENT, errno.ESRCH):
+            raise
+
+def forget(modname):
+    '''"Forget" a module was ever imported by removing it from sys.modules and
+    deleting any .pyc and .pyo files.'''
+    unload(modname)
+    for dirname in sys.path:
+        unlink(os.path.join(dirname, modname + os.extsep + 'pyc'))
+        # Deleting the .pyo file cannot be within the 'try' for the .pyc since
+        # the chance exists that there is no .pyc (and thus the 'try' statement
+        # is exited) but there is a .pyo file.
+        unlink(os.path.join(dirname, modname + os.extsep + 'pyo'))
+
+# Check whether a gui is actually available
+def _is_gui_available():
+    if hasattr(_is_gui_available, 'result'):
+        return _is_gui_available.result
+    reason = None
+    if sys.platform.startswith('win'):
+        # if Python is running as a service (such as the buildbot service),
+        # gui interaction may be disallowed
+        import ctypes
+        import ctypes.wintypes
+        UOI_FLAGS = 1
+        WSF_VISIBLE = 0x0001
+        class USEROBJECTFLAGS(ctypes.Structure):
+            _fields_ = [("fInherit", ctypes.wintypes.BOOL),
+                        ("fReserved", ctypes.wintypes.BOOL),
+                        ("dwFlags", ctypes.wintypes.DWORD)]
+        dll = ctypes.windll.user32
+        h = dll.GetProcessWindowStation()
+        if not h:
+            raise ctypes.WinError()
+        uof = USEROBJECTFLAGS()
+        needed = ctypes.wintypes.DWORD()
+        res = dll.GetUserObjectInformationW(h,
+            UOI_FLAGS,
+            ctypes.byref(uof),
+            ctypes.sizeof(uof),
+            ctypes.byref(needed))
+        if not res:
+            raise ctypes.WinError()
+        if not bool(uof.dwFlags & WSF_VISIBLE):
+            reason = "gui not available (WSF_VISIBLE flag not set)"
+    elif sys.platform == 'darwin':
+        # The Aqua Tk implementations on OS X can abort the process if
+        # being called in an environment where a window server connection
+        # cannot be made, for instance when invoked by a buildbot or ssh
+        # process not running under the same user id as the current console
+        # user.  To avoid that, raise an exception if the window manager
+        # connection is not available.
+        from ctypes import cdll, c_int, pointer, Structure
+        from ctypes.util import find_library
+
+        app_services = cdll.LoadLibrary(find_library("ApplicationServices"))
+
+        if app_services.CGMainDisplayID() == 0:
+            reason = "gui tests cannot run without OS X window manager"
+        else:
+            class ProcessSerialNumber(Structure):
+                _fields_ = [("highLongOfPSN", c_int),
+                            ("lowLongOfPSN", c_int)]
+            psn = ProcessSerialNumber()
+            psn_p = pointer(psn)
+            if (  (app_services.GetCurrentProcess(psn_p) < 0) or
+                  (app_services.SetFrontProcess(psn_p) < 0) ):
+                reason = "cannot run without OS X gui process"
+
+    # check on every platform whether tkinter can actually do anything
+    if not reason:
+        try:
+            from Tkinter import Tk
+            root = Tk()
+            root.withdraw()
+            root.update()
+            root.destroy()
+        except Exception as e:
+            err_string = str(e)
+            if len(err_string) > 50:
+                err_string = err_string[:50] + ' [...]'
+            reason = 'Tk unavailable due to {}: {}'.format(type(e).__name__,
+                                                           err_string)
+
+    _is_gui_available.reason = reason
+    _is_gui_available.result = not reason
+
+    return _is_gui_available.result
+
+def is_resource_enabled(resource):
+    """Test whether a resource is enabled.
+
+    Known resources are set by regrtest.py.  If not running under regrtest.py,
+    all resources are assumed enabled unless use_resources has been set.
+    """
+    return use_resources is None or resource in use_resources
+
+def requires(resource, msg=None):
+    """Raise ResourceDenied if the specified resource is not available."""
+    if not is_resource_enabled(resource):
+        if msg is None:
+            msg = "Use of the `%s' resource not enabled" % resource
+        raise ResourceDenied(msg)
+    if resource == 'gui' and not _is_gui_available():
+        raise ResourceDenied(_is_gui_available.reason)
+
+def requires_mac_ver(*min_version):
+    """Decorator raising SkipTest if the OS is Mac OS X and the OS X
+    version if less than min_version.
+
+    For example, @requires_mac_ver(10, 5) raises SkipTest if the OS X version
+    is lesser than 10.5.
+    """
+    def decorator(func):
+        @functools.wraps(func)
+        def wrapper(*args, **kw):
+            if sys.platform == 'darwin':
+                version_txt = platform.mac_ver()[0]
+                try:
+                    version = tuple(map(int, version_txt.split('.')))
+                except ValueError:
+                    pass
+                else:
+                    if version < min_version:
+                        min_version_txt = '.'.join(map(str, min_version))
+                        raise unittest.SkipTest(
+                            "Mac OS X %s or higher required, not %s"
+                            % (min_version_txt, version_txt))
+            return func(*args, **kw)
+        wrapper.min_version = min_version
+        return wrapper
+    return decorator
+
+
+# Don't use "localhost", since resolving it uses the DNS under recent
+# Windows versions (see issue #18792).
+HOST = "127.0.0.1"
+HOSTv6 = "::1"
+
+
+def find_unused_port(family=socket.AF_INET, socktype=socket.SOCK_STREAM):
+    """Returns an unused port that should be suitable for binding.  This is
+    achieved by creating a temporary socket with the same family and type as
+    the 'sock' parameter (default is AF_INET, SOCK_STREAM), and binding it to
+    the specified host address (defaults to 0.0.0.0) with the port set to 0,
+    eliciting an unused ephemeral port from the OS.  The temporary socket is
+    then closed and deleted, and the ephemeral port is returned.
+
+    Either this method or bind_port() should be used for any tests where a
+    server socket needs to be bound to a particular port for the duration of
+    the test.  Which one to use depends on whether the calling code is creating
+    a python socket, or if an unused port needs to be provided in a constructor
+    or passed to an external program (i.e. the -accept argument to openssl's
+    s_server mode).  Always prefer bind_port() over find_unused_port() where
+    possible.  Hard coded ports should *NEVER* be used.  As soon as a server
+    socket is bound to a hard coded port, the ability to run multiple instances
+    of the test simultaneously on the same host is compromised, which makes the
+    test a ticking time bomb in a buildbot environment. On Unix buildbots, this
+    may simply manifest as a failed test, which can be recovered from without
+    intervention in most cases, but on Windows, the entire python process can
+    completely and utterly wedge, requiring someone to log in to the buildbot
+    and manually kill the affected process.
+
+    (This is easy to reproduce on Windows, unfortunately, and can be traced to
+    the SO_REUSEADDR socket option having different semantics on Windows versus
+    Unix/Linux.  On Unix, you can't have two AF_INET SOCK_STREAM sockets bind,
+    listen and then accept connections on identical host/ports.  An EADDRINUSE
+    socket.error will be raised at some point (depending on the platform and
+    the order bind and listen were called on each socket).
+
+    However, on Windows, if SO_REUSEADDR is set on the sockets, no EADDRINUSE
+    will ever be raised when attempting to bind two identical host/ports. When
+    accept() is called on each socket, the second caller's process will steal
+    the port from the first caller, leaving them both in an awkwardly wedged
+    state where they'll no longer respond to any signals or graceful kills, and
+    must be forcibly killed via OpenProcess()/TerminateProcess().
+
+    The solution on Windows is to use the SO_EXCLUSIVEADDRUSE socket option
+    instead of SO_REUSEADDR, which effectively affords the same semantics as
+    SO_REUSEADDR on Unix.  Given the propensity of Unix developers in the Open
+    Source world compared to Windows ones, this is a common mistake.  A quick
+    look over OpenSSL's 0.9.8g source shows that they use SO_REUSEADDR when
+    openssl.exe is called with the 's_server' option, for example. See
+    http://bugs.python.org/issue2550 for more info.  The following site also
+    has a very thorough description about the implications of both REUSEADDR
+    and EXCLUSIVEADDRUSE on Windows:
+    http://msdn2.microsoft.com/en-us/library/ms740621(VS.85).aspx)
+
+    XXX: although this approach is a vast improvement on previous attempts to
+    elicit unused ports, it rests heavily on the assumption that the ephemeral
+    port returned to us by the OS won't immediately be dished back out to some
+    other process when we close and delete our temporary socket but before our
+    calling code has a chance to bind the returned port.  We can deal with this
+    issue if/when we come across it."""
+    tempsock = socket.socket(family, socktype)
+    port = bind_port(tempsock)
+    tempsock.close()
+    del tempsock
+    return port
+
+def bind_port(sock, host=HOST):
+    """Bind the socket to a free port and return the port number.  Relies on
+    ephemeral ports in order to ensure we are using an unbound port.  This is
+    important as many tests may be running simultaneously, especially in a
+    buildbot environment.  This method raises an exception if the sock.family
+    is AF_INET and sock.type is SOCK_STREAM, *and* the socket has SO_REUSEADDR
+    or SO_REUSEPORT set on it.  Tests should *never* set these socket options
+    for TCP/IP sockets.  The only case for setting these options is testing
+    multicasting via multiple UDP sockets.
+
+    Additionally, if the SO_EXCLUSIVEADDRUSE socket option is available (i.e.
+    on Windows), it will be set on the socket.  This will prevent anyone else
+    from bind()'ing to our host/port for the duration of the test.
+    """
+    if sock.family == socket.AF_INET and sock.type == socket.SOCK_STREAM:
+        if hasattr(socket, 'SO_REUSEADDR'):
+            if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) == 1:
+                raise TestFailed("tests should never set the SO_REUSEADDR "   \
+                                 "socket option on TCP/IP sockets!")
+        if hasattr(socket, 'SO_REUSEPORT'):
+            try:
+                if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT) == 1:
+                    raise TestFailed("tests should never set the SO_REUSEPORT "   \
+                                     "socket option on TCP/IP sockets!")
+            except EnvironmentError:
+                # Python's socket module was compiled using modern headers
+                # thus defining SO_REUSEPORT but this process is running
+                # under an older kernel that does not support SO_REUSEPORT.
+                pass
+        if hasattr(socket, 'SO_EXCLUSIVEADDRUSE'):
+            sock.setsockopt(socket.SOL_SOCKET, socket.SO_EXCLUSIVEADDRUSE, 1)
+
+    sock.bind((host, 0))
+    port = sock.getsockname()[1]
+    return port
+
+def _is_ipv6_enabled():
+    """Check whether IPv6 is enabled on this host."""
+    if socket.has_ipv6:
+        sock = None
+        try:
+            sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
+            sock.bind((HOSTv6, 0))
+            return True
+        except socket.error:
+            pass
+        finally:
+            if sock:
+                sock.close()
+    return False
+
+IPV6_ENABLED = _is_ipv6_enabled()
+
+def system_must_validate_cert(f):
+    """Skip the test on TLS certificate validation failures."""
+    @functools.wraps(f)
+    def dec(*args, **kwargs):
+        try:
+            f(*args, **kwargs)
+        except IOError as e:
+            if "CERTIFICATE_VERIFY_FAILED" in str(e):
+                raise unittest.SkipTest("system does not contain "
+                                        "necessary certificates")
+            raise
+    return dec
+
+FUZZ = 1e-6
+
+def fcmp(x, y): # fuzzy comparison function
+    if isinstance(x, float) or isinstance(y, float):
+        try:
+            fuzz = (abs(x) + abs(y)) * FUZZ
+            if abs(x-y) <= fuzz:
+                return 0
+        except:
+            pass
+    elif type(x) == type(y) and isinstance(x, (tuple, list)):
+        for i in range(min(len(x), len(y))):
+            outcome = fcmp(x[i], y[i])
+            if outcome != 0:
+                return outcome
+        return (len(x) > len(y)) - (len(x) < len(y))
+    return (x > y) - (x < y)
+
+
+# A constant likely larger than the underlying OS pipe buffer size, to
+# make writes blocking.
+# Windows limit seems to be around 512 B, and many Unix kernels have a
+# 64 KiB pipe buffer size or 16 * PAGE_SIZE: take a few megs to be sure.
+# (see issue #17835 for a discussion of this number).
+PIPE_MAX_SIZE = 4 * 1024 * 1024 + 1
+
+# A constant likely larger than the underlying OS socket buffer size, to make
+# writes blocking.
+# The socket buffer sizes can usually be tuned system-wide (e.g. through sysctl
+# on Linux), or on a per-socket basis (SO_SNDBUF/SO_RCVBUF). See issue #18643
+# for a discussion of this number).
+SOCK_MAX_SIZE = 16 * 1024 * 1024 + 1
+
+is_jython = sys.platform.startswith('java')
+
+try:
+    unicode
+    have_unicode = True
+except NameError:
+    have_unicode = False
+
+requires_unicode = unittest.skipUnless(have_unicode, 'no unicode support')
+
+def u(s):
+    return unicode(s, 'unicode-escape')
+
+# FS_NONASCII: non-ASCII Unicode character encodable by
+# sys.getfilesystemencoding(), or None if there is no such character.
+FS_NONASCII = None
+if have_unicode:
+    for character in (
+        # First try printable and common characters to have a readable filename.
+        # For each character, the encoding list are just example of encodings able
+        # to encode the character (the list is not exhaustive).
+
+        # U+00E6 (Latin Small Letter Ae): cp1252, iso-8859-1
+        unichr(0x00E6),
+        # U+0130 (Latin Capital Letter I With Dot Above): cp1254, iso8859_3
+        unichr(0x0130),
+        # U+0141 (Latin Capital Letter L With Stroke): cp1250, cp1257
+        unichr(0x0141),
+        # U+03C6 (Greek Small Letter Phi): cp1253
+        unichr(0x03C6),
+        # U+041A (Cyrillic Capital Letter Ka): cp1251
+        unichr(0x041A),
+        # U+05D0 (Hebrew Letter Alef): Encodable to cp424
+        unichr(0x05D0),
+        # U+060C (Arabic Comma): cp864, cp1006, iso8859_6, mac_arabic
+        unichr(0x060C),
+        # U+062A (Arabic Letter Teh): cp720
+        unichr(0x062A),
+        # U+0E01 (Thai Character Ko Kai): cp874
+        unichr(0x0E01),
+
+        # Then try more "special" characters. "special" because they may be
+        # interpreted or displayed differently depending on the exact locale
+        # encoding and the font.
+
+        # U+00A0 (No-Break Space)
+        unichr(0x00A0),
+        # U+20AC (Euro Sign)
+        unichr(0x20AC),
+    ):
+        try:
+            character.encode(sys.getfilesystemencoding())\
+                     .decode(sys.getfilesystemencoding())
+        except UnicodeError:
+            pass
+        else:
+            FS_NONASCII = character
+            break
+
+# Filename used for testing
+if os.name == 'java':
+    # Jython disallows @ in module names
+    TESTFN = '$test'
+elif os.name == 'riscos':
+    TESTFN = 'testfile'
+else:
+    TESTFN = '@test'
+    # Unicode name only used if TEST_FN_ENCODING exists for the platform.
+    if have_unicode:
+        # Assuming sys.getfilesystemencoding()!=sys.getdefaultencoding()
+        # TESTFN_UNICODE is a filename that can be encoded using the
+        # file system encoding, but *not* with the default (ascii) encoding
+        if isinstance('', unicode):
+            # python -U
+            # XXX perhaps unicode() should accept Unicode strings?
+            TESTFN_UNICODE = "@test-\xe0\xf2"
+        else:
+            # 2 latin characters.
+            TESTFN_UNICODE = unicode("@test-\xe0\xf2", "latin-1")
+        TESTFN_ENCODING = sys.getfilesystemencoding()
+        # TESTFN_UNENCODABLE is a filename that should *not* be
+        # able to be encoded by *either* the default or filesystem encoding.
+        # This test really only makes sense on Windows NT platforms
+        # which have special Unicode support in posixmodule.
+        if (not hasattr(sys, "getwindowsversion") or
+                sys.getwindowsversion()[3] < 2): #  0=win32s or 1=9x/ME
+            TESTFN_UNENCODABLE = None
+        else:
+            # Japanese characters (I think - from bug 846133)
+            TESTFN_UNENCODABLE = eval('u"@test-\u5171\u6709\u3055\u308c\u308b"')
+            try:
+                # XXX - Note - should be using TESTFN_ENCODING here - but for
+                # Windows, "mbcs" currently always operates as if in
+                # errors=ignore' mode - hence we get '?' characters rather than
+                # the exception.  'Latin1' operates as we expect - ie, fails.
+                # See [ 850997 ] mbcs encoding ignores errors
+                TESTFN_UNENCODABLE.encode("Latin1")
+            except UnicodeEncodeError:
+                pass
+            else:
+                print \
+                'WARNING: The filename %r CAN be encoded by the filesystem.  ' \
+                'Unicode filename tests may not be effective' \
+                % TESTFN_UNENCODABLE
+
+
+# Disambiguate TESTFN for parallel testing, while letting it remain a valid
+# module name.
+TESTFN = "{}_{}_tmp".format(TESTFN, os.getpid())
+
+# Save the initial cwd
+SAVEDCWD = os.getcwd()
+
+@contextlib.contextmanager
+def temp_dir(path=None, quiet=False):
+    """Return a context manager that creates a temporary directory.
+
+    Arguments:
+
+      path: the directory to create temporarily.  If omitted or None,
+        defaults to creating a temporary directory using tempfile.mkdtemp.
+
+      quiet: if False (the default), the context manager raises an exception
+        on error.  Otherwise, if the path is specified and cannot be
+        created, only a warning is issued.
+
+    """
+    dir_created = False
+    if path is None:
+        import tempfile
+        path = tempfile.mkdtemp()
+        dir_created = True
+        path = os.path.realpath(path)
+    else:
+        if (have_unicode and isinstance(path, unicode) and
+            not os.path.supports_unicode_filenames):
+            try:
+                path = path.encode(sys.getfilesystemencoding() or 'ascii')
+            except UnicodeEncodeError:
+                if not quiet:
+                    raise unittest.SkipTest('unable to encode the cwd name with '
+                                            'the filesystem encoding.')
+        try:
+            os.mkdir(path)
+            dir_created = True
+        except OSError:
+            if not quiet:
+                raise
+            warnings.warn('tests may fail, unable to create temp dir: ' + path,
+                          RuntimeWarning, stacklevel=3)
+    if dir_created:
+        pid = os.getpid()
+    try:
+        yield path
+    finally:
+        # In case the process forks, let only the parent remove the
+        # directory. The child has a diffent process id. (bpo-30028)
+        if dir_created and pid == os.getpid():
+            rmtree(path)
+
+@contextlib.contextmanager
+def change_cwd(path, quiet=False):
+    """Return a context manager that changes the current working directory.
+
+    Arguments:
+
+      path: the directory to use as the temporary current working directory.
+
+      quiet: if False (the default), the context manager raises an exception
+        on error.  Otherwise, it issues only a warning and keeps the current
+        working directory the same.
+
+    """
+    saved_dir = os.getcwd()
+    try:
+        os.chdir(path)
+    except OSError:
+        if not quiet:
+            raise
+        warnings.warn('tests may fail, unable to change CWD to: ' + path,
+                      RuntimeWarning, stacklevel=3)
+    try:
+        yield os.getcwd()
+    finally:
+        os.chdir(saved_dir)
+
+
+@contextlib.contextmanager
+def temp_cwd(name='tempcwd', quiet=False):
+    """
+    Context manager that temporarily creates and changes the CWD.
+
+    The function temporarily changes the current working directory
+    after creating a temporary directory in the current directory with
+    name *name*.  If *name* is None, the temporary directory is
+    created using tempfile.mkdtemp.
+
+    If *quiet* is False (default) and it is not possible to
+    create or change the CWD, an error is raised.  If *quiet* is True,
+    only a warning is raised and the original CWD is used.
+
+    """
+    with temp_dir(path=name, quiet=quiet) as temp_path:
+        with change_cwd(temp_path, quiet=quiet) as cwd_dir:
+            yield cwd_dir
+
+# TEST_HOME_DIR refers to the top level directory of the "test" package
+# that contains Python's regression test suite
+TEST_SUPPORT_DIR = os.path.dirname(os.path.abspath(__file__))
+TEST_HOME_DIR = os.path.dirname(TEST_SUPPORT_DIR)
+
+# TEST_DATA_DIR is used as a target download location for remote resources
+TEST_DATA_DIR = os.path.join(TEST_HOME_DIR, "data")
+
+def findfile(file, subdir=None):
+    """Try to find a file on sys.path and the working directory.  If it is not
+    found the argument passed to the function is returned (this does not
+    necessarily signal failure; could still be the legitimate path)."""
+    if os.path.isabs(file):
+        return file
+    if subdir is not None:
+        file = os.path.join(subdir, file)
+    path = [TEST_HOME_DIR] + sys.path
+    for dn in path:
+        fn = os.path.join(dn, file)
+        if os.path.exists(fn): return fn
+    return file
+
+def sortdict(dict):
+    "Like repr(dict), but in sorted order."
+    items = dict.items()
+    items.sort()
+    reprpairs = ["%r: %r" % pair for pair in items]
+    withcommas = ", ".join(reprpairs)
+    return "{%s}" % withcommas
+
+def make_bad_fd():
+    """
+    Create an invalid file descriptor by opening and closing a file and return
+    its fd.
+    """
+    file = open(TESTFN, "wb")
+    try:
+        return file.fileno()
+    finally:
+        file.close()
+        unlink(TESTFN)
+
+def check_syntax_error(testcase, statement, errtext='', lineno=None, offset=None):
+    with testcase.assertRaisesRegexp(SyntaxError, errtext) as cm:
+        compile(statement, '<test string>', 'exec')
+    err = cm.exception
+    if lineno is not None:
+        testcase.assertEqual(err.lineno, lineno)
+    if offset is not None:
+        testcase.assertEqual(err.offset, offset)
+
+def open_urlresource(url, check=None):
+    import urlparse, urllib2
+
+    filename = urlparse.urlparse(url)[2].split('/')[-1] # '/': it's URL!
+
+    fn = os.path.join(TEST_DATA_DIR, filename)
+
+    def check_valid_file(fn):
+        f = open(fn)
+        if check is None:
+            return f
+        elif check(f):
+            f.seek(0)
+            return f
+        f.close()
+
+    if os.path.exists(fn):
+        f = check_valid_file(fn)
+        if f is not None:
+            return f
+        unlink(fn)
+
+    # Verify the requirement before downloading the file
+    requires('urlfetch')
+
+    print >> get_original_stdout(), '\tfetching %s ...' % url
+    f = urllib2.urlopen(url, timeout=15)
+    try:
+        with open(fn, "wb") as out:
+            s = f.read()
+            while s:
+                out.write(s)
+                s = f.read()
+    finally:
+        f.close()
+
+    f = check_valid_file(fn)
+    if f is not None:
+        return f
+    raise TestFailed('invalid resource "%s"' % fn)
+
+
+class WarningsRecorder(object):
+    """Convenience wrapper for the warnings list returned on
+       entry to the warnings.catch_warnings() context manager.
+    """
+    def __init__(self, warnings_list):
+        self._warnings = warnings_list
+        self._last = 0
+
+    def __getattr__(self, attr):
+        if len(self._warnings) > self._last:
+            return getattr(self._warnings[-1], attr)
+        elif attr in warnings.WarningMessage._WARNING_DETAILS:
+            return None
+        raise AttributeError("%r has no attribute %r" % (self, attr))
+
+    @property
+    def warnings(self):
+        return self._warnings[self._last:]
+
+    def reset(self):
+        self._last = len(self._warnings)
+
+
+def _filterwarnings(filters, quiet=False):
+    """Catch the warnings, then check if all the expected
+    warnings have been raised and re-raise unexpected warnings.
+    If 'quiet' is True, only re-raise the unexpected warnings.
+    """
+    # Clear the warning registry of the calling module
+    # in order to re-raise the warnings.
+    frame = sys._getframe(2)
+    registry = frame.f_globals.get('__warningregistry__')
+    if registry:
+        registry.clear()
+    with warnings.catch_warnings(record=True) as w:
+        # Set filter "always" to record all warnings.  Because
+        # test_warnings swap the module, we need to look up in
+        # the sys.modules dictionary.
+        sys.modules['warnings'].simplefilter("always")
+        yield WarningsRecorder(w)
+    # Filter the recorded warnings
+    reraise = [warning.message for warning in w]
+    missing = []
+    for msg, cat in filters:
+        seen = False
+        for exc in reraise[:]:
+            message = str(exc)
+            # Filter out the matching messages
+            if (re.match(msg, message, re.I) and
+                issubclass(exc.__class__, cat)):
+                seen = True
+                reraise.remove(exc)
+        if not seen and not quiet:
+            # This filter caught nothing
+            missing.append((msg, cat.__name__))
+    if reraise:
+        raise AssertionError("unhandled warning %r" % reraise[0])
+    if missing:
+        raise AssertionError("filter (%r, %s) did not catch any warning" %
+                             missing[0])
+
+
+@contextlib.contextmanager
+def check_warnings(*filters, **kwargs):
+    """Context manager to silence warnings.
+
+    Accept 2-tuples as positional arguments:
+        ("message regexp", WarningCategory)
+
+    Optional argument:
+     - if 'quiet' is True, it does not fail if a filter catches nothing
+        (default True without argument,
+         default False if some filters are defined)
+
+    Without argument, it defaults to:
+        check_warnings(("", Warning), quiet=True)
+    """
+    quiet = kwargs.get('quiet')
+    if not filters:
+        filters = (("", Warning),)
+        # Preserve backward compatibility
+        if quiet is None:
+            quiet = True
+    return _filterwarnings(filters, quiet)
+
+
+@contextlib.contextmanager
+def check_py3k_warnings(*filters, **kwargs):
+    """Context manager to silence py3k warnings.
+
+    Accept 2-tuples as positional arguments:
+        ("message regexp", WarningCategory)
+
+    Optional argument:
+     - if 'quiet' is True, it does not fail if a filter catches nothing
+        (default False)
+
+    Without argument, it defaults to:
+        check_py3k_warnings(("", DeprecationWarning), quiet=False)
+    """
+    if sys.py3kwarning:
+        if not filters:
+            filters = (("", DeprecationWarning),)
+    else:
+        # It should not raise any py3k warning
+        filters = ()
+    return _filterwarnings(filters, kwargs.get('quiet'))
+
+
+class CleanImport(object):
+    """Context manager to force import to return a new module reference.
+
+    This is useful for testing module-level behaviours, such as
+    the emission of a DeprecationWarning on import.
+
+    Use like this:
+
+        with CleanImport("foo"):
+            importlib.import_module("foo") # new reference
+    """
+
+    def __init__(self, *module_names):
+        self.original_modules = sys.modules.copy()
+        for module_name in module_names:
+            if module_name in sys.modules:
+                module = sys.modules[module_name]
+                # It is possible that module_name is just an alias for
+                # another module (e.g. stub for modules renamed in 3.x).
+                # In that case, we also need delete the real module to clear
+                # the import cache.
+                if module.__name__ != module_name:
+                    del sys.modules[module.__name__]
+                del sys.modules[module_name]
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, *ignore_exc):
+        sys.modules.update(self.original_modules)
+
+
+class EnvironmentVarGuard(UserDict.DictMixin):
+
+    """Class to help protect the environment variable properly.  Can be used as
+    a context manager."""
+
+    def __init__(self):
+        self._environ = os.environ
+        self._changed = {}
+
+    def __getitem__(self, envvar):
+        return self._environ[envvar]
+
+    def __setitem__(self, envvar, value):
+        # Remember the initial value on the first access
+        if envvar not in self._changed:
+            self._changed[envvar] = self._environ.get(envvar)
+        self._environ[envvar] = value
+
+    def __delitem__(self, envvar):
+        # Remember the initial value on the first access
+        if envvar not in self._changed:
+            self._changed[envvar] = self._environ.get(envvar)
+        if envvar in self._environ:
+            del self._environ[envvar]
+
+    def keys(self):
+        return self._environ.keys()
+
+    def set(self, envvar, value):
+        self[envvar] = value
+
+    def unset(self, envvar):
+        del self[envvar]
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, *ignore_exc):
+        for (k, v) in self._changed.items():
+            if v is None:
+                if k in self._environ:
+                    del self._environ[k]
+            else:
+                self._environ[k] = v
+        os.environ = self._environ
+
+
+class DirsOnSysPath(object):
+    """Context manager to temporarily add directories to sys.path.
+
+    This makes a copy of sys.path, appends any directories given
+    as positional arguments, then reverts sys.path to the copied
+    settings when the context ends.
+
+    Note that *all* sys.path modifications in the body of the
+    context manager, including replacement of the object,
+    will be reverted at the end of the block.
+    """
+
+    def __init__(self, *paths):
+        self.original_value = sys.path[:]
+        self.original_object = sys.path
+        sys.path.extend(paths)
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, *ignore_exc):
+        sys.path = self.original_object
+        sys.path[:] = self.original_value
+
+
+class TransientResource(object):
+
+    """Raise ResourceDenied if an exception is raised while the context manager
+    is in effect that matches the specified exception and attributes."""
+
+    def __init__(self, exc, **kwargs):
+        self.exc = exc
+        self.attrs = kwargs
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, type_=None, value=None, traceback=None):
+        """If type_ is a subclass of self.exc and value has attributes matching
+        self.attrs, raise ResourceDenied.  Otherwise let the exception
+        propagate (if any)."""
+        if type_ is not None and issubclass(self.exc, type_):
+            for attr, attr_value in self.attrs.iteritems():
+                if not hasattr(value, attr):
+                    break
+                if getattr(value, attr) != attr_value:
+                    break
+            else:
+                raise ResourceDenied("an optional resource is not available")
+
+
+@contextlib.contextmanager
+def transient_internet(resource_name, timeout=30.0, errnos=()):
+    """Return a context manager that raises ResourceDenied when various issues
+    with the Internet connection manifest themselves as exceptions."""
+    default_errnos = [
+        ('ECONNREFUSED', 111),
+        ('ECONNRESET', 104),
+        ('EHOSTUNREACH', 113),
+        ('ENETUNREACH', 101),
+        ('ETIMEDOUT', 110),
+    ]
+    default_gai_errnos = [
+        ('EAI_AGAIN', -3),
+        ('EAI_FAIL', -4),
+        ('EAI_NONAME', -2),
+        ('EAI_NODATA', -5),
+        # Windows defines EAI_NODATA as 11001 but idiotic getaddrinfo()
+        # implementation actually returns WSANO_DATA i.e. 11004.
+        ('WSANO_DATA', 11004),
+    ]
+
+    denied = ResourceDenied("Resource '%s' is not available" % resource_name)
+    captured_errnos = errnos
+    gai_errnos = []
+    if not captured_errnos:
+        captured_errnos = [getattr(errno, name, num)
+                           for (name, num) in default_errnos]
+        gai_errnos = [getattr(socket, name, num)
+                      for (name, num) in default_gai_errnos]
+
+    def filter_error(err):
+        n = getattr(err, 'errno', None)
+        if (isinstance(err, socket.timeout) or
+            (isinstance(err, socket.gaierror) and n in gai_errnos) or
+            n in captured_errnos):
+            if not verbose:
+                sys.stderr.write(denied.args[0] + "\n")
+            raise denied
+
+    old_timeout = socket.getdefaulttimeout()
+    try:
+        if timeout is not None:
+            socket.setdefaulttimeout(timeout)
+        yield
+    except IOError as err:
+        # urllib can wrap original socket errors multiple times (!), we must
+        # unwrap to get at the original error.
+        while True:
+            a = err.args
+            if len(a) >= 1 and isinstance(a[0], IOError):
+                err = a[0]
+            # The error can also be wrapped as args[1]:
+            #    except socket.error as msg:
+            #        raise IOError('socket error', msg).with_traceback(sys.exc_info()[2])
+            elif len(a) >= 2 and isinstance(a[1], IOError):
+                err = a[1]
+            else:
+                break
+        filter_error(err)
+        raise
+    # XXX should we catch generic exceptions and look for their
+    # __cause__ or __context__?
+    finally:
+        socket.setdefaulttimeout(old_timeout)
+
+
+@contextlib.contextmanager
+def captured_output(stream_name):
+    """Return a context manager used by captured_stdout and captured_stdin
+    that temporarily replaces the sys stream *stream_name* with a StringIO."""
+    import StringIO
+    orig_stdout = getattr(sys, stream_name)
+    setattr(sys, stream_name, StringIO.StringIO())
+    try:
+        yield getattr(sys, stream_name)
+    finally:
+        setattr(sys, stream_name, orig_stdout)
+
+def captured_stdout():
+    """Capture the output of sys.stdout:
+
+       with captured_stdout() as s:
+           print "hello"
+       self.assertEqual(s.getvalue(), "hello")
+    """
+    return captured_output("stdout")
+
+def captured_stderr():
+    return captured_output("stderr")
+
+def captured_stdin():
+    return captured_output("stdin")
+
+def gc_collect():
+    """Force as many objects as possible to be collected.
+
+    In non-CPython implementations of Python, this is needed because timely
+    deallocation is not guaranteed by the garbage collector.  (Even in CPython
+    this can be the case in case of reference cycles.)  This means that __del__
+    methods may be called later than expected and weakrefs may remain alive for
+    longer than expected.  This function tries its best to force all garbage
+    objects to disappear.
+    """
+    gc.collect()
+    if is_jython:
+        time.sleep(0.1)
+    gc.collect()
+    gc.collect()
+
+
+_header = '2P'
+if hasattr(sys, "gettotalrefcount"):
+    _header = '2P' + _header
+_vheader = _header + 'P'
+
+def calcobjsize(fmt):
+    return struct.calcsize(_header + fmt + '0P')
+
+def calcvobjsize(fmt):
+    return struct.calcsize(_vheader + fmt + '0P')
+
+
+_TPFLAGS_HAVE_GC = 1<<14
+_TPFLAGS_HEAPTYPE = 1<<9
+
+def check_sizeof(test, o, size):
+    import _testcapi
+    result = sys.getsizeof(o)
+    # add GC header size
+    if ((type(o) == type) and (o.__flags__ & _TPFLAGS_HEAPTYPE) or\
+        ((type(o) != type) and (type(o).__flags__ & _TPFLAGS_HAVE_GC))):
+        size += _testcapi.SIZEOF_PYGC_HEAD
+    msg = 'wrong size for %s: got %d, expected %d' \
+            % (type(o), result, size)
+    test.assertEqual(result, size, msg)
+
+
+#=======================================================================
+# Decorator for running a function in a different locale, correctly resetting
+# it afterwards.
+
+def run_with_locale(catstr, *locales):
+    def decorator(func):
+        def inner(*args, **kwds):
+            try:
+                import locale
+                category = getattr(locale, catstr)
+                orig_locale = locale.setlocale(category)
+            except AttributeError:
+                # if the test author gives us an invalid category string
+                raise
+            except:
+                # cannot retrieve original locale, so do nothing
+                locale = orig_locale = None
+            else:
+                for loc in locales:
+                    try:
+                        locale.setlocale(category, loc)
+                        break
+                    except:
+                        pass
+
+            # now run the function, resetting the locale on exceptions
+            try:
+                return func(*args, **kwds)
+            finally:
+                if locale and orig_locale:
+                    locale.setlocale(category, orig_locale)
+        inner.func_name = func.func_name
+        inner.__doc__ = func.__doc__
+        return inner
+    return decorator
+
+#=======================================================================
+# Decorator for running a function in a specific timezone, correctly
+# resetting it afterwards.
+
+def run_with_tz(tz):
+    def decorator(func):
+        def inner(*args, **kwds):
+            try:
+                tzset = time.tzset
+            except AttributeError:
+                raise unittest.SkipTest("tzset required")
+            if 'TZ' in os.environ:
+                orig_tz = os.environ['TZ']
+            else:
+                orig_tz = None
+            os.environ['TZ'] = tz
+            tzset()
+
+            # now run the function, resetting the tz on exceptions
+            try:
+                return func(*args, **kwds)
+            finally:
+                if orig_tz is None:
+                    del os.environ['TZ']
+                else:
+                    os.environ['TZ'] = orig_tz
+                time.tzset()
+
+        inner.__name__ = func.__name__
+        inner.__doc__ = func.__doc__
+        return inner
+    return decorator
+
+#=======================================================================
+# Big-memory-test support. Separate from 'resources' because memory use should be configurable.
+
+# Some handy shorthands. Note that these are used for byte-limits as well
+# as size-limits, in the various bigmem tests
+_1M = 1024*1024
+_1G = 1024 * _1M
+_2G = 2 * _1G
+_4G = 4 * _1G
+
+MAX_Py_ssize_t = sys.maxsize
+
+def set_memlimit(limit):
+    global max_memuse
+    global real_max_memuse
+    sizes = {
+        'k': 1024,
+        'm': _1M,
+        'g': _1G,
+        't': 1024*_1G,
+    }
+    m = re.match(r'(\d+(\.\d+)?) (K|M|G|T)b?$', limit,
+                 re.IGNORECASE | re.VERBOSE)
+    if m is None:
+        raise ValueError('Invalid memory limit %r' % (limit,))
+    memlimit = int(float(m.group(1)) * sizes[m.group(3).lower()])
+    real_max_memuse = memlimit
+    if memlimit > MAX_Py_ssize_t:
+        memlimit = MAX_Py_ssize_t
+    if memlimit < _2G - 1:
+        raise ValueError('Memory limit %r too low to be useful' % (limit,))
+    max_memuse = memlimit
+
+def bigmemtest(minsize, memuse, overhead=5*_1M):
+    """Decorator for bigmem tests.
+
+    'minsize' is the minimum useful size for the test (in arbitrary,
+    test-interpreted units.) 'memuse' is the number of 'bytes per size' for
+    the test, or a good estimate of it. 'overhead' specifies fixed overhead,
+    independent of the testsize, and defaults to 5Mb.
+
+    The decorator tries to guess a good value for 'size' and passes it to
+    the decorated test function. If minsize * memuse is more than the
+    allowed memory use (as defined by max_memuse), the test is skipped.
+    Otherwise, minsize is adjusted upward to use up to max_memuse.
+    """
+    def decorator(f):
+        def wrapper(self):
+            if not max_memuse:
+                # If max_memuse is 0 (the default),
+                # we still want to run the tests with size set to a few kb,
+                # to make sure they work. We still want to avoid using
+                # too much memory, though, but we do that noisily.
+                maxsize = 5147
+                self.assertFalse(maxsize * memuse + overhead > 20 * _1M)
+            else:
+                maxsize = int((max_memuse - overhead) / memuse)
+                if maxsize < minsize:
+                    # Really ought to print 'test skipped' or something
+                    if verbose:
+                        sys.stderr.write("Skipping %s because of memory "
+                                         "constraint\n" % (f.__name__,))
+                    return
+                # Try to keep some breathing room in memory use
+                maxsize = max(maxsize - 50 * _1M, minsize)
+            return f(self, maxsize)
+        wrapper.minsize = minsize
+        wrapper.memuse = memuse
+        wrapper.overhead = overhead
+        return wrapper
+    return decorator
+
+def precisionbigmemtest(size, memuse, overhead=5*_1M, dry_run=True):
+    def decorator(f):
+        def wrapper(self):
+            if not real_max_memuse:
+                maxsize = 5147
+            else:
+                maxsize = size
+
+            if ((real_max_memuse or not dry_run)
+                and real_max_memuse < maxsize * memuse):
+                if verbose:
+                    sys.stderr.write("Skipping %s because of memory "
+                                     "constraint\n" % (f.__name__,))
+                return
+
+            return f(self, maxsize)
+        wrapper.size = size
+        wrapper.memuse = memuse
+        wrapper.overhead = overhead
+        return wrapper
+    return decorator
+
+def bigaddrspacetest(f):
+    """Decorator for tests that fill the address space."""
+    def wrapper(self):
+        if max_memuse < MAX_Py_ssize_t:
+            if verbose:
+                sys.stderr.write("Skipping %s because of memory "
+                                 "constraint\n" % (f.__name__,))
+        else:
+            return f(self)
+    return wrapper
+
+#=======================================================================
+# unittest integration.
+
+class BasicTestRunner:
+    def run(self, test):
+        result = unittest.TestResult()
+        test(result)
+        return result
+
+def _id(obj):
+    return obj
+
+def requires_resource(resource):
+    if resource == 'gui' and not _is_gui_available():
+        return unittest.skip(_is_gui_available.reason)
+    if is_resource_enabled(resource):
+        return _id
+    else:
+        return unittest.skip("resource {0!r} is not enabled".format(resource))
+
+def cpython_only(test):
+    """
+    Decorator for tests only applicable on CPython.
+    """
+    return impl_detail(cpython=True)(test)
+
+def impl_detail(msg=None, **guards):
+    if check_impl_detail(**guards):
+        return _id
+    if msg is None:
+        guardnames, default = _parse_guards(guards)
+        if default:
+            msg = "implementation detail not available on {0}"
+        else:
+            msg = "implementation detail specific to {0}"
+        guardnames = sorted(guardnames.keys())
+        msg = msg.format(' or '.join(guardnames))
+    return unittest.skip(msg)
+
+def _parse_guards(guards):
+    # Returns a tuple ({platform_name: run_me}, default_value)
+    if not guards:
+        return ({'cpython': True}, False)
+    is_true = guards.values()[0]
+    assert guards.values() == [is_true] * len(guards)   # all True or all False
+    return (guards, not is_true)
+
+# Use the following check to guard CPython's implementation-specific tests --
+# or to run them only on the implementation(s) guarded by the arguments.
+def check_impl_detail(**guards):
+    """This function returns True or False depending on the host platform.
+       Examples:
+          if check_impl_detail():               # only on CPython (default)
+          if check_impl_detail(jython=True):    # only on Jython
+          if check_impl_detail(cpython=False):  # everywhere except on CPython
+    """
+    guards, default = _parse_guards(guards)
+    return guards.get(platform.python_implementation().lower(), default)
+
+
+def _filter_suite(suite, pred):
+    """Recursively filter test cases in a suite based on a predicate."""
+    newtests = []
+    for test in suite._tests:
+        if isinstance(test, unittest.TestSuite):
+            _filter_suite(test, pred)
+            newtests.append(test)
+        else:
+            if pred(test):
+                newtests.append(test)
+    suite._tests = newtests
+
+def _run_suite(suite):
+    """Run tests from a unittest.TestSuite-derived class."""
+    if verbose:
+        runner = unittest.TextTestRunner(sys.stdout, verbosity=2,
+                                         failfast=failfast)
+    else:
+        runner = BasicTestRunner()
+
+    result = runner.run(suite)
+    if not result.wasSuccessful():
+        if len(result.errors) == 1 and not result.failures:
+            err = result.errors[0][1]
+        elif len(result.failures) == 1 and not result.errors:
+            err = result.failures[0][1]
+        else:
+            err = "multiple errors occurred"
+            if not verbose:
+                err += "; run in verbose mode for details"
+        raise TestFailed(err)
+
+
+# By default, don't filter tests
+_match_test_func = None
+_match_test_patterns = None
+
+
+def match_test(test):
+    # Function used by support.run_unittest() and regrtest --list-cases
+    if _match_test_func is None:
+        return True
+    else:
+        return _match_test_func(test.id())
+
+
+def _is_full_match_test(pattern):
+    # If a pattern contains at least one dot, it's considered
+    # as a full test identifier.
+    # Example: 'test.test_os.FileTests.test_access'.
+    #
+    # Reject patterns which contain fnmatch patterns: '*', '?', '[...]'
+    # or '[!...]'. For example, reject 'test_access*'.
+    return ('.' in pattern) and (not re.search(r'[?*\[\]]', pattern))
+
+
+def set_match_tests(patterns):
+    global _match_test_func, _match_test_patterns
+
+    if patterns == _match_test_patterns:
+        # No change: no need to recompile patterns.
+        return
+
+    if not patterns:
+        func = None
+        # set_match_tests(None) behaves as set_match_tests(())
+        patterns = ()
+    elif all(map(_is_full_match_test, patterns)):
+        # Simple case: all patterns are full test identifier.
+        # The test.bisect utility only uses such full test identifiers.
+        func = set(patterns).__contains__
+    else:
+        regex = '|'.join(map(fnmatch.translate, patterns))
+        # The search *is* case sensitive on purpose:
+        # don't use flags=re.IGNORECASE
+        regex_match = re.compile(regex).match
+
+        def match_test_regex(test_id):
+            if regex_match(test_id):
+                # The regex matchs the whole identifier like
+                # 'test.test_os.FileTests.test_access'
+                return True
+            else:
+                # Try to match parts of the test identifier.
+                # For example, split 'test.test_os.FileTests.test_access'
+                # into: 'test', 'test_os', 'FileTests' and 'test_access'.
+                return any(map(regex_match, test_id.split(".")))
+
+        func = match_test_regex
+
+    # Create a copy since patterns can be mutable and so modified later
+    _match_test_patterns = tuple(patterns)
+    _match_test_func = func
+
+
+
+def run_unittest(*classes):
+    """Run tests from unittest.TestCase-derived classes."""
+    valid_types = (unittest.TestSuite, unittest.TestCase)
+    suite = unittest.TestSuite()
+    for cls in classes:
+        if isinstance(cls, str):
+            if cls in sys.modules:
+                suite.addTest(unittest.findTestCases(sys.modules[cls]))
+            else:
+                raise ValueError("str arguments must be keys in sys.modules")
+        elif isinstance(cls, valid_types):
+            suite.addTest(cls)
+        else:
+            suite.addTest(unittest.makeSuite(cls))
+    _filter_suite(suite, match_test)
+    _run_suite(suite)
+
+#=======================================================================
+# Check for the presence of docstrings.
+
+HAVE_DOCSTRINGS = (check_impl_detail(cpython=False) or
+                   sys.platform == 'win32' or
+                   sysconfig.get_config_var('WITH_DOC_STRINGS'))
+
+requires_docstrings = unittest.skipUnless(HAVE_DOCSTRINGS,
+                                          "test requires docstrings")
+
+
+#=======================================================================
+# doctest driver.
+
+def run_doctest(module, verbosity=None):
+    """Run doctest on the given module.  Return (#failures, #tests).
+
+    If optional argument verbosity is not specified (or is None), pass
+    test.support's belief about verbosity on to doctest.  Else doctest's
+    usual behavior is used (it searches sys.argv for -v).
+    """
+
+    import doctest
+
+    if verbosity is None:
+        verbosity = verbose
+    else:
+        verbosity = None
+
+    # Direct doctest output (normally just errors) to real stdout; doctest
+    # output shouldn't be compared by regrtest.
+    save_stdout = sys.stdout
+    sys.stdout = get_original_stdout()
+    try:
+        f, t = doctest.testmod(module, verbose=verbosity)
+        if f:
+            raise TestFailed("%d of %d doctests failed" % (f, t))
+    finally:
+        sys.stdout = save_stdout
+    if verbose:
+        print 'doctest (%s) ... %d tests with zero failures' % (module.__name__, t)
+    return f, t
+
+#=======================================================================
+# Threading support to prevent reporting refleaks when running regrtest.py -R
+
+# Flag used by saved_test_environment of test.libregrtest.save_env,
+# to check if a test modified the environment. The flag should be set to False
+# before running a new test.
+#
+# For example, threading_cleanup() sets the flag is the function fails
+# to cleanup threads.
+environment_altered = False
+
+# NOTE: we use thread._count() rather than threading.enumerate() (or the
+# moral equivalent thereof) because a threading.Thread object is still alive
+# until its __bootstrap() method has returned, even after it has been
+# unregistered from the threading module.
+# thread._count(), on the other hand, only gets decremented *after* the
+# __bootstrap() method has returned, which gives us reliable reference counts
+# at the end of a test run.
+
+def threading_setup():
+    if thread:
+        return thread._count(),
+    else:
+        return 1,
+
+def threading_cleanup(nb_threads):
+    if not thread:
+        return
+
+    _MAX_COUNT = 10
+    for count in range(_MAX_COUNT):
+        n = thread._count()
+        if n == nb_threads:
+            break
+        time.sleep(0.1)
+    # XXX print a warning in case of failure?
+
+def reap_threads(func):
+    """Use this function when threads are being used.  This will
+    ensure that the threads are cleaned up even when the test fails.
+    If threading is unavailable this function does nothing.
+    """
+    if not thread:
+        return func
+
+    @functools.wraps(func)
+    def decorator(*args):
+        key = threading_setup()
+        try:
+            return func(*args)
+        finally:
+            threading_cleanup(*key)
+    return decorator
+
+
+@contextlib.contextmanager
+def wait_threads_exit(timeout=60.0):
+    """
+    bpo-31234: Context manager to wait until all threads created in the with
+    statement exit.
+
+    Use thread.count() to check if threads exited. Indirectly, wait until
+    threads exit the internal t_bootstrap() C function of the thread module.
+
+    threading_setup() and threading_cleanup() are designed to emit a warning
+    if a test leaves running threads in the background. This context manager
+    is designed to cleanup threads started by the thread.start_new_thread()
+    which doesn't allow to wait for thread exit, whereas thread.Thread has a
+    join() method.
+    """
+    old_count = thread._count()
+    try:
+        yield
+    finally:
+        start_time = time.time()
+        deadline = start_time + timeout
+        while True:
+            count = thread._count()
+            if count <= old_count:
+                break
+            if time.time() > deadline:
+                dt = time.time() - start_time
+                msg = ("wait_threads() failed to cleanup %s "
+                       "threads after %.1f seconds "
+                       "(count: %s, old count: %s)"
+                       % (count - old_count, dt, count, old_count))
+                raise AssertionError(msg)
+            time.sleep(0.010)
+            gc_collect()
+
+
+def reap_children():
+    """Use this function at the end of test_main() whenever sub-processes
+    are started.  This will help ensure that no extra children (zombies)
+    stick around to hog resources and create problems when looking
+    for refleaks.
+    """
+
+    # Reap all our dead child processes so we don't leave zombies around.
+    # These hog resources and might be causing some of the buildbots to die.
+    if hasattr(os, 'waitpid'):
+        any_process = -1
+        while True:
+            try:
+                # This will raise an exception on Windows.  That's ok.
+                pid, status = os.waitpid(any_process, os.WNOHANG)
+                if pid == 0:
+                    break
+            except:
+                break
+
+@contextlib.contextmanager
+def start_threads(threads, unlock=None):
+    threads = list(threads)
+    started = []
+    try:
+        try:
+            for t in threads:
+                t.start()
+                started.append(t)
+        except:
+            if verbose:
+                print("Can't start %d threads, only %d threads started" %
+                      (len(threads), len(started)))
+            raise
+        yield
+    finally:
+        if unlock:
+            unlock()
+        endtime = starttime = time.time()
+        for timeout in range(1, 16):
+            endtime += 60
+            for t in started:
+                t.join(max(endtime - time.time(), 0.01))
+            started = [t for t in started if t.isAlive()]
+            if not started:
+                break
+            if verbose:
+                print('Unable to join %d threads during a period of '
+                      '%d minutes' % (len(started), timeout))
+    started = [t for t in started if t.isAlive()]
+    if started:
+        raise AssertionError('Unable to join %d threads' % len(started))
+
+@contextlib.contextmanager
+def swap_attr(obj, attr, new_val):
+    """Temporary swap out an attribute with a new object.
+
+    Usage:
+        with swap_attr(obj, "attr", 5):
+            ...
+
+        This will set obj.attr to 5 for the duration of the with: block,
+        restoring the old value at the end of the block. If `attr` doesn't
+        exist on `obj`, it will be created and then deleted at the end of the
+        block.
+
+        The old value (or None if it doesn't exist) will be assigned to the
+        target of the "as" clause, if there is one.
+    """
+    if hasattr(obj, attr):
+        real_val = getattr(obj, attr)
+        setattr(obj, attr, new_val)
+        try:
+            yield real_val
+        finally:
+            setattr(obj, attr, real_val)
+    else:
+        setattr(obj, attr, new_val)
+        try:
+            yield
+        finally:
+            if hasattr(obj, attr):
+                delattr(obj, attr)
+
+@contextlib.contextmanager
+def swap_item(obj, item, new_val):
+    """Temporary swap out an item with a new object.
+
+    Usage:
+        with swap_item(obj, "item", 5):
+            ...
+
+        This will set obj["item"] to 5 for the duration of the with: block,
+        restoring the old value at the end of the block. If `item` doesn't
+        exist on `obj`, it will be created and then deleted at the end of the
+        block.
+
+        The old value (or None if it doesn't exist) will be assigned to the
+        target of the "as" clause, if there is one.
+    """
+    if item in obj:
+        real_val = obj[item]
+        obj[item] = new_val
+        try:
+            yield real_val
+        finally:
+            obj[item] = real_val
+    else:
+        obj[item] = new_val
+        try:
+            yield
+        finally:
+            if item in obj:
+                del obj[item]
+
+def py3k_bytes(b):
+    """Emulate the py3k bytes() constructor.
+
+    NOTE: This is only a best effort function.
+    """
+    try:
+        # memoryview?
+        return b.tobytes()
+    except AttributeError:
+        try:
+            # iterable of ints?
+            return b"".join(chr(x) for x in b)
+        except TypeError:
+            return bytes(b)
+
+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."""
+    import subprocess
+    return subprocess._args_from_interpreter_flags()
+
+def strip_python_stderr(stderr):
+    """Strip the stderr of a Python process from potential debug output
+    emitted by the interpreter.
+
+    This will typically be run on the result of the communicate() method
+    of a subprocess.Popen object.
+    """
+    stderr = re.sub(br"\[\d+ refs\]\r?\n?$", b"", stderr).strip()
+    return stderr
+
+
+def check_free_after_iterating(test, iter, cls, args=()):
+    class A(cls):
+        def __del__(self):
+            done[0] = True
+            try:
+                next(it)
+            except StopIteration:
+                pass
+
+    done = [False]
+    it = iter(A(*args))
+    # Issue 26494: Shouldn't crash
+    test.assertRaises(StopIteration, next, it)
+    # The sequence should be deallocated just after the end of iterating
+    gc_collect()
+    test.assertTrue(done[0])
+
+@contextlib.contextmanager
+def disable_gc():
+    have_gc = gc.isenabled()
+    gc.disable()
+    try:
+        yield
+    finally:
+        if have_gc:
+            gc.enable()
+
+
+def python_is_optimized():
+    """Find if Python was built with optimizations."""
+    cflags = sysconfig.get_config_var('PY_CFLAGS') or ''
+    final_opt = ""
+    for opt in cflags.split():
+        if opt.startswith('-O'):
+            final_opt = opt
+    return final_opt not in ('', '-O0', '-Og')
+
+
+class SuppressCrashReport:
+    """Try to prevent a crash report from popping up.
+
+    On Windows, don't display the Windows Error Reporting dialog.  On UNIX,
+    disable the creation of coredump file.
+    """
+    old_value = None
+    old_modes = None
+
+    def __enter__(self):
+        """On Windows, disable Windows Error Reporting dialogs using
+        SetErrorMode.
+
+        On UNIX, try to save the previous core file size limit, then set
+        soft limit to 0.
+        """
+        if sys.platform.startswith('win'):
+            # see http://msdn.microsoft.com/en-us/library/windows/desktop/ms680621.aspx
+            # GetErrorMode is not available on Windows XP and Windows Server 2003,
+            # but SetErrorMode returns the previous value, so we can use that
+            import ctypes
+            self._k32 = ctypes.windll.kernel32
+            SEM_NOGPFAULTERRORBOX = 0x02
+            self.old_value = self._k32.SetErrorMode(SEM_NOGPFAULTERRORBOX)
+            self._k32.SetErrorMode(self.old_value | SEM_NOGPFAULTERRORBOX)
+
+            # Suppress assert dialogs in debug builds
+            # (see http://bugs.python.org/issue23314)
+            try:
+                import _testcapi
+                _testcapi.CrtSetReportMode
+            except (AttributeError, ImportError):
+                # no _testcapi or a release build
+                pass
+            else:
+                self.old_modes = {}
+                for report_type in [_testcapi.CRT_WARN,
+                                    _testcapi.CRT_ERROR,
+                                    _testcapi.CRT_ASSERT]:
+                    old_mode = _testcapi.CrtSetReportMode(report_type,
+                            _testcapi.CRTDBG_MODE_FILE)
+                    old_file = _testcapi.CrtSetReportFile(report_type,
+                            _testcapi.CRTDBG_FILE_STDERR)
+                    self.old_modes[report_type] = old_mode, old_file
+
+        else:
+            try:
+                import resource
+            except ImportError:
+                resource = None
+
+            if resource is not None:
+                try:
+                    self.old_value = resource.getrlimit(resource.RLIMIT_CORE)
+                    resource.setrlimit(resource.RLIMIT_CORE,
+                                       (0, self.old_value[1]))
+                except (ValueError, OSError):
+                    pass
+
+            if sys.platform == 'darwin':
+                # Check if the 'Crash Reporter' on OSX was configured
+                # in 'Developer' mode and warn that it will get triggered
+                # when it is.
+                #
+                # This assumes that this context manager is used in tests
+                # that might trigger the next manager.
+                import subprocess
+                cmd = ['/usr/bin/defaults', 'read',
+                       'com.apple.CrashReporter', 'DialogType']
+                proc = subprocess.Popen(cmd,
+                                        stdout=subprocess.PIPE,
+                                        stderr=subprocess.PIPE)
+                stdout = proc.communicate()[0]
+                if stdout.strip() == b'developer':
+                    sys.stdout.write("this test triggers the Crash Reporter, "
+                                     "that is intentional")
+                    sys.stdout.flush()
+
+        return self
+
+    def __exit__(self, *ignore_exc):
+        """Restore Windows ErrorMode or core file behavior to initial value."""
+        if self.old_value is None:
+            return
+
+        if sys.platform.startswith('win'):
+            self._k32.SetErrorMode(self.old_value)
+
+            if self.old_modes:
+                import _testcapi
+                for report_type, (old_mode, old_file) in self.old_modes.items():
+                    _testcapi.CrtSetReportMode(report_type, old_mode)
+                    _testcapi.CrtSetReportFile(report_type, old_file)
+        else:
+            import resource
+            try:
+                resource.setrlimit(resource.RLIMIT_CORE, self.old_value)
+            except (ValueError, OSError):
+                pass
+
+
+def _crash_python():
+    """Deliberate crash of Python.
+
+    Python can be killed by a segmentation fault (SIGSEGV), a bus error
+    (SIGBUS), or a different error depending on the platform.
+
+    Use SuppressCrashReport() to prevent a crash report from popping up.
+    """
+
+    import _testcapi
+    with SuppressCrashReport():
+        _testcapi._read_null()
+
+
+def fd_count():
+    """Count the number of open file descriptors.
+    """
+    if sys.platform.startswith(('linux', 'freebsd')):
+        try:
+            names = os.listdir("/proc/self/fd")
+            # Substract one because listdir() opens internally a file
+            # descriptor to list the content of the /proc/self/fd/ directory.
+            return len(names) - 1
+        except OSError as exc:
+            if exc.errno != errno.ENOENT:
+                raise
+
+    MAXFD = 256
+    if hasattr(os, 'sysconf'):
+        try:
+            MAXFD = os.sysconf("SC_OPEN_MAX")
+        except OSError:
+            pass
+
+    old_modes = None
+    if sys.platform == 'win32':
+        # bpo-25306, bpo-31009: Call CrtSetReportMode() to not kill the process
+        # on invalid file descriptor if Python is compiled in debug mode
+        try:
+            import msvcrt
+            msvcrt.CrtSetReportMode
+        except (AttributeError, ImportError):
+            # no msvcrt or a release build
+            pass
+        else:
+            old_modes = {}
+            for report_type in (msvcrt.CRT_WARN,
+                                msvcrt.CRT_ERROR,
+                                msvcrt.CRT_ASSERT):
+                old_modes[report_type] = msvcrt.CrtSetReportMode(report_type, 0)
+
+    try:
+        count = 0
+        for fd in range(MAXFD):
+            try:
+                # Prefer dup() over fstat(). fstat() can require input/output
+                # whereas dup() doesn't.
+                fd2 = os.dup(fd)
+            except OSError as e:
+                if e.errno != errno.EBADF:
+                    raise
+            else:
+                os.close(fd2)
+                count += 1
+    finally:
+        if old_modes is not None:
+            for report_type in (msvcrt.CRT_WARN,
+                                msvcrt.CRT_ERROR,
+                                msvcrt.CRT_ASSERT):
+                msvcrt.CrtSetReportMode(report_type, old_modes[report_type])
+
+    return count
+
+
+class SaveSignals:
+    """
+    Save an restore signal handlers.
+
+    This class is only able to save/restore signal handlers registered
+    by the Python signal module: see bpo-13285 for "external" signal
+    handlers.
+    """
+
+    def __init__(self):
+        import signal
+        self.signal = signal
+        self.signals = list(range(1, signal.NSIG))
+        # SIGKILL and SIGSTOP signals cannot be ignored nor catched
+        for signame in ('SIGKILL', 'SIGSTOP'):
+            try:
+                signum = getattr(signal, signame)
+            except AttributeError:
+                continue
+            self.signals.remove(signum)
+        self.handlers = {}
+
+    def save(self):
+        for signum in self.signals:
+            handler = self.signal.getsignal(signum)
+            if handler is None:
+                # getsignal() returns None if a signal handler was not
+                # registered by the Python signal module,
+                # and the handler is not SIG_DFL nor SIG_IGN.
+                #
+                # Ignore the signal: we cannot restore the handler.
+                continue
+            self.handlers[signum] = handler
+
+    def restore(self):
+        for signum, handler in self.handlers.items():
+            self.signal.signal(signum, handler)
diff --git a/Lib/test/support/script_helper.py b/Lib/test/support/script_helper.py
new file mode 100644
index 0000000..e06cdc3
--- /dev/null
+++ b/Lib/test/support/script_helper.py
@@ -0,0 +1,170 @@
+# Common utility functions used by various script execution tests
+#  e.g. test_cmd_line, test_cmd_line_script and test_runpy
+
+import sys
+import os
+import re
+import os.path
+import tempfile
+import subprocess
+import py_compile
+import contextlib
+import shutil
+try:
+    import zipfile
+except ImportError:
+    # If Python is build without Unicode support, importing _io will
+    # fail, which, in turn, means that zipfile cannot be imported
+    # Most of this module can then still be used.
+    pass
+
+from test.support import strip_python_stderr
+
+# Executing the interpreter in a subprocess
+def _assert_python(expected_success, *args, **env_vars):
+    cmd_line = [sys.executable]
+    if not env_vars:
+        cmd_line.append('-E')
+    cmd_line.extend(args)
+    # Need to preserve the original environment, for in-place testing of
+    # shared library builds.
+    env = os.environ.copy()
+    env.update(env_vars)
+    p = subprocess.Popen(cmd_line, stdin=subprocess.PIPE,
+                         stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+                         env=env)
+    try:
+        out, err = p.communicate()
+    finally:
+        subprocess._cleanup()
+        p.stdout.close()
+        p.stderr.close()
+    rc = p.returncode
+    err =  strip_python_stderr(err)
+    if (rc and expected_success) or (not rc and not expected_success):
+        raise AssertionError(
+            "Process return code is %d, "
+            "stderr follows:\n%s" % (rc, err.decode('ascii', 'ignore')))
+    return rc, out, err
+
+def assert_python_ok(*args, **env_vars):
+    """
+    Assert that running the interpreter with `args` and optional environment
+    variables `env_vars` is ok and return a (return code, stdout, stderr) tuple.
+    """
+    return _assert_python(True, *args, **env_vars)
+
+def assert_python_failure(*args, **env_vars):
+    """
+    Assert that running the interpreter with `args` and optional environment
+    variables `env_vars` fails and return a (return code, stdout, stderr) tuple.
+    """
+    return _assert_python(False, *args, **env_vars)
+
+def python_exit_code(*args):
+    cmd_line = [sys.executable, '-E']
+    cmd_line.extend(args)
+    with open(os.devnull, 'w') as devnull:
+        return subprocess.call(cmd_line, stdout=devnull,
+                                stderr=subprocess.STDOUT)
+
+def spawn_python(*args, **kwargs):
+    cmd_line = [sys.executable, '-E']
+    cmd_line.extend(args)
+    return subprocess.Popen(cmd_line, stdin=subprocess.PIPE,
+                            stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
+                            **kwargs)
+
+def kill_python(p):
+    p.stdin.close()
+    data = p.stdout.read()
+    p.stdout.close()
+    # try to cleanup the child so we don't appear to leak when running
+    # with regrtest -R.
+    p.wait()
+    subprocess._cleanup()
+    return data
+
+def run_python(*args, **kwargs):
+    if __debug__:
+        p = spawn_python(*args, **kwargs)
+    else:
+        p = spawn_python('-O', *args, **kwargs)
+    stdout_data = kill_python(p)
+    return p.wait(), stdout_data
+
+# Script creation utilities
+@contextlib.contextmanager
+def temp_dir():
+    dirname = tempfile.mkdtemp()
+    dirname = os.path.realpath(dirname)
+    try:
+        yield dirname
+    finally:
+        shutil.rmtree(dirname)
+
+def make_script(script_dir, script_basename, source):
+    script_filename = script_basename+os.extsep+'py'
+    script_name = os.path.join(script_dir, script_filename)
+    script_file = open(script_name, 'w')
+    script_file.write(source)
+    script_file.close()
+    return script_name
+
+def compile_script(script_name):
+    py_compile.compile(script_name, doraise=True)
+    if __debug__:
+        compiled_name = script_name + 'c'
+    else:
+        compiled_name = script_name + 'o'
+    return compiled_name
+
+def make_zip_script(zip_dir, zip_basename, script_name, name_in_zip=None):
+    zip_filename = zip_basename+os.extsep+'zip'
+    zip_name = os.path.join(zip_dir, zip_filename)
+    zip_file = zipfile.ZipFile(zip_name, 'w')
+    if name_in_zip is None:
+        name_in_zip = os.path.basename(script_name)
+    zip_file.write(script_name, name_in_zip)
+    zip_file.close()
+    #if test.test_support.verbose:
+    #    zip_file = zipfile.ZipFile(zip_name, 'r')
+    #    print 'Contents of %r:' % zip_name
+    #    zip_file.printdir()
+    #    zip_file.close()
+    return zip_name, os.path.join(zip_name, name_in_zip)
+
+def make_pkg(pkg_dir, init_source=''):
+    os.mkdir(pkg_dir)
+    make_script(pkg_dir, '__init__', init_source)
+
+def make_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename,
+                 source, depth=1, compiled=False):
+    unlink = []
+    init_name = make_script(zip_dir, '__init__', '')
+    unlink.append(init_name)
+    init_basename = os.path.basename(init_name)
+    script_name = make_script(zip_dir, script_basename, source)
+    unlink.append(script_name)
+    if compiled:
+        init_name = compile_script(init_name)
+        script_name = compile_script(script_name)
+        unlink.extend((init_name, script_name))
+    pkg_names = [os.sep.join([pkg_name]*i) for i in range(1, depth+1)]
+    script_name_in_zip = os.path.join(pkg_names[-1], os.path.basename(script_name))
+    zip_filename = zip_basename+os.extsep+'zip'
+    zip_name = os.path.join(zip_dir, zip_filename)
+    zip_file = zipfile.ZipFile(zip_name, 'w')
+    for name in pkg_names:
+        init_name_in_zip = os.path.join(name, init_basename)
+        zip_file.write(init_name, init_name_in_zip)
+    zip_file.write(script_name, script_name_in_zip)
+    zip_file.close()
+    for name in unlink:
+        os.unlink(name)
+    #if test.test_support.verbose:
+    #    zip_file = zipfile.ZipFile(zip_name, 'r')
+    #    print 'Contents of %r:' % zip_name
+    #    zip_file.printdir()
+    #    zip_file.close()
+    return zip_name, os.path.join(zip_name, script_name_in_zip)
diff --git a/Lib/test/test_abc.py b/Lib/test/test_abc.py
index 6a8c3a1..dbba37c 100644
--- a/Lib/test/test_abc.py
+++ b/Lib/test/test_abc.py
@@ -208,6 +208,7 @@
         C()
         self.assertEqual(B.counter, 1)
 
+    @test_support.requires_type_collecting
     def test_cache_leak(self):
         # See issue #2521.
         class A(object):
diff --git a/Lib/test/test_aifc.py b/Lib/test/test_aifc.py
index d4e9de5..92bbe7b 100644
--- a/Lib/test/test_aifc.py
+++ b/Lib/test/test_aifc.py
@@ -129,6 +129,18 @@
         #This file contains chunk types aifc doesn't recognize.
         self.f = aifc.open(findfile('Sine-1000Hz-300ms.aif'))
 
+    def test_close_opened_files_on_error(self):
+        non_aifc_file = findfile('pluck-pcm8.wav', subdir='audiodata')
+
+        class Aifc(aifc.Aifc_read):
+            def __init__(self):
+                pass
+
+        a = Aifc()
+        with self.assertRaises(aifc.Error):
+            aifc.Aifc_read.__init__(a, non_aifc_file)
+        self.assertTrue(a._file.closed)
+
     def test_write_markers_values(self):
         fout = aifc.open(io.BytesIO(), 'wb')
         self.assertEqual(fout.getmarkers(), None)
@@ -202,6 +214,14 @@
         b = io.BytesIO('FORM' + struct.pack('>L', 4) + 'AIFF')
         self.assertRaises(aifc.Error, aifc.open, b)
 
+    def test_read_no_ssnd_chunk(self):
+        b = b'FORM' + struct.pack('>L', 4) + b'AIFC'
+        b += b'COMM' + struct.pack('>LhlhhLL', 38, 0, 0, 0, 0, 0, 0)
+        b += b'NONE' + struct.pack('B', 14) + b'not compressed' + b'\x00'
+        with self.assertRaisesRegexp(aifc.Error, 'COMM chunk and/or SSND chunk'
+                                                 ' missing'):
+            aifc.open(io.BytesIO(b))
+
     def test_read_wrong_compression_type(self):
         b = 'FORM' + struct.pack('>L', 4) + 'AIFC'
         b += 'COMM' + struct.pack('>LhlhhLL', 23, 0, 0, 0, 0, 0, 0)
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py
index 83f6f27..f39565a 100644
--- a/Lib/test/test_argparse.py
+++ b/Lib/test/test_argparse.py
@@ -4652,7 +4652,7 @@
         self.do_test_exception(nargs=None, metavar=tuple())
 
     def test_nargs_None_metavar_length1(self):
-        self.do_test_no_exception(nargs=None, metavar=("1"))
+        self.do_test_no_exception(nargs=None, metavar=("1",))
 
     def test_nargs_None_metavar_length2(self):
         self.do_test_exception(nargs=None, metavar=("1", "2"))
@@ -4669,7 +4669,7 @@
         self.do_test_exception(nargs="?", metavar=tuple())
 
     def test_nargs_optional_metavar_length1(self):
-        self.do_test_no_exception(nargs="?", metavar=("1"))
+        self.do_test_no_exception(nargs="?", metavar=("1",))
 
     def test_nargs_optional_metavar_length2(self):
         self.do_test_exception(nargs="?", metavar=("1", "2"))
@@ -4686,7 +4686,7 @@
         self.do_test_exception(nargs="*", metavar=tuple())
 
     def test_nargs_zeroormore_metavar_length1(self):
-        self.do_test_no_exception(nargs="*", metavar=("1"))
+        self.do_test_exception(nargs="*", metavar=("1",))
 
     def test_nargs_zeroormore_metavar_length2(self):
         self.do_test_no_exception(nargs="*", metavar=("1", "2"))
@@ -4703,7 +4703,7 @@
         self.do_test_exception(nargs="+", metavar=tuple())
 
     def test_nargs_oneormore_metavar_length1(self):
-        self.do_test_no_exception(nargs="+", metavar=("1"))
+        self.do_test_exception(nargs="+", metavar=("1",))
 
     def test_nargs_oneormore_metavar_length2(self):
         self.do_test_no_exception(nargs="+", metavar=("1", "2"))
@@ -4720,7 +4720,7 @@
         self.do_test_no_exception(nargs="...", metavar=tuple())
 
     def test_nargs_remainder_metavar_length1(self):
-        self.do_test_no_exception(nargs="...", metavar=("1"))
+        self.do_test_no_exception(nargs="...", metavar=("1",))
 
     def test_nargs_remainder_metavar_length2(self):
         self.do_test_no_exception(nargs="...", metavar=("1", "2"))
@@ -4737,7 +4737,7 @@
         self.do_test_exception(nargs="A...", metavar=tuple())
 
     def test_nargs_parser_metavar_length1(self):
-        self.do_test_no_exception(nargs="A...", metavar=("1"))
+        self.do_test_no_exception(nargs="A...", metavar=("1",))
 
     def test_nargs_parser_metavar_length2(self):
         self.do_test_exception(nargs="A...", metavar=("1", "2"))
@@ -4754,7 +4754,7 @@
         self.do_test_exception(nargs=1, metavar=tuple())
 
     def test_nargs_1_metavar_length1(self):
-        self.do_test_no_exception(nargs=1, metavar=("1"))
+        self.do_test_no_exception(nargs=1, metavar=("1",))
 
     def test_nargs_1_metavar_length2(self):
         self.do_test_exception(nargs=1, metavar=("1", "2"))
@@ -4771,7 +4771,7 @@
         self.do_test_exception(nargs=2, metavar=tuple())
 
     def test_nargs_2_metavar_length1(self):
-        self.do_test_no_exception(nargs=2, metavar=("1"))
+        self.do_test_exception(nargs=2, metavar=("1",))
 
     def test_nargs_2_metavar_length2(self):
         self.do_test_no_exception(nargs=2, metavar=("1", "2"))
@@ -4788,7 +4788,7 @@
         self.do_test_exception(nargs=3, metavar=tuple())
 
     def test_nargs_3_metavar_length1(self):
-        self.do_test_no_exception(nargs=3, metavar=("1"))
+        self.do_test_exception(nargs=3, metavar=("1",))
 
     def test_nargs_3_metavar_length2(self):
         self.do_test_exception(nargs=3, metavar=("1", "2"))
@@ -4815,6 +4815,30 @@
         ]
         self.assertEqual(sorted(items), sorted(argparse.__all__))
 
+
+class TestWrappingMetavar(TestCase):
+
+    def setUp(self):
+        self.parser = ErrorRaisingArgumentParser(
+            'this_is_spammy_prog_with_a_long_name_sorry_about_the_name'
+        )
+        # this metavar was triggering library assertion errors due to usage
+        # message formatting incorrectly splitting on the ] chars within
+        metavar = '<http[s]://example:1234>'
+        self.parser.add_argument('--proxy', metavar=metavar)
+
+    def test_help_with_metavar(self):
+        help_text = self.parser.format_help()
+        self.assertEqual(help_text, textwrap.dedent('''\
+            usage: this_is_spammy_prog_with_a_long_name_sorry_about_the_name
+                   [-h] [--proxy <http[s]://example:1234>]
+
+            optional arguments:
+              -h, --help            show this help message and exit
+              --proxy <http[s]://example:1234>
+            '''))
+
+
 def test_main():
     # silence warnings about version argument - these are expected
     with test_support.check_warnings(
diff --git a/Lib/test/test_asyncore.py b/Lib/test/test_asyncore.py
index 20eceb6..4b347a3 100644
--- a/Lib/test/test_asyncore.py
+++ b/Lib/test/test_asyncore.py
@@ -442,6 +442,19 @@
         asyncore.loop(timeout=0.01, use_poll=True, count=2)
         self.assertEqual(b"".join(data), self.d)
 
+    def test_close_twice(self):
+        fd = os.open(TESTFN, os.O_RDONLY)
+        f = asyncore.file_wrapper(fd)
+        os.close(fd)
+
+        os.close(f.fd)  # file_wrapper dupped fd
+        with self.assertRaises(OSError):
+            f.close()
+
+        self.assertEqual(f.fd, -1)
+        # calling close twice should not fail
+        f.close()
+
 
 class BaseTestHandler(asyncore.dispatcher):
 
@@ -606,6 +619,9 @@
         # Note: this might fail on some platforms as OOB data is
         # tenuously supported and rarely used.
 
+        if sys.platform == "darwin" and self.use_poll:
+            self.skipTest("poll may fail on macOS; see issue #28087")
+
         class TestClient(BaseClient):
             def handle_expt(self):
                 self.flag = True
@@ -711,19 +727,20 @@
         server = TCPServer()
         t = threading.Thread(target=lambda: asyncore.loop(timeout=0.1, count=500))
         t.start()
-        self.addCleanup(t.join)
-
-        for x in xrange(20):
-            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-            s.settimeout(.2)
-            s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER,
-                         struct.pack('ii', 1, 0))
-            try:
-                s.connect(server.address)
-            except socket.error:
-                pass
-            finally:
-                s.close()
+        try:
+            for x in xrange(20):
+                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+                s.settimeout(.2)
+                s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER,
+                             struct.pack('ii', 1, 0))
+                try:
+                    s.connect(server.address)
+                except socket.error:
+                    pass
+                finally:
+                    s.close()
+        finally:
+            t.join()
 
 
 class TestAPI_UseSelect(BaseTestAPI):
diff --git a/Lib/test/test_atexit.py b/Lib/test/test_atexit.py
index bf85b75..bde8987 100644
--- a/Lib/test/test_atexit.py
+++ b/Lib/test/test_atexit.py
@@ -5,12 +5,17 @@
 from imp import reload
 from test import test_support
 
+
+def exit():
+    raise SystemExit
+
+
 class TestCase(unittest.TestCase):
     def setUp(self):
-        s = StringIO.StringIO()
         self.save_stdout = sys.stdout
         self.save_stderr = sys.stderr
-        sys.stdout = sys.stderr = self.subst_io = s
+        self.stream = StringIO.StringIO()
+        sys.stdout = sys.stderr = self.subst_io = self.stream
         self.save_handlers = atexit._exithandlers
         atexit._exithandlers = []
 
@@ -55,6 +60,13 @@
         atexit.register(self.raise2)
         self.assertRaises(TypeError, atexit._run_exitfuncs)
 
+    def test_exit(self):
+        # be sure a SystemExit is handled properly
+        atexit.register(exit)
+
+        self.assertRaises(SystemExit, atexit._run_exitfuncs)
+        self.assertEqual(self.stream.getvalue(), '')
+
     ### helpers
     def h1(self):
         print "h1"
diff --git a/Lib/test/test_audioop.py b/Lib/test/test_audioop.py
index 4af7350..5f1deb5 100644
--- a/Lib/test/test_audioop.py
+++ b/Lib/test/test_audioop.py
@@ -325,6 +325,10 @@
             self.assertEqual(audioop.ratecv(datas[w], w, 1, 8000, 8000, None, 30, 10)[0],
                              expected[w])
 
+        self.assertRaises(TypeError, audioop.ratecv, b'', 1, 1, 8000, 8000, 42)
+        self.assertRaises(TypeError, audioop.ratecv,
+                          b'', 1, 1, 8000, 8000, (1, (42,)))
+
     def test_reverse(self):
         for w in 1, 2, 4:
             self.assertEqual(audioop.reverse(b'', w), b'')
diff --git a/Lib/test/test_bisect.py b/Lib/test/test_bisect.py
index 5c3330b..9bed28e 100644
--- a/Lib/test/test_bisect.py
+++ b/Lib/test/test_bisect.py
@@ -1,3 +1,4 @@
+from __future__ import absolute_import
 import sys
 import unittest
 from test import test_support
diff --git a/Lib/test/test_bsddb.py b/Lib/test/test_bsddb.py
index 3ff020a..9271d7a 100644
--- a/Lib/test/test_bsddb.py
+++ b/Lib/test/test_bsddb.py
@@ -172,7 +172,7 @@
 
     def test_first_while_deleting(self):
         # Test for bug 1725856
-        self.assertTrue(len(self.d) >= 2, "test requires >=2 items")
+        self.assertGreaterEqual(len(self.d), 2, "test requires >=2 items")
         for _ in self.d:
             key = self.f.first()[0]
             del self.f[key]
@@ -180,7 +180,7 @@
 
     def test_last_while_deleting(self):
         # Test for bug 1725856's evil twin
-        self.assertTrue(len(self.d) >= 2, "test requires >=2 items")
+        self.assertGreaterEqual(len(self.d), 2, "test requires >=2 items")
         for _ in self.d:
             key = self.f.last()[0]
             del self.f[key]
@@ -197,7 +197,7 @@
     def test_has_key(self):
         for k in self.d:
             self.assertTrue(self.f.has_key(k))
-        self.assertTrue(not self.f.has_key('not here'))
+        self.assertFalse(self.f.has_key('not here'))
 
     def test_clear(self):
         self.f.clear()
@@ -271,7 +271,7 @@
 
         self.assertEqual(nc1, nc2)
         self.assertEqual(nc1, nc4)
-        self.assertTrue(nc3 == nc1+1)
+        self.assertEqual(nc3, nc1+1)
 
     def test_popitem(self):
         k, v = self.f.popitem()
diff --git a/Lib/test/test_bsddb3.py b/Lib/test/test_bsddb3.py
index 099145b..1a82325 100644
--- a/Lib/test/test_bsddb3.py
+++ b/Lib/test/test_bsddb3.py
@@ -28,6 +28,10 @@
     verbose = False
     sys.argv.remove('silent')
 
+# bpo-30778: test_bsddb3 crashs randomly on Windows XP
+if hasattr(sys, 'getwindowsversion') and sys.getwindowsversion()[:2] < (6, 0):
+    raise unittest.SkipTest("bpo-30778: skip tests on Windows XP")
+
 
 class TimingCheck(unittest.TestCase):
 
diff --git a/Lib/test/test_buffer.py b/Lib/test/test_buffer.py
index de80d44..c7114cd 100644
--- a/Lib/test/test_buffer.py
+++ b/Lib/test/test_buffer.py
@@ -8,6 +8,7 @@
 import pickle
 import sys
 import unittest
+import warnings
 from test import test_support
 
 class BufferTests(unittest.TestCase):
@@ -39,15 +40,19 @@
 
     def test_copy(self):
         buf = buffer(b'abc')
-        with self.assertRaises(TypeError):
+        with self.assertRaises(TypeError), warnings.catch_warnings():
+            warnings.filterwarnings('ignore', ".*buffer", DeprecationWarning)
             copy.copy(buf)
 
-    # See issue #22995
-    ## def test_pickle(self):
-    ##     buf = buffer(b'abc')
-    ##     for proto in range(pickle.HIGHEST_PROTOCOL + 1):
-    ##         with self.assertRaises(TypeError):
-    ##             pickle.dumps(buf, proto)
+    @test_support.cpython_only
+    def test_pickle(self):
+        buf = buffer(b'abc')
+        for proto in range(2):
+            with self.assertRaises(TypeError):
+                pickle.dumps(buf, proto)
+        with test_support.check_py3k_warnings(
+                (".*buffer", DeprecationWarning)):
+            pickle.dumps(buf, 2)
 
 
 def test_main():
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index c9347e9..5396838 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -1593,18 +1593,28 @@
         self.assertRaises(ValueError, x.translate, "1", 1)
         self.assertRaises(TypeError, x.translate, "1"*256, 1)
 
+
+def create_exec_script(filename):
+    with open(filename, 'w') as f:
+        f.write('z = z+1\n')
+        f.write('z = z*2\n')
+
+
 class TestExecFile(unittest.TestCase):
     # Done outside of the method test_z to get the correct scope
     z = 0
-    f = open(TESTFN, 'w')
-    f.write('z = z+1\n')
-    f.write('z = z*2\n')
-    f.close()
-    with check_py3k_warnings(("execfile.. not supported in 3.x",
-                              DeprecationWarning)):
-        execfile(TESTFN)
+    try:
+        create_exec_script(TESTFN)
+        with check_py3k_warnings(("execfile.. not supported in 3.x",
+                                  DeprecationWarning)):
+            execfile(TESTFN)
+    finally:
+        unlink(TESTFN)
 
     def test_execfile(self):
+        self.addCleanup(unlink, TESTFN)
+        create_exec_script(TESTFN)
+
         globals = {'a': 1, 'b': 2}
         locals = {'b': 200, 'c': 300}
 
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py
index 4a70b33..ce2c5b2 100644
--- a/Lib/test/test_bytes.py
+++ b/Lib/test/test_bytes.py
@@ -336,8 +336,16 @@
         self.assertEqual(b.replace(b'i', b'a'), b'massassappa')
         self.assertEqual(b.replace(b'ss', b'x'), b'mixixippi')
 
+    def test_replace_int_error(self):
+        self.assertRaises(TypeError, self.type2test(b'a b').replace, 32, b'')
+
     def test_split_string_error(self):
         self.assertRaises(TypeError, self.type2test(b'a b').split, u' ')
+        self.assertRaises(TypeError, self.type2test(b'a b').rsplit, u' ')
+
+    def test_split_int_error(self):
+        self.assertRaises(TypeError, self.type2test(b'a b').split, 32)
+        self.assertRaises(TypeError, self.type2test(b'a b').rsplit, 32)
 
     def test_split_unicodewhitespace(self):
         for b in (b'a\x1Cb', b'a\x1Db', b'a\x1Eb', b'a\x1Fb'):
@@ -346,9 +354,6 @@
         b = self.type2test(b"\x09\x0A\x0B\x0C\x0D\x1C\x1D\x1E\x1F")
         self.assertEqual(b.split(), [b'\x1c\x1d\x1e\x1f'])
 
-    def test_rsplit_string_error(self):
-        self.assertRaises(TypeError, self.type2test(b'a b').rsplit, u' ')
-
     def test_rsplit_unicodewhitespace(self):
         b = self.type2test(b"\x09\x0A\x0B\x0C\x0D\x1C\x1D\x1E\x1F")
         self.assertEqual(b.rsplit(), [b'\x1c\x1d\x1e\x1f'])
@@ -364,6 +369,14 @@
         self.assertEqual(b.rpartition(b'i'), (b'mississipp', b'i', b''))
         self.assertEqual(b.rpartition(b'w'), (b'', b'', b'mississippi'))
 
+    def test_partition_string_error(self):
+        self.assertRaises(TypeError, self.type2test(b'a b').partition, u' ')
+        self.assertRaises(TypeError, self.type2test(b'a b').rpartition, u' ')
+
+    def test_partition_int_error(self):
+        self.assertRaises(TypeError, self.type2test(b'a b').partition, 32)
+        self.assertRaises(TypeError, self.type2test(b'a b').rpartition, 32)
+
     def test_pickling(self):
         for proto in range(pickle.HIGHEST_PROTOCOL + 1):
             for b in b"", b"a", b"abc", b"\xffab\x80", b"\0\0\377\0\0":
@@ -378,9 +391,19 @@
         self.assertEqual(self.type2test(b'abc').rstrip(memoryview(b'ac')), b'ab')
 
     def test_strip_string_error(self):
-        self.assertRaises(TypeError, self.type2test(b'abc').strip, u'b')
-        self.assertRaises(TypeError, self.type2test(b'abc').lstrip, u'b')
-        self.assertRaises(TypeError, self.type2test(b'abc').rstrip, u'b')
+        self.assertRaises(TypeError, self.type2test(b'abc').strip, u'ac')
+        self.assertRaises(TypeError, self.type2test(b'abc').lstrip, u'ac')
+        self.assertRaises(TypeError, self.type2test(b'abc').rstrip, u'ac')
+
+    def test_strip_int_error(self):
+        self.assertRaises(TypeError, self.type2test(b' abc ').strip, 32)
+        self.assertRaises(TypeError, self.type2test(b' abc ').lstrip, 32)
+        self.assertRaises(TypeError, self.type2test(b' abc ').rstrip, 32)
+
+    def test_xjust_int_error(self):
+        self.assertRaises(TypeError, self.type2test(b'abc').center, 7, 32)
+        self.assertRaises(TypeError, self.type2test(b'abc').ljust, 7, 32)
+        self.assertRaises(TypeError, self.type2test(b'abc').rjust, 7, 32)
 
     def test_ord(self):
         b = self.type2test(b'\0A\x7f\x80\xff')
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
index 944e960..5eb3f7d 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -2,6 +2,7 @@
 # these are all functions _testcapi exports whose name begins with 'test_'.
 
 from __future__ import with_statement
+import string
 import sys
 import time
 import random
@@ -101,6 +102,20 @@
         self.pendingcalls_wait(l, n)
 
 
+class TestGetIndices(unittest.TestCase):
+
+    def test_get_indices(self):
+        self.assertEqual(_testcapi.get_indices(slice(10L, 20, 1), 100), (0, 10, 20, 1))
+        self.assertEqual(_testcapi.get_indices(slice(10.1, 20, 1), 100), None)
+        self.assertEqual(_testcapi.get_indices(slice(10, 20L, 1), 100), (0, 10, 20, 1))
+        self.assertEqual(_testcapi.get_indices(slice(10, 20.1, 1), 100), None)
+
+        self.assertEqual(_testcapi.get_indices(slice(10L, 20, 1L), 100), (0, 10, 20, 1))
+        self.assertEqual(_testcapi.get_indices(slice(10.1, 20, 1L), 100), None)
+        self.assertEqual(_testcapi.get_indices(slice(10, 20L, 1L), 100), (0, 10, 20, 1))
+        self.assertEqual(_testcapi.get_indices(slice(10, 20.1, 1L), 100), None)
+
+
 @unittest.skipUnless(threading and thread, 'Threading required for this test.')
 class TestThreadState(unittest.TestCase):
 
@@ -126,18 +141,15 @@
         t.join()
 
 
-def test_main():
-    for name in dir(_testcapi):
-        if name.startswith('test_'):
-            test = getattr(_testcapi, name)
-            if support.verbose:
-                print "internal", name
-            try:
-                test()
-            except _testcapi.error:
-                raise support.TestFailed, sys.exc_info()[1]
+class Test_testcapi(unittest.TestCase):
+    locals().update((name, getattr(_testcapi, name))
+                    for name in dir(_testcapi)
+                    if name.startswith('test_') and not name.endswith('_code'))
 
-    support.run_unittest(CAPITest, TestPendingCalls, TestThreadState)
+
+def test_main():
+    support.run_unittest(CAPITest, TestPendingCalls,
+                         TestThreadState, TestGetIndices, Test_testcapi)
 
 if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/test_class.py b/Lib/test/test_class.py
index e5cdf08..5cd138d 100644
--- a/Lib/test/test_class.py
+++ b/Lib/test/test_class.py
@@ -635,6 +635,49 @@
             self.assertRaises(TypeError, type(c).__getattribute__, c, [])
             self.assertRaises(TypeError, type(c).__setattr__, c, [], [])
 
+    def testSetattrWrapperNameIntern(self):
+        # Issue #25794: __setattr__ should intern the attribute name
+        class A(object):
+            pass
+
+        def add(self, other):
+            return 'summa'
+
+        name = ''.join(list('__add__'))  # shouldn't be optimized
+        self.assertIsNot(name, '__add__')  # not interned
+        type.__setattr__(A, name, add)
+        self.assertEqual(A() + 1, 'summa')
+
+        name2 = ''.join(list('__add__'))
+        self.assertIsNot(name2, '__add__')
+        self.assertIsNot(name2, name)
+        type.__delattr__(A, name2)
+        with self.assertRaises(TypeError):
+            A() + 1
+
+    @test_support.requires_unicode
+    def testSetattrWrapperNameUnicode(self):
+        # Issue #25794: __setattr__ should intern the attribute name
+        class A(object):
+            pass
+
+        def add(self, other):
+            return 'summa'
+
+        type.__setattr__(A, u'__add__', add)
+        self.assertEqual(A() + 1, 'summa')
+
+        type.__delattr__(A, u'__add__')
+        with self.assertRaises(TypeError):
+            A() + 1
+
+    def testSetattrNonStringName(self):
+        class A(object):
+            pass
+
+        with self.assertRaises(TypeError):
+            type.__setattr__(A, bytearray(b'x'), None)
+
 def test_main():
     with test_support.check_py3k_warnings(
             (".+__(get|set|del)slice__ has been removed", DeprecationWarning),
diff --git a/Lib/test/test_codecencodings_cn.py b/Lib/test/test_codecencodings_cn.py
index cd102fd..a1bbcb7 100644
--- a/Lib/test/test_codecencodings_cn.py
+++ b/Lib/test/test_codecencodings_cn.py
@@ -4,12 +4,12 @@
 #
 
 from test import test_support
-from test import test_multibytecodec_support
+from test import multibytecodec_support
 import unittest
 
-class Test_GB2312(test_multibytecodec_support.TestBase, unittest.TestCase):
+class Test_GB2312(multibytecodec_support.TestBase, unittest.TestCase):
     encoding = 'gb2312'
-    tstring = test_multibytecodec_support.load_teststring('gb2312')
+    tstring = multibytecodec_support.load_teststring('gb2312')
     codectests = (
         # invalid bytes
         ("abc\x81\x81\xc1\xc4", "strict",  None),
@@ -20,9 +20,9 @@
         ("\xc1\x64", "strict", None),
     )
 
-class Test_GBK(test_multibytecodec_support.TestBase, unittest.TestCase):
+class Test_GBK(multibytecodec_support.TestBase, unittest.TestCase):
     encoding = 'gbk'
-    tstring = test_multibytecodec_support.load_teststring('gbk')
+    tstring = multibytecodec_support.load_teststring('gbk')
     codectests = (
         # invalid bytes
         ("abc\x80\x80\xc1\xc4", "strict",  None),
@@ -34,9 +34,9 @@
         (u"\u30fb", "strict", None),
     )
 
-class Test_GB18030(test_multibytecodec_support.TestBase, unittest.TestCase):
+class Test_GB18030(multibytecodec_support.TestBase, unittest.TestCase):
     encoding = 'gb18030'
-    tstring = test_multibytecodec_support.load_teststring('gb18030')
+    tstring = multibytecodec_support.load_teststring('gb18030')
     codectests = (
         # invalid bytes
         ("abc\x80\x80\xc1\xc4", "strict",  None),
@@ -46,12 +46,18 @@
         ("abc\x80\x80\xc1\xc4", "ignore",  u"abc\u804a"),
         ("abc\x84\x39\x84\x39\xc1\xc4", "replace", u"abc\ufffd\u804a"),
         (u"\u30fb", "strict", "\x819\xa79"),
+        # issue29990
+        ("\xff\x30\x81\x30", "strict", None),
+        ("\x81\x30\xff\x30", "strict", None),
+        ("abc\x81\x39\xff\x39\xc1\xc4", "replace", u"abc\ufffd\u804a"),
+        ("abc\xab\x36\xff\x30def", "replace", u'abc\ufffddef'),
+        ("abc\xbf\x38\xff\x32\xc1\xc4", "ignore", u"abc\u804a"),
     )
     has_iso10646 = True
 
-class Test_HZ(test_multibytecodec_support.TestBase, unittest.TestCase):
+class Test_HZ(multibytecodec_support.TestBase, unittest.TestCase):
     encoding = 'hz'
-    tstring = test_multibytecodec_support.load_teststring('hz')
+    tstring = multibytecodec_support.load_teststring('hz')
     codectests = (
         # test '~\n' (3 lines)
         (b'This sentence is in ASCII.\n'
@@ -76,6 +82,10 @@
         (b'ab~cd', 'replace', u'ab\uFFFDd'),
         (b'ab\xffcd', 'replace', u'ab\uFFFDcd'),
         (b'ab~{\x81\x81\x41\x44~}cd', 'replace', u'ab\uFFFD\uFFFD\u804Acd'),
+        # issue 30003
+        (u'ab~cd', 'strict',  b'ab~~cd'), # escape ~
+        (b'~{Dc~~:C~}', 'strict', None),  # ~~ only in ASCII mode
+        (b'~{Dc~\n:C~}', 'strict', None), # ~\n only in ASCII mode
     )
 
 def test_main():
diff --git a/Lib/test/test_codecencodings_hk.py b/Lib/test/test_codecencodings_hk.py
index 391c316..00774ab 100644
--- a/Lib/test/test_codecencodings_hk.py
+++ b/Lib/test/test_codecencodings_hk.py
@@ -4,12 +4,12 @@
 #
 
 from test import test_support
-from test import test_multibytecodec_support
+from test import multibytecodec_support
 import unittest
 
-class Test_Big5HKSCS(test_multibytecodec_support.TestBase, unittest.TestCase):
+class Test_Big5HKSCS(multibytecodec_support.TestBase, unittest.TestCase):
     encoding = 'big5hkscs'
-    tstring = test_multibytecodec_support.load_teststring('big5hkscs')
+    tstring = multibytecodec_support.load_teststring('big5hkscs')
     codectests = (
         # invalid bytes
         ("abc\x80\x80\xc1\xc4", "strict",  None),
diff --git a/Lib/test/test_codecencodings_iso2022.py b/Lib/test/test_codecencodings_iso2022.py
index 9f23628..75f4cfc 100644
--- a/Lib/test/test_codecencodings_iso2022.py
+++ b/Lib/test/test_codecencodings_iso2022.py
@@ -1,7 +1,7 @@
 # Codec encoding tests for ISO 2022 encodings.
 
 from test import test_support
-from test import test_multibytecodec_support
+from test import multibytecodec_support
 import unittest
 
 COMMON_CODEC_TESTS = (
@@ -11,23 +11,23 @@
         (b'ab\x1B$def', 'replace', u'ab\uFFFD'),
     )
 
-class Test_ISO2022_JP(test_multibytecodec_support.TestBase, unittest.TestCase):
+class Test_ISO2022_JP(multibytecodec_support.TestBase, unittest.TestCase):
     encoding = 'iso2022_jp'
-    tstring = test_multibytecodec_support.load_teststring('iso2022_jp')
+    tstring = multibytecodec_support.load_teststring('iso2022_jp')
     codectests = COMMON_CODEC_TESTS + (
         (b'ab\x1BNdef', 'replace', u'ab\x1BNdef'),
     )
 
-class Test_ISO2022_JP2(test_multibytecodec_support.TestBase, unittest.TestCase):
+class Test_ISO2022_JP2(multibytecodec_support.TestBase, unittest.TestCase):
     encoding = 'iso2022_jp_2'
-    tstring = test_multibytecodec_support.load_teststring('iso2022_jp')
+    tstring = multibytecodec_support.load_teststring('iso2022_jp')
     codectests = COMMON_CODEC_TESTS + (
         (b'ab\x1BNdef', 'replace', u'abdef'),
     )
 
-class Test_ISO2022_KR(test_multibytecodec_support.TestBase, unittest.TestCase):
+class Test_ISO2022_KR(multibytecodec_support.TestBase, unittest.TestCase):
     encoding = 'iso2022_kr'
-    tstring = test_multibytecodec_support.load_teststring('iso2022_kr')
+    tstring = multibytecodec_support.load_teststring('iso2022_kr')
     codectests = COMMON_CODEC_TESTS + (
         (b'ab\x1BNdef', 'replace', u'ab\x1BNdef'),
     )
diff --git a/Lib/test/test_codecencodings_jp.py b/Lib/test/test_codecencodings_jp.py
index f3cf923..e0ad054 100644
--- a/Lib/test/test_codecencodings_jp.py
+++ b/Lib/test/test_codecencodings_jp.py
@@ -4,12 +4,12 @@
 #
 
 from test import test_support
-from test import test_multibytecodec_support
+from test import multibytecodec_support
 import unittest
 
-class Test_CP932(test_multibytecodec_support.TestBase, unittest.TestCase):
+class Test_CP932(multibytecodec_support.TestBase, unittest.TestCase):
     encoding = 'cp932'
-    tstring = test_multibytecodec_support.load_teststring('shift_jis')
+    tstring = multibytecodec_support.load_teststring('shift_jis')
     codectests = (
         # invalid bytes
         ("abc\x81\x00\x81\x00\x82\x84", "strict",  None),
@@ -22,10 +22,10 @@
         ("\x81\x5f\x81\x61\x81\x7c", "replace", u"\uff3c\u2225\uff0d"),
     )
 
-class Test_EUC_JISX0213(test_multibytecodec_support.TestBase,
+class Test_EUC_JISX0213(multibytecodec_support.TestBase,
                         unittest.TestCase):
     encoding = 'euc_jisx0213'
-    tstring = test_multibytecodec_support.load_teststring('euc_jisx0213')
+    tstring = multibytecodec_support.load_teststring('euc_jisx0213')
     codectests = (
         # invalid bytes
         ("abc\x80\x80\xc1\xc4", "strict",  None),
@@ -52,10 +52,10 @@
     ("\xc1\x64", "strict", None),
 )
 
-class Test_EUC_JP_COMPAT(test_multibytecodec_support.TestBase,
+class Test_EUC_JP_COMPAT(multibytecodec_support.TestBase,
                          unittest.TestCase):
     encoding = 'euc_jp'
-    tstring = test_multibytecodec_support.load_teststring('euc_jp')
+    tstring = multibytecodec_support.load_teststring('euc_jp')
     codectests = eucjp_commontests + (
         ("\xa1\xc0\\", "strict", u"\uff3c\\"),
         (u"\xa5", "strict", "\x5c"),
@@ -70,17 +70,17 @@
     ("abc\x80\x80\x82\x84def", "ignore",  u"abc\uff44def"),
 )
 
-class Test_SJIS_COMPAT(test_multibytecodec_support.TestBase, unittest.TestCase):
+class Test_SJIS_COMPAT(multibytecodec_support.TestBase, unittest.TestCase):
     encoding = 'shift_jis'
-    tstring = test_multibytecodec_support.load_teststring('shift_jis')
+    tstring = multibytecodec_support.load_teststring('shift_jis')
     codectests = shiftjis_commonenctests + (
         ("\\\x7e", "strict", u"\\\x7e"),
         ("\x81\x5f\x81\x61\x81\x7c", "strict", u"\uff3c\u2016\u2212"),
     )
 
-class Test_SJISX0213(test_multibytecodec_support.TestBase, unittest.TestCase):
+class Test_SJISX0213(multibytecodec_support.TestBase, unittest.TestCase):
     encoding = 'shift_jisx0213'
-    tstring = test_multibytecodec_support.load_teststring('shift_jisx0213')
+    tstring = multibytecodec_support.load_teststring('shift_jisx0213')
     codectests = (
         # invalid bytes
         ("abc\x80\x80\x82\x84", "strict",  None),
diff --git a/Lib/test/test_codecencodings_kr.py b/Lib/test/test_codecencodings_kr.py
index 45ea62b..7b2f232 100644
--- a/Lib/test/test_codecencodings_kr.py
+++ b/Lib/test/test_codecencodings_kr.py
@@ -4,12 +4,12 @@
 #
 
 from test import test_support
-from test import test_multibytecodec_support
+from test import multibytecodec_support
 import unittest
 
-class Test_CP949(test_multibytecodec_support.TestBase, unittest.TestCase):
+class Test_CP949(multibytecodec_support.TestBase, unittest.TestCase):
     encoding = 'cp949'
-    tstring = test_multibytecodec_support.load_teststring('cp949')
+    tstring = multibytecodec_support.load_teststring('cp949')
     codectests = (
         # invalid bytes
         ("abc\x80\x80\xc1\xc4", "strict",  None),
@@ -19,9 +19,9 @@
         ("abc\x80\x80\xc1\xc4", "ignore",  u"abc\uc894"),
     )
 
-class Test_EUCKR(test_multibytecodec_support.TestBase, unittest.TestCase):
+class Test_EUCKR(multibytecodec_support.TestBase, unittest.TestCase):
     encoding = 'euc_kr'
-    tstring = test_multibytecodec_support.load_teststring('euc_kr')
+    tstring = multibytecodec_support.load_teststring('euc_kr')
     codectests = (
         # invalid bytes
         ("abc\x80\x80\xc1\xc4", "strict",  None),
@@ -49,9 +49,9 @@
         ("\xc1\xc4", "strict", u"\uc894"),
     )
 
-class Test_JOHAB(test_multibytecodec_support.TestBase, unittest.TestCase):
+class Test_JOHAB(multibytecodec_support.TestBase, unittest.TestCase):
     encoding = 'johab'
-    tstring = test_multibytecodec_support.load_teststring('johab')
+    tstring = multibytecodec_support.load_teststring('johab')
     codectests = (
         # invalid bytes
         ("abc\x80\x80\xc1\xc4", "strict",  None),
diff --git a/Lib/test/test_codecencodings_tw.py b/Lib/test/test_codecencodings_tw.py
index c62d321..748840b 100644
--- a/Lib/test/test_codecencodings_tw.py
+++ b/Lib/test/test_codecencodings_tw.py
@@ -4,12 +4,12 @@
 #
 
 from test import test_support
-from test import test_multibytecodec_support
+from test import multibytecodec_support
 import unittest
 
-class Test_Big5(test_multibytecodec_support.TestBase, unittest.TestCase):
+class Test_Big5(multibytecodec_support.TestBase, unittest.TestCase):
     encoding = 'big5'
-    tstring = test_multibytecodec_support.load_teststring('big5')
+    tstring = multibytecodec_support.load_teststring('big5')
     codectests = (
         # invalid bytes
         ("abc\x80\x80\xc1\xc4", "strict",  None),
diff --git a/Lib/test/test_codecmaps_cn.py b/Lib/test/test_codecmaps_cn.py
index b1d1eb4..73b10bc 100644
--- a/Lib/test/test_codecmaps_cn.py
+++ b/Lib/test/test_codecmaps_cn.py
@@ -4,20 +4,20 @@
 #
 
 from test import test_support
-from test import test_multibytecodec_support
+from test import multibytecodec_support
 import unittest
 
-class TestGB2312Map(test_multibytecodec_support.TestBase_Mapping,
+class TestGB2312Map(multibytecodec_support.TestBase_Mapping,
                    unittest.TestCase):
     encoding = 'gb2312'
     mapfileurl = 'http://www.pythontest.net/unicode/EUC-CN.TXT'
 
-class TestGBKMap(test_multibytecodec_support.TestBase_Mapping,
+class TestGBKMap(multibytecodec_support.TestBase_Mapping,
                    unittest.TestCase):
     encoding = 'gbk'
     mapfileurl = 'http://www.pythontest.net/unicode/CP936.TXT'
 
-class TestGB18030Map(test_multibytecodec_support.TestBase_Mapping,
+class TestGB18030Map(multibytecodec_support.TestBase_Mapping,
                      unittest.TestCase):
     encoding = 'gb18030'
     mapfileurl = 'http://www.pythontest.net/unicode/gb-18030-2000.xml'
diff --git a/Lib/test/test_codecmaps_hk.py b/Lib/test/test_codecmaps_hk.py
index 0a41b24..feda7a7 100644
--- a/Lib/test/test_codecmaps_hk.py
+++ b/Lib/test/test_codecmaps_hk.py
@@ -4,10 +4,10 @@
 #
 
 from test import test_support
-from test import test_multibytecodec_support
+from test import multibytecodec_support
 import unittest
 
-class TestBig5HKSCSMap(test_multibytecodec_support.TestBase_Mapping,
+class TestBig5HKSCSMap(multibytecodec_support.TestBase_Mapping,
                        unittest.TestCase):
     encoding = 'big5hkscs'
     mapfileurl = 'http://www.pythontest.net/unicode/BIG5HKSCS-2004.TXT'
diff --git a/Lib/test/test_codecmaps_jp.py b/Lib/test/test_codecmaps_jp.py
index 907645d..f37a81c 100644
--- a/Lib/test/test_codecmaps_jp.py
+++ b/Lib/test/test_codecmaps_jp.py
@@ -4,10 +4,10 @@
 #
 
 from test import test_support
-from test import test_multibytecodec_support
+from test import multibytecodec_support
 import unittest
 
-class TestCP932Map(test_multibytecodec_support.TestBase_Mapping,
+class TestCP932Map(multibytecodec_support.TestBase_Mapping,
                    unittest.TestCase):
     encoding = 'cp932'
     mapfileurl = 'http://www.pythontest.net/unicode/CP932.TXT'
@@ -22,14 +22,14 @@
         supmaps.append((chr(i), unichr(i+0xfec0)))
 
 
-class TestEUCJPCOMPATMap(test_multibytecodec_support.TestBase_Mapping,
+class TestEUCJPCOMPATMap(multibytecodec_support.TestBase_Mapping,
                          unittest.TestCase):
     encoding = 'euc_jp'
     mapfilename = 'EUC-JP.TXT'
     mapfileurl = 'http://www.pythontest.net/unicode/EUC-JP.TXT'
 
 
-class TestSJISCOMPATMap(test_multibytecodec_support.TestBase_Mapping,
+class TestSJISCOMPATMap(multibytecodec_support.TestBase_Mapping,
                         unittest.TestCase):
     encoding = 'shift_jis'
     mapfilename = 'SHIFTJIS.TXT'
@@ -43,14 +43,14 @@
         ('\x81_', u'\\'),
     ]
 
-class TestEUCJISX0213Map(test_multibytecodec_support.TestBase_Mapping,
+class TestEUCJISX0213Map(multibytecodec_support.TestBase_Mapping,
                          unittest.TestCase):
     encoding = 'euc_jisx0213'
     mapfilename = 'EUC-JISX0213.TXT'
     mapfileurl = 'http://www.pythontest.net/unicode/EUC-JISX0213.TXT'
 
 
-class TestSJISX0213Map(test_multibytecodec_support.TestBase_Mapping,
+class TestSJISX0213Map(multibytecodec_support.TestBase_Mapping,
                        unittest.TestCase):
     encoding = 'shift_jisx0213'
     mapfilename = 'SHIFT_JISX0213.TXT'
diff --git a/Lib/test/test_codecmaps_kr.py b/Lib/test/test_codecmaps_kr.py
index 0ba71bf..9e1df5e 100644
--- a/Lib/test/test_codecmaps_kr.py
+++ b/Lib/test/test_codecmaps_kr.py
@@ -4,16 +4,16 @@
 #
 
 from test import test_support
-from test import test_multibytecodec_support
+from test import multibytecodec_support
 import unittest
 
-class TestCP949Map(test_multibytecodec_support.TestBase_Mapping,
+class TestCP949Map(multibytecodec_support.TestBase_Mapping,
                    unittest.TestCase):
     encoding = 'cp949'
     mapfileurl = 'http://www.pythontest.net/unicode/CP949.TXT'
 
 
-class TestEUCKRMap(test_multibytecodec_support.TestBase_Mapping,
+class TestEUCKRMap(multibytecodec_support.TestBase_Mapping,
                    unittest.TestCase):
     encoding = 'euc_kr'
     mapfileurl = 'http://www.pythontest.net/unicode/EUC-KR.TXT'
@@ -23,7 +23,7 @@
     pass_dectest = [('\xa4\xd4', u'\u3164')]
 
 
-class TestJOHABMap(test_multibytecodec_support.TestBase_Mapping,
+class TestJOHABMap(multibytecodec_support.TestBase_Mapping,
                    unittest.TestCase):
     encoding = 'johab'
     mapfileurl = 'http://www.pythontest.net/unicode/JOHAB.TXT'
diff --git a/Lib/test/test_codecmaps_tw.py b/Lib/test/test_codecmaps_tw.py
index 0d57343..5b500ff 100644
--- a/Lib/test/test_codecmaps_tw.py
+++ b/Lib/test/test_codecmaps_tw.py
@@ -4,15 +4,15 @@
 #
 
 from test import test_support
-from test import test_multibytecodec_support
+from test import multibytecodec_support
 import unittest
 
-class TestBIG5Map(test_multibytecodec_support.TestBase_Mapping,
+class TestBIG5Map(multibytecodec_support.TestBase_Mapping,
                   unittest.TestCase):
     encoding = 'big5'
     mapfileurl = 'http://www.pythontest.net/unicode/BIG5.TXT'
 
-class TestCP950Map(test_multibytecodec_support.TestBase_Mapping,
+class TestCP950Map(multibytecodec_support.TestBase_Mapping,
                    unittest.TestCase):
     encoding = 'cp950'
     mapfileurl = 'http://www.pythontest.net/unicode/CP950.TXT'
diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py
index efc40cf..0ec8bf5 100644
--- a/Lib/test/test_codecs.py
+++ b/Lib/test/test_codecs.py
@@ -149,19 +149,33 @@
         self.assertEqual(f.read(), ''.join(lines[1:]))
         self.assertEqual(f.read(), '')
 
+        # Issue #32110: Test readline() followed by read(n)
+        f = getreader()
+        self.assertEqual(f.readline(), lines[0])
+        self.assertEqual(f.read(1), lines[1][0])
+        self.assertEqual(f.read(0), '')
+        self.assertEqual(f.read(100), data[len(lines[0]) + 1:][:100])
+
         # Issue #16636: Test readline() followed by readlines()
         f = getreader()
         self.assertEqual(f.readline(), lines[0])
         self.assertEqual(f.readlines(), lines[1:])
         self.assertEqual(f.read(), '')
 
-        # Test read() followed by read()
+        # Test read(n) followed by read()
         f = getreader()
         self.assertEqual(f.read(size=40, chars=5), data[:5])
         self.assertEqual(f.read(), data[5:])
         self.assertEqual(f.read(), '')
 
-        # Issue #12446: Test read() followed by readlines()
+        # Issue #32110: Test read(n) followed by read(n)
+        f = getreader()
+        self.assertEqual(f.read(size=40, chars=5), data[:5])
+        self.assertEqual(f.read(1), data[5])
+        self.assertEqual(f.read(0), '')
+        self.assertEqual(f.read(100), data[6:106])
+
+        # Issue #12446: Test read(n) followed by readlines()
         f = getreader()
         self.assertEqual(f.read(size=40, chars=5), data[:5])
         self.assertEqual(f.readlines(), [lines[0][5:]] + lines[1:])
diff --git a/Lib/test/test_compiler.py b/Lib/test/test_compiler.py
index 4598811..c98e494 100644
--- a/Lib/test/test_compiler.py
+++ b/Lib/test/test_compiler.py
@@ -26,7 +26,7 @@
         # warning: if 'os' or 'test_support' are moved in some other dir,
         # they should be changed here.
         libdir = os.path.dirname(os.__file__)
-        testdir = os.path.dirname(test.test_support.__file__)
+        testdir = test.test_support.TEST_HOME_DIR
 
         for dir in [testdir]:
             for basename in "test_os.py",:
diff --git a/Lib/test/test_complex.py b/Lib/test/test_complex.py
index c0383b2..02b292f 100644
--- a/Lib/test/test_complex.py
+++ b/Lib/test/test_complex.py
@@ -8,6 +8,13 @@
 NAN = float("nan")
 # These tests ensure that complex math does the right thing
 
+# decorator for skipping tests on non-IEEE 754 platforms
+have_getformat = hasattr(float, "__getformat__")
+requires_IEEE_754 = unittest.skipUnless(have_getformat and
+    float.__getformat__("double").startswith("IEEE"),
+    "test requires IEEE 754 doubles")
+
+
 class ComplexTest(unittest.TestCase):
 
     def assertAlmostEqual(self, a, b):
@@ -441,6 +448,28 @@
                     b = 'y %s x' % op
                     self.assertTrue(type(eval(a)) is type(eval(b)) is xcomplex)
 
+    @requires_IEEE_754
+    def test_constructor_special_numbers(self):
+        class complex2(complex):
+            pass
+        for x in 0.0, -0.0, INF, -INF, NAN:
+            for y in 0.0, -0.0, INF, -INF, NAN:
+                z = complex(x, y)
+                self.assertFloatsAreIdentical(z.real, x)
+                self.assertFloatsAreIdentical(z.imag, y)
+                z = complex2(x, y)
+                self.assertIs(type(z), complex2)
+                self.assertFloatsAreIdentical(z.real, x)
+                self.assertFloatsAreIdentical(z.imag, y)
+                z = complex(complex2(x, y))
+                self.assertIs(type(z), complex)
+                self.assertFloatsAreIdentical(z.real, x)
+                self.assertFloatsAreIdentical(z.imag, y)
+                z = complex2(complex(x, y))
+                self.assertIs(type(z), complex2)
+                self.assertFloatsAreIdentical(z.real, x)
+                self.assertFloatsAreIdentical(z.imag, y)
+
     def test_hash(self):
         for x in xrange(-30, 30):
             self.assertEqual(hash(x), hash(complex(x, 0)))
diff --git a/Lib/test/test_copy_reg.py b/Lib/test/test_copy_reg.py
index 8cdb8b7..17ccbd0 100644
--- a/Lib/test/test_copy_reg.py
+++ b/Lib/test/test_copy_reg.py
@@ -17,6 +17,12 @@
 class WithPrivate(object):
     __slots__ = ('__spam',)
 
+class _WithLeadingUnderscoreAndPrivate(object):
+    __slots__ = ('__spam',)
+
+class ___(object):
+    __slots__ = ('__spam',)
+
 class WithSingleString(object):
     __slots__ = 'spam'
 
@@ -105,6 +111,10 @@
         self.assertEqual(copy_reg._slotnames(WithWeakref), [])
         expected = ['_WithPrivate__spam']
         self.assertEqual(copy_reg._slotnames(WithPrivate), expected)
+        expected = ['_WithLeadingUnderscoreAndPrivate__spam']
+        self.assertEqual(copy_reg._slotnames(_WithLeadingUnderscoreAndPrivate),
+                         expected)
+        self.assertEqual(copy_reg._slotnames(___), ['__spam'])
         self.assertEqual(copy_reg._slotnames(WithSingleString), ['spam'])
         expected = ['eggs', 'spam']
         expected.sort()
diff --git a/Lib/test/test_crypt.py b/Lib/test/test_crypt.py
index 4db200d..7cd9c71 100644
--- a/Lib/test/test_crypt.py
+++ b/Lib/test/test_crypt.py
@@ -1,14 +1,20 @@
+import sys
 from test import test_support
 import unittest
 
 crypt = test_support.import_module('crypt')
 
+if sys.platform.startswith('openbsd'):
+    raise unittest.SkipTest('The only supported method on OpenBSD is Blowfish')
+
 class CryptTestCase(unittest.TestCase):
 
     def test_crypt(self):
-        c = crypt.crypt('mypassword', 'ab')
-        if test_support.verbose:
-            print 'Test encryption: ', c
+        cr = crypt.crypt('mypassword', 'ab')
+        if cr is not None:
+            cr2 = crypt.crypt('mypassword', cr)
+            self.assertEqual(cr2, cr)
+
 
 def test_main():
     test_support.run_unittest(CryptTestCase)
diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py
index d456759..88d5af7 100644
--- a/Lib/test/test_csv.py
+++ b/Lib/test/test_csv.py
@@ -1036,6 +1036,15 @@
         self.assertEqual(sniffer.has_header(self.header2 + self.sample8),
                          True)
 
+    def test_guess_quote_and_delimiter(self):
+        sniffer = csv.Sniffer()
+        for header in (";'123;4';", "'123;4';", ";'123;4'", "'123;4'"):
+            dialect = sniffer.sniff(header, ",;")
+            self.assertEqual(dialect.delimiter, ';')
+            self.assertEqual(dialect.quotechar, "'")
+            self.assertIs(dialect.doublequote, False)
+            self.assertIs(dialect.skipinitialspace, False)
+
     def test_sniff(self):
         sniffer = csv.Sniffer()
         dialect = sniffer.sniff(self.sample1)
diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py
index 8a39cd0..c7e5b4a 100644
--- a/Lib/test/test_curses.py
+++ b/Lib/test/test_curses.py
@@ -15,7 +15,9 @@
 import tempfile
 import unittest
 
-from test.test_support import requires, import_module, verbose, run_unittest
+from test.support import (requires, import_module, verbose, run_unittest,
+                          SaveSignals)
+
 
 # Optionally test curses module.  This currently requires that the
 # 'curses' resource be given on the regrtest command line using the -u
@@ -24,8 +26,12 @@
 
 # If either of these don't exist, skip the tests.
 curses = import_module('curses')
-import_module('curses.panel')
 import_module('curses.ascii')
+import_module('curses.textpad')
+try:
+    import curses.panel
+except ImportError:
+    pass
 
 def requires_curses_func(name):
     return unittest.skipUnless(hasattr(curses, name),
@@ -61,6 +67,8 @@
             del cls.tmp
 
     def setUp(self):
+        self.save_signals = SaveSignals()
+        self.save_signals.save()
         if verbose:
             # just to make the test output a little more readable
             print('')
@@ -70,6 +78,7 @@
     def tearDown(self):
         curses.resetty()
         curses.endwin()
+        self.save_signals.restore()
 
     def test_window_funcs(self):
         "Test the methods of windows"
@@ -83,7 +92,7 @@
                          (4,4, 'a'), (5,5, 'a', curses.A_BOLD)]:
                 meth(*args)
 
-        for meth in [stdscr.box, stdscr.clear, stdscr.clrtobot,
+        for meth in [stdscr.clear, stdscr.clrtobot,
                      stdscr.clrtoeol, stdscr.cursyncup, stdscr.delch,
                      stdscr.deleteln, stdscr.erase, stdscr.getbegyx,
                      stdscr.getbkgd, stdscr.getkey, stdscr.getmaxyx,
@@ -116,6 +125,13 @@
             win.border(65, 66, 67, 68,
                        69, [], 71, 72)
 
+        win.box(65, 67)
+        win.box('!', '_')
+        win.box(b':', b'~')
+        self.assertRaises(TypeError, win.box, 65, 66, 67)
+        self.assertRaises(TypeError, win.box, 65)
+        win.box()
+
         stdscr.clearok(1)
 
         win4 = stdscr.derwin(2,2)
@@ -131,7 +147,9 @@
 
         stdscr.idcok(1)
         stdscr.idlok(1)
-        stdscr.immedok(1)
+        if hasattr(stdscr, 'immedok'):
+            stdscr.immedok(1)
+            stdscr.immedok(0)
         stdscr.insch('c')
         stdscr.insdelln(1)
         stdscr.insnstr('abc', 3)
@@ -165,25 +183,27 @@
         stdscr.setscrreg(10,15)
         win3 = stdscr.subwin(10,10)
         win3 = stdscr.subwin(10,10, 5,5)
-        stdscr.syncok(1)
+        if hasattr(stdscr, 'syncok') and not sys.platform.startswith("sunos"):
+            stdscr.syncok(1)
         stdscr.timeout(5)
         stdscr.touchline(5,5)
         stdscr.touchline(5,5,0)
         stdscr.vline('a', 3)
         stdscr.vline('a', 3, curses.A_STANDOUT)
-        stdscr.chgat(5, 2, 3, curses.A_BLINK)
-        stdscr.chgat(3, curses.A_BOLD)
-        stdscr.chgat(5, 8, curses.A_UNDERLINE)
-        stdscr.chgat(curses.A_BLINK)
+        if hasattr(stdscr, 'chgat'):
+            stdscr.chgat(5, 2, 3, curses.A_BLINK)
+            stdscr.chgat(3, curses.A_BOLD)
+            stdscr.chgat(5, 8, curses.A_UNDERLINE)
+            stdscr.chgat(curses.A_BLINK)
         stdscr.refresh()
 
         stdscr.vline(1,1, 'a', 3)
         stdscr.vline(1,1, 'a', 3, curses.A_STANDOUT)
 
-        if hasattr(curses, 'resize'):
-            stdscr.resize()
-        if hasattr(curses, 'enclose'):
-            stdscr.enclose()
+        if hasattr(stdscr, 'resize'):
+            stdscr.resize(25, 80)
+        if hasattr(stdscr, 'enclose'):
+            stdscr.enclose(10, 10)
 
         self.assertRaises(ValueError, stdscr.getstr, -400)
         self.assertRaises(ValueError, stdscr.getstr, 2, 3, -400)
@@ -195,14 +215,18 @@
         "Test module-level functions"
         for func in [curses.baudrate, curses.beep, curses.can_change_color,
                      curses.cbreak, curses.def_prog_mode, curses.doupdate,
-                     curses.filter, curses.flash, curses.flushinp,
+                     curses.flash, curses.flushinp,
                      curses.has_colors, curses.has_ic, curses.has_il,
                      curses.isendwin, curses.killchar, curses.longname,
                      curses.nocbreak, curses.noecho, curses.nonl,
                      curses.noqiflush, curses.noraw,
                      curses.reset_prog_mode, curses.termattrs,
-                     curses.termname, curses.erasechar, curses.getsyx]:
+                     curses.termname, curses.erasechar]:
             func()
+        if hasattr(curses, 'filter'):
+            curses.filter()
+        if hasattr(curses, 'getsyx'):
+            curses.getsyx()
 
         # Functions that actually need arguments
         if curses.tigetstr("cnorm"):
@@ -226,20 +250,23 @@
         curses.putp(b'abc')
         curses.qiflush()
         curses.raw() ; curses.raw(1)
-        curses.setsyx(5,5)
+        if hasattr(curses, 'setsyx'):
+            curses.setsyx(5,5)
         curses.tigetflag('hc')
         curses.tigetnum('co')
         curses.tigetstr('cr')
         curses.tparm(b'cr')
-        curses.typeahead(sys.__stdin__.fileno())
+        if hasattr(curses, 'typeahead'):
+            curses.typeahead(sys.__stdin__.fileno())
         curses.unctrl('a')
         curses.ungetch('a')
-        curses.use_env(1)
+        if hasattr(curses, 'use_env'):
+            curses.use_env(1)
 
     # Functions only available on a few platforms
     def test_colors_funcs(self):
         if not curses.has_colors():
-            self.skip('requires colors support')
+            self.skipTest('requires colors support')
         curses.start_color()
         curses.init_pair(2, 1,1)
         curses.color_content(1)
@@ -262,12 +289,13 @@
     def test_getmouse(self):
         (availmask, oldmask) = curses.mousemask(curses.BUTTON1_PRESSED)
         if availmask == 0:
-            self.skip('mouse stuff not available')
+            self.skipTest('mouse stuff not available')
         curses.mouseinterval(10)
         # just verify these don't cause errors
         curses.ungetmouse(0, 0, 0, 0, curses.BUTTON1_PRESSED)
         m = curses.getmouse()
 
+    @requires_curses_func('panel')
     def test_userptr_without_set(self):
         w = curses.newwin(10, 10)
         p = curses.panel.new_panel(w)
@@ -276,6 +304,7 @@
                                msg='userptr should fail since not set'):
             p.userptr()
 
+    @requires_curses_func('panel')
     def test_userptr_memory_leak(self):
         w = curses.newwin(10, 10)
         p = curses.panel.new_panel(w)
@@ -288,16 +317,20 @@
         self.assertEqual(sys.getrefcount(obj), nrefs,
                          "set_userptr leaked references")
 
+    @requires_curses_func('panel')
     def test_userptr_segfault(self):
-        panel = curses.panel.new_panel(self.stdscr)
+        w = curses.newwin(10, 10)
+        panel = curses.panel.new_panel(w)
         class A:
             def __del__(self):
                 panel.set_userptr(None)
         panel.set_userptr(A())
         panel.set_userptr(None)
 
+    @requires_curses_func('panel')
     def test_new_curses_panel(self):
-        panel = curses.panel.new_panel(self.stdscr)
+        w = curses.newwin(10, 10)
+        panel = curses.panel.new_panel(w)
         self.assertRaises(TypeError, type(panel))
 
     @requires_curses_func('is_term_resized')
@@ -327,6 +360,16 @@
         b = curses.tparm(curses.tigetstr("cup"), 5, 3)
         self.assertIs(type(b), bytes)
 
+    def test_issue13051(self):
+        stdscr = self.stdscr
+        if not hasattr(stdscr, 'resize'):
+            raise unittest.SkipTest('requires curses.window.resize')
+        box = curses.textpad.Textbox(stdscr, insert_mode=True)
+        lines, cols = stdscr.getmaxyx()
+        stdscr.resize(lines-2, cols-2)
+        # this may cause infinite recursion, leading to a RuntimeError
+        box._insert_printable_char('a')
+
 
 class TestAscii(unittest.TestCase):
 
@@ -358,6 +401,25 @@
             check(curses.ascii.ispunct, c in string.punctuation)
             check(curses.ascii.isxdigit, c in string.hexdigits)
 
+        for i in (-2, -1, 256, sys.maxunicode, sys.maxunicode+1):
+            self.assertFalse(curses.ascii.isalnum(i))
+            self.assertFalse(curses.ascii.isalpha(i))
+            self.assertFalse(curses.ascii.isdigit(i))
+            self.assertFalse(curses.ascii.islower(i))
+            self.assertFalse(curses.ascii.isspace(i))
+            self.assertFalse(curses.ascii.isupper(i))
+
+            self.assertFalse(curses.ascii.isascii(i))
+            self.assertFalse(curses.ascii.isctrl(i))
+            self.assertFalse(curses.ascii.iscntrl(i))
+            self.assertFalse(curses.ascii.isblank(i))
+            self.assertFalse(curses.ascii.isgraph(i))
+            self.assertFalse(curses.ascii.isprint(i))
+            self.assertFalse(curses.ascii.ispunct(i))
+            self.assertFalse(curses.ascii.isxdigit(i))
+
+        self.assertFalse(curses.ascii.ismeta(-1))
+
     def test_ascii(self):
         ascii = curses.ascii.ascii
         self.assertEqual(ascii('\xc1'), 'A')
diff --git a/Lib/test/test_datetime.py b/Lib/test/test_datetime.py
index 20abe74..f56c3f5 100644
--- a/Lib/test/test_datetime.py
+++ b/Lib/test/test_datetime.py
@@ -492,6 +492,46 @@
         self.assertEqual(str(t3), str(t4))
         self.assertEqual(t4.as_hours(), -1)
 
+    def test_issue31752(self):
+        # The interpreter shouldn't crash because divmod() returns negative
+        # remainder.
+        class BadInt(int):
+            def __mul__(self, other):
+                return Prod()
+
+        class BadLong(long):
+            def __mul__(self, other):
+                return Prod()
+
+        class Prod:
+            def __radd__(self, other):
+                return Sum()
+
+        class Sum(int):
+            def __divmod__(self, other):
+                # negative remainder
+                return (0, -1)
+
+        timedelta(microseconds=BadInt(1))
+        timedelta(hours=BadInt(1))
+        timedelta(weeks=BadInt(1))
+        timedelta(microseconds=BadLong(1))
+        timedelta(hours=BadLong(1))
+        timedelta(weeks=BadLong(1))
+
+        class Sum(long):
+            def __divmod__(self, other):
+                # negative remainder
+                return (0, -1)
+
+        timedelta(microseconds=BadInt(1))
+        timedelta(hours=BadInt(1))
+        timedelta(weeks=BadInt(1))
+        timedelta(microseconds=BadLong(1))
+        timedelta(hours=BadLong(1))
+        timedelta(weeks=BadLong(1))
+
+
 #############################################################################
 # date tests
 
diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py
index c81064d..e6307ab 100644
--- a/Lib/test/test_deque.py
+++ b/Lib/test/test_deque.py
@@ -659,6 +659,21 @@
         d1 == d2   # not clear if this is supposed to be True or False,
                    # but it used to give a SystemError
 
+    @test_support.cpython_only
+    def test_bug_31608(self):
+        # The interpreter used to crash in specific cases where a deque
+        # subclass returned a non-deque.
+        class X(deque):
+            pass
+        d = X()
+        def bad___new__(cls, *args, **kwargs):
+            return [42]
+        X.__new__ = bad___new__
+        with self.assertRaises(TypeError):
+            d * 42  # shouldn't crash
+        with self.assertRaises(TypeError):
+            d + deque([1, 2, 3])  # shouldn't crash
+
 
 class SubclassWithKwargs(deque):
     def __init__(self, newarg=1):
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index fc965f7..bbc52aa 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -1,14 +1,21 @@
 import __builtin__
+import copy
 import gc
+import pickle
 import sys
 import types
 import unittest
+import warnings
 import weakref
 
 from copy import deepcopy
 from test import test_support
 
 
+def func(*args):
+    return args
+
+
 class OperatorsTest(unittest.TestCase):
 
     def __init__(self, *args, **kwargs):
@@ -1414,6 +1421,21 @@
         else:
             self.fail("classmethod shouldn't accept keyword args")
 
+    @test_support.cpython_only
+    def test_classmethod_copy_pickle(self):
+        cm = classmethod(func)
+        with test_support.check_py3k_warnings(
+                (".*classmethod", DeprecationWarning)):
+            copy.copy(cm)
+        with test_support.check_py3k_warnings(
+                (".*classmethod", DeprecationWarning)):
+            copy.deepcopy(cm)
+        for proto in range(2):
+            self.assertRaises(TypeError, pickle.dumps, cm, proto)
+        with test_support.check_py3k_warnings(
+                (".*classmethod", DeprecationWarning)):
+            pickle.dumps(cm, 2)
+
     @test_support.impl_detail("the module 'xxsubtype' is internal")
     def test_classmethods_in_c(self):
         # Testing C-based class methods...
@@ -1462,6 +1484,21 @@
         self.assertEqual(d.foo(1), (d, 1))
         self.assertEqual(D.foo(d, 1), (d, 1))
 
+    @test_support.cpython_only
+    def test_staticmethod_copy_pickle(self):
+        sm = staticmethod(func)
+        with test_support.check_py3k_warnings(
+                (".*staticmethod", DeprecationWarning)):
+            copy.copy(sm)
+        with test_support.check_py3k_warnings(
+                (".*staticmethod", DeprecationWarning)):
+            copy.deepcopy(sm)
+        for proto in range(2):
+            self.assertRaises(TypeError, pickle.dumps, sm, proto)
+        with test_support.check_py3k_warnings(
+                (".*staticmethod", DeprecationWarning)):
+            pickle.dumps(sm, 2)
+
     @test_support.impl_detail("the module 'xxsubtype' is internal")
     def test_staticmethods_in_c(self):
         # Testing C-based static methods...
@@ -1550,6 +1587,86 @@
         self.assertEqual(b.foo, 3)
         self.assertEqual(b.__class__, D)
 
+    @unittest.expectedFailure
+    def test_bad_new(self):
+        self.assertRaises(TypeError, object.__new__)
+        self.assertRaises(TypeError, object.__new__, '')
+        self.assertRaises(TypeError, list.__new__, object)
+        self.assertRaises(TypeError, object.__new__, list)
+        class C(object):
+            __new__ = list.__new__
+        self.assertRaises(TypeError, C)
+        class C(list):
+            __new__ = object.__new__
+        self.assertRaises(TypeError, C)
+
+    def test_object_new(self):
+        class A(object):
+            pass
+        object.__new__(A)
+        self.assertRaises(TypeError, object.__new__, A, 5)
+        object.__init__(A())
+        self.assertRaises(TypeError, object.__init__, A(), 5)
+
+        class A(object):
+            def __init__(self, foo):
+                self.foo = foo
+        object.__new__(A)
+        object.__new__(A, 5)
+        object.__init__(A(3))
+        self.assertRaises(TypeError, object.__init__, A(3), 5)
+
+        class A(object):
+            def __new__(cls, foo):
+                return object.__new__(cls)
+        object.__new__(A)
+        self.assertRaises(TypeError, object.__new__, A, 5)
+        object.__init__(A(3))
+        object.__init__(A(3), 5)
+
+        class A(object):
+            def __new__(cls, foo):
+                return object.__new__(cls)
+            def __init__(self, foo):
+                self.foo = foo
+        object.__new__(A)
+        with warnings.catch_warnings(record=True) as w:
+            warnings.simplefilter('always', DeprecationWarning)
+            a = object.__new__(A, 5)
+        self.assertEqual(type(a), A)
+        self.assertEqual(len(w), 1)
+        object.__init__(A(3))
+        a = A(3)
+        with warnings.catch_warnings(record=True) as w:
+            warnings.simplefilter('always', DeprecationWarning)
+            object.__init__(a, 5)
+        self.assertEqual(a.foo, 3)
+        self.assertEqual(len(w), 1)
+
+    @unittest.expectedFailure
+    def test_restored_object_new(self):
+        class A(object):
+            def __new__(cls, *args, **kwargs):
+                raise AssertionError
+        self.assertRaises(AssertionError, A)
+        class B(A):
+            __new__ = object.__new__
+            def __init__(self, foo):
+                self.foo = foo
+        with warnings.catch_warnings():
+            warnings.simplefilter('error', DeprecationWarning)
+            b = B(3)
+        self.assertEqual(b.foo, 3)
+        self.assertEqual(b.__class__, B)
+        del B.__new__
+        self.assertRaises(AssertionError, B)
+        del A.__new__
+        with warnings.catch_warnings():
+            warnings.simplefilter('error', DeprecationWarning)
+            b = B(3)
+        self.assertEqual(b.foo, 3)
+        self.assertEqual(b.__class__, B)
+
     def test_altmro(self):
         # Testing mro() and overriding it...
         class A(object):
@@ -2077,6 +2194,21 @@
         else:
             self.fail("expected ZeroDivisionError from bad property")
 
+    @test_support.cpython_only
+    def test_property_copy_pickle(self):
+        p = property(func)
+        with test_support.check_py3k_warnings(
+                (".*property", DeprecationWarning)):
+            copy.copy(p)
+        with test_support.check_py3k_warnings(
+                (".*property", DeprecationWarning)):
+            copy.deepcopy(p)
+        for proto in range(2):
+            self.assertRaises(TypeError, pickle.dumps, p, proto)
+        with test_support.check_py3k_warnings(
+                (".*property", DeprecationWarning)):
+            pickle.dumps(p, 2)
+
     @unittest.skipIf(sys.flags.optimize >= 2,
                      "Docstrings are omitted with -O2 and above")
     def test_properties_doc_attrib(self):
@@ -3756,6 +3888,24 @@
         self.assertEqual(isinstance(d, D), True)
         self.assertEqual(d.foo, 1)
 
+        class C(object):
+            @staticmethod
+            def __new__(*args):
+                return args
+        self.assertEqual(C(1, 2), (C, 1, 2))
+        class D(C):
+            pass
+        self.assertEqual(D(1, 2), (D, 1, 2))
+
+        class C(object):
+            @classmethod
+            def __new__(*args):
+                return args
+        self.assertEqual(C(1, 2), (C, C, 1, 2))
+        class D(C):
+            pass
+        self.assertEqual(D(1, 2), (D, D, 1, 2))
+
     def test_imul_bug(self):
         # Testing for __imul__ problems...
         # SF bug 544647
diff --git a/Lib/test/test_dict.py b/Lib/test/test_dict.py
index 4474c9b..aacd473 100644
--- a/Lib/test/test_dict.py
+++ b/Lib/test/test_dict.py
@@ -3,6 +3,7 @@
 
 import UserDict, random, string
 import gc, weakref
+import sys
 
 
 class DictTest(unittest.TestCase):
@@ -422,6 +423,12 @@
         d = {1: BadRepr()}
         self.assertRaises(Exc, repr, d)
 
+    def test_repr_deep(self):
+        d = {}
+        for i in range(sys.getrecursionlimit() + 100):
+            d = {1: d}
+        self.assertRaises(RuntimeError, repr, d)
+
     def test_le(self):
         self.assertFalse({} < {})
         self.assertFalse({1: 2} < {1L: 2L})
@@ -690,6 +697,97 @@
         test_support.check_free_after_iterating(self, lambda d: iter(d.viewvalues()), dict)
         test_support.check_free_after_iterating(self, lambda d: iter(d.viewitems()), dict)
 
+    def test_equal_operator_modifying_operand(self):
+        # test fix for seg fault reported in issue 27945 part 3.
+        class X(object):
+            def __del__(self):
+                dict_b.clear()
+
+            def __eq__(self, other):
+                dict_a.clear()
+                return True
+
+            def __hash__(self):
+                return 13
+
+        dict_a = {X(): 0}
+        dict_b = {X(): X()}
+        self.assertTrue(dict_a == dict_b)
+
+    def test_fromkeys_operator_modifying_dict_operand(self):
+        # test fix for seg fault reported in issue 27945 part 4a.
+        class X(int):
+            def __hash__(self):
+                return 13
+
+            def __eq__(self, other):
+                if len(d) > 1:
+                    d.clear()
+                return False
+
+        d = {}  # this is required to exist so that d can be constructed!
+        d = {X(1): 1, X(2): 2}
+        try:
+            dict.fromkeys(d)  # shouldn't crash
+        except RuntimeError:  # implementation defined
+            pass
+
+    def test_fromkeys_operator_modifying_set_operand(self):
+        # test fix for seg fault reported in issue 27945 part 4b.
+        class X(int):
+            def __hash__(self):
+                return 13
+
+            def __eq__(self, other):
+                if len(d) > 1:
+                    d.clear()
+                return False
+
+        d = {}  # this is required to exist so that d can be constructed!
+        d = {X(1), X(2)}
+        try:
+            dict.fromkeys(d)  # shouldn't crash
+        except RuntimeError:  # implementation defined
+            pass
+
+    def test_dictitems_contains_use_after_free(self):
+        class X(object):
+            def __eq__(self, other):
+                d.clear()
+                return NotImplemented
+
+            __hash__ = object.__hash__  # silence Py3k warning
+
+        d = {0: set()}
+        try:
+            (0, X()) in d.iteritems()  # shouldn't crash
+        except RuntimeError:  # implementation defined
+            pass
+
+    def test_init_use_after_free(self):
+        class X(object):
+            def __hash__(self):
+                pair[:] = []
+                return 13
+
+        pair = [X(), 123]
+        dict([pair])
+
+    def test_oob_indexing_dictiter_iternextitem(self):
+        class X(int):
+            def __del__(self):
+                d.clear()
+
+        d = {i: X(i) for i in range(8)}
+
+        def iter_and_mutate():
+            for result in d.iteritems():
+                if result[0] == 2:
+                    d[2] = None # free d[2] --> X(2).__del__ was called
+
+        self.assertRaises(RuntimeError, iter_and_mutate)
+
+
 from test import mapping_tests
 
 class GeneralMappingTests(mapping_tests.BasicTestMappingProtocol):
diff --git a/Lib/test/test_dictviews.py b/Lib/test/test_dictviews.py
index b585bdd..1edeec5 100644
--- a/Lib/test/test_dictviews.py
+++ b/Lib/test/test_dictviews.py
@@ -1,5 +1,6 @@
 import copy
 import pickle
+import sys
 import unittest
 import collections
 from test import test_support
@@ -169,6 +170,20 @@
     def test_recursive_repr(self):
         d = {}
         d[42] = d.viewvalues()
+        r = repr(d)
+        # Cannot perform a stronger test, as the contents of the repr
+        # are implementation-dependent.  All we can say is that we
+        # want a str result, not an exception of any sort.
+        self.assertIsInstance(r, str)
+        d[42] = d.viewitems()
+        r = repr(d)
+        # Again.
+        self.assertIsInstance(r, str)
+
+    def test_deeply_nested_repr(self):
+        d = {}
+        for i in range(sys.getrecursionlimit() + 100):
+            d = {42: d.viewvalues()}
         self.assertRaises(RuntimeError, repr, d)
 
     def test_abc_registry(self):
diff --git a/Lib/test/test_difflib.py b/Lib/test/test_difflib.py
index 35f2c36..d8277b7 100644
--- a/Lib/test/test_difflib.py
+++ b/Lib/test/test_difflib.py
@@ -269,13 +269,33 @@
         self.assertEqual(fmt(3,6), '4,6')
         self.assertEqual(fmt(0,0), '0')
 
+class TestJunkAPIs(unittest.TestCase):
+    def test_is_line_junk_true(self):
+        for line in ['#', '  ', ' #', '# ', ' # ', '']:
+            self.assertTrue(difflib.IS_LINE_JUNK(line), repr(line))
+
+    def test_is_line_junk_false(self):
+        for line in ['##', ' ##', '## ', 'abc ', 'abc #', 'Mr. Moose is up!']:
+            self.assertFalse(difflib.IS_LINE_JUNK(line), repr(line))
+
+    def test_is_line_junk_REDOS(self):
+        evil_input = ('\t' * 1000000) + '##'
+        self.assertFalse(difflib.IS_LINE_JUNK(evil_input))
+
+    def test_is_character_junk_true(self):
+        for char in [' ', '\t']:
+            self.assertTrue(difflib.IS_CHARACTER_JUNK(char), repr(char))
+
+    def test_is_character_junk_false(self):
+        for char in ['a', '#', '\n', '\f', '\r', '\v']:
+            self.assertFalse(difflib.IS_CHARACTER_JUNK(char), repr(char))
 
 def test_main():
     difflib.HtmlDiff._default_prefix = 0
     Doctests = doctest.DocTestSuite(difflib)
     run_unittest(
         TestWithAscii, TestAutojunk, TestSFpatches, TestSFbugs,
-        TestOutputFormat, Doctests)
+        TestOutputFormat, TestJunkAPIs)
 
 if __name__ == '__main__':
     test_main()
diff --git a/Lib/test/test_ensurepip.py b/Lib/test/test_ensurepip.py
index 3316fcf..cb9d10a 100644
--- a/Lib/test/test_ensurepip.py
+++ b/Lib/test/test_ensurepip.py
@@ -21,6 +21,7 @@
     def setUp(self):
         run_pip_patch = mock.patch("ensurepip._run_pip")
         self.run_pip = run_pip_patch.start()
+        self.run_pip.return_value = 0
         self.addCleanup(run_pip_patch.stop)
 
         # Avoid side effects on the actual os module
@@ -258,7 +259,7 @@
         self.assertFalse(self.run_pip.called)
 
     def test_basic_bootstrapping(self):
-        ensurepip._main([])
+        exit_code = ensurepip._main([])
 
         self.run_pip.assert_called_once_with(
             [
@@ -270,6 +271,13 @@
 
         additional_paths = self.run_pip.call_args[0][1]
         self.assertEqual(len(additional_paths), 2)
+        self.assertEqual(exit_code, 0)
+
+    def test_bootstrapping_error_code(self):
+        self.run_pip.return_value = 2
+        exit_code = ensurepip._main([])
+        self.assertEqual(exit_code, 2)
+
 
 
 class TestUninstallationMainFunction(EnsurepipMixin, unittest.TestCase):
@@ -284,7 +292,7 @@
 
     def test_basic_uninstall(self):
         with fake_pip():
-            ensurepip._uninstall._main([])
+            exit_code = ensurepip._uninstall._main([])
 
         self.run_pip.assert_called_once_with(
             [
@@ -293,6 +301,13 @@
             ]
         )
 
+        self.assertEqual(exit_code, 0)
+
+    def test_uninstall_error_code(self):
+        with fake_pip():
+            self.run_pip.return_value = 2
+            exit_code = ensurepip._uninstall._main([])
+        self.assertEqual(exit_code, 2)
 
 if __name__ == "__main__":
     test.test_support.run_unittest(__name__)
diff --git a/Lib/test/test_file.py b/Lib/test/test_file.py
index 1fd7910..6bfc4e6 100644
--- a/Lib/test/test_file.py
+++ b/Lib/test/test_file.py
@@ -12,7 +12,8 @@
 import io
 import _pyio as pyio
 
-from test.test_support import TESTFN, run_unittest
+from test.support import TESTFN, run_unittest
+from test import support
 from UserList import UserList
 
 class AutoFileTests(unittest.TestCase):
@@ -24,7 +25,7 @@
     def tearDown(self):
         if self.f:
             self.f.close()
-        os.remove(TESTFN)
+        support.unlink(TESTFN)
 
     def testWeakRefs(self):
         # verify weak references
@@ -143,8 +144,12 @@
 
 class OtherFileTests(unittest.TestCase):
 
+    def tearDown(self):
+        support.unlink(TESTFN)
+
     def testModeStrings(self):
         # check invalid mode strings
+        self.open(TESTFN, 'wb').close()
         for mode in ("", "aU", "wU+"):
             try:
                 f = self.open(TESTFN, mode)
@@ -191,7 +196,6 @@
         # SF bug <http://www.python.org/sf/801631>
         # "file.truncate fault on windows"
 
-        os.unlink(TESTFN)
         f = self.open(TESTFN, 'wb')
 
         try:
@@ -215,7 +219,6 @@
                 self.fail("File size after ftruncate wrong %d" % size)
         finally:
             f.close()
-            os.unlink(TESTFN)
 
     def testIteration(self):
         # Test the complex interaction when mixing file-iteration and the
@@ -236,86 +239,82 @@
         methods = [("readline", ()), ("read", ()), ("readlines", ()),
                    ("readinto", (array("b", b" "*100),))]
 
-        try:
-            # Prepare the testfile
-            bag = self.open(TESTFN, "wb")
-            bag.write(filler * nchunks)
-            bag.writelines(testlines)
-            bag.close()
-            # Test for appropriate errors mixing read* and iteration
-            for methodname, args in methods:
-                f = self.open(TESTFN, 'rb')
-                if next(f) != filler:
-                    self.fail, "Broken testfile"
-                meth = getattr(f, methodname)
-                meth(*args)  # This simply shouldn't fail
-                f.close()
-
-            # Test to see if harmless (by accident) mixing of read* and
-            # iteration still works. This depends on the size of the internal
-            # iteration buffer (currently 8192,) but we can test it in a
-            # flexible manner.  Each line in the bag o' ham is 4 bytes
-            # ("h", "a", "m", "\n"), so 4096 lines of that should get us
-            # exactly on the buffer boundary for any power-of-2 buffersize
-            # between 4 and 16384 (inclusive).
+        # Prepare the testfile
+        bag = self.open(TESTFN, "wb")
+        bag.write(filler * nchunks)
+        bag.writelines(testlines)
+        bag.close()
+        # Test for appropriate errors mixing read* and iteration
+        for methodname, args in methods:
             f = self.open(TESTFN, 'rb')
-            for i in range(nchunks):
-                next(f)
-            testline = testlines.pop(0)
-            try:
-                line = f.readline()
-            except ValueError:
-                self.fail("readline() after next() with supposedly empty "
-                          "iteration-buffer failed anyway")
-            if line != testline:
-                self.fail("readline() after next() with empty buffer "
-                          "failed. Got %r, expected %r" % (line, testline))
-            testline = testlines.pop(0)
-            buf = array("b", b"\x00" * len(testline))
-            try:
-                f.readinto(buf)
-            except ValueError:
-                self.fail("readinto() after next() with supposedly empty "
-                          "iteration-buffer failed anyway")
-            line = buf.tostring()
-            if line != testline:
-                self.fail("readinto() after next() with empty buffer "
-                          "failed. Got %r, expected %r" % (line, testline))
-
-            testline = testlines.pop(0)
-            try:
-                line = f.read(len(testline))
-            except ValueError:
-                self.fail("read() after next() with supposedly empty "
-                          "iteration-buffer failed anyway")
-            if line != testline:
-                self.fail("read() after next() with empty buffer "
-                          "failed. Got %r, expected %r" % (line, testline))
-            try:
-                lines = f.readlines()
-            except ValueError:
-                self.fail("readlines() after next() with supposedly empty "
-                          "iteration-buffer failed anyway")
-            if lines != testlines:
-                self.fail("readlines() after next() with empty buffer "
-                          "failed. Got %r, expected %r" % (line, testline))
-            # Reading after iteration hit EOF shouldn't hurt either
+            self.assertEqual(next(f), filler)
+            meth = getattr(f, methodname)
+            meth(*args)  # This simply shouldn't fail
             f.close()
-            f = self.open(TESTFN, 'rb')
+
+        # Test to see if harmless (by accident) mixing of read* and
+        # iteration still works. This depends on the size of the internal
+        # iteration buffer (currently 8192,) but we can test it in a
+        # flexible manner.  Each line in the bag o' ham is 4 bytes
+        # ("h", "a", "m", "\n"), so 4096 lines of that should get us
+        # exactly on the buffer boundary for any power-of-2 buffersize
+        # between 4 and 16384 (inclusive).
+        f = self.open(TESTFN, 'rb')
+        for i in range(nchunks):
+            next(f)
+        testline = testlines.pop(0)
+        try:
+            line = f.readline()
+        except ValueError:
+            self.fail("readline() after next() with supposedly empty "
+                        "iteration-buffer failed anyway")
+        if line != testline:
+            self.fail("readline() after next() with empty buffer "
+                        "failed. Got %r, expected %r" % (line, testline))
+        testline = testlines.pop(0)
+        buf = array("b", b"\x00" * len(testline))
+        try:
+            f.readinto(buf)
+        except ValueError:
+            self.fail("readinto() after next() with supposedly empty "
+                        "iteration-buffer failed anyway")
+        line = buf.tostring()
+        if line != testline:
+            self.fail("readinto() after next() with empty buffer "
+                        "failed. Got %r, expected %r" % (line, testline))
+
+        testline = testlines.pop(0)
+        try:
+            line = f.read(len(testline))
+        except ValueError:
+            self.fail("read() after next() with supposedly empty "
+                        "iteration-buffer failed anyway")
+        if line != testline:
+            self.fail("read() after next() with empty buffer "
+                        "failed. Got %r, expected %r" % (line, testline))
+        try:
+            lines = f.readlines()
+        except ValueError:
+            self.fail("readlines() after next() with supposedly empty "
+                        "iteration-buffer failed anyway")
+        if lines != testlines:
+            self.fail("readlines() after next() with empty buffer "
+                        "failed. Got %r, expected %r" % (line, testline))
+        # Reading after iteration hit EOF shouldn't hurt either
+        f.close()
+        f = self.open(TESTFN, 'rb')
+        try:
+            for line in f:
+                pass
             try:
-                for line in f:
-                    pass
-                try:
-                    f.readline()
-                    f.readinto(buf)
-                    f.read()
-                    f.readlines()
-                except ValueError:
-                    self.fail("read* failed after next() consumed file")
-            finally:
-                f.close()
+                f.readline()
+                f.readinto(buf)
+                f.read()
+                f.readlines()
+            except ValueError:
+                self.fail("read* failed after next() consumed file")
         finally:
-            os.unlink(TESTFN)
+            f.close()
 
 class COtherFileTests(OtherFileTests):
     open = io.open
@@ -325,14 +324,8 @@
 
 
 def test_main():
-    # Historically, these tests have been sloppy about removing TESTFN.
-    # So get rid of it no matter what.
-    try:
-        run_unittest(CAutoFileTests, PyAutoFileTests,
-                     COtherFileTests, PyOtherFileTests)
-    finally:
-        if os.path.exists(TESTFN):
-            os.unlink(TESTFN)
+    run_unittest(CAutoFileTests, PyAutoFileTests,
+                 COtherFileTests, PyOtherFileTests)
 
 if __name__ == '__main__':
     test_main()
diff --git a/Lib/test/test_file2k.py b/Lib/test/test_file2k.py
index e39ef70..c73e8d8 100644
--- a/Lib/test/test_file2k.py
+++ b/Lib/test/test_file2k.py
@@ -652,6 +652,33 @@
             self.f.writelines('')
         self._test_close_open_io(io_func)
 
+    def test_iteration_torture(self):
+        # bpo-31530
+        with open(self.filename, "wb") as fp:
+            for i in xrange(2**20):
+                fp.write(b"0"*50 + b"\n")
+        with open(self.filename, "rb") as f:
+            def it():
+                for l in f:
+                    pass
+            self._run_workers(it, 10)
+
+    def test_iteration_seek(self):
+        # bpo-31530: Crash when concurrently seek and iterate over a file.
+        with open(self.filename, "wb") as fp:
+            for i in xrange(10000):
+                fp.write(b"0"*50 + b"\n")
+        with open(self.filename, "rb") as f:
+            it = iter([1] + [0]*10)  # one thread reads, others seek
+            def iterate():
+                if next(it):
+                    for l in f:
+                        pass
+                else:
+                    for i in xrange(100):
+                        f.seek(i*100, 0)
+            self._run_workers(iterate, 10)
+
 
 @unittest.skipUnless(os.name == 'posix', 'test requires a posix system.')
 class TestFileSignalEINTR(unittest.TestCase):
diff --git a/Lib/test/test_fnmatch.py b/Lib/test/test_fnmatch.py
index 37ec50d..1438da7 100644
--- a/Lib/test/test_fnmatch.py
+++ b/Lib/test/test_fnmatch.py
@@ -2,9 +2,10 @@
 
 from test import test_support
 import unittest
+import os
 
-from fnmatch import fnmatch, fnmatchcase, _MAXCACHE, _cache
-from fnmatch import fnmatch, fnmatchcase, _MAXCACHE, _cache, _purge
+from fnmatch import (fnmatch, fnmatchcase, translate, filter,
+                     _MAXCACHE, _cache, _purge)
 
 
 class FnmatchTestCase(unittest.TestCase):
@@ -12,13 +13,13 @@
     def tearDown(self):
         _purge()
 
-    def check_match(self, filename, pattern, should_match=1, fn=fnmatch):
+    def check_match(self, filename, pattern, should_match=True, fn=fnmatch):
         if should_match:
             self.assertTrue(fn(filename, pattern),
                          "expected %r to match pattern %r"
                          % (filename, pattern))
         else:
-            self.assertTrue(not fn(filename, pattern),
+            self.assertFalse(fn(filename, pattern),
                          "expected %r not to match pattern %r"
                          % (filename, pattern))
 
@@ -32,15 +33,15 @@
         check('abc', '*')
         check('abc', 'ab[cd]')
         check('abc', 'ab[!de]')
-        check('abc', 'ab[de]', 0)
-        check('a', '??', 0)
-        check('a', 'b', 0)
+        check('abc', 'ab[de]', False)
+        check('a', '??', False)
+        check('a', 'b', False)
 
         # these test that '\' is handled correctly in character sets;
         # see SF bug #409651
         check('\\', r'[\]')
         check('a', r'[!\]')
-        check('\\', r'[!\]', 0)
+        check('\\', r'[!\]', False)
 
         # test that filenames with newlines in them are handled correctly.
         # http://bugs.python.org/issue6665
@@ -49,10 +50,29 @@
         check('\nfoo', 'foo*', False)
         check('\n', '*')
 
+    def test_mix_unicode_str(self):
+        check = self.check_match
+        check('test', u'*')
+        check(u'test', '*')
+        check('test', u'*', fn=fnmatchcase)
+        check(u'test', '*', fn=fnmatchcase)
+        with test_support.check_warnings(("", UnicodeWarning), quiet=True):
+            check('test\xff', u'*\xff')
+            check(u'test\xff', '*\xff')
+            check('test\xff', u'*\xff', fn=fnmatchcase)
+            check(u'test\xff', '*\xff', fn=fnmatchcase)
+
     def test_fnmatchcase(self):
         check = self.check_match
-        check('AbC', 'abc', 0, fnmatchcase)
-        check('abc', 'AbC', 0, fnmatchcase)
+        check('abc', 'abc', True, fnmatchcase)
+        check('AbC', 'abc', False, fnmatchcase)
+        check('abc', 'AbC', False, fnmatchcase)
+        check('AbC', 'AbC', True, fnmatchcase)
+
+        check('usr/bin', 'usr/bin', True, fnmatchcase)
+        check('usr\\bin', 'usr/bin', False, fnmatchcase)
+        check('usr/bin', 'usr\\bin', False, fnmatchcase)
+        check('usr\\bin', 'usr\\bin', True, fnmatchcase)
 
     def test_cache_clearing(self):
         # check that caches do not grow too large
@@ -64,8 +84,81 @@
 
         self.assertLessEqual(len(_cache), _MAXCACHE)
 
+    @test_support.requires_unicode
+    def test_unicode(self):
+        with test_support.check_warnings(("", UnicodeWarning), quiet=True):
+            self.check_match(u'test', u'te*')
+            self.check_match(u'test\xff', u'te*\xff')
+            self.check_match(u'test'+unichr(0x20ac), u'te*'+unichr(0x20ac))
+            self.check_match(u'foo\nbar', u'foo*')
+
+    def test_case(self):
+        ignorecase = os.path.normcase('ABC') == os.path.normcase('abc')
+        check = self.check_match
+        check('abc', 'abc')
+        check('AbC', 'abc', ignorecase)
+        check('abc', 'AbC', ignorecase)
+        check('AbC', 'AbC')
+
+    def test_sep(self):
+        normsep = os.path.normcase('\\') == os.path.normcase('/')
+        check = self.check_match
+        check('usr/bin', 'usr/bin')
+        check('usr\\bin', 'usr/bin', normsep)
+        check('usr/bin', 'usr\\bin', normsep)
+        check('usr\\bin', 'usr\\bin')
+
+
+class TranslateTestCase(unittest.TestCase):
+
+    def test_translate(self):
+        self.assertEqual(translate('*'), r'.*\Z(?ms)')
+        self.assertEqual(translate('?'), r'.\Z(?ms)')
+        self.assertEqual(translate('a?b*'), r'a.b.*\Z(?ms)')
+        self.assertEqual(translate('[abc]'), r'[abc]\Z(?ms)')
+        self.assertEqual(translate('[]]'), r'[]]\Z(?ms)')
+        self.assertEqual(translate('[!x]'), r'[^x]\Z(?ms)')
+        self.assertEqual(translate('[^x]'), r'[\^x]\Z(?ms)')
+        self.assertEqual(translate('[x'), r'\[x\Z(?ms)')
+
+
+class FilterTestCase(unittest.TestCase):
+
+    def test_filter(self):
+        self.assertEqual(filter(['Python', 'Ruby', 'Perl', 'Tcl'], 'P*'),
+                         ['Python', 'Perl'])
+        self.assertEqual(filter([u'Python', u'Ruby', u'Perl', u'Tcl'], u'P*'),
+                         [u'Python', u'Perl'])
+        with test_support.check_warnings(("", UnicodeWarning), quiet=True):
+            self.assertEqual(filter([u'test\xff'], u'*\xff'), [u'test\xff'])
+
+    @test_support.requires_unicode
+    def test_mix_bytes_str(self):
+        with test_support.check_warnings(("", UnicodeWarning), quiet=True):
+            self.assertEqual(filter(['test'], u'*'), ['test'])
+            self.assertEqual(filter([u'test'], '*'), [u'test'])
+            self.assertEqual(filter(['test\xff'], u'*'), ['test\xff'])
+            self.assertEqual(filter([u'test\xff'], '*'), [u'test\xff'])
+            self.assertEqual(filter(['test\xff'], u'*\xff'), ['test\xff'])
+            self.assertEqual(filter([u'test\xff'], '*\xff'), [u'test\xff'])
+
+    def test_case(self):
+        ignorecase = os.path.normcase('P') == os.path.normcase('p')
+        self.assertEqual(filter(['Test.py', 'Test.rb', 'Test.PL'], '*.p*'),
+                         ['Test.py', 'Test.PL'] if ignorecase else ['Test.py'])
+        self.assertEqual(filter(['Test.py', 'Test.rb', 'Test.PL'], '*.P*'),
+                         ['Test.py', 'Test.PL'] if ignorecase else ['Test.PL'])
+
+    def test_sep(self):
+        normsep = os.path.normcase('\\') == os.path.normcase('/')
+        self.assertEqual(filter(['usr/bin', 'usr', 'usr\\lib'], 'usr/*'),
+                         ['usr/bin', 'usr\\lib'] if normsep else ['usr/bin'])
+        self.assertEqual(filter(['usr/bin', 'usr', 'usr\\lib'], 'usr\\*'),
+                         ['usr/bin', 'usr\\lib'] if normsep else ['usr\\lib'])
+
+
 def test_main():
-    test_support.run_unittest(FnmatchTestCase)
+    test_support.run_unittest(FnmatchTestCase, TranslateTestCase, FilterTestCase)
 
 
 if __name__ == "__main__":
diff --git a/Lib/test/test_fpformat.py b/Lib/test/test_fpformat.py
index e6de3b0..428623e 100644
--- a/Lib/test/test_fpformat.py
+++ b/Lib/test/test_fpformat.py
@@ -67,6 +67,16 @@
         else:
             self.fail("No exception on non-numeric sci")
 
+    def test_REDOS(self):
+        # This attack string will hang on the old decoder pattern.
+        attack = '+0' + ('0' * 1000000) + '++'
+        digs = 5 # irrelevant
+
+        # fix returns input if it does not decode
+        self.assertEqual(fpformat.fix(attack, digs), attack)
+        # sci raises NotANumber
+        with self.assertRaises(NotANumber):
+            fpformat.sci(attack, digs)
 
 def test_main():
     run_unittest(FpformatTest)
diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py
index cc1c19b..8a3eb06 100644
--- a/Lib/test/test_ftplib.py
+++ b/Lib/test/test_ftplib.py
@@ -218,12 +218,18 @@
         threading.Thread.__init__(self)
         asyncore.dispatcher.__init__(self)
         self.create_socket(af, socket.SOCK_STREAM)
-        self.bind(address)
-        self.listen(5)
-        self.active = False
-        self.active_lock = threading.Lock()
-        self.host, self.port = self.socket.getsockname()[:2]
-        self.handler_instance = None
+        try:
+            self.bind(address)
+            self.listen(5)
+            self.active = False
+            self.active_lock = threading.Lock()
+            self.host, self.port = self.socket.getsockname()[:2]
+            self.handler_instance = None
+        except:
+            # unregister the server on bind() error,
+            # needed by TestIPv6Environment.setUpClass()
+            self.del_channel()
+            raise
 
     def start(self):
         assert not self.active
@@ -433,6 +439,9 @@
         self.assertEqual(self.client.sanitize('PASS 12345'), repr('PASS *****'))
 
     def test_exceptions(self):
+        self.assertRaises(ValueError, self.client.sendcmd, 'echo 40\r\n0')
+        self.assertRaises(ValueError, self.client.sendcmd, 'echo 40\n0')
+        self.assertRaises(ValueError, self.client.sendcmd, 'echo 40\r0')
         self.assertRaises(ftplib.error_temp, self.client.sendcmd, 'echo 400')
         self.assertRaises(ftplib.error_temp, self.client.sendcmd, 'echo 499')
         self.assertRaises(ftplib.error_perm, self.client.sendcmd, 'echo 500')
@@ -666,6 +675,7 @@
         # clear text
         sock = self.client.transfercmd('list')
         self.assertNotIsInstance(sock, ssl.SSLSocket)
+        self.assertEqual(sock.recv(1024), LIST_DATA.encode('ascii'))
         sock.close()
         self.assertEqual(self.client.voidresp(), "226 transfer complete")
 
@@ -673,6 +683,9 @@
         self.client.prot_p()
         sock = self.client.transfercmd('list')
         self.assertIsInstance(sock, ssl.SSLSocket)
+        # consume from SSL socket to finalize handshake and avoid
+        # "SSLError [SSL] shutdown while in init"
+        self.assertEqual(sock.recv(1024), LIST_DATA.encode('ascii'))
         sock.close()
         self.assertEqual(self.client.voidresp(), "226 transfer complete")
 
@@ -680,6 +693,7 @@
         self.client.prot_c()
         sock = self.client.transfercmd('list')
         self.assertNotIsInstance(sock, ssl.SSLSocket)
+        self.assertEqual(sock.recv(1024), LIST_DATA.encode('ascii'))
         sock.close()
         self.assertEqual(self.client.voidresp(), "226 transfer complete")
 
@@ -701,11 +715,11 @@
             self.client.auth()
             self.assertRaises(ValueError, self.client.auth)
         finally:
-            self.client.ssl_version = ssl.PROTOCOL_TLSv1
+            self.client.ssl_version = ssl.PROTOCOL_TLS
 
     def test_context(self):
         self.client.quit()
-        ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
+        ctx = ssl.SSLContext(ssl.PROTOCOL_TLS)
         self.assertRaises(ValueError, ftplib.FTP_TLS, keyfile=CERTFILE,
                           context=ctx)
         self.assertRaises(ValueError, ftplib.FTP_TLS, certfile=CERTFILE,
@@ -730,7 +744,7 @@
 
     def test_check_hostname(self):
         self.client.quit()
-        ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
+        ctx = ssl.SSLContext(ssl.PROTOCOL_TLS)
         ctx.verify_mode = ssl.CERT_REQUIRED
         ctx.check_hostname = True
         ctx.load_verify_locations(CAFILE)
diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py
index 62d6029..2847573 100644
--- a/Lib/test/test_functools.py
+++ b/Lib/test/test_functools.py
@@ -600,6 +600,67 @@
         with self.assertRaises(TypeError):
             TestTO(8) <= ()
 
+    def test_bug_25732(self):
+        @functools.total_ordering
+        class A:
+            def __init__(self, value):
+                self.value = value
+            def __gt__(self, other):
+                return self.value > other.value
+            def __eq__(self, other):
+                return self.value == other.value
+            def __hash__(self):
+                return hash(self.value)
+        self.assertTrue(A(1) != A(2))
+        self.assertFalse(A(1) != A(1))
+
+        @functools.total_ordering
+        class A(object):
+            def __init__(self, value):
+                self.value = value
+            def __gt__(self, other):
+                return self.value > other.value
+            def __eq__(self, other):
+                return self.value == other.value
+            def __hash__(self):
+                return hash(self.value)
+        self.assertTrue(A(1) != A(2))
+        self.assertFalse(A(1) != A(1))
+
+        @functools.total_ordering
+        class A:
+            def __init__(self, value):
+                self.value = value
+            def __gt__(self, other):
+                return self.value > other.value
+            def __eq__(self, other):
+                return self.value == other.value
+            def __ne__(self, other):
+                raise RuntimeError(self, other)
+            def __hash__(self):
+                return hash(self.value)
+        with self.assertRaises(RuntimeError):
+            A(1) != A(2)
+        with self.assertRaises(RuntimeError):
+            A(1) != A(1)
+
+        @functools.total_ordering
+        class A(object):
+            def __init__(self, value):
+                self.value = value
+            def __gt__(self, other):
+                return self.value > other.value
+            def __eq__(self, other):
+                return self.value == other.value
+            def __ne__(self, other):
+                raise RuntimeError(self, other)
+            def __hash__(self):
+                return hash(self.value)
+        with self.assertRaises(RuntimeError):
+            A(1) != A(2)
+        with self.assertRaises(RuntimeError):
+            A(1) != A(1)
+
 def test_main(verbose=None):
     test_classes = (
         TestPartial,
diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py
index ed01c98..7e47b2d 100644
--- a/Lib/test/test_gc.py
+++ b/Lib/test/test_gc.py
@@ -1,5 +1,6 @@
 import unittest
-from test.test_support import verbose, run_unittest, start_threads
+from test.support import (verbose, run_unittest, start_threads,
+                          requires_type_collecting)
 import sys
 import time
 import gc
@@ -90,6 +91,7 @@
         del a
         self.assertNotEqual(gc.collect(), 0)
 
+    @requires_type_collecting
     def test_newinstance(self):
         class A(object):
             pass
diff --git a/Lib/test/test_gdb.py b/Lib/test/test_gdb.py
index 38e570f..c45fd45 100644
--- a/Lib/test/test_gdb.py
+++ b/Lib/test/test_gdb.py
@@ -3,13 +3,14 @@
 # The code for testing gdb was adapted from similar work in Unladen Swallow's
 # Lib/test/test_jit_gdb.py
 
+import locale
 import os
 import re
 import subprocess
 import sys
 import sysconfig
+import textwrap
 import unittest
-import sysconfig
 
 from test import test_support
 from test.test_support import run_unittest, findfile
@@ -203,27 +204,26 @@
         # Ignore some benign messages on stderr.
         ignore_patterns = (
             'Function "%s" not defined.' % breakpoint,
-            "warning: no loadable sections found in added symbol-file"
-            " system-supplied DSO",
-            "warning: Unable to find libthread_db matching"
-            " inferior's thread library, thread debugging will"
-            " not be available.",
-            "warning: Cannot initialize thread debugging"
-            " library: Debugger service failed",
-            'warning: Could not load shared library symbols for '
-            'linux-vdso.so',
-            'warning: Could not load shared library symbols for '
-            'linux-gate.so',
-            'warning: Could not load shared library symbols for '
-            'linux-vdso64.so',
             'Do you need "set solib-search-path" or '
             '"set sysroot"?',
-            'warning: Source file is more recent than executable.',
-            # Issue #19753: missing symbols on System Z
-            'Missing separate debuginfo for ',
-            'Try: zypper install -C ',
+            # BFD: /usr/lib/debug/(...): unable to initialize decompress
+            # status for section .debug_aranges
+            'BFD: ',
+            # ignore all warnings
+            'warning: ',
             )
         for line in errlines:
+            if not line:
+                continue
+            # bpo34007: Sometimes some versions of the shared libraries that
+            # are part of the traceback are compiled in optimised mode and the
+            # Program Counter (PC) is not present, not allowing gdb to walk the
+            # frames back. When this happens, the Python bindings of gdb raise
+            # an exception, making the test impossible to succeed.
+            if "PC not saved" in line:
+                raise unittest.SkipTest("gdb cannot walk the frame object"
+                                        " because the Program Counter is"
+                                        " not present")
             if not line.startswith(ignore_patterns):
                 unexpected_errlines.append(line)
 
@@ -873,7 +873,24 @@
                                           breakpoint='time_gmtime',
                                           cmds_after_breakpoint=['py-bt-full'],
                                           )
-        self.assertIn('#0 <built-in function gmtime', gdb_output)
+        self.assertIn('#1 <built-in function gmtime', gdb_output)
+
+    @unittest.skipIf(python_is_optimized(),
+                     "Python was compiled with optimizations")
+    def test_wrapper_call(self):
+        cmd = textwrap.dedent('''
+            class MyList(list):
+                def __init__(self):
+                    super(MyList, self).__init__()   # wrapper_call()
+
+            print("first break point")
+            l = MyList()
+        ''')
+        # Verify with "py-bt":
+        gdb_output = self.get_stack_trace(cmd,
+                                          cmds_after_breakpoint=['break wrapper_call', 'continue', 'py-bt'])
+        self.assertRegexpMatches(gdb_output,
+                                 r"<method-wrapper u?'__init__' of MyList object at ")
 
 
 class PyPrintTests(DebuggerTests):
diff --git a/Lib/test/test_gdbm.py b/Lib/test/test_gdbm.py
index e9169a2..c4a498f 100644
--- a/Lib/test/test_gdbm.py
+++ b/Lib/test/test_gdbm.py
@@ -62,9 +62,13 @@
         self.g = gdbm.open(filename, 'c')
         size0 = os.path.getsize(filename)
 
-        self.g['x'] = 'x' * 10000
+        # bpo-33901: on macOS with gdbm 1.15, an empty database uses 16 MiB
+        # and adding an entry of 10,000 B has no effect on the file size.
+        # Add size0 bytes to make sure that the file size changes.
+        value_size = max(size0, 10000)
+        self.g['x'] = 'x' * value_size
         size1 = os.path.getsize(filename)
-        self.assertTrue(size0 < size1)
+        self.assertGreater(size1, size0)
 
         del self.g['x']
         # 'size' is supposed to be the same even after deleting an entry.
@@ -72,7 +76,8 @@
 
         self.g.reorganize()
         size2 = os.path.getsize(filename)
-        self.assertTrue(size1 > size2 >= size0)
+        self.assertLess(size2, size1)
+        self.assertGreaterEqual(size2, size0)
 
 
 def test_main():
diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
index 5e1a3e5..0f7bf19 100644
--- a/Lib/test/test_generators.py
+++ b/Lib/test/test_generators.py
@@ -1524,13 +1524,7 @@
 [None]
 
 
-
-An obscene abuse of a yield expression within a generator expression:
-
->>> list((yield 21) for i in range(4))
-[21, None, 21, None, 21, None, 21, None]
-
-And a more sane, but still weird usage:
+Yield is allowed only in the outermost iterable in generator expression:
 
 >>> def f(): list(i for i in [(yield 26)])
 >>> type(f())
@@ -1571,7 +1565,7 @@
 >>> def f(): return lambda x=(yield): 1
 Traceback (most recent call last):
   ...
-SyntaxError: 'return' with argument inside generator (<doctest test.test_generators.__test__.coroutine[22]>, line 1)
+SyntaxError: 'return' with argument inside generator (<doctest test.test_generators.__test__.coroutine[21]>, line 1)
 
 >>> def f(): x = yield = y
 Traceback (most recent call last):
@@ -1784,7 +1778,7 @@
 >>> type(f())
 <type 'generator'>
 
->>> def f(): x=(i for i in (yield) if (yield))
+>>> def f(): x=(i for i in (yield) if i)
 >>> type(f())
 <type 'generator'>
 
diff --git a/Lib/test/test_getargs2.py b/Lib/test/test_getargs2.py
index e0efcaa..7f819fb 100644
--- a/Lib/test/test_getargs2.py
+++ b/Lib/test/test_getargs2.py
@@ -1,9 +1,10 @@
 import unittest
 import math
+import string
 import sys
 from test import test_support
 # Skip this test if the _testcapi module isn't available.
-test_support.import_module('_testcapi')
+_testcapi = test_support.import_module('_testcapi')
 from _testcapi import getargs_keywords
 import warnings
 
@@ -799,12 +800,6 @@
         self.assertRaises(TypeError, getargs_u_hash, None)
 
 
-def test_main():
-    tests = [Signed_TestCase, Unsigned_TestCase, LongLong_TestCase,
-             Tuple_TestCase, Keywords_TestCase,
-             Bytes_TestCase, String_TestCase, Unicode_TestCase]
-    test_support.run_unittest(*tests)
-
 class Object_TestCase(unittest.TestCase):
     def test_S(self):
         from _testcapi import getargs_S
@@ -840,5 +835,142 @@
         self.assertRaises(TypeError, getargs_U, buffer(obj))
 
 
+class SkipitemTest(unittest.TestCase):
+
+    def test_skipitem(self):
+        """
+        If this test failed, you probably added a new "format unit"
+        in Python/getargs.c, but neglected to update our poor friend
+        skipitem() in the same file.  (If so, shame on you!)
+
+        With a few exceptions**, this function brute-force tests all
+        printable ASCII*** characters (32 to 126 inclusive) as format units,
+        checking to see that PyArg_ParseTupleAndKeywords() return consistent
+        errors both when the unit is attempted to be used and when it is
+        skipped.  If the format unit doesn't exist, we'll get one of two
+        specific error messages (one for used, one for skipped); if it does
+        exist we *won't* get that error--we'll get either no error or some
+        other error.  If we get the specific "does not exist" error for one
+        test and not for the other, there's a mismatch, and the test fails.
+
+           ** Some format units have special funny semantics and it would
+              be difficult to accommodate them here.  Since these are all
+              well-established and properly skipped in skipitem() we can
+              get away with not testing them--this test is really intended
+              to catch *new* format units.
+
+          *** Python C source files must be ASCII.  Therefore it's impossible
+              to have non-ASCII format units.
+
+        """
+        empty_tuple = ()
+        tuple_1 = (0,)
+        dict_b = {'b':1}
+        keywords = ["a", "b"]
+
+        for i in range(32, 127):
+            c = chr(i)
+
+            # skip parentheses, the error reporting is inconsistent about them
+            # skip 'e', it's always a two-character code
+            # skip '|', it doesn't represent arguments anyway
+            if c in '()e|':
+                continue
+
+            # test the format unit when not skipped
+            format = c + "i"
+            try:
+                _testcapi.parse_tuple_and_keywords(tuple_1, dict_b,
+                    format, keywords)
+                when_not_skipped = False
+            except TypeError as e:
+                s = "argument 1 (impossible<bad format char>)"
+                when_not_skipped = (str(e) == s)
+            except RuntimeError:
+                when_not_skipped = False
+
+            # test the format unit when skipped
+            optional_format = "|" + format
+            try:
+                _testcapi.parse_tuple_and_keywords(empty_tuple, dict_b,
+                    optional_format, keywords)
+                when_skipped = False
+            except RuntimeError as e:
+                s = "impossible<bad format char>: '{}'".format(format)
+                when_skipped = (str(e) == s)
+
+            message = ("test_skipitem_parity: "
+                "detected mismatch between convertsimple and skipitem "
+                "for format unit '{}' ({}), not skipped {}, skipped {}".format(
+                    c, i, when_skipped, when_not_skipped))
+            self.assertIs(when_skipped, when_not_skipped, message)
+
+    def test_skipitem_with_suffix(self):
+        parse = _testcapi.parse_tuple_and_keywords
+        empty_tuple = ()
+        tuple_1 = (0,)
+        dict_b = {'b':1}
+        keywords = ["a", "b"]
+
+        supported = ('s#', 's*', 'z#', 'z*', 'u#', 't#', 'w#', 'w*')
+        for c in string.ascii_letters:
+            for c2 in '#*':
+                f = c + c2
+                optional_format = "|" + f + "i"
+                if f in supported:
+                    parse(empty_tuple, dict_b, optional_format, keywords)
+                else:
+                    with self.assertRaisesRegexp((RuntimeError, TypeError),
+                                'impossible<bad format char>'):
+                        parse(empty_tuple, dict_b, optional_format, keywords)
+
+        for c in map(chr, range(32, 128)):
+            f = 'e' + c
+            optional_format = "|" + f + "i"
+            if c in 'st':
+                parse(empty_tuple, dict_b, optional_format, keywords)
+            else:
+                with self.assertRaisesRegexp(RuntimeError,
+                            'impossible<bad format char>'):
+                    parse(empty_tuple, dict_b, optional_format, keywords)
+
+
+class ParseTupleAndKeywords_Test(unittest.TestCase):
+
+    def test_parse_tuple_and_keywords(self):
+        # Test handling errors in the parse_tuple_and_keywords helper itself
+        self.assertRaises(TypeError, _testcapi.parse_tuple_and_keywords,
+                          (), {}, 42, [])
+        self.assertRaises(ValueError, _testcapi.parse_tuple_and_keywords,
+                          (), {}, '', 42)
+        self.assertRaises(ValueError, _testcapi.parse_tuple_and_keywords,
+                          (), {}, '', [''] * 42)
+        self.assertRaises(TypeError, _testcapi.parse_tuple_and_keywords,
+                          (), {}, '', [42])
+
+    def test_bad_use(self):
+        # Test handling invalid format and keywords in
+        # PyArg_ParseTupleAndKeywords()
+        self.assertRaises(TypeError, _testcapi.parse_tuple_and_keywords,
+                          (1,), {}, '||O', ['a'])
+        self.assertRaises(RuntimeError, _testcapi.parse_tuple_and_keywords,
+                          (1,), {}, '|O', ['a', 'b'])
+        self.assertRaises(RuntimeError, _testcapi.parse_tuple_and_keywords,
+                          (1,), {}, '|OO', ['a'])
+
+
+class Test_testcapi(unittest.TestCase):
+    locals().update((name, getattr(_testcapi, name))
+                    for name in dir(_testcapi)
+                    if name.startswith('test_') and name.endswith('_code'))
+
+
+def test_main():
+    tests = [Signed_TestCase, Unsigned_TestCase, LongLong_TestCase,
+             Tuple_TestCase, Keywords_TestCase,
+             Bytes_TestCase, String_TestCase, Unicode_TestCase,
+             SkipitemTest, ParseTupleAndKeywords_Test, Test_testcapi]
+    test_support.run_unittest(*tests)
+
 if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/test_glob.py b/Lib/test/test_glob.py
index b360d09..84b2e7d 100644
--- a/Lib/test/test_glob.py
+++ b/Lib/test/test_glob.py
@@ -49,10 +49,10 @@
             pattern = os.path.join(*parts)
         p = os.path.join(self.tempdir, pattern)
         res = glob.glob(p)
-        self.assertEqual(list(glob.iglob(p)), res)
+        self.assertItemsEqual(glob.iglob(p), res)
         ures = [fsdecode(x) for x in res]
-        self.assertEqual(glob.glob(fsdecode(p)), ures)
-        self.assertEqual(list(glob.iglob(fsdecode(p))), ures)
+        self.assertItemsEqual(glob.glob(fsdecode(p)), ures)
+        self.assertItemsEqual(glob.iglob(fsdecode(p)), ures)
         return res
 
     def assertSequencesEqual_noorder(self, l1, l2):
diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py
index 5f77c1d..228586e 100644
--- a/Lib/test/test_grammar.py
+++ b/Lib/test/test_grammar.py
@@ -5,13 +5,14 @@
                               check_py3k_warnings
 import unittest
 import sys
+import warnings
 # testing import *
 from sys import *
 
 
 class TokenTests(unittest.TestCase):
 
-    def testBackslash(self):
+    def test_backslash(self):
         # Backslash means line continuation:
         x = 1 \
         + 1
@@ -21,29 +22,42 @@
         x = 0
         self.assertEqual(x, 0, 'backslash ending comment')
 
-    def testPlainIntegers(self):
+    def test_plain_integers(self):
+        self.assertEqual(type(000), type(0))
         self.assertEqual(0xff, 255)
         self.assertEqual(0377, 255)
+        self.assertEqual(0o377, 255)
         self.assertEqual(2147483647, 017777777777)
+        self.assertEqual(2147483647, 0o17777777777)
+        self.assertEqual(0b1001, 9)
         # "0x" is not a valid literal
         self.assertRaises(SyntaxError, eval, "0x")
         from sys import maxint
         if maxint == 2147483647:
-            self.assertEqual(-2147483647-1, -020000000000)
+            self.assertEqual(-2147483647-1, -0o20000000000)
             # XXX -2147483648
             self.assertTrue(037777777777 > 0)
+            self.assertTrue(0o37777777777 > 0)
             self.assertTrue(0xffffffff > 0)
-            for s in '2147483648', '040000000000', '0x100000000':
+            self.assertTrue(0b1111111111111111111111111111111 > 0)
+            for s in ('2147483648', '040000000000', '0o40000000000',
+                      '0x100000000',
+                      '0b10000000000000000000000000000000'):
                 try:
                     x = eval(s)
                 except OverflowError:
                     self.fail("OverflowError on huge integer literal %r" % s)
         elif maxint == 9223372036854775807:
             self.assertEqual(-9223372036854775807-1, -01000000000000000000000)
+            self.assertEqual(-9223372036854775807-1, -0o1000000000000000000000)
             self.assertTrue(01777777777777777777777 > 0)
+            self.assertTrue(0o1777777777777777777777 > 0)
             self.assertTrue(0xffffffffffffffff > 0)
+            self.assertTrue(0b11111111111111111111111111111111111111111111111111111111111111 > 0)
             for s in '9223372036854775808', '02000000000000000000000', \
-                     '0x10000000000000000':
+                     '0o2000000000000000000000', \
+                     '0x10000000000000000', \
+                     '0b100000000000000000000000000000000000000000000000000000000000000':
                 try:
                     x = eval(s)
                 except OverflowError:
@@ -51,7 +65,7 @@
         else:
             self.fail('Weird maxint value %r' % maxint)
 
-    def testLongIntegers(self):
+    def test_long_integers(self):
         x = 0L
         x = 0l
         x = 0xffffffffffffffffL
@@ -61,7 +75,7 @@
         x = 123456789012345678901234567890L
         x = 123456789012345678901234567890l
 
-    def testFloats(self):
+    def test_floats(self):
         x = 3.14
         x = 314.
         x = 0.314
@@ -81,7 +95,7 @@
         self.assertEqual(1 if 0else 0, 0)
         self.assertRaises(SyntaxError, eval, "0 if 1Else 0")
 
-    def testStringLiterals(self):
+    def test_string_literals(self):
         x = ''; y = ""; self.assertTrue(len(x) == 0 and x == y)
         x = '\''; y = "'"; self.assertTrue(len(x) == 1 and x == y and ord(x) == 39)
         x = '"'; y = "\""; self.assertTrue(len(x) == 1 and x == y and ord(x) == 34)
@@ -133,11 +147,11 @@
     # expr_input: testlist NEWLINE
     # XXX Hard to test -- used only in calls to input()
 
-    def testEvalInput(self):
+    def test_eval_input(self):
         # testlist ENDMARKER
         x = eval('1, 0 or 1')
 
-    def testFuncdef(self):
+    def test_funcdef(self):
         ### 'def' NAME parameters ':' suite
         ### parameters: '(' [varargslist] ')'
         ### varargslist: (fpdef ['=' test] ',')* ('*' NAME [',' ('**'|'*' '*') NAME]
@@ -153,9 +167,10 @@
         f1(*(), **{})
         def f2(one_argument): pass
         def f3(two, arguments): pass
-        # Silence Py3k warning
-        exec('def f4(two, (compound, (argument, list))): pass')
-        exec('def f5((compound, first), two): pass')
+        with check_py3k_warnings(('tuple parameter unpacking has been removed',
+                                  SyntaxWarning)):
+            exec('def f4(two, (compound, (argument, list))): pass')
+            exec('def f5((compound, first), two): pass')
         self.assertEqual(f2.func_code.co_varnames, ('one_argument',))
         self.assertEqual(f3.func_code.co_varnames, ('two', 'arguments'))
         if sys.platform.startswith('java'):
@@ -174,8 +189,9 @@
         def v0(*rest): pass
         def v1(a, *rest): pass
         def v2(a, b, *rest): pass
-        # Silence Py3k warning
-        exec('def v3(a, (b, c), *rest): return a, b, c, rest')
+        with check_py3k_warnings(('tuple parameter unpacking has been removed',
+                                  SyntaxWarning)):
+            exec('def v3(a, (b, c), *rest): return a, b, c, rest')
 
         f1()
         f2(1)
@@ -212,7 +228,9 @@
         d01()
         d01(1)
         d01(*(1,))
+        d01(*[] or [2])
         d01(**{'a':2})
+        d01(**{'a':2} or {})
         def d11(a, b=1): pass
         d11(1)
         d11(1, 2)
@@ -280,9 +298,12 @@
         d22v(*(1, 2, 3, 4))
         d22v(1, 2, *(3, 4, 5))
         d22v(1, *(2, 3), **{'d': 4})
-        # Silence Py3k warning
-        exec('def d31v((x)): pass')
-        exec('def d32v((x,)): pass')
+        with check_py3k_warnings(('parenthesized argument names are invalid',
+                                  SyntaxWarning)):
+            exec('def d31v((x)): pass')
+        with check_py3k_warnings(('tuple parameter unpacking has been removed',
+                                  SyntaxWarning)):
+            exec('def d32v((x,)): pass')
         d31v(1)
         d32v((1,))
 
@@ -293,12 +314,19 @@
                                                     {'x':2, 'y':5}))
         self.assertRaises(SyntaxError, eval, "f(1, *(2,3), 4)")
         self.assertRaises(SyntaxError, eval, "f(1, x=2, *(3,4), x=5)")
+        self.assertEqual(f(**{'eggs':'scrambled', 'spam':'fried'}),
+                         ((), {'eggs':'scrambled', 'spam':'fried'}))
+        self.assertEqual(f(spam='fried', **{'eggs':'scrambled'}),
+                         ((), {'eggs':'scrambled', 'spam':'fried'}))
 
         # Check ast errors in *args and *kwargs
         check_syntax_error(self, "f(*g(1=2))")
         check_syntax_error(self, "f(**g(1=2))")
 
-    def testLambdef(self):
+        # Check trailing commas are permitted in funcdef argument list
+        def f(a,): pass
+
+    def test_lambdef(self):
         ### lambdef: 'lambda' [varargslist] ':' test
         l1 = lambda : 0
         self.assertEqual(l1(), 0)
@@ -311,12 +339,18 @@
         self.assertEqual(l5(1, 2), 5)
         self.assertEqual(l5(1, 2, 3), 6)
         check_syntax_error(self, "lambda x: x = 2")
-        check_syntax_error(self, "lambda (None,): None")
+        with check_py3k_warnings(('tuple parameter unpacking has been removed',
+                                  SyntaxWarning)):
+            check_syntax_error(self, "lambda (None,): None")
+
+        # check that trailing commas are permitted
+        l10 = lambda a,: 0
+
 
     ### stmt: simple_stmt | compound_stmt
     # Tested below
 
-    def testSimpleStmt(self):
+    def test_simple_stmt(self):
         ### simple_stmt: small_stmt (';' small_stmt)* [';']
         x = 1; pass; del x
         def foo():
@@ -327,7 +361,7 @@
     ### small_stmt: expr_stmt | print_stmt  | pass_stmt | del_stmt | flow_stmt | import_stmt | global_stmt | access_stmt | exec_stmt
     # Tested below
 
-    def testExprStmt(self):
+    def test_expr_stmt(self):
         # (exprlist '=')* exprlist
         1
         1, 2, 3
@@ -340,7 +374,7 @@
         check_syntax_error(self, "x + 1 = 1")
         check_syntax_error(self, "a + 1 = b + 2")
 
-    def testPrintStmt(self):
+    def test_print_stmt(self):
         # 'print' (test ',')* [test]
         import StringIO
 
@@ -410,7 +444,7 @@
         check_syntax_error(self, 'print ,')
         check_syntax_error(self, 'print >> x,')
 
-    def testDelStmt(self):
+    def test_del_stmt(self):
         # 'del' exprlist
         abc = [1,2,3]
         x, y, z = abc
@@ -419,18 +453,18 @@
         del abc
         del x, y, (z, xyz)
 
-    def testPassStmt(self):
+    def test_pass_stmt(self):
         # 'pass'
         pass
 
     # flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt
     # Tested below
 
-    def testBreakStmt(self):
+    def test_break_stmt(self):
         # 'break'
         while 1: break
 
-    def testContinueStmt(self):
+    def test_continue_stmt(self):
         # 'continue'
         i = 1
         while i: i = 0; continue
@@ -482,7 +516,7 @@
                 self.fail("continue then break in try/except in loop broken!")
         test_inner()
 
-    def testReturn(self):
+    def test_return(self):
         # 'return' [testlist]
         def g1(): return
         def g2(): return 1
@@ -490,17 +524,150 @@
         x = g2()
         check_syntax_error(self, "class foo:return 1")
 
-    def testYield(self):
-        check_syntax_error(self, "class foo:yield 1")
+    def test_break_in_finally(self):
+        count = 0
+        while count < 2:
+            count += 1
+            try:
+                pass
+            finally:
+                break
+        self.assertEqual(count, 1)
 
-    def testRaise(self):
+        count = 0
+        while count < 2:
+            count += 1
+            try:
+                continue
+            finally:
+                break
+        self.assertEqual(count, 1)
+
+        count = 0
+        while count < 2:
+            count += 1
+            try:
+                1.0/0.0
+            finally:
+                break
+        self.assertEqual(count, 1)
+
+        for count in [0, 1]:
+            self.assertEqual(count, 0)
+            try:
+                pass
+            finally:
+                break
+        self.assertEqual(count, 0)
+
+        for count in [0, 1]:
+            self.assertEqual(count, 0)
+            try:
+                continue
+            finally:
+                break
+        self.assertEqual(count, 0)
+
+        for count in [0, 1]:
+            self.assertEqual(count, 0)
+            try:
+                1.0/0.0
+            finally:
+                break
+        self.assertEqual(count, 0)
+
+    def test_return_in_finally(self):
+        def g1():
+            try:
+                pass
+            finally:
+                return 1
+        self.assertEqual(g1(), 1)
+
+        def g2():
+            try:
+                return 2
+            finally:
+                return 3
+        self.assertEqual(g2(), 3)
+
+        def g3():
+            try:
+                1.0/0.0
+            finally:
+                return 4
+        self.assertEqual(g3(), 4)
+
+    def test_yield(self):
+        # Allowed as standalone statement
+        def g(): yield 1
+        # Allowed as RHS of assignment
+        def g(): x = yield 1
+        # Ordinary yield accepts implicit tuples
+        def g(): yield 1, 1
+        def g(): x = yield 1, 1
+        # Requires parentheses as subexpression
+        def g(): 1, (yield 1)
+        check_syntax_error(self, "def g(): 1, yield 1")
+        # Requires parentheses as call argument
+        def g(): f((yield 1))
+        def g(): f((yield 1), 1)
+        check_syntax_error(self, "def g(): f(yield 1)")
+        check_syntax_error(self, "def g(): f(yield 1, 1)")
+        # Not allowed at top level
+        check_syntax_error(self, "yield")
+        # Not allowed at class scope
+        check_syntax_error(self, "class foo:yield 1")
+        # Check annotation refleak on SyntaxError
+        check_syntax_error(self, "def g(a:(yield)): pass")
+
+    def test_yield_in_comprehensions(self):
+        # Check yield in comprehensions
+        def g(): [x for x in [(yield 1)]]
+
+        def check(code, warntext):
+            with check_py3k_warnings((warntext, DeprecationWarning)):
+                compile(code, '<test string>', 'exec')
+            if sys.py3kwarning:
+                with warnings.catch_warnings():
+                    warnings.filterwarnings('error', category=DeprecationWarning)
+                    with self.assertRaises(SyntaxError) as cm:
+                        compile(code, '<test string>', 'exec')
+                    self.assertIn(warntext, str(cm.exception))
+
+        check("def g(): [(yield x) for x in ()]",
+              "'yield' inside list comprehension")
+        check("def g(): [x for x in () if not (yield x)]",
+              "'yield' inside list comprehension")
+        check("def g(): [y for x in () for y in [(yield x)]]",
+              "'yield' inside list comprehension")
+        check("def g(): {(yield x) for x in ()}",
+              "'yield' inside set comprehension")
+        check("def g(): {(yield x): x for x in ()}",
+              "'yield' inside dict comprehension")
+        check("def g(): {x: (yield x) for x in ()}",
+              "'yield' inside dict comprehension")
+        check("def g(): ((yield x) for x in ())",
+              "'yield' inside generator expression")
+        with check_py3k_warnings(("'yield' inside list comprehension",
+                                  DeprecationWarning)):
+            check_syntax_error(self, "class C: [(yield x) for x in ()]")
+        check("class C: ((yield x) for x in ())",
+              "'yield' inside generator expression")
+        with check_py3k_warnings(("'yield' inside list comprehension",
+                                  DeprecationWarning)):
+            check_syntax_error(self, "[(yield x) for x in ()]")
+        check("((yield x) for x in ())",
+              "'yield' inside generator expression")
+
+    def test_raise(self):
         # 'raise' test [',' test]
         try: raise RuntimeError, 'just testing'
         except RuntimeError: pass
         try: raise KeyboardInterrupt
         except KeyboardInterrupt: pass
 
-    def testImport(self):
+    def test_import(self):
         # 'import' dotted_as_names
         import sys
         import time, sys
@@ -513,13 +680,13 @@
         from sys import (path, argv)
         from sys import (path, argv,)
 
-    def testGlobal(self):
+    def test_global(self):
         # 'global' NAME (',' NAME)*
         global a
         global a, b
         global one, two, three, four, five, six, seven, eight, nine, ten
 
-    def testExec(self):
+    def test_exec(self):
         # 'exec' expr ['in' expr [',' expr]]
         z = None
         del z
@@ -551,7 +718,7 @@
         if (g, l) != ({'a':1}, {'b':2}):
             self.fail('exec ... in g (%s), l (%s)' %(g,l))
 
-    def testAssert(self):
+    def test_assert(self):
         # assertTruestmt: 'assert' test [',' test]
         assert 1
         assert 1, 1
@@ -590,7 +757,7 @@
     ### compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef
     # Tested below
 
-    def testIf(self):
+    def test_if(self):
         # 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]
         if 1: pass
         if 1: pass
@@ -603,7 +770,7 @@
         elif 0: pass
         else: pass
 
-    def testWhile(self):
+    def test_while(self):
         # 'while' test ':' suite ['else' ':' suite]
         while 0: pass
         while 0: pass
@@ -618,7 +785,7 @@
             x = 2
         self.assertEqual(x, 2)
 
-    def testFor(self):
+    def test_for(self):
         # 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite]
         for i in 1, 2, 3: pass
         for i, j, k in (): pass
@@ -645,30 +812,30 @@
             result.append(x)
         self.assertEqual(result, [1, 2, 3])
 
-    def testTry(self):
+    def test_try(self):
         ### try_stmt: 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite]
         ###         | 'try' ':' suite 'finally' ':' suite
         ### except_clause: 'except' [expr [('as' | ',') expr]]
         try:
-            1/0
+            1/0.0
         except ZeroDivisionError:
             pass
         else:
             pass
-        try: 1/0
+        try: 1/0.0
         except EOFError: pass
         except TypeError as msg: pass
         except RuntimeError, msg: pass
         except: pass
         else: pass
-        try: 1/0
+        try: 1/0.0
         except (EOFError, TypeError, ZeroDivisionError): pass
-        try: 1/0
+        try: 1/0.0
         except (EOFError, TypeError, ZeroDivisionError), msg: pass
         try: pass
         finally: pass
 
-    def testSuite(self):
+    def test_suite(self):
         # simple_stmt | NEWLINE INDENT NEWLINE* (stmt NEWLINE*)+ DEDENT
         if 1: pass
         if 1:
@@ -683,7 +850,7 @@
             pass
             #
 
-    def testTest(self):
+    def test_test(self):
         ### and_test ('or' and_test)*
         ### and_test: not_test ('and' not_test)*
         ### not_test: 'not' not_test | comparison
@@ -694,7 +861,7 @@
         if not 1 and 1 and 1: pass
         if 1 and 1 or 1 and 1 and 1 or not 1 and 1: pass
 
-    def testComparison(self):
+    def test_comparison(self):
         ### comparison: expr (comp_op expr)*
         ### comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not'
         if 1: pass
@@ -710,40 +877,56 @@
         if 1 in (): pass
         if 1 not in (): pass
         if 1 < 1 > 1 == 1 >= 1 <= 1 != 1 in 1 not in 1 is 1 is not 1: pass
-        # Silence Py3k warning
-        if eval('1 <> 1'): pass
-        if eval('1 < 1 > 1 == 1 >= 1 <= 1 <> 1 != 1 in 1 not in 1 is 1 is not 1'): pass
+        with check_py3k_warnings(('<> not supported in 3.x; use !=',
+                                  DeprecationWarning)):
+            if eval('1 <> 1'): pass
+        with check_py3k_warnings(('<> not supported in 3.x; use !=',
+                                  DeprecationWarning)):
+            if eval('1 < 1 > 1 == 1 >= 1 <= 1 <> 1 != 1 in 1 not in 1 is 1 is not 1'): pass
+        if sys.py3kwarning:
+            with warnings.catch_warnings():
+                warnings.filterwarnings('error', category=DeprecationWarning)
+                with self.assertRaises(DeprecationWarning) as cm:
+                    compile('1 <> 1', '<test string>', 'eval')
+                self.assertIn('<> not supported in 3.x; use !=',
+                              str(cm.exception))
 
-    def testBinaryMaskOps(self):
+    def test_binary_mask_ops(self):
         x = 1 & 1
         x = 1 ^ 1
         x = 1 | 1
 
-    def testShiftOps(self):
+    def test_shift_ops(self):
         x = 1 << 1
         x = 1 >> 1
         x = 1 << 1 >> 1
 
-    def testAdditiveOps(self):
+    def test_additive_ops(self):
         x = 1
         x = 1 + 1
         x = 1 - 1 - 1
         x = 1 - 1 + 1 - 1 + 1
 
-    def testMultiplicativeOps(self):
+    def test_multiplicative_ops(self):
         x = 1 * 1
-        x = 1 / 1
+        with check_py3k_warnings(('classic int division', DeprecationWarning)):
+            x = 1 / 1
+        x = 1 / 1.0
         x = 1 % 1
-        x = 1 / 1 * 1 % 1
+        with check_py3k_warnings(('classic int division', DeprecationWarning)):
+            x = 1 / 1 * 1 % 1
+        x = 1 / 1.0 * 1 % 1
 
-    def testUnaryOps(self):
+    def test_unary_ops(self):
         x = +1
         x = -1
         x = ~1
         x = ~1 ^ 1 & 1 | 1 & 1 ^ -1
-        x = -1*1/1 + 1*1 - ---1*1
+        with check_py3k_warnings(('classic int division', DeprecationWarning)):
+            x = -1*1/1 + 1*1 - ---1*1
+        x = -1*1/1.0 + 1*1 - ---1*1
 
-    def testSelectors(self):
+    def test_selectors(self):
         ### trailer: '(' [testlist] ')' | '[' subscript ']' | '.' NAME
         ### subscript: expr | [expr] ':' [expr]
 
@@ -770,10 +953,10 @@
         d[1,2] = 3
         d[1,2,3] = 4
         L = list(d)
-        L.sort()
+        L.sort(key=lambda x: (type(x).__name__, x))
         self.assertEqual(str(L), '[1, (1,), (1, 2), (1, 2, 3)]')
 
-    def testAtoms(self):
+    def test_atoms(self):
         ### atom: '(' [testlist] ')' | '[' [testlist] ']' | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING
         ### dictorsetmaker: (test ':' test (',' test ':' test)* [',']) | (test (',' test)* [','])
 
@@ -800,10 +983,10 @@
         x = {'one', 'two', 'three'}
         x = {2, 3, 4,}
 
-        # Silence Py3k warning
-        x = eval('`x`')
-        x = eval('`1 or 2 or 3`')
-        self.assertEqual(eval('`1,2`'), '(1, 2)')
+        with check_py3k_warnings(('backquote not supported', SyntaxWarning)):
+            x = eval('`x`')
+            x = eval('`1 or 2 or 3`')
+            self.assertEqual(eval('`1,2`'), '(1, 2)')
 
         x = x
         x = 'x'
@@ -813,7 +996,7 @@
     ### testlist: test (',' test)* [',']
     # These have been exercised enough above
 
-    def testClassdef(self):
+    def test_classdef(self):
         # 'class' NAME ['(' [testlist] ')'] ':' suite
         class B: pass
         class B2(): pass
@@ -824,6 +1007,7 @@
             def meth1(self): pass
             def meth2(self, arg): pass
             def meth3(self, a1, a2): pass
+
         # decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
         # decorators: decorator+
         # decorated: decorators (classdef | funcdef)
@@ -835,14 +1019,14 @@
             pass
         self.assertEqual(G.decorated, True)
 
-    def testDictcomps(self):
+    def test_dictcomps(self):
         # dictorsetmaker: ( (test ':' test (comp_for |
         #                                   (',' test ':' test)* [','])) |
         #                   (test (comp_for | (',' test)* [','])) )
         nums = [1, 2, 3]
         self.assertEqual({i:i+1 for i in nums}, {1: 2, 2: 3, 3: 4})
 
-    def testListcomps(self):
+    def test_listcomps(self):
         # list comprehension tests
         nums = [1, 2, 3, 4, 5]
         strs = ["Apple", "Banana", "Coconut"]
@@ -865,7 +1049,7 @@
                          [[1], [1, 1], [1, 2, 4], [1, 3, 9, 27], [1, 4, 16, 64, 256]])
 
         def test_in_func(l):
-            return [None < x < 3 for x in l if x > 2]
+            return [0 < x < 3 for x in l if x > 2]
 
         self.assertEqual(test_in_func(nums), [False, False, False])
 
@@ -905,7 +1089,7 @@
         self.assertEqual(x, [('Boeing', 'Airliner'), ('Boeing', 'Engine'), ('Ford', 'Engine'),
                              ('Macdonalds', 'Cheeseburger')])
 
-    def testGenexps(self):
+    def test_genexps(self):
         # generator expression tests
         g = ([x for x in range(10)] for x in range(1))
         self.assertEqual(g.next(), [x for x in range(10)])
@@ -940,7 +1124,7 @@
         check_syntax_error(self, "foo(x for x in range(10), 100)")
         check_syntax_error(self, "foo(100, x for x in range(10))")
 
-    def testComprehensionSpecials(self):
+    def test_comprehension_specials(self):
         # test for outmost iterable precomputation
         x = 10; g = (i for i in range(x)); x = 5
         self.assertEqual(len(list(g)), 10)
@@ -979,11 +1163,11 @@
         with manager() as x, manager():
             pass
 
-    def testIfElseExpr(self):
+    def test_if_else_expr(self):
         # Test ifelse expressions in various cases
         def _checkeval(msg, ret):
             "helper to check that evaluation of expressions is done correctly"
-            print x
+            print(msg)
             return ret
 
         self.assertEqual([ x() for x in lambda: True, lambda: False if x() ], [True])
@@ -1002,7 +1186,8 @@
         self.assertEqual((6 + 1 if 1 else 2), 7)
         self.assertEqual((6 - 1 if 1 else 2), 5)
         self.assertEqual((6 * 2 if 1 else 4), 12)
-        self.assertEqual((6 / 2 if 1 else 3), 3)
+        with check_py3k_warnings(('classic int division', DeprecationWarning)):
+            self.assertEqual((6 / 2 if 1 else 3), 3)
         self.assertEqual((6 < 4 if 0 else 2), 2)
 
     def test_paren_evaluation(self):
@@ -1015,13 +1200,7 @@
 
 
 def test_main():
-    with check_py3k_warnings(
-            ("backquote not supported", SyntaxWarning),
-            ("tuple parameter unpacking has been removed", SyntaxWarning),
-            ("parenthesized argument names are invalid", SyntaxWarning),
-            ("classic int division", DeprecationWarning),
-            (".+ not supported in 3.x", DeprecationWarning)):
-        run_unittest(TokenTests, GrammarTests)
+    run_unittest(TokenTests, GrammarTests)
 
 if __name__ == '__main__':
     test_main()
diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py
index 5025b91..cdb1af5 100644
--- a/Lib/test/test_gzip.py
+++ b/Lib/test/test_gzip.py
@@ -6,6 +6,7 @@
 import os
 import io
 import struct
+import tempfile
 gzip = test_support.import_module('gzip')
 
 data1 = """  int length=DEFAULTALLOC, err = Z_OK;
@@ -331,6 +332,32 @@
             with gzip.GzipFile(fileobj=f, mode="w") as g:
                 self.assertEqual(g.name, "")
 
+    def test_fileobj_from_io_open(self):
+        fd = os.open(self.filename, os.O_WRONLY | os.O_CREAT)
+        with io.open(fd, "wb") as f:
+            with gzip.GzipFile(fileobj=f, mode="w") as g:
+                self.assertEqual(g.name, "")
+
+    def test_fileobj_mode(self):
+        gzip.GzipFile(self.filename, "wb").close()
+        with open(self.filename, "r+b") as f:
+            with gzip.GzipFile(fileobj=f, mode='r') as g:
+                self.assertEqual(g.mode, gzip.READ)
+            with gzip.GzipFile(fileobj=f, mode='w') as g:
+                self.assertEqual(g.mode, gzip.WRITE)
+            with gzip.GzipFile(fileobj=f, mode='a') as g:
+                self.assertEqual(g.mode, gzip.WRITE)
+            with self.assertRaises(IOError):
+                gzip.GzipFile(fileobj=f, mode='z')
+        for mode in "rb", "r+b":
+            with open(self.filename, mode) as f:
+                with gzip.GzipFile(fileobj=f) as g:
+                    self.assertEqual(g.mode, gzip.READ)
+        for mode in "wb", "ab":
+            with open(self.filename, mode) as f:
+                with gzip.GzipFile(fileobj=f) as g:
+                    self.assertEqual(g.mode, gzip.WRITE)
+
     def test_read_with_extra(self):
         # Gzip data with an extra field
         gzdata = (b'\x1f\x8b\x08\x04\xb2\x17cQ\x02\xff'
@@ -339,6 +366,14 @@
         with gzip.GzipFile(fileobj=io.BytesIO(gzdata)) as f:
             self.assertEqual(f.read(), b'Test')
 
+    def test_fileobj_without_name(self):
+        # Issue #33038: GzipFile should not assume that file objects that have
+        # a .name attribute use a non-None value.
+        with tempfile.SpooledTemporaryFile() as f:
+            with gzip.GzipFile(fileobj=f, mode='wb') as archive:
+                archive.write(b'data')
+                self.assertEqual(archive.name, '')
+
 def test_main(verbose=None):
     test_support.run_unittest(TestGzip)
 
diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py
index 471ebb4..b8d6388 100644
--- a/Lib/test/test_hashlib.py
+++ b/Lib/test/test_hashlib.py
@@ -371,25 +371,25 @@
         data = smallest_data*200000
         expected_hash = hashlib.sha1(data*num_threads).hexdigest()
 
-        def hash_in_chunks(chunk_size, event):
+        def hash_in_chunks(chunk_size):
             index = 0
             while index < len(data):
                 hasher.update(data[index:index+chunk_size])
                 index += chunk_size
-            event.set()
 
-        events = []
+        threads = []
         for threadnum in xrange(num_threads):
             chunk_size = len(data) // (10**threadnum)
             assert chunk_size > 0
             assert chunk_size % len(smallest_data) == 0
-            event = threading.Event()
-            events.append(event)
-            threading.Thread(target=hash_in_chunks,
-                             args=(chunk_size, event)).start()
+            thread = threading.Thread(target=hash_in_chunks,
+                                      args=(chunk_size,))
+            threads.append(thread)
 
-        for event in events:
-            event.wait()
+        for thread in threads:
+            thread.start()
+        for thread in threads:
+            thread.join()
 
         self.assertEqual(expected_hash, hasher.hexdigest())
 
diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py
index 7e8b058..44ffac7 100644
--- a/Lib/test/test_httplib.py
+++ b/Lib/test/test_httplib.py
@@ -860,7 +860,7 @@
         import ssl
         test_support.requires('network')
         with test_support.transient_internet('self-signed.pythontest.net'):
-            context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
+            context = ssl.SSLContext(ssl.PROTOCOL_TLS)
             context.verify_mode = ssl.CERT_REQUIRED
             context.load_verify_locations(CERT_selfsigned_pythontestdotnet)
             h = httplib.HTTPSConnection('self-signed.pythontest.net', 443, context=context)
@@ -874,7 +874,7 @@
         import ssl
         test_support.requires('network')
         with test_support.transient_internet('self-signed.pythontest.net'):
-            context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
+            context = ssl.SSLContext(ssl.PROTOCOL_TLS)
             context.verify_mode = ssl.CERT_REQUIRED
             context.load_verify_locations(CERT_localhost)
             h = httplib.HTTPSConnection('self-signed.pythontest.net', 443, context=context)
@@ -895,7 +895,7 @@
         # The (valid) cert validates the HTTP hostname
         import ssl
         server = self.make_server(CERT_localhost)
-        context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
+        context = ssl.SSLContext(ssl.PROTOCOL_TLS)
         context.verify_mode = ssl.CERT_REQUIRED
         context.load_verify_locations(CERT_localhost)
         h = httplib.HTTPSConnection('localhost', server.port, context=context)
@@ -907,7 +907,7 @@
         # The (valid) cert doesn't validate the HTTP hostname
         import ssl
         server = self.make_server(CERT_fakehostname)
-        context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
+        context = ssl.SSLContext(ssl.PROTOCOL_TLS)
         context.verify_mode = ssl.CERT_REQUIRED
         context.check_hostname = True
         context.load_verify_locations(CERT_fakehostname)
diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py
index 11f0d5d..93807c1 100644
--- a/Lib/test/test_httpservers.py
+++ b/Lib/test/test_httpservers.py
@@ -66,6 +66,7 @@
 
     def stop(self):
         self.server.shutdown()
+        self.join()
 
 
 class BaseTestCase(unittest.TestCase):
diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py
index 4325005..9b1d261 100644
--- a/Lib/test/test_import.py
+++ b/Lib/test/test_import.py
@@ -400,20 +400,19 @@
     def test_replace_parent_in_sys_modules(self):
         dir_name = os.path.abspath(TESTFN)
         os.mkdir(dir_name)
-        try:
-            pkg_dir = os.path.join(dir_name, 'sa')
-            os.mkdir(pkg_dir)
-            with open(os.path.join(pkg_dir, '__init__.py'), 'w') as init_file:
-                init_file.write("import v1")
-            with open(os.path.join(pkg_dir, 'v1.py'), 'w') as v1_file:
-                v1_file.write("import sys;"
-                              "sys.modules['sa'] = sys.modules[__name__];"
-                              "import sa")
-            sys.path.insert(0, dir_name)
-            # a segfault means the test failed!
-            import sa
-        finally:
-            rmtree(dir_name)
+        self.addCleanup(rmtree, dir_name)
+        pkg_dir = os.path.join(dir_name, 'sa')
+        os.mkdir(pkg_dir)
+        with open(os.path.join(pkg_dir, '__init__.py'), 'w') as init_file:
+            init_file.write("import v1")
+        with open(os.path.join(pkg_dir, 'v1.py'), 'w') as v1_file:
+            v1_file.write("import sys;"
+                          "sys.modules['sa'] = sys.modules[__name__];"
+                          "import sa")
+        sys.path.insert(0, dir_name)
+        self.addCleanup(sys.path.pop, 0)
+        # a segfault means the test failed!
+        import sa
 
     def test_fromlist_type(self):
         with self.assertRaises(TypeError) as cm:
@@ -549,7 +548,7 @@
         try:
             os.listdir(unc)
         except OSError as e:
-            if e.errno in (errno.EPERM, errno.EACCES):
+            if e.errno in (errno.EPERM, errno.EACCES, errno.ENOENT):
                 # See issue #15338
                 self.skipTest("cannot access administrative share %r" % (unc,))
             raise
diff --git a/Lib/test/test_import_magic.py b/Lib/test/test_import_magic.py
new file mode 100644
index 0000000..57e350e
--- /dev/null
+++ b/Lib/test/test_import_magic.py
@@ -0,0 +1,58 @@
+import imp
+import sys
+
+import unittest
+
+# Note:
+#   In Python 3.x, this test case is in Lib/test/test_importlib/test_util.py
+
+class MagicNumberTests(unittest.TestCase):
+    """
+    Test release compatibility issues relating to precompiled bytecode
+    """
+    @unittest.skipUnless(
+        sys.version_info.releaselevel in ('candidate', 'final'),
+        'only applies to candidate or final python release levels'
+    )
+    def test_magic_number(self):
+        """
+        Each python minor release should generally have a MAGIC_NUMBER
+        that does not change once the release reaches candidate status.
+
+        Once a release reaches candidate status, the value of the constant
+        EXPECTED_MAGIC_NUMBER in this test should be changed.
+        This test will then check that the actual MAGIC_NUMBER matches
+        the expected value for the release.
+
+        In exceptional cases, it may be required to change the MAGIC_NUMBER
+        for a maintenance release. In this case the change should be
+        discussed in python-dev. If a change is required, community
+        stakeholders such as OS package maintainers must be notified
+        in advance. Such exceptional releases will then require an
+        adjustment to this test case.
+        """
+        EXPECTED_MAGIC_NUMBER = 62211
+        raw_magic = imp.get_magic()
+        actual = (ord(raw_magic[1]) << 8) + ord(raw_magic[0])
+
+        msg = (
+            "To avoid breaking backwards compatibility with cached bytecode "
+            "files that can't be automatically regenerated by the current "
+            "user, candidate and final releases require the current  "
+            "importlib.util.MAGIC_NUMBER to match the expected "
+            "magic number in this test. Set the expected "
+            "magic number in this test to the current MAGIC_NUMBER to "
+            "continue with the release.\n\n"
+            "Changing the MAGIC_NUMBER for a maintenance release "
+            "requires discussion in python-dev and notification of "
+            "community stakeholders."
+        )
+        self.assertEqual(EXPECTED_MAGIC_NUMBER, actual)#, msg)
+
+
+def test_main():
+    from test.support import run_unittest
+    run_unittest(MagicNumberTests)
+
+if __name__ == '__main__':
+    test_main()
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index ecc04cb..5063a30 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -5,10 +5,11 @@
 import inspect
 import linecache
 import datetime
+import textwrap
 from UserList import UserList
 from UserDict import UserDict
 
-from test.test_support import run_unittest, check_py3k_warnings, have_unicode
+from test.support import run_unittest, check_py3k_warnings, have_unicode
 
 with check_py3k_warnings(
         ("tuple parameter unpacking has been removed", SyntaxWarning),
@@ -208,7 +209,7 @@
 
     def sourcerange(self, top, bottom):
         lines = self.source.split("\n")
-        return "\n".join(lines[top-1:bottom]) + "\n"
+        return "\n".join(lines[top-1:bottom]) + ("\n" if bottom else "")
 
     def assertSourceEqual(self, obj, top, bottom):
         self.assertEqual(inspect.getsource(obj),
@@ -330,6 +331,16 @@
         finally:
             linecache.getlines = getlines
 
+class TestGettingSourceOfToplevelFrames(GetSourceBase):
+    fodderFile = mod
+
+    def test_range_toplevel_frame(self):
+        self.maxDiff = None
+        self.assertSourceEqual(mod.currentframe, 1, None)
+
+    def test_range_traceback_toplevel_frame(self):
+        self.assertSourceEqual(mod.tb, 1, None)
+
 class TestDecorators(GetSourceBase):
     fodderFile = mod2
 
@@ -502,6 +513,20 @@
                                  'g', 'h', (3, (4, (5,))),
                                  '(a, b, c, d=3, (e, (f,))=(4, (5,)), *g, **h)')
 
+        with check_py3k_warnings(("tuple parameter unpacking has been removed",
+                                  SyntaxWarning),
+                                 quiet=True):
+            exec(textwrap.dedent('''
+                def spam_deref(a, b, c, d=3, (e, (f,))=(4, (5,)), *g, **h):
+                    def eggs():
+                        return a + b + c + d + e + f + g + h
+                    return eggs
+            '''))
+        self.assertArgSpecEquals(spam_deref,
+                                 ['a', 'b', 'c', 'd', ['e', ['f']]],
+                                 'g', 'h', (3, (4, (5,))),
+                                 '(a, b, c, d=3, (e, (f,))=(4, (5,)), *g, **h)')
+
     def test_getargspec_method(self):
         class A(object):
             def m(self):
@@ -515,9 +540,15 @@
             exec 'def sublistOfOne((foo,)): return 1'
             self.assertArgSpecEquals(sublistOfOne, [['foo']])
 
+            exec 'def sublistOfOne((foo,)): return (lambda: foo)'
+            self.assertArgSpecEquals(sublistOfOne, [['foo']])
+
             exec 'def fakeSublistOfOne((foo)): return 1'
             self.assertArgSpecEquals(fakeSublistOfOne, ['foo'])
 
+            exec 'def sublistOfOne((foo)): return (lambda: foo)'
+            self.assertArgSpecEquals(sublistOfOne, ['foo'])
+
 
     def _classify_test(self, newstyle):
         """Helper for testing that classify_class_attrs finds a bunch of
@@ -820,6 +851,23 @@
         self.assertEqualException(f3, '1, 2')
         self.assertEqualException(f3, '1, 2, a=1, b=2')
 
+
+class TestGetcallargsFunctionsCellVars(TestGetcallargsFunctions):
+
+    def makeCallable(self, signature):
+        """Create a function that returns its locals(), excluding the
+        autogenerated '.1', '.2', etc. tuple param names (if any)."""
+        with check_py3k_warnings(
+            ("tuple parameter unpacking has been removed", SyntaxWarning),
+            quiet=True):
+            code = """lambda %s: (
+                    (lambda: a+b+c+d+d+e+f+g+h), # make parameters cell vars
+                    dict(i for i in locals().items()
+                         if not is_tuplename(i[0]))
+                )[1]"""
+            return eval(code % signature, {'is_tuplename' : self.is_tuplename})
+
+
 class TestGetcallargsMethods(TestGetcallargsFunctions):
 
     def setUp(self):
@@ -857,8 +905,9 @@
     run_unittest(
         TestDecorators, TestRetrievingSourceCode, TestOneliners, TestBuggyCases,
         TestInterpreterStack, TestClassesAndFunctions, TestPredicates,
-        TestGetcallargsFunctions, TestGetcallargsMethods,
-        TestGetcallargsUnboundMethods)
+        TestGetcallargsFunctions, TestGetcallargsFunctionsCellVars,
+        TestGetcallargsMethods, TestGetcallargsUnboundMethods,
+        TestGettingSourceOfToplevelFrames)
 
 if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index 3d4da46..26c5dfe 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -396,6 +396,22 @@
         with self.open(support.TESTFN, "r") as f:
             self.assertRaises(TypeError, f.readline, 5.3)
 
+    def test_readline_nonsizeable(self):
+        # Issue #30061
+        # Crash when readline() returns an object without __len__
+        class R(self.IOBase):
+            def readline(self):
+                return None
+        self.assertRaises((TypeError, StopIteration), next, R())
+
+    def test_next_nonsizeable(self):
+        # Issue #30061
+        # Crash when next() returns an object without __len__
+        class R(self.IOBase):
+            def next(self):
+                return None
+        self.assertRaises(TypeError, R().readlines, 1)
+
     def test_raw_bytes_io(self):
         f = self.BytesIO()
         self.write_ops(f)
@@ -674,6 +690,16 @@
         self.assertEqual(stream.readinto(buffer), 5)
         self.assertEqual(buffer.tobytes(), b"12345")
 
+    def test_close_assert(self):
+        class R(self.IOBase):
+            def __setattr__(self, name, value):
+                pass
+            def flush(self):
+                raise OSError()
+        f = R()
+        # This would cause an assertion failure.
+        self.assertRaises(OSError, f.close)
+
 
 class CIOTest(IOTest):
 
@@ -1075,6 +1101,7 @@
     def test_garbage_collection(self):
         # C BufferedReader objects are collected.
         # The Python version has __del__, so it ends into gc.garbage instead
+        self.addCleanup(support.unlink, support.TESTFN)
         rawio = self.FileIO(support.TESTFN, "w+b")
         f = self.tp(rawio)
         f.f = f
@@ -1276,6 +1303,7 @@
 
     def test_truncate(self):
         # Truncate implicitly flushes the buffer.
+        self.addCleanup(support.unlink, support.TESTFN)
         with self.open(support.TESTFN, self.write_mode, buffering=0) as raw:
             bufio = self.tp(raw, 8)
             bufio.write(b"abcdef")
@@ -1382,6 +1410,7 @@
         # C BufferedWriter objects are collected, and collecting them flushes
         # all data to disk.
         # The Python version has __del__, so it ends into gc.garbage instead
+        self.addCleanup(support.unlink, support.TESTFN)
         rawio = self.FileIO(support.TESTFN, "w+b")
         f = self.tp(rawio)
         f.write(b"123xxx")
@@ -2650,6 +2679,22 @@
         t = self.TextIOWrapper(NonbytesStream('a'))
         self.assertEqual(t.read(), u'a')
 
+    def test_illegal_encoder(self):
+        # bpo-31271: A TypeError should be raised in case the return value of
+        # encoder's encode() is invalid.
+        class BadEncoder:
+            def encode(self, dummy):
+                return u'spam'
+        def get_bad_encoder(dummy):
+            return BadEncoder()
+        rot13 = codecs.lookup("rot13")
+        with support.swap_attr(rot13, '_is_text_encoding', True), \
+             support.swap_attr(rot13, 'incrementalencoder', get_bad_encoder):
+            t = io.TextIOWrapper(io.BytesIO(b'foo'), encoding="rot13")
+        with self.assertRaises(TypeError):
+            t.write('bar')
+            t.flush()
+
     def test_illegal_decoder(self):
         # Issue #17106
         # Bypass the early encoding check added in issue 20404
@@ -2686,6 +2731,37 @@
             #t = _make_illegal_wrapper()
             #self.assertRaises(TypeError, t.read)
 
+        # Issue 31243: calling read() while the return value of decoder's
+        # getstate() is invalid should neither crash the interpreter nor
+        # raise a SystemError.
+        def _make_very_illegal_wrapper(getstate_ret_val):
+            class BadDecoder:
+                def getstate(self):
+                    return getstate_ret_val
+            def _get_bad_decoder(dummy):
+                return BadDecoder()
+            quopri = codecs.lookup("quopri_codec")
+            with support.swap_attr(quopri, 'incrementaldecoder',
+                                   _get_bad_decoder):
+                return _make_illegal_wrapper()
+        t = _make_very_illegal_wrapper(42)
+        with self.maybeRaises(TypeError):
+            t.read(42)
+        t = _make_very_illegal_wrapper(())
+        with self.maybeRaises(TypeError):
+            t.read(42)
+
+    def test_issue25862(self):
+        # Assertion failures occurred in tell() after read() and write().
+        t = self.TextIOWrapper(self.BytesIO(b'test'), encoding='ascii')
+        t.read(1)
+        t.read()
+        t.tell()
+        t = self.TextIOWrapper(self.BytesIO(b'test'), encoding='ascii')
+        t.read(1)
+        t.write('x')
+        t.tell()
+
 
 class CTextIOWrapperTest(TextIOWrapperTest):
 
@@ -2933,6 +3009,7 @@
                 self.assertRaises(ValueError, f.readinto, bytearray(1024))
             self.assertRaises(ValueError, f.readline)
             self.assertRaises(ValueError, f.readlines)
+            self.assertRaises(ValueError, f.readlines, 1)
             self.assertRaises(ValueError, f.seek, 0)
             self.assertRaises(ValueError, f.tell)
             self.assertRaises(ValueError, f.truncate)
@@ -3093,7 +3170,6 @@
         try:
             wio = self.io.open(w, **fdopen_kwargs)
             t.start()
-            signal.alarm(1)
             # Fill the pipe enough that the write will be blocking.
             # It will be interrupted by the timer armed above.  Since the
             # other thread has read one byte, the low-level write will
@@ -3101,10 +3177,13 @@
             # The buffered IO layer must check for pending signal
             # handlers, which in this case will invoke alarm_interrupt().
             try:
+                signal.alarm(1)
                 with self.assertRaises(ZeroDivisionError):
                     wio.write(item * (support.PIPE_MAX_SIZE // len(item) + 1))
             finally:
+                signal.alarm(0)
                 t.join()
+
             # We got one byte, get another one and check that it isn't a
             # repeat of the first one.
             read_results.append(os.read(r, 1))
@@ -3153,6 +3232,7 @@
             if isinstance(exc, RuntimeError):
                 self.assertTrue(str(exc).startswith("reentrant call"), str(exc))
         finally:
+            signal.alarm(0)
             wio.close()
             os.close(r)
 
@@ -3181,6 +3261,7 @@
             # - third raw read() returns b"bar"
             self.assertEqual(decode(rio.read(6)), "foobar")
         finally:
+            signal.alarm(0)
             rio.close()
             os.close(w)
             os.close(r)
@@ -3242,6 +3323,7 @@
             self.assertIsNone(error[0])
             self.assertEqual(N, sum(len(x) for x in read_results))
         finally:
+            signal.alarm(0)
             write_finished = True
             os.close(w)
             os.close(r)
diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py
index 5672104..0427979 100644
--- a/Lib/test/test_itertools.py
+++ b/Lib/test/test_itertools.py
@@ -802,6 +802,7 @@
                 (10, 20, 3),
                 (10, 3, 20),
                 (10, 20),
+                (10, 10),
                 (10, 3),
                 (20,)
                 ]:
@@ -826,6 +827,10 @@
         self.assertEqual(list(islice(it, 3)), range(3))
         self.assertEqual(list(it), range(3, 10))
 
+        it = iter(range(10))
+        self.assertEqual(list(islice(it, 3, 3)), [])
+        self.assertEqual(list(it), range(3, 10))
+
         # Test invalid arguments
         self.assertRaises(TypeError, islice, xrange(10))
         self.assertRaises(TypeError, islice, xrange(10), 1, 2, 3, 4)
@@ -1084,6 +1089,48 @@
         self.assertEqual(list(takewhile(lambda x: x<5, [1,4,6,4,1])), [1,4])
 
 
+class TestPurePythonRoughEquivalents(unittest.TestCase):
+
+    @staticmethod
+    def islice(iterable, *args):
+        s = slice(*args)
+        start, stop, step = s.start or 0, s.stop or sys.maxint, s.step or 1
+        it = iter(xrange(start, stop, step))
+        try:
+            nexti = next(it)
+        except StopIteration:
+            # Consume *iterable* up to the *start* position.
+            for i, element in izip(xrange(start), iterable):
+                pass
+            return
+        try:
+            for i, element in enumerate(iterable):
+                if i == nexti:
+                    yield element
+                    nexti = next(it)
+        except StopIteration:
+            # Consume to *stop*.
+            for i, element in izip(xrange(i + 1, stop), iterable):
+                pass
+
+    def test_islice_recipe(self):
+        self.assertEqual(list(self.islice('ABCDEFG', 2)), list('AB'))
+        self.assertEqual(list(self.islice('ABCDEFG', 2, 4)), list('CD'))
+        self.assertEqual(list(self.islice('ABCDEFG', 2, None)), list('CDEFG'))
+        self.assertEqual(list(self.islice('ABCDEFG', 0, None, 2)), list('ACEG'))
+        # Test items consumed.
+        it = iter(xrange(10))
+        self.assertEqual(list(self.islice(it, 3)), range(3))
+        self.assertEqual(list(it), range(3, 10))
+        it = iter(xrange(10))
+        self.assertEqual(list(self.islice(it, 3, 3)), [])
+        self.assertEqual(list(it), range(3, 10))
+        # Test that slice finishes in predictable state.
+        c = count()
+        self.assertEqual(list(self.islice(c, 1, 3, 50)), [1])
+        self.assertEqual(next(c), 3)
+
+
 class TestGC(unittest.TestCase):
 
     def makecycle(self, iterator, container):
@@ -1465,6 +1512,39 @@
         self.assertRaises(AssertionError, list, cycle(gen1()))
         self.assertEqual(hist, [0,1])
 
+    def test_long_chain_of_empty_iterables(self):
+        # Make sure itertools.chain doesn't run into recursion limits when
+        # dealing with long chains of empty iterables. Even with a high
+        # number this would probably only fail in Py_DEBUG mode.
+        it = chain.from_iterable(() for unused in xrange(10000000))
+        with self.assertRaises(StopIteration):
+            next(it)
+
+    def test_issue30347_1(self):
+        def f(n):
+            if n == 5:
+                list(b)
+            return n != 6
+        for (k, b) in groupby(range(10), f):
+            list(b)  # shouldn't crash
+
+    def test_issue30347_2(self):
+        class K(object):
+            i = 0
+            def __init__(self, v):
+                pass
+            def __eq__(self, other):
+                K.i += 1
+                if K.i == 1:
+                    next(g, None)
+                return True
+            def __hash__(self):
+                return 1
+        g = next(groupby(range(10), K))[1]
+        for j in range(2):
+            next(g, None)  # shouldn't crash
+
+
 class SubclassWithKwargsTest(unittest.TestCase):
     def test_keywords_in_subclass(self):
         # count is not subclassable...
@@ -1544,6 +1624,17 @@
 ...     "Return function(0), function(1), ..."
 ...     return imap(function, count(start))
 
+>>> import collections
+>>> def consume(iterator, n=None):
+...     "Advance the iterator n-steps ahead. If n is None, consume entirely."
+...     # Use functions that consume iterators at C speed.
+...     if n is None:
+...         # feed the entire iterator into a zero-length deque
+...         collections.deque(iterator, maxlen=0)
+...     else:
+...         # advance to the empty slice starting at position n
+...         next(islice(iterator, n, n), None)
+
 >>> def nth(iterable, n, default=None):
 ...     "Returns the nth item or a default value"
 ...     return next(islice(iterable, n, None), default)
@@ -1645,6 +1736,14 @@
 >>> list(islice(tabulate(lambda x: 2*x), 4))
 [0, 2, 4, 6]
 
+>>> it = iter(xrange(10))
+>>> consume(it, 3)
+>>> next(it)
+3
+>>> consume(it)
+>>> next(it, 'Done')
+'Done'
+
 >>> nth('abcde', 3)
 'd'
 
@@ -1720,7 +1819,8 @@
 def test_main(verbose=None):
     test_classes = (TestBasicOps, TestVariousIteratorArgs, TestGC,
                     RegressionTests, LengthTransparency,
-                    SubclassWithKwargsTest, TestExamples)
+                    SubclassWithKwargsTest, TestExamples,
+                    TestPurePythonRoughEquivalents)
     test_support.run_unittest(*test_classes)
 
     # verify reference counting
diff --git a/Lib/test/test_kqueue.py b/Lib/test/test_kqueue.py
index 1bdfec8..b372203 100644
--- a/Lib/test/test_kqueue.py
+++ b/Lib/test/test_kqueue.py
@@ -36,9 +36,12 @@
         self.assertEqual(cmp(ev, other), -1)
         self.assertTrue(ev < other)
         self.assertTrue(other >= ev)
-        self.assertRaises(TypeError, cmp, ev, None)
-        self.assertRaises(TypeError, cmp, ev, 1)
-        self.assertRaises(TypeError, cmp, ev, "ev")
+        self.assertNotEqual(cmp(ev, None), 0)
+        self.assertNotEqual(cmp(ev, 1), 0)
+        self.assertNotEqual(cmp(ev, "ev"), 0)
+        self.assertEqual(cmp(ev, None), -cmp(None, ev))
+        self.assertEqual(cmp(ev, 1), -cmp(1, ev))
+        self.assertEqual(cmp(ev, "ev"), -cmp("ev", ev))
 
         ev = select.kevent(fd, select.KQ_FILTER_WRITE)
         self.assertEqual(ev.ident, fd)
@@ -205,6 +208,30 @@
         b.close()
         kq.close()
 
+    def test_issue30058(self):
+        # changelist must be an iterable
+        kq = select.kqueue()
+        a, b = socket.socketpair()
+        ev = select.kevent(a, select.KQ_FILTER_READ, select.KQ_EV_ADD | select.KQ_EV_ENABLE)
+
+        kq.control([ev], 0)
+        # not a list
+        kq.control((ev,), 0)
+        # __len__ is not consistent with __iter__
+        class BadList:
+            def __len__(self):
+                return 0
+            def __iter__(self):
+                for i in range(100):
+                    yield ev
+        kq.control(BadList(), 0)
+        # doesn't have __len__
+        kq.control(iter([ev]), 0)
+
+        a.close()
+        b.close()
+        kq.close()
+
 def test_main():
     test_support.run_unittest(TestKQueue)
 
diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py
index 6f7ecd1..35a52db 100644
--- a/Lib/test/test_linecache.py
+++ b/Lib/test/test_linecache.py
@@ -3,7 +3,7 @@
 import linecache
 import unittest
 import os.path
-from test import test_support as support
+from test import support
 
 
 FILENAME = linecache.__file__
@@ -11,7 +11,7 @@
 EMPTY = ''
 TESTS = 'inspect_fodder inspect_fodder2 mapping_tests'
 TESTS = TESTS.split()
-TEST_PATH = os.path.dirname(support.__file__)
+TEST_PATH = support.TEST_HOME_DIR
 MODULES = "linecache abc".split()
 MODULE_PATH = os.path.dirname(FILENAME)
 
diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py
index 563ddb1..6070882 100644
--- a/Lib/test/test_locale.py
+++ b/Lib/test/test_locale.py
@@ -425,7 +425,7 @@
 
     def test_valencia_modifier(self):
         self.check('ca_ES.UTF-8@valencia', 'ca_ES.UTF-8@valencia')
-        self.check('ca_ES@valencia', 'ca_ES.ISO8859-15@valencia')
+        self.check('ca_ES@valencia', 'ca_ES.UTF-8@valencia')
         self.check('ca@valencia', 'ca_ES.ISO8859-1@valencia')
 
     def test_devanagari_modifier(self):
diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py
index 2261bb8..f8db5d5 100644
--- a/Lib/test/test_mailbox.py
+++ b/Lib/test/test_mailbox.py
@@ -654,7 +654,7 @@
             hostname = hostname.replace(':', r'\072')
         pid = os.getpid()
         pattern = re.compile(r"(?P<time>\d+)\.M(?P<M>\d{1,6})P(?P<P>\d+)"
-                             r"Q(?P<Q>\d+)\.(?P<host>[^:/]+)")
+                             r"Q(?P<Q>\d+)\.(?P<host>[^:/]*)")
         previous_groups = None
         for x in xrange(repetitions):
             tmp_file = self._box._create_tmp()
diff --git a/Lib/test/test_marshal.py b/Lib/test/test_marshal.py
index 76d59ba..bbaa944 100644
--- a/Lib/test/test_marshal.py
+++ b/Lib/test/test_marshal.py
@@ -227,8 +227,22 @@
                 pass
 
     def test_loads_recursion(self):
-        s = 'c' + ('X' * 4*4) + '{' * 2**20
-        self.assertRaises(ValueError, marshal.loads, s)
+        def run_tests(N, check):
+            # (((...None...),),)
+            check(b'(\x01\x00\x00\x00' * N + b'N')
+            # [[[...None...]]]
+            check(b'[\x01\x00\x00\x00' * N + b'N')
+            # {None: {None: {None: ...None...}}}
+            check(b'{N' * N + b'N' + b'0' * N)
+            # frozenset([frozenset([frozenset([...None...])])])
+            check(b'>\x01\x00\x00\x00' * N + b'N')
+        # Check that the generated marshal data is valid and marshal.loads()
+        # works for moderately deep nesting
+        run_tests(100, marshal.loads)
+        # Very deeply nested structure shouldn't blow the stack
+        def check(s):
+            self.assertRaises(ValueError, marshal.loads, s)
+        run_tests(2**20, check)
 
     def test_recursion_limit(self):
         # Create a deeply nested structure.
diff --git a/Lib/test/test_memoryio.py b/Lib/test/test_memoryio.py
index 2c18ad7..d29f148 100644
--- a/Lib/test/test_memoryio.py
+++ b/Lib/test/test_memoryio.py
@@ -5,6 +5,7 @@
 
 from __future__ import unicode_literals
 from __future__ import print_function
+from __future__ import absolute_import
 
 import unittest
 from test import test_support as support
diff --git a/Lib/test/test_memoryview.py b/Lib/test/test_memoryview.py
index 4407af8..4269858 100644
--- a/Lib/test/test_memoryview.py
+++ b/Lib/test/test_memoryview.py
@@ -12,6 +12,7 @@
 import io
 import copy
 import pickle
+import warnings
 
 
 class AbstractMemoryTests:
@@ -359,15 +360,20 @@
 class OtherTest(unittest.TestCase):
     def test_copy(self):
         m = memoryview(b'abc')
-        with self.assertRaises(TypeError):
+        with self.assertRaises(TypeError), warnings.catch_warnings():
+            warnings.filterwarnings('ignore', ".*memoryview", DeprecationWarning)
             copy.copy(m)
 
-    # See issue #22995
-    ## def test_pickle(self):
-    ##     m = memoryview(b'abc')
-    ##     for proto in range(pickle.HIGHEST_PROTOCOL + 1):
-    ##         with self.assertRaises(TypeError):
-    ##             pickle.dumps(m, proto)
+    @test_support.cpython_only
+    def test_pickle(self):
+        m = memoryview(b'abc')
+        for proto in range(2):
+            with self.assertRaises(TypeError):
+                pickle.dumps(m, proto)
+        with test_support.check_py3k_warnings(
+                (".*memoryview", DeprecationWarning)):
+            pickle.dumps(m, 2)
+
 
 
 def test_main():
diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py
index 0350b3d..fc6d6e1 100644
--- a/Lib/test/test_mmap.py
+++ b/Lib/test/test_mmap.py
@@ -666,6 +666,13 @@
         self.assertRaises(ValueError, m.write_byte, 'b')
         self.assertRaises(ValueError, m.write, 'abc')
 
+    def test_concat_repeat_exception(self):
+        m = mmap.mmap(-1, 16)
+        with self.assertRaises(TypeError):
+            m + m
+        with self.assertRaises(TypeError):
+            m * 2
+
 
 class LargeMmapTests(unittest.TestCase):
 
diff --git a/Lib/test/test_multiprocessing.py b/Lib/test/test_multiprocessing.py
index c66727c..42ccbcd 100644
--- a/Lib/test/test_multiprocessing.py
+++ b/Lib/test/test_multiprocessing.py
@@ -14,17 +14,18 @@
 import random
 import logging
 import errno
+import weakref
 import test.script_helper
-from test import test_support
+from test import support
 from StringIO import StringIO
-_multiprocessing = test_support.import_module('_multiprocessing')
+_multiprocessing = support.import_module('_multiprocessing')
 # import threading after _multiprocessing to raise a more relevant error
 # message: "No module named _multiprocessing". _multiprocessing is not compiled
 # without thread support.
 import threading
 
 # Work around broken sem_open implementations
-test_support.import_module('multiprocessing.synchronize')
+support.import_module('multiprocessing.synchronize')
 
 import multiprocessing.dummy
 import multiprocessing.connection
@@ -174,6 +175,12 @@
 # Testcases
 #
 
+class DummyCallable(object):
+    def __call__(self, q, c):
+        assert isinstance(c, DummyCallable)
+        q.put(5)
+
+
 class _TestProcess(BaseTestCase):
 
     ALLOWED_TYPES = ('processes', 'threads')
@@ -334,8 +341,8 @@
         if self.TYPE == 'threads':
             self.skipTest('test not appropriate for {}'.format(self.TYPE))
 
-        testfn = test_support.TESTFN
-        self.addCleanup(test_support.unlink, testfn)
+        testfn = support.TESTFN
+        self.addCleanup(support.unlink, testfn)
 
         for reason, code in (([1, 2, 3], 1), ('ignore this', 1)):
             p = self.Process(target=self._test_sys_exit, args=(reason, testfn))
@@ -354,6 +361,18 @@
             p.join(5)
             self.assertEqual(p.exitcode, reason)
 
+    def test_lose_target_ref(self):
+        c = DummyCallable()
+        wr = weakref.ref(c)
+        q = self.Queue()
+        p = self.Process(target=c, args=(q, c))
+        del c
+        p.start()
+        p.join()
+        self.assertIs(wr(), None)
+        self.assertEqual(q.get(), 5)
+
+
 #
 #
 #
@@ -621,7 +640,7 @@
             p.join()
 
     def test_no_import_lock_contention(self):
-        with test_support.temp_cwd():
+        with support.temp_cwd():
             module_name = 'imported_by_an_imported_module'
             with open(module_name + '.py', 'w') as f:
                 f.write("""if 1:
@@ -633,13 +652,29 @@
                     q.close()
                 """)
 
-            with test_support.DirsOnSysPath(os.getcwd()):
+            with support.DirsOnSysPath(os.getcwd()):
                 try:
                     __import__(module_name)
                 except Queue.Empty:
                     self.fail("Probable regression on import lock contention;"
                               " see Issue #22853")
 
+    def test_queue_feeder_donot_stop_onexc(self):
+        # bpo-30414: verify feeder handles exceptions correctly
+        if self.TYPE != 'processes':
+            self.skipTest('test not appropriate for {}'.format(self.TYPE))
+
+        class NotSerializable(object):
+            def __reduce__(self):
+                raise AttributeError
+        with test.support.captured_stderr():
+            q = self.Queue()
+            q.put(NotSerializable())
+            q.put(True)
+            # bpo-30595: use a timeout of 1 second for slow buildbots
+            self.assertTrue(q.get(timeout=1.0))
+
+
 #
 #
 #
@@ -839,7 +874,13 @@
         cond.release()
 
         # check they have all woken
-        time.sleep(DELTA)
+        for i in range(10):
+            try:
+                if get_value(woken) == 6:
+                    break
+            except NotImplementedError:
+                break
+            time.sleep(DELTA)
         self.assertReturnsIfImplemented(6, get_value, woken)
 
         # check state is not mucked up
@@ -1123,6 +1164,19 @@
     time.sleep(wait)
     return x*x
 
+def identity(x):
+    return x
+
+class CountedObject(object):
+    n_instances = 0
+
+    def __new__(cls):
+        cls.n_instances += 1
+        return object.__new__(cls)
+
+    def __del__(self):
+        type(self).n_instances -= 1
+
 class SayWhenError(ValueError): pass
 
 def exception_throwing_generator(total, when):
@@ -1206,10 +1260,10 @@
         self.assertRaises(SayWhenError, it.next)
 
     def test_imap_unordered(self):
-        it = self.pool.imap_unordered(sqr, range(1000))
-        self.assertEqual(sorted(it), map(sqr, range(1000)))
+        it = self.pool.imap_unordered(sqr, range(100))
+        self.assertEqual(sorted(it), map(sqr, range(100)))
 
-        it = self.pool.imap_unordered(sqr, range(1000), chunksize=53)
+        it = self.pool.imap_unordered(sqr, range(1000), chunksize=100)
         self.assertEqual(sorted(it), map(sqr, range(1000)))
 
     def test_imap_unordered_handle_iterable_exception(self):
@@ -1268,6 +1322,21 @@
         p.close()
         p.join()
 
+    def test_release_task_refs(self):
+        # Issue #29861: task arguments and results should not be kept
+        # alive after we are done with them.
+        objs = list(CountedObject() for i in range(10))
+        refs = list(weakref.ref(o) for o in objs)
+        self.pool.map(identity, objs)
+
+        del objs
+        time.sleep(DELTA)  # let threaded cleanup code run
+        self.assertEqual(set(wr() for wr in refs), {None})
+        # With a process pool, copies of the objects are returned, check
+        # they were released too.
+        self.assertEqual(CountedObject.n_instances, 0)
+
+
 def unpickleable_result():
     return lambda: 42
 
@@ -1448,10 +1517,10 @@
               #'hall\xc3\xa5 v\xc3\xa4rlden'] # UTF-8
               ]
     result = values[:]
-    if test_support.have_unicode:
+    if support.have_unicode:
         #result[-1] = u'hall\xe5 v\xe4rlden'
-        uvalue = test_support.u(r'\u043f\u0440\u0438\u0432\u0456\u0442 '
-                                r'\u0441\u0432\u0456\u0442')
+        uvalue = support.u(r'\u043f\u0440\u0438\u0432\u0456\u0442 '
+                           r'\u0441\u0432\u0456\u0442')
         values.append(uvalue)
         result.append(uvalue)
 
@@ -1469,7 +1538,7 @@
         authkey = os.urandom(32)
 
         manager = QueueManager(
-            address=(test.test_support.HOST, 0), authkey=authkey, serializer=SERIALIZER
+            address=(test.support.HOST, 0), authkey=authkey, serializer=SERIALIZER
             )
         manager.start()
 
@@ -1506,7 +1575,7 @@
     def test_rapid_restart(self):
         authkey = os.urandom(32)
         manager = QueueManager(
-            address=(test.test_support.HOST, 0), authkey=authkey, serializer=SERIALIZER)
+            address=(test.support.HOST, 0), authkey=authkey, serializer=SERIALIZER)
         srvr = manager.get_server()
         addr = srvr.address
         # Close the connection.Listener socket which gets opened as a part
@@ -1515,12 +1584,13 @@
         manager.start()
 
         p = self.Process(target=self._putter, args=(manager.address, authkey))
-        p.daemon = True
         p.start()
+        p.join()
         queue = manager.get_queue()
         self.assertEqual(queue.get(), 'hello world')
         del queue
         manager.shutdown()
+
         manager = QueueManager(
             address=addr, authkey=authkey, serializer=SERIALIZER)
         manager.start()
@@ -1716,13 +1786,13 @@
         p = self.Process(target=self._writefd, args=(child_conn, b"foo"))
         p.daemon = True
         p.start()
-        with open(test_support.TESTFN, "wb") as f:
+        with open(support.TESTFN, "wb") as f:
             fd = f.fileno()
             if msvcrt:
                 fd = msvcrt.get_osfhandle(fd)
             reduction.send_handle(conn, fd, p.pid)
         p.join()
-        with open(test_support.TESTFN, "rb") as f:
+        with open(support.TESTFN, "rb") as f:
             self.assertEqual(f.read(), b"foo")
 
     @unittest.skipUnless(HAS_REDUCTION, "test needs multiprocessing.reduction")
@@ -1741,7 +1811,7 @@
         p = self.Process(target=self._writefd, args=(child_conn, b"bar", True))
         p.daemon = True
         p.start()
-        with open(test_support.TESTFN, "wb") as f:
+        with open(support.TESTFN, "wb") as f:
             fd = f.fileno()
             for newfd in range(256, MAXFD):
                 if not self._is_fd_assigned(newfd):
@@ -1754,7 +1824,7 @@
             finally:
                 os.close(newfd)
         p.join()
-        with open(test_support.TESTFN, "rb") as f:
+        with open(support.TESTFN, "rb") as f:
             self.assertEqual(f.read(), b"bar")
 
     @classmethod
@@ -2038,6 +2108,14 @@
 
     ALLOWED_TYPES = ('processes',)
 
+    def setUp(self):
+        self.registry_backup = util._finalizer_registry.copy()
+        util._finalizer_registry.clear()
+
+    def tearDown(self):
+        self.assertFalse(util._finalizer_registry)
+        util._finalizer_registry.update(self.registry_backup)
+
     @classmethod
     def _test_finalize(cls, conn):
         class Foo(object):
@@ -2087,6 +2165,59 @@
         result = [obj for obj in iter(conn.recv, 'STOP')]
         self.assertEqual(result, ['a', 'b', 'd10', 'd03', 'd02', 'd01', 'e'])
 
+    def test_thread_safety(self):
+        # bpo-24484: _run_finalizers() should be thread-safe
+        def cb():
+            pass
+
+        class Foo(object):
+            def __init__(self):
+                self.ref = self  # create reference cycle
+                # insert finalizer at random key
+                util.Finalize(self, cb, exitpriority=random.randint(1, 100))
+
+        finish = False
+        exc = []
+
+        def run_finalizers():
+            while not finish:
+                time.sleep(random.random() * 1e-1)
+                try:
+                    # A GC run will eventually happen during this,
+                    # collecting stale Foo's and mutating the registry
+                    util._run_finalizers()
+                except Exception as e:
+                    exc.append(e)
+
+        def make_finalizers():
+            d = {}
+            while not finish:
+                try:
+                    # Old Foo's get gradually replaced and later
+                    # collected by the GC (because of the cyclic ref)
+                    d[random.getrandbits(5)] = {Foo() for i in range(10)}
+                except Exception as e:
+                    exc.append(e)
+                    d.clear()
+
+        old_interval = sys.getcheckinterval()
+        old_threshold = gc.get_threshold()
+        try:
+            sys.setcheckinterval(10)
+            gc.set_threshold(5, 5, 5)
+            threads = [threading.Thread(target=run_finalizers),
+                       threading.Thread(target=make_finalizers)]
+            with support.start_threads(threads):
+                time.sleep(4.0)  # Wait a bit to trigger race condition
+                finish = True
+            if exc:
+                raise exc[0]
+        finally:
+            sys.setcheckinterval(old_interval)
+            gc.set_threshold(*old_threshold)
+            gc.collect()  # Collect remaining Foo's
+
+
 #
 # Test that from ... import * works for each module
 #
@@ -2504,7 +2635,7 @@
         flags = (tuple(sys.flags), grandchild_flags)
         print(json.dumps(flags))
 
-    @test_support.requires_unicode  # XXX json needs unicode support
+    @support.requires_unicode  # XXX json needs unicode support
     def test_flags(self):
         import json, subprocess
         # start child process using unusual flags
@@ -2550,6 +2681,9 @@
 
 class TestIgnoreEINTR(unittest.TestCase):
 
+    # Sending CONN_MAX_SIZE bytes into a multiprocessing pipe must block
+    CONN_MAX_SIZE = max(support.PIPE_MAX_SIZE, support.SOCK_MAX_SIZE)
+
     @classmethod
     def _test_ignore(cls, conn):
         def handler(signum, frame):
@@ -2558,7 +2692,7 @@
         conn.send('ready')
         x = conn.recv()
         conn.send(x)
-        conn.send_bytes(b'x'*(1024*1024))   # sending 1 MB should block
+        conn.send_bytes(b'x' * cls.CONN_MAX_SIZE)
 
     @unittest.skipUnless(hasattr(signal, 'SIGUSR1'), 'requires SIGUSR1')
     def test_ignore(self):
@@ -2577,7 +2711,7 @@
             self.assertEqual(conn.recv(), 1234)
             time.sleep(0.1)
             os.kill(p.pid, signal.SIGUSR1)
-            self.assertEqual(conn.recv_bytes(), b'x'*(1024*1024))
+            self.assertEqual(conn.recv_bytes(), b'x' * self.CONN_MAX_SIZE)
             time.sleep(0.1)
             p.join()
         finally:
@@ -2634,7 +2768,7 @@
     check_enough_semaphores()
 
     if run is None:
-        from test.test_support import run_unittest as run
+        from test.support import run_unittest as run
 
     util.get_temp_dir()     # creates temp directory for use by all processes
 
@@ -2659,7 +2793,7 @@
     # module during these tests is at least platform dependent and possibly
     # non-deterministic on any given platform. So we don't mind if the listed
     # warnings aren't actually raised.
-    with test_support.check_py3k_warnings(
+    with support.check_py3k_warnings(
             (".+__(get|set)slice__ has been removed", DeprecationWarning),
             (r"sys.exc_clear\(\) not supported", DeprecationWarning),
             quiet=True):
diff --git a/Lib/test/test_netrc.py b/Lib/test/test_netrc.py
index 4156c53..4d49a55 100644
--- a/Lib/test/test_netrc.py
+++ b/Lib/test/test_netrc.py
@@ -5,25 +5,29 @@
 
 class NetrcTestCase(unittest.TestCase):
 
-    def make_nrc(self, test_data):
+    def make_nrc(self, test_data, cleanup=True):
         test_data = textwrap.dedent(test_data)
         mode = 'w'
         if sys.platform != 'cygwin':
             mode += 't'
         with open(temp_filename, mode) as fp:
             fp.write(test_data)
-        self.addCleanup(os.unlink, temp_filename)
+        if cleanup:
+            self.addCleanup(os.unlink, temp_filename)
         return netrc.netrc(temp_filename)
 
     def test_default(self):
         nrc = self.make_nrc("""\
             machine host1.domain.com login log1 password pass1 account acct1
             default login log2 password pass2
-            """)
+            """, cleanup=False)
         self.assertEqual(nrc.hosts['host1.domain.com'],
                          ('log1', 'acct1', 'pass1'))
         self.assertEqual(nrc.hosts['default'], ('log2', None, 'pass2'))
 
+        nrc2 = self.make_nrc(nrc.__repr__(), cleanup=True)
+        self.assertEqual(nrc.hosts, nrc2.hosts)
+
     def test_macros(self):
         nrc = self.make_nrc("""\
             macdef macro1
diff --git a/Lib/test/test_ordered_dict.py b/Lib/test/test_ordered_dict.py
index 85e4841..17326c5 100644
--- a/Lib/test/test_ordered_dict.py
+++ b/Lib/test/test_ordered_dict.py
@@ -220,6 +220,19 @@
         self.assertEqual(repr(od),
             "OrderedDict([('a', None), ('b', None), ('c', None), ('x', ...)])")
 
+    def test_repr_recursive_values(self):
+        od = OrderedDict()
+        od[42] = od.viewvalues()
+        r = repr(od)
+        # Cannot perform a stronger test, as the contents of the repr
+        # are implementation-dependent.  All we can say is that we
+        # want a str result, not an exception of any sort.
+        self.assertIsInstance(r, str)
+        od[42] = od.viewitems()
+        r = repr(od)
+        # Again.
+        self.assertIsInstance(r, str)
+
     def test_setdefault(self):
         pairs = [('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)]
         shuffle(pairs)
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index b70e285..84e20e0 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -599,11 +599,32 @@
         assert_python_ok('-c', code)
 
 
-class ExecvpeTests(unittest.TestCase):
+class ExecTests(unittest.TestCase):
 
     def test_execvpe_with_bad_arglist(self):
         self.assertRaises(ValueError, os.execvpe, 'notepad', [], None)
 
+    def test_execve_invalid_env(self):
+        args = [sys.executable, '-c', 'pass']
+
+        # null character in the enviroment variable name
+        newenv = os.environ.copy()
+        newenv["FRUIT\0VEGETABLE"] = "cabbage"
+        with self.assertRaises(TypeError):
+            os.execve(args[0], args, newenv)
+
+        # null character in the enviroment variable value
+        newenv = os.environ.copy()
+        newenv["FRUIT"] = "orange\0VEGETABLE=cabbage"
+        with self.assertRaises(TypeError):
+            os.execve(args[0], args, newenv)
+
+        # equal character in the enviroment variable name
+        newenv = os.environ.copy()
+        newenv["FRUIT=ORANGE"] = "lemon"
+        with self.assertRaises(ValueError):
+            os.execve(args[0], args, newenv)
+
 
 @unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
 class Win32ErrorTests(unittest.TestCase):
@@ -879,6 +900,112 @@
         self._kill_with_event(signal.CTRL_BREAK_EVENT, "CTRL_BREAK_EVENT")
 
 
+@unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
+class Win32ListdirTests(unittest.TestCase):
+    """Test listdir on Windows."""
+
+    def setUp(self):
+        self.created_paths = []
+        for i in range(2):
+            dir_name = 'SUB%d' % i
+            dir_path = os.path.join(support.TESTFN, dir_name)
+            file_name = 'FILE%d' % i
+            file_path = os.path.join(support.TESTFN, file_name)
+            os.makedirs(dir_path)
+            with open(file_path, 'w') as f:
+                f.write("I'm %s and proud of it. Blame test_os.\n" % file_path)
+            self.created_paths.extend([dir_name, file_name])
+        self.created_paths.sort()
+
+    def tearDown(self):
+        shutil.rmtree(support.TESTFN)
+
+    def test_listdir_no_extended_path(self):
+        """Test when the path is not an "extended" path."""
+        # unicode
+        fs_encoding = sys.getfilesystemencoding()
+        self.assertEqual(
+                sorted(os.listdir(support.TESTFN.decode(fs_encoding))),
+                [path.decode(fs_encoding) for path in self.created_paths])
+
+        # bytes
+        self.assertEqual(
+                sorted(os.listdir(os.fsencode(support.TESTFN))),
+                self.created_paths)
+
+    def test_listdir_extended_path(self):
+        """Test when the path starts with '\\\\?\\'."""
+        # See: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath
+        # unicode
+        fs_encoding = sys.getfilesystemencoding()
+        path = u'\\\\?\\' + os.path.abspath(support.TESTFN.decode(fs_encoding))
+        self.assertEqual(
+                sorted(os.listdir(path)),
+                [path.decode(fs_encoding) for path in self.created_paths])
+
+        # bytes
+        path = b'\\\\?\\' + os.path.abspath(support.TESTFN)
+        self.assertEqual(
+                sorted(os.listdir(path)),
+                self.created_paths)
+
+
+class SpawnTests(unittest.TestCase):
+    def _test_invalid_env(self, spawn):
+        args = [sys.executable, '-c', 'pass']
+
+        # null character in the enviroment variable name
+        newenv = os.environ.copy()
+        newenv["FRUIT\0VEGETABLE"] = "cabbage"
+        try:
+            exitcode = spawn(os.P_WAIT, args[0], args, newenv)
+        except TypeError:
+            pass
+        else:
+            self.assertEqual(exitcode, 127)
+
+        # null character in the enviroment variable value
+        newenv = os.environ.copy()
+        newenv["FRUIT"] = "orange\0VEGETABLE=cabbage"
+        try:
+            exitcode = spawn(os.P_WAIT, args[0], args, newenv)
+        except TypeError:
+            pass
+        else:
+            self.assertEqual(exitcode, 127)
+
+        # equal character in the enviroment variable name
+        newenv = os.environ.copy()
+        newenv["FRUIT=ORANGE"] = "lemon"
+        try:
+            exitcode = spawn(os.P_WAIT, args[0], args, newenv)
+        except ValueError:
+            pass
+        else:
+            self.assertEqual(exitcode, 127)
+
+        # equal character in the enviroment variable value
+        filename = test_support.TESTFN
+        self.addCleanup(test_support.unlink, filename)
+        with open(filename, "w") as fp:
+            fp.write('import sys, os\n'
+                     'if os.getenv("FRUIT") != "orange=lemon":\n'
+                     '    raise AssertionError')
+        args = [sys.executable, filename]
+        newenv = os.environ.copy()
+        newenv["FRUIT"] = "orange=lemon"
+        exitcode = spawn(os.P_WAIT, args[0], args, newenv)
+        self.assertEqual(exitcode, 0)
+
+    @unittest.skipUnless(hasattr(os, 'spawnve'), 'test needs os.spawnve()')
+    def test_spawnve_invalid_env(self):
+        self._test_invalid_env(os.spawnve)
+
+    @unittest.skipUnless(hasattr(os, 'spawnvpe'), 'test needs os.spawnvpe()')
+    def test_spawnvpe_invalid_env(self):
+        self._test_invalid_env(os.spawnvpe)
+
+
 def test_main():
     test_support.run_unittest(
         FileTests,
@@ -890,11 +1017,12 @@
         DevNullTests,
         URandomTests,
         URandomFDTests,
-        ExecvpeTests,
+        ExecTests,
         Win32ErrorTests,
         TestInvalidFD,
         PosixUidGidTests,
-        Win32KillTests
+        Win32KillTests,
+        SpawnTests,
     )
 
 if __name__ == "__main__":
diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py
index 65a762c..73974a9 100644
--- a/Lib/test/test_parser.py
+++ b/Lib/test/test_parser.py
@@ -1,4 +1,6 @@
+import copy
 import parser
+import pickle
 import unittest
 import sys
 import struct
@@ -261,21 +263,19 @@
         # An absolutely minimal test of position information.  Better
         # tests would be a big project.
         code = "def f(x):\n    return x + 1"
-        st1 = parser.suite(code)
-        st2 = st1.totuple(line_info=1, col_info=1)
+        st = parser.suite(code)
 
         def walk(tree):
             node_type = tree[0]
             next = tree[1]
-            if isinstance(next, tuple):
+            if isinstance(next, (tuple, list)):
                 for elt in tree[1:]:
                     for x in walk(elt):
                         yield x
             else:
                 yield tree
 
-        terminals = list(walk(st2))
-        self.assertEqual([
+        expected = [
             (1, 'def', 1, 0),
             (1, 'f', 1, 4),
             (7, '(', 1, 5),
@@ -291,8 +291,25 @@
             (4, '', 2, 16),
             (6, '', 2, -1),
             (4, '', 2, -1),
-            (0, '', 2, -1)],
-                         terminals)
+            (0, '', 2, -1),
+        ]
+
+        self.assertEqual(list(walk(st.totuple(line_info=True, col_info=True))),
+                         expected)
+        self.assertEqual(list(walk(st.totuple())),
+                         [(t, n) for t, n, l, c in expected])
+        self.assertEqual(list(walk(st.totuple(line_info=True))),
+                         [(t, n, l) for t, n, l, c in expected])
+        self.assertEqual(list(walk(st.totuple(col_info=True))),
+                         [(t, n, c) for t, n, l, c in expected])
+        self.assertEqual(list(walk(st.tolist(line_info=True, col_info=True))),
+                         [list(x) for x in expected])
+        self.assertEqual(list(walk(parser.st2tuple(st, line_info=True,
+                                                   col_info=True))),
+                         expected)
+        self.assertEqual(list(walk(parser.st2list(st, line_info=True,
+                                                  col_info=True))),
+                         [list(x) for x in expected])
 
 
 #
@@ -314,6 +331,52 @@
         # not even remotely valid:
         self.check_bad_tree((1, 2, 3), "<junk>")
 
+    def test_illegal_terminal(self):
+        tree = \
+            (257,
+             (267,
+              (268,
+               (269,
+                (274,
+                 (1,))),
+               (4, ''))),
+             (4, ''),
+             (0, ''))
+        self.check_bad_tree(tree, "too small items in terminal node")
+        tree = \
+            (257,
+             (267,
+              (268,
+               (269,
+                (274,
+                 (1, u'pass'))),
+               (4, ''))),
+             (4, ''),
+             (0, ''))
+        self.check_bad_tree(tree, "non-string second item in terminal node")
+        tree = \
+            (257,
+             (267,
+              (268,
+               (269,
+                (274,
+                 (1, 'pass', '0', 0))),
+               (4, ''))),
+             (4, ''),
+             (0, ''))
+        self.check_bad_tree(tree, "non-integer third item in terminal node")
+        tree = \
+            (257,
+             (267,
+              (268,
+               (269,
+                (274,
+                 (1, 'pass', 0, 0))),
+               (4, ''))),
+             (4, ''),
+             (0, ''))
+        self.check_bad_tree(tree, "too many items in terminal node")
+
     def test_illegal_yield_1(self):
         # Illegal yield statement: def f(): return 1; yield 1
         tree = \
@@ -541,6 +604,18 @@
              (4, ''), (0, ''))
         self.check_bad_tree(tree, "from import a")
 
+    def test_illegal_encoding(self):
+        # Illegal encoding declaration
+        tree = \
+            (339,
+             (257, (0, '')))
+        self.check_bad_tree(tree, "missed encoding")
+        tree = \
+            (339,
+             (257, (0, '')),
+              u'iso-8859-1')
+        self.check_bad_tree(tree, "non-string encoding")
+
 
 class CompileTestCase(unittest.TestCase):
 
@@ -602,6 +677,21 @@
 class STObjectTestCase(unittest.TestCase):
     """Test operations on ST objects themselves"""
 
+    def test_copy_pickle(self):
+        sts = [
+            parser.expr('2 + 3'),
+            parser.suite('x = 2; y = x + 3'),
+            parser.expr('list(x**3 for x in range(20))')
+        ]
+        for st in sts:
+            st_copy = copy.copy(st)
+            self.assertEqual(st_copy.totuple(), st.totuple())
+            st_copy = copy.deepcopy(st)
+            self.assertEqual(st_copy.totuple(), st.totuple())
+            for proto in range(pickle.HIGHEST_PROTOCOL+1):
+                st_copy = pickle.loads(pickle.dumps(st, proto))
+                self.assertEqual(st_copy.totuple(), st.totuple())
+
     check_sizeof = support.check_sizeof
 
     @support.cpython_only
diff --git a/Lib/test/test_pkg.py b/Lib/test/test_pkg.py
index 5f1659b..ff05dce 100644
--- a/Lib/test/test_pkg.py
+++ b/Lib/test/test_pkg.py
@@ -134,7 +134,7 @@
 
         s = """
             from t2 import *
-            self.assertTrue(dir(), ['self', 'sub'])
+            self.assertEqual(dir(), ['self', 'sub'])
             """
         self.run_code(s)
 
diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py
index f754550..542763d 100644
--- a/Lib/test/test_platform.py
+++ b/Lib/test/test_platform.py
@@ -4,7 +4,7 @@
 import platform
 import subprocess
 
-from test import test_support
+from test import support
 
 class PlatformTest(unittest.TestCase):
     def test_architecture(self):
@@ -18,7 +18,7 @@
                 p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
                 return p.communicate()
             real = os.path.realpath(sys.executable)
-            link = os.path.abspath(test_support.TESTFN)
+            link = os.path.abspath(support.TESTFN)
             os.symlink(real, link)
             try:
                 self.assertEqual(get(real), get(link))
@@ -163,7 +163,7 @@
         # using it, per
         # http://blogs.msdn.com/david.wang/archive/2006/03/26/HOWTO-Detect-Process-Bitness.aspx
         try:
-            with test_support.EnvironmentVarGuard() as environ:
+            with support.EnvironmentVarGuard() as environ:
                 if 'PROCESSOR_ARCHITEW6432' in environ:
                     del environ['PROCESSOR_ARCHITEW6432']
                 environ['PROCESSOR_ARCHITECTURE'] = 'foo'
@@ -247,7 +247,6 @@
         res = platform.dist()
 
     def test_libc_ver(self):
-        import os
         if os.path.isdir(sys.executable) and \
            os.path.exists(sys.executable+'.exe'):
             # Cygwin horror
@@ -256,6 +255,13 @@
             executable = sys.executable
         res = platform.libc_ver(executable)
 
+        self.addCleanup(support.unlink, support.TESTFN)
+        with open(support.TESTFN, 'wb') as f:
+            f.write(b'x'*(16384-10))
+            f.write(b'GLIBC_1.23.4\0GLIBC_1.9\0GLIBC_1.21\0')
+        self.assertEqual(platform.libc_ver(support.TESTFN),
+                         ('glibc', '1.23.4'))
+
     def test_parse_release_file(self):
 
         for input, output in (
@@ -275,7 +281,7 @@
 
 
 def test_main():
-    test_support.run_unittest(
+    support.run_unittest(
         PlatformTest
     )
 
diff --git a/Lib/test/test_poll.py b/Lib/test/test_poll.py
index 1e195ed..7ad693d 100644
--- a/Lib/test/test_poll.py
+++ b/Lib/test/test_poll.py
@@ -205,6 +205,28 @@
             os.write(w, b'spam')
             t.join()
 
+    @unittest.skipUnless(threading, 'Threading required for this test.')
+    @reap_threads
+    def test_poll_blocks_with_negative_ms(self):
+        for timeout_ms in [None, -1000, -1, -1.0]:
+            # Create two file descriptors. This will be used to unlock
+            # the blocking call to poll.poll inside the thread
+            r, w = os.pipe()
+            pollster = select.poll()
+            pollster.register(r, select.POLLIN)
+
+            poll_thread = threading.Thread(target=pollster.poll, args=(timeout_ms,))
+            poll_thread.start()
+            poll_thread.join(timeout=0.1)
+            self.assertTrue(poll_thread.is_alive())
+
+            # Write to the pipe so pollster.poll unblocks and the thread ends.
+            os.write(w, b'spam')
+            poll_thread.join()
+            self.assertFalse(poll_thread.is_alive())
+            os.close(r)
+            os.close(w)
+
 
 def test_main():
     run_unittest(PollTests)
diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py
index 23d6887..d214375 100644
--- a/Lib/test/test_poplib.py
+++ b/Lib/test/test_poplib.py
@@ -211,6 +211,16 @@
     def test_rpop(self):
         self.assertOK(self.client.rpop('foo'))
 
+    def test_apop_REDOS(self):
+        # Replace welcome with very long evil welcome.
+        # NB The upper bound on welcome length is currently 2048.
+        # At this length, evil input makes each apop call take
+        # on the order of milliseconds instead of microseconds.
+        evil_welcome = b'+OK' + (b'<' * 1000000)
+        with test_support.swap_attr(self.client, 'welcome', evil_welcome):
+            # The evil welcome is invalid, so apop should throw.
+            self.assertRaises(poplib.error_proto, self.client.apop, 'a', 'kb')
+
     def test_top(self):
         expected =  ('+OK 116 bytes',
                      ['From: postmaster@python.org', 'Content-Type: text/plain',
diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py
index e0c84f2..c4283b6 100644
--- a/Lib/test/test_posix.py
+++ b/Lib/test/test_posix.py
@@ -199,6 +199,7 @@
     def test_fdopen_directory(self):
         try:
             fd = os.open('.', os.O_RDONLY)
+            self.addCleanup(os.close, fd)
         except OSError as e:
             self.assertEqual(e.errno, errno.EACCES)
             self.skipTest("system cannot open directories")
@@ -287,6 +288,10 @@
         self.assertRaises(TypeError, posix.minor)
         self.assertRaises((ValueError, OverflowError), posix.minor, -1)
 
+        if sys.platform.startswith('freebsd') and dev >= 0x100000000:
+            self.skipTest("bpo-31044: on FreeBSD CURRENT, minor() truncates "
+                          "64-bit dev to 32-bit")
+
         self.assertEqual(posix.makedev(major, minor), dev)
         self.assertEqual(posix.makedev(int(major), int(minor)), dev)
         self.assertEqual(posix.makedev(long(major), long(minor)), dev)
@@ -504,6 +509,15 @@
         finally:
             posix.lchflags(_DUMMY_SYMLINK, dummy_symlink_st.st_flags)
 
+    @unittest.skipUnless(hasattr(os, "putenv"), "requires os.putenv()")
+    def test_putenv(self):
+        with self.assertRaises(TypeError):
+            os.putenv('FRUIT\0VEGETABLE', 'cabbage')
+        with self.assertRaises(TypeError):
+            os.putenv('FRUIT', 'orange\0VEGETABLE=cabbage')
+        with self.assertRaises(ValueError):
+            os.putenv('FRUIT=ORANGE', 'lemon')
+
     @unittest.skipUnless(hasattr(posix, 'getcwd'),
                          'test needs posix.getcwd()')
     def test_getcwd_long_pathnames(self):
diff --git a/Lib/test/test_pty.py b/Lib/test/test_pty.py
index bec38c4..0eb31fd 100644
--- a/Lib/test/test_pty.py
+++ b/Lib/test/test_pty.py
@@ -11,6 +11,7 @@
 import select
 import signal
 import socket
+import io # readline
 import unittest
 
 TEST_STRING_1 = "I wish to buy a fish license.\n"
@@ -24,6 +25,16 @@
         pass
 
 
+# Note that os.read() is nondeterministic so we need to be very careful
+# to make the test suite deterministic.  A normal call to os.read() may
+# give us less than expected.
+#
+# Beware, on my Linux system, if I put 'foo\n' into a terminal fd, I get
+# back 'foo\r\n' at the other end.  The behavior depends on the termios
+# setting.  The newline translation may be OS-specific.  To make the
+# test suite deterministic and OS-independent, the functions _readline
+# and normalize_output can be used.
+
 def normalize_output(data):
     # Some operating systems do conversions on newline.  We could possibly
     # fix that by doing the appropriate termios.tcsetattr()s.  I couldn't
@@ -45,6 +56,12 @@
 
     return data
 
+def _readline(fd):
+    """Read one line.  May block forever if no newline is read."""
+    reader = io.FileIO(fd, mode='rb', closefd=False)
+    return reader.readline()
+
+
 
 # Marginal testing of pty suite. Cannot do extensive 'do or fail' testing
 # because pty code is not too portable.
@@ -53,14 +70,11 @@
     def setUp(self):
         # isatty() and close() can hang on some platforms.  Set an alarm
         # before running the test to make sure we don't hang forever.
-        self.old_alarm = signal.signal(signal.SIGALRM, self.handle_sig)
+        old_alarm = signal.signal(signal.SIGALRM, self.handle_sig)
+        self.addCleanup(signal.signal, signal.SIGALRM, old_alarm)
+        self.addCleanup(signal.alarm, 0)
         signal.alarm(10)
 
-    def tearDown(self):
-        # remove alarm, restore old alarm handler
-        signal.alarm(0)
-        signal.signal(signal.SIGALRM, self.old_alarm)
-
     def handle_sig(self, sig, frame):
         self.fail("isatty hung")
 
@@ -97,14 +111,14 @@
 
         debug("Writing to slave_fd")
         os.write(slave_fd, TEST_STRING_1)
-        s1 = os.read(master_fd, 1024)
+        s1 = _readline(master_fd)
         self.assertEqual('I wish to buy a fish license.\n',
                          normalize_output(s1))
 
         debug("Writing chunked output")
         os.write(slave_fd, TEST_STRING_2[:5])
         os.write(slave_fd, TEST_STRING_2[5:])
-        s2 = os.read(master_fd, 1024)
+        s2 = _readline(master_fd)
         self.assertEqual('For my pet fish, Eric.\n', normalize_output(s2))
 
         os.close(slave_fd)
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
index 7188d0a..83aad0b 100644
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -257,7 +257,7 @@
 def get_pydoc_link(module):
     "Returns a documentation web link of a module"
     dirname = os.path.dirname
-    basedir = dirname(dirname(__file__))
+    basedir = dirname(dirname(os.path.realpath(__file__)))
     doc = pydoc.TextDoc()
     loc = doc.getdocloc(module, basedir=basedir)
     return loc
diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py
index e4876fd..8a6d172 100644
--- a/Lib/test/test_random.py
+++ b/Lib/test/test_random.py
@@ -307,10 +307,27 @@
 class MersenneTwister_TestBasicOps(TestBasicOps):
     gen = random.Random()
 
+    @test_support.cpython_only
+    def test_bug_31478(self):
+        # _random.Random.seed() should ignore the __abs__() method of a
+        # long/int subclass argument.
+        class BadInt(int):
+            def __abs__(self):
+                1/0.0
+        class BadLong(long):
+            def __abs__(self):
+                1/0.0
+        self.gen.seed(42)
+        expected_value = self.gen.random()
+        for seed_arg in [42L, BadInt(42), BadLong(42)]:
+            self.gen.seed(seed_arg)
+            self.assertEqual(self.gen.random(), expected_value)
+
     def test_setstate_first_arg(self):
         self.assertRaises(ValueError, self.gen.setstate, (1, None, None))
 
     def test_setstate_middle_arg(self):
+        start_state = self.gen.getstate()
         # Wrong type, s/b tuple
         self.assertRaises(TypeError, self.gen.setstate, (2, None, None))
         # Wrong length, s/b 625
@@ -324,6 +341,10 @@
             self.gen.setstate((2, (1,)*624+(625,), None))
         with self.assertRaises((ValueError, OverflowError)):
             self.gen.setstate((2, (1,)*624+(-1,), None))
+        # Failed calls to setstate() should not have changed the state.
+        bits100 = self.gen.getrandbits(100)
+        self.gen.setstate(start_state)
+        self.assertEqual(self.gen.getrandbits(100), bits100)
 
     def test_referenceImplementation(self):
         # Compare the python implementation with results from the original
diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py
index 5725a99..ae31484 100644
--- a/Lib/test/test_re.py
+++ b/Lib/test/test_re.py
@@ -3,7 +3,7 @@
     verbose, run_unittest, import_module,
     precisionbigmemtest, _2G, cpython_only,
     captured_stdout, have_unicode, requires_unicode, u,
-    check_warnings)
+    check_warnings, check_py3k_warnings)
 import locale
 import re
 from re import Scanner
@@ -58,7 +58,7 @@
 
         s = r"\1\1"
         self.assertEqual(re.sub('(.)', s, 'x'), 'xx')
-        self.assertEqual(re.sub('(.)', re.escape(s), 'x'), s)
+        self.assertEqual(re.sub('(.)', s.replace('\\', r'\\'), 'x'), s)
         self.assertEqual(re.sub('(.)', lambda m: s, 'x'), s)
 
         self.assertEqual(re.sub('(?P<a>x)', '\g<a>\g<a>', 'xx'), 'xxxx')
@@ -66,11 +66,13 @@
         self.assertEqual(re.sub('(?P<unk>x)', '\g<unk>\g<unk>', 'xx'), 'xxxx')
         self.assertEqual(re.sub('(?P<unk>x)', '\g<1>\g<1>', 'xx'), 'xxxx')
 
-        self.assertEqual(re.sub('a',r'\t\n\v\r\f\a\b\B\Z\a\A\w\W\s\S\d\D','a'),
-                         '\t\n\v\r\f\a\b\\B\\Z\a\\A\\w\\W\\s\\S\\d\\D')
-        self.assertEqual(re.sub('a', '\t\n\v\r\f\a', 'a'), '\t\n\v\r\f\a')
-        self.assertEqual(re.sub('a', '\t\n\v\r\f\a', 'a'),
-                         (chr(9)+chr(10)+chr(11)+chr(13)+chr(12)+chr(7)))
+        self.assertEqual(re.sub('a', r'\t\n\v\r\f\a\b', 'a'), '\t\n\v\r\f\a\b')
+        self.assertEqual(re.sub('a', '\t\n\v\r\f\a\b', 'a'), '\t\n\v\r\f\a\b')
+        self.assertEqual(re.sub('a', '\t\n\v\r\f\a\b', 'a'),
+                         (chr(9)+chr(10)+chr(11)+chr(13)+chr(12)+chr(7)+chr(8)))
+        for c in 'cdehijklmopqsuwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ':
+            with check_py3k_warnings():
+                self.assertEqual(re.sub('a', '\\' + c, 'a'), '\\' + c)
 
         self.assertEqual(re.sub('^\s*', 'X', 'test'), 'Xtest')
 
@@ -223,11 +225,11 @@
 
     def test_re_split(self):
         self.assertEqual(re.split(":", ":a:b::c"), ['', 'a', 'b', '', 'c'])
-        self.assertEqual(re.split(":*", ":a:b::c"), ['', 'a', 'b', 'c'])
-        self.assertEqual(re.split("(:*)", ":a:b::c"),
+        self.assertEqual(re.split(":+", ":a:b::c"), ['', 'a', 'b', 'c'])
+        self.assertEqual(re.split("(:+)", ":a:b::c"),
                          ['', ':', 'a', ':', 'b', '::', 'c'])
-        self.assertEqual(re.split("(?::*)", ":a:b::c"), ['', 'a', 'b', 'c'])
-        self.assertEqual(re.split("(:)*", ":a:b::c"),
+        self.assertEqual(re.split("(?::+)", ":a:b::c"), ['', 'a', 'b', 'c'])
+        self.assertEqual(re.split("(:)+", ":a:b::c"),
                          ['', ':', 'a', ':', 'b', ':', 'c'])
         self.assertEqual(re.split("([b:]+)", ":a:b::c"),
                          ['', ':', 'a', ':b::', 'c'])
@@ -237,13 +239,34 @@
         self.assertEqual(re.split("(?:b)|(?::+)", ":a:b::c"),
                          ['', 'a', '', '', 'c'])
 
+        for sep, expected in [
+            (':*', ['', 'a', 'b', 'c']),
+            ('(?::*)', ['', 'a', 'b', 'c']),
+            ('(:*)', ['', ':', 'a', ':', 'b', '::', 'c']),
+            ('(:)*', ['', ':', 'a', ':', 'b', ':', 'c']),
+        ]:
+            with check_py3k_warnings(('', FutureWarning)):
+                self.assertEqual(re.split(sep, ':a:b::c'), expected)
+
+        for sep, expected in [
+            ('', [':a:b::c']),
+            (r'\b', [':a:b::c']),
+            (r'(?=:)', [':a:b::c']),
+            (r'(?<=:)', [':a:b::c']),
+        ]:
+            with check_py3k_warnings():
+                self.assertEqual(re.split(sep, ':a:b::c'), expected)
+
     def test_qualified_re_split(self):
         self.assertEqual(re.split(":", ":a:b::c", 2), ['', 'a', 'b::c'])
         self.assertEqual(re.split(':', 'a:b:c:d', 2), ['a', 'b', 'c:d'])
         self.assertEqual(re.split("(:)", ":a:b::c", 2),
                          ['', ':', 'a', ':', 'b::c'])
-        self.assertEqual(re.split("(:*)", ":a:b::c", 2),
+        self.assertEqual(re.split("(:+)", ":a:b::c", 2),
                          ['', ':', 'a', ':', 'b::c'])
+        with check_py3k_warnings(('', FutureWarning)):
+            self.assertEqual(re.split("(:*)", ":a:b::c", maxsplit=2),
+                             ['', ':', 'a', ':', 'b::c'])
 
     def test_re_findall(self):
         self.assertEqual(re.findall(":+", "abc"), [])
@@ -404,6 +427,29 @@
             self.assertEqual(re.search(r"\d\D\w\W\s\S",
                                        "1aa! a", re.UNICODE).group(0), "1aa! a")
 
+    def test_other_escapes(self):
+        self.assertRaises(re.error, re.compile, "\\")
+        self.assertEqual(re.match(r"\(", '(').group(), '(')
+        self.assertIsNone(re.match(r"\(", ')'))
+        self.assertEqual(re.match(r"\\", '\\').group(), '\\')
+        self.assertEqual(re.match(r"[\]]", ']').group(), ']')
+        self.assertIsNone(re.match(r"[\]]", '['))
+        self.assertEqual(re.match(r"[a\-c]", '-').group(), '-')
+        self.assertIsNone(re.match(r"[a\-c]", 'b'))
+        self.assertEqual(re.match(r"[\^a]+", 'a^').group(), 'a^')
+        self.assertIsNone(re.match(r"[\^a]+", 'b'))
+        re.purge()  # for warnings
+        for c in 'ceghijklmopquyzCEFGHIJKLMNOPQRTUVXY':
+            warn = FutureWarning if c in 'Uu' else DeprecationWarning
+            with check_py3k_warnings(('', warn)):
+                self.assertEqual(re.match('\\%c$' % c, c).group(), c)
+                self.assertIsNone(re.match('\\%c' % c, 'a'))
+        for c in 'ceghijklmopquyzABCEFGHIJKLMNOPQRTUVXYZ':
+            warn = FutureWarning if c in 'Uu' else DeprecationWarning
+            with check_py3k_warnings(('', warn)):
+                self.assertEqual(re.match('[\\%c]$' % c, c).group(), c)
+                self.assertIsNone(re.match('[\\%c]' % c, 'a'))
+
     def test_string_boundaries(self):
         # See http://bugs.python.org/issue10713
         self.assertEqual(re.search(r"\b(abc)\b", "abc").group(1),
@@ -931,6 +977,19 @@
         self.assertTrue(re.match('(?ixu) ' + upper_char, lower_char))
         self.assertTrue(re.match('(?ixu) ' + lower_char, upper_char))
 
+        # Incompatibilities
+        re.purge()
+        with check_py3k_warnings():
+            re.compile('', re.LOCALE|re.UNICODE)
+        with check_py3k_warnings():
+            re.compile('(?L)', re.UNICODE)
+        with check_py3k_warnings():
+            re.compile('(?u)', re.LOCALE)
+        with check_py3k_warnings():
+            re.compile('(?Lu)')
+        with check_py3k_warnings():
+            re.compile('(?uL)')
+
     def test_dollar_matches_twice(self):
         "$ matches the end of string, and just before the terminating \n"
         pattern = re.compile('$')
@@ -967,8 +1026,9 @@
     def test_bug_13899(self):
         # Issue #13899: re pattern r"[\A]" should work like "A" but matches
         # nothing. Ditto B and Z.
-        self.assertEqual(re.findall(r'[\A\B\b\C\Z]', 'AB\bCZ'),
-                         ['A', 'B', '\b', 'C', 'Z'])
+        with check_py3k_warnings():
+            self.assertEqual(re.findall(r'[\A\B\b\C\Z]', 'AB\bCZ'),
+                             ['A', 'B', '\b', 'C', 'Z'])
 
     @precisionbigmemtest(size=_2G, memuse=1)
     def test_large_search(self, size):
@@ -1261,7 +1321,11 @@
 
 def test_main():
     run_unittest(ReTests)
-    run_re_tests()
+    deprecations = [
+        ('bad escape', DeprecationWarning),
+    ]
+    with check_py3k_warnings(*deprecations):
+        run_re_tests()
 
 if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
new file mode 100644
index 0000000..a459504
--- /dev/null
+++ b/Lib/test/test_regrtest.py
@@ -0,0 +1,717 @@
+"""
+Tests of regrtest.py.
+
+Note: test_regrtest cannot be run twice in parallel.
+"""
+from __future__ import print_function
+
+import collections
+import errno
+import os.path
+import platform
+import re
+import subprocess
+import sys
+import sysconfig
+import tempfile
+import textwrap
+import unittest
+from test import support
+# Use utils alias to use the same code for TestUtils in master and 2.7 branches
+import regrtest as utils
+
+
+Py_DEBUG = hasattr(sys, 'getobjects')
+ROOT_DIR = os.path.join(os.path.dirname(__file__), '..', '..')
+ROOT_DIR = os.path.abspath(os.path.normpath(ROOT_DIR))
+
+TEST_INTERRUPTED = textwrap.dedent("""
+    from signal import SIGINT
+    try:
+        from _testcapi import raise_signal
+        raise_signal(SIGINT)
+    except ImportError:
+        import os
+        os.kill(os.getpid(), SIGINT)
+    """)
+
+
+SubprocessRun = collections.namedtuple('SubprocessRun',
+                                       'returncode stdout stderr')
+
+
+class BaseTestCase(unittest.TestCase):
+    TEST_UNIQUE_ID = 1
+    TESTNAME_PREFIX = 'test_regrtest_'
+    TESTNAME_REGEX = r'test_[a-zA-Z0-9_]+'
+
+    def setUp(self):
+        self.testdir = os.path.realpath(os.path.dirname(__file__))
+
+        self.tmptestdir = tempfile.mkdtemp()
+        self.addCleanup(support.rmtree, self.tmptestdir)
+
+    def create_test(self, name=None, code=''):
+        if not name:
+            name = 'noop%s' % BaseTestCase.TEST_UNIQUE_ID
+            BaseTestCase.TEST_UNIQUE_ID += 1
+
+        # test_regrtest cannot be run twice in parallel because
+        # of setUp() and create_test()
+        name = self.TESTNAME_PREFIX + name
+        path = os.path.join(self.tmptestdir, name + '.py')
+
+        self.addCleanup(support.unlink, path)
+        # Use O_EXCL to ensure that we do not override existing tests
+        try:
+            fd = os.open(path, os.O_WRONLY | os.O_CREAT | os.O_EXCL)
+        except OSError as exc:
+            if (exc.errno in (errno.EACCES, errno.EPERM)
+               and not sysconfig.is_python_build()):
+                self.skipTest("cannot write %s: %s" % (path, exc))
+            else:
+                raise
+        else:
+            with os.fdopen(fd, 'w') as fp:
+                fp.write(code)
+        return name
+
+    def regex_search(self, regex, output):
+        match = re.search(regex, output, re.MULTILINE)
+        if not match:
+            self.fail("%r not found in %r" % (regex, output))
+        return match
+
+    def check_line(self, output, regex):
+        regex = re.compile(r'^' + regex, re.MULTILINE)
+        self.assertRegexpMatches(output, regex)
+
+    def parse_executed_tests(self, output):
+        regex = (r'^[0-9]+:[0-9]+:[0-9]+ (?:load avg: [0-9]+\.[0-9]{2} )?\[ *[0-9]+(?:/ *[0-9]+)*\] (%s)'
+                 % self.TESTNAME_REGEX)
+        parser = re.finditer(regex, output, re.MULTILINE)
+        return list(match.group(1) for match in parser)
+
+    def check_executed_tests(self, output, tests, skipped=(), failed=(),
+                             env_changed=(), omitted=(),
+                             rerun=(),
+                             randomize=False, interrupted=False,
+                             fail_env_changed=False):
+        if isinstance(tests, str):
+            tests = [tests]
+        if isinstance(skipped, str):
+            skipped = [skipped]
+        if isinstance(failed, str):
+            failed = [failed]
+        if isinstance(env_changed, str):
+            env_changed = [env_changed]
+        if isinstance(omitted, str):
+            omitted = [omitted]
+        if isinstance(rerun, str):
+            rerun = [rerun]
+
+        executed = self.parse_executed_tests(output)
+        if randomize:
+            self.assertEqual(set(executed), set(tests), output)
+        else:
+            self.assertEqual(executed, tests, (executed, tests, output))
+
+        def plural(count):
+            return 's' if count != 1 else ''
+
+        def list_regex(line_format, tests):
+            count = len(tests)
+            names = ' '.join(sorted(tests))
+            regex = line_format % (count, plural(count))
+            regex = r'%s:\n    %s$' % (regex, names)
+            return regex
+
+        if skipped:
+            regex = list_regex('%s test%s skipped', skipped)
+            self.check_line(output, regex)
+
+        if failed:
+            regex = list_regex('%s test%s failed', failed)
+            self.check_line(output, regex)
+
+        if env_changed:
+            regex = list_regex('%s test%s altered the execution environment',
+                               env_changed)
+            self.check_line(output, regex)
+
+        if omitted:
+            regex = list_regex('%s test%s omitted', omitted)
+            self.check_line(output, regex)
+
+        if rerun:
+            regex = list_regex('%s re-run test%s', rerun)
+            self.check_line(output, regex)
+            self.check_line(output, "Re-running failed tests in verbose mode")
+            for name in rerun:
+                regex = "Re-running test %r in verbose mode" % name
+                self.check_line(output, regex)
+
+        good = (len(tests) - len(skipped) - len(failed)
+                - len(omitted) - len(env_changed))
+        if good:
+            regex = r'%s test%s OK\.$' % (good, plural(good))
+            if not skipped and not failed and good > 1:
+                regex = 'All %s' % regex
+            self.check_line(output, regex)
+
+        if interrupted:
+            self.check_line(output, 'Test suite interrupted by signal SIGINT.')
+
+        result = []
+        if failed:
+            result.append('FAILURE')
+        elif fail_env_changed and env_changed:
+            result.append('ENV CHANGED')
+        if interrupted:
+            result.append('INTERRUPTED')
+        if not result:
+            result.append('SUCCESS')
+        result = ', '.join(result)
+        if rerun:
+            self.check_line(output, 'Tests result: %s' % result)
+            result = 'FAILURE then %s' % result
+        self.check_line(output, 'Tests result: %s' % result)
+
+    def parse_random_seed(self, output):
+        match = self.regex_search(r'Using random seed ([0-9]+)', output)
+        randseed = int(match.group(1))
+        self.assertTrue(0 <= randseed <= 10000000, randseed)
+        return randseed
+
+    def run_command(self, args, input=None, exitcode=0, **kw):
+        if not input:
+            input = ''
+        if 'stderr' not in kw:
+            kw['stderr'] = subprocess.PIPE
+        proc = subprocess.Popen(args,
+                                universal_newlines=True,
+                                stdout=subprocess.PIPE,
+                                **kw)
+        stdout, stderr = proc.communicate(input=input)
+        if proc.returncode != exitcode:
+            msg = ("Command %s failed with exit code %s\n"
+                   "\n"
+                   "stdout:\n"
+                   "---\n"
+                   "%s\n"
+                   "---\n"
+                   % (str(args), proc.returncode, stdout))
+            if proc.stderr:
+                msg += ("\n"
+                        "stderr:\n"
+                        "---\n"
+                        "%s"
+                        "---\n"
+                        % stderr)
+            self.fail(msg)
+        return SubprocessRun(proc.returncode, stdout, stderr)
+
+    def run_python(self, args, **kw):
+        args = [sys.executable] + list(args)
+        proc = self.run_command(args, **kw)
+        return proc.stdout
+
+
+class ProgramsTestCase(BaseTestCase):
+    """
+    Test various ways to run the Python test suite. Use options close
+    to options used on the buildbot.
+    """
+
+    NTEST = 4
+
+    def setUp(self):
+        super(ProgramsTestCase, self).setUp()
+
+        # Create NTEST tests doing nothing
+        self.tests = [self.create_test() for index in range(self.NTEST)]
+
+        self.python_args = ['-Wd', '-3', '-E', '-bb', '-tt']
+        self.regrtest_args = ['-uall', '-rwW',
+                              '--testdir=%s' % self.tmptestdir]
+
+    def check_output(self, output):
+        self.parse_random_seed(output)
+        self.check_executed_tests(output, self.tests, randomize=True)
+
+    def run_tests(self, args):
+        output = self.run_python(args)
+        self.check_output(output)
+
+    def test_script_regrtest(self):
+        # Lib/test/regrtest.py
+        script = os.path.join(self.testdir, 'regrtest.py')
+
+        args = self.python_args + [script] + self.regrtest_args + self.tests
+        self.run_tests(args)
+
+    def test_module_test(self):
+        # -m test
+        args = self.python_args + ['-m', 'test'] + self.regrtest_args + self.tests
+        self.run_tests(args)
+
+    def test_module_regrtest(self):
+        # -m test.regrtest
+        args = self.python_args + ['-m', 'test.regrtest'] + self.regrtest_args + self.tests
+        self.run_tests(args)
+
+    def test_module_autotest(self):
+        # -m test.autotest
+        args = self.python_args + ['-m', 'test.autotest'] + self.regrtest_args + self.tests
+        self.run_tests(args)
+
+    def test_module_from_test_autotest(self):
+        # from test import autotest
+        code = 'from test import autotest'
+        args = self.python_args + ['-c', code] + self.regrtest_args + self.tests
+        self.run_tests(args)
+
+    def test_script_autotest(self):
+        # Lib/test/autotest.py
+        script = os.path.join(self.testdir, 'autotest.py')
+        args = self.python_args + [script] + self.regrtest_args + self.tests
+        self.run_tests(args)
+
+    def run_batch(self, *args):
+        proc = self.run_command(args)
+        self.check_output(proc.stdout)
+
+    def need_pcbuild(self):
+        exe = os.path.normpath(os.path.abspath(sys.executable))
+        parts = exe.split(os.path.sep)
+        if len(parts) < 3:
+            # it's not a python build, python is likely to be installed
+            return
+
+        build_dir = parts[-3]
+        if build_dir.lower() != 'pcbuild':
+            self.skipTest("Tools/buildbot/test.bat requires PCbuild build, "
+                          "found %s" % build_dir)
+
+    @unittest.skipUnless(sysconfig.is_python_build(),
+                         'test.bat script is not installed')
+    @unittest.skipUnless(sys.platform == 'win32', 'Windows only')
+    def test_tools_buildbot_test(self):
+        self.need_pcbuild()
+
+        # Tools\buildbot\test.bat
+        script = os.path.join(ROOT_DIR, 'Tools', 'buildbot', 'test.bat')
+        test_args = ['--testdir=%s' % self.tmptestdir]
+        if platform.architecture()[0] == '64bit':
+            test_args.append('-x64')   # 64-bit build
+        if not Py_DEBUG:
+            test_args.append('+d')     # Release build, use python.exe
+
+        args = [script] + test_args + self.tests
+        self.run_batch(*args)
+
+    @unittest.skipUnless(sys.platform == 'win32', 'Windows only')
+    def test_pcbuild_rt(self):
+        self.need_pcbuild()
+
+        # PCbuild\rt.bat
+        script = os.path.join(ROOT_DIR, r'PCbuild\rt.bat')
+        rt_args = ["-q"]             # Quick, don't run tests twice
+        if platform.architecture()[0] == '64bit':
+            rt_args.append('-x64')   # 64-bit build
+        if Py_DEBUG:
+            rt_args.append('-d')     # Debug build, use python_d.exe
+        args = [script] + rt_args + self.regrtest_args + self.tests
+        self.run_batch(*args)
+
+
+class ArgsTestCase(BaseTestCase):
+    """
+    Test arguments of the Python test suite.
+    """
+
+    def run_tests(self, *testargs, **kw):
+        cmdargs = ('-m', 'test', '--testdir=%s' % self.tmptestdir) + testargs
+        return self.run_python(cmdargs, **kw)
+
+    def test_failing_test(self):
+        # test a failing test
+        code = textwrap.dedent("""
+            import unittest
+            from test import support
+
+            class FailingTest(unittest.TestCase):
+                def test_failing(self):
+                    self.fail("bug")
+
+            def test_main():
+                support.run_unittest(FailingTest)
+        """)
+        test_ok = self.create_test('ok')
+        test_failing = self.create_test('failing', code=code)
+        tests = [test_ok, test_failing]
+
+        output = self.run_tests(*tests, exitcode=2)
+        self.check_executed_tests(output, tests, failed=test_failing)
+
+    def test_resources(self):
+        # test -u command line option
+        tests = {}
+        for resource in ('audio', 'network'):
+            code = 'from test import support\nsupport.requires(%r)' % resource
+            tests[resource] = self.create_test(resource, code)
+        test_names = sorted(tests.values())
+
+        # -u all: 2 resources enabled
+        output = self.run_tests('-u', 'all', *test_names)
+        self.check_executed_tests(output, test_names)
+
+        # -u audio: 1 resource enabled
+        output = self.run_tests('-uaudio', *test_names)
+        self.check_executed_tests(output, test_names,
+                                  skipped=tests['network'])
+
+        # no option: 0 resources enabled
+        output = self.run_tests(*test_names)
+        self.check_executed_tests(output, test_names,
+                                  skipped=test_names)
+
+    def test_random(self):
+        # test -r and --randseed command line option
+        code = textwrap.dedent("""
+            import random
+            print("TESTRANDOM: %s" % random.randint(1, 1000))
+        """)
+        test = self.create_test('random', code)
+
+        # first run to get the output with the random seed
+        output = self.run_tests('-r', '-v', test)
+        randseed = self.parse_random_seed(output)
+        match = self.regex_search(r'TESTRANDOM: ([0-9]+)', output)
+        test_random = int(match.group(1))
+
+        # try to reproduce with the random seed
+        output = self.run_tests('-r', '-v', '--randseed=%s' % randseed, test)
+        randseed2 = self.parse_random_seed(output)
+        self.assertEqual(randseed2, randseed)
+
+        match = self.regex_search(r'TESTRANDOM: ([0-9]+)', output)
+        test_random2 = int(match.group(1))
+        self.assertEqual(test_random2, test_random)
+
+    def test_fromfile(self):
+        # test --fromfile
+        tests = [self.create_test() for index in range(5)]
+
+        # Write the list of files using a format similar to regrtest output:
+        # [1/2] test_1
+        # [2/2] test_2
+        filename = support.TESTFN
+        self.addCleanup(support.unlink, filename)
+
+        # test format 'test_opcodes'
+        with open(filename, "w") as fp:
+            for name in tests:
+                print(name, file=fp)
+
+        output = self.run_tests('--fromfile', filename)
+        self.check_executed_tests(output, tests)
+
+    def test_interrupted(self):
+        code = TEST_INTERRUPTED
+        test = self.create_test('sigint', code=code)
+        output = self.run_tests(test, exitcode=130)
+        self.check_executed_tests(output, test, omitted=test,
+                                  interrupted=True)
+
+    def test_slowest(self):
+        # test --slow
+        tests = [self.create_test() for index in range(3)]
+        output = self.run_tests("--slowest", *tests)
+        self.check_executed_tests(output, tests)
+        regex = ('10 slowest tests:\n'
+                 '(?:- %s: .*\n){%s}'
+                 % (self.TESTNAME_REGEX, len(tests)))
+        self.check_line(output, regex)
+
+    def test_slow_interrupted(self):
+        # Issue #25373: test --slowest with an interrupted test
+        code = TEST_INTERRUPTED
+        test = self.create_test("sigint", code=code)
+
+        try:
+            import threading
+            tests = (False, True)
+        except ImportError:
+            tests = (False,)
+        for multiprocessing in tests:
+            if multiprocessing:
+                args = ("--slowest", "-j2", test)
+            else:
+                args = ("--slowest", test)
+            output = self.run_tests(*args, exitcode=130)
+            self.check_executed_tests(output, test,
+                                      omitted=test, interrupted=True)
+
+            regex = ('10 slowest tests:\n')
+            self.check_line(output, regex)
+
+    def test_coverage(self):
+        # test --coverage
+        test = self.create_test('coverage')
+        output = self.run_tests("--coverage", test)
+        self.check_executed_tests(output, [test])
+        regex = (r'lines +cov% +module +\(path\)\n'
+                 r'(?: *[0-9]+ *[0-9]{1,2}% *[^ ]+ +\([^)]+\)+)+')
+        self.check_line(output, regex)
+
+    def test_forever(self):
+        # test --forever
+        code = textwrap.dedent("""
+            import __builtin__
+            import unittest
+            from test import support
+
+            class ForeverTester(unittest.TestCase):
+                def test_run(self):
+                    # Store the state in the __builtin__ module, because the test
+                    # module is reload at each run
+                    if 'RUN' in __builtin__.__dict__:
+                        __builtin__.__dict__['RUN'] += 1
+                        if __builtin__.__dict__['RUN'] >= 3:
+                            self.fail("fail at the 3rd runs")
+                    else:
+                        __builtin__.__dict__['RUN'] = 1
+
+            def test_main():
+                support.run_unittest(ForeverTester)
+        """)
+        test = self.create_test('forever', code=code)
+        output = self.run_tests('--forever', test, exitcode=2)
+        self.check_executed_tests(output, [test]*3, failed=test)
+
+    def check_leak(self, code, what):
+        test = self.create_test('huntrleaks', code=code)
+
+        filename = 'reflog.txt'
+        self.addCleanup(support.unlink, filename)
+        output = self.run_tests('--huntrleaks', '3:3:', test,
+                                exitcode=2,
+                                stderr=subprocess.STDOUT)
+        self.check_executed_tests(output, [test], failed=test)
+
+        line = 'beginning 6 repetitions\n123456\n......\n'
+        self.check_line(output, re.escape(line))
+
+        line2 = '%s leaked [1, 1, 1] %s, sum=3\n' % (test, what)
+        self.assertIn(line2, output)
+
+        with open(filename) as fp:
+            reflog = fp.read()
+            self.assertIn(line2, reflog)
+
+    @unittest.skipUnless(Py_DEBUG, 'need a debug build')
+    @support.requires_type_collecting
+    def test_huntrleaks(self):
+        # test --huntrleaks
+        code = textwrap.dedent("""
+            import unittest
+            from test import support
+
+            GLOBAL_LIST = []
+
+            class RefLeakTest(unittest.TestCase):
+                def test_leak(self):
+                    GLOBAL_LIST.append(object())
+
+            def test_main():
+                support.run_unittest(RefLeakTest)
+        """)
+        self.check_leak(code, 'references')
+
+    @unittest.skipUnless(Py_DEBUG, 'need a debug build')
+    def test_huntrleaks_fd_leak(self):
+        # test --huntrleaks for file descriptor leak
+        code = textwrap.dedent("""
+            import os
+            import unittest
+            from test import support
+
+            class FDLeakTest(unittest.TestCase):
+                def test_leak(self):
+                    fd = os.open(__file__, os.O_RDONLY)
+                    # bug: never close the file descriptor
+
+            def test_main():
+                support.run_unittest(FDLeakTest)
+        """)
+        self.check_leak(code, 'file descriptors')
+
+    def test_list_tests(self):
+        # test --list-tests
+        tests = [self.create_test() for i in range(5)]
+        output = self.run_tests('--list-tests', *tests)
+        self.assertEqual(output.rstrip().splitlines(),
+                         tests)
+
+    def test_list_cases(self):
+        # test --list-cases
+        code = textwrap.dedent("""
+            import unittest
+
+            class Tests(unittest.TestCase):
+                def test_method1(self):
+                    pass
+                def test_method2(self):
+                    pass
+        """)
+        testname = self.create_test(code=code)
+
+        # Test --list-cases
+        all_methods = ['%s.Tests.test_method1' % testname,
+                       '%s.Tests.test_method2' % testname]
+        output = self.run_tests('--list-cases', testname)
+        self.assertEqual(output.splitlines(), all_methods)
+
+        # Test --list-cases with --match
+        all_methods = ['%s.Tests.test_method1' % testname]
+        output = self.run_tests('--list-cases',
+                                '-m', 'test_method1',
+                                testname)
+        self.assertEqual(output.splitlines(), all_methods)
+
+    @unittest.skipIf(sys.platform.startswith('aix'),
+                     "support._crash_python() doesn't work on AIX")
+    def test_crashed(self):
+        # Any code which causes a crash
+        code = 'import test.support; test.support._crash_python()'
+        crash_test = self.create_test(name="crash", code=code)
+        ok_test = self.create_test(name="ok")
+
+        tests = [crash_test, ok_test]
+        output = self.run_tests("-j2", *tests, exitcode=2)
+        self.check_executed_tests(output, tests, failed=crash_test,
+                                  randomize=True)
+
+    def parse_methods(self, output):
+        regex = re.compile("^(test[^ ]+).*ok$", flags=re.MULTILINE)
+        return [match.group(1) for match in regex.finditer(output)]
+
+    def test_matchfile(self):
+        # Any code which causes a crash
+        code = textwrap.dedent("""
+            import unittest
+            from test import support
+
+            class Tests(unittest.TestCase):
+                def test_method1(self):
+                    pass
+                def test_method2(self):
+                    pass
+                def test_method3(self):
+                    pass
+                def test_method4(self):
+                    pass
+
+            def test_main():
+                support.run_unittest(Tests)
+        """)
+        all_methods = ['test_method1', 'test_method2',
+                       'test_method3', 'test_method4']
+        testname = self.create_test(code=code)
+
+        # by default, all methods should be run
+        output = self.run_tests("-v", testname)
+        methods = self.parse_methods(output)
+        self.assertEqual(methods, all_methods)
+
+        # only run a subset
+        filename = support.TESTFN
+        self.addCleanup(support.unlink, filename)
+
+        subset = [
+            # only match the method name
+            'test_method1',
+            # match the full identifier
+            '%s.Tests.test_method3' % testname]
+        with open(filename, "w") as fp:
+            for name in subset:
+                print(name, file=fp)
+
+        output = self.run_tests("-v", "--matchfile", filename, testname)
+        methods = self.parse_methods(output)
+        subset = ['test_method1', 'test_method3']
+        self.assertEqual(methods, subset)
+
+    def test_env_changed(self):
+        code = textwrap.dedent("""
+            import unittest
+            from test import support
+
+            class Tests(unittest.TestCase):
+                def test_env_changed(self):
+                    open("env_changed", "w").close()
+
+            def test_main():
+                support.run_unittest(Tests)
+        """)
+        testname = self.create_test(code=code)
+
+        # don't fail by default
+        output = self.run_tests(testname)
+        self.check_executed_tests(output, [testname], env_changed=testname)
+
+        # fail with --fail-env-changed
+        output = self.run_tests("--fail-env-changed", testname, exitcode=3)
+        self.check_executed_tests(output, [testname], env_changed=testname,
+                                  fail_env_changed=True)
+
+    def test_rerun_fail(self):
+        code = textwrap.dedent("""
+            import unittest
+
+            class Tests(unittest.TestCase):
+                def test_bug(self):
+                    # test always fail
+                    self.fail("bug")
+
+            def test_main():
+                support.run_unittest(Tests)
+        """)
+        testname = self.create_test(code=code)
+
+        output = self.run_tests("-w", testname, exitcode=2)
+        self.check_executed_tests(output, [testname],
+                                  failed=testname, rerun=testname)
+
+
+class TestUtils(unittest.TestCase):
+    def test_format_duration(self):
+        self.assertEqual(utils.format_duration(0),
+                         '0 ms')
+        self.assertEqual(utils.format_duration(1e-9),
+                         '1 ms')
+        self.assertEqual(utils.format_duration(10e-3),
+                         '10 ms')
+        self.assertEqual(utils.format_duration(1.5),
+                         '1 sec 500 ms')
+        self.assertEqual(utils.format_duration(1),
+                         '1 sec')
+        self.assertEqual(utils.format_duration(2 * 60),
+                         '2 min')
+        self.assertEqual(utils.format_duration(2 * 60 + 1),
+                         '2 min 1 sec')
+        self.assertEqual(utils.format_duration(3 * 3600),
+                         '3 hour')
+        self.assertEqual(utils.format_duration(3 * 3600  + 2 * 60 + 1),
+                         '3 hour 2 min')
+        self.assertEqual(utils.format_duration(3 * 3600 + 1),
+                         '3 hour 1 sec')
+
+
+def test_main():
+    support.run_unittest(ProgramsTestCase, ArgsTestCase, TestUtils)
+
+
+if __name__ == "__main__":
+    test_main()
diff --git a/Lib/test/test_robotparser.py b/Lib/test/test_robotparser.py
index e4b01f1..ba7ccf8 100644
--- a/Lib/test/test_robotparser.py
+++ b/Lib/test/test_robotparser.py
@@ -1,296 +1,260 @@
-import unittest, StringIO, robotparser
-from test import test_support
-from urllib2 import urlopen, HTTPError
-
-HAVE_HTTPS = True
+import os
+import robotparser
+import unittest
+from test import support
+from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
+import StringIO
 try:
-    from urllib2 import HTTPSHandler
+    import threading
 except ImportError:
-    HAVE_HTTPS = False
+    threading = None
 
-class RobotTestCase(unittest.TestCase):
-    def __init__(self, index, parser, url, good, agent):
-        unittest.TestCase.__init__(self)
-        if good:
-            self.str = "RobotTest(%d, good, %s)" % (index, url)
-        else:
-            self.str = "RobotTest(%d, bad, %s)" % (index, url)
-        self.parser = parser
-        self.url = url
-        self.good = good
-        self.agent = agent
 
-    def runTest(self):
-        if isinstance(self.url, tuple):
-            agent, url = self.url
-        else:
-            url = self.url
-            agent = self.agent
-        if self.good:
+class BaseRobotTest:
+    robots_txt = ''
+    agent = 'test_robotparser'
+    good = []
+    bad = []
+
+    def setUp(self):
+        lines = StringIO.StringIO(self.robots_txt).readlines()
+        self.parser = robotparser.RobotFileParser()
+        self.parser.parse(lines)
+
+    def get_agent_and_url(self, url):
+        if isinstance(url, tuple):
+            agent, url = url
+            return agent, url
+        return self.agent, url
+
+    def test_good_urls(self):
+        for url in self.good:
+            agent, url = self.get_agent_and_url(url)
             self.assertTrue(self.parser.can_fetch(agent, url))
-        else:
+
+    def test_bad_urls(self):
+        for url in self.bad:
+            agent, url = self.get_agent_and_url(url)
             self.assertFalse(self.parser.can_fetch(agent, url))
 
-    def __str__(self):
-        return self.str
 
-tests = unittest.TestSuite()
-
-def RobotTest(index, robots_txt, good_urls, bad_urls,
-              agent="test_robotparser"):
-
-    lines = StringIO.StringIO(robots_txt).readlines()
-    parser = robotparser.RobotFileParser()
-    parser.parse(lines)
-    for url in good_urls:
-        tests.addTest(RobotTestCase(index, parser, url, 1, agent))
-    for url in bad_urls:
-        tests.addTest(RobotTestCase(index, parser, url, 0, agent))
-
-# Examples from http://www.robotstxt.org/wc/norobots.html (fetched 2002)
-
-# 1.
-doc = """
+class UserAgentWildcardTest(BaseRobotTest, unittest.TestCase):
+    robots_txt = """\
 User-agent: *
 Disallow: /cyberworld/map/ # This is an infinite virtual URL space
 Disallow: /tmp/ # these will soon disappear
 Disallow: /foo.html
-"""
+    """
+    good = ['/', '/test.html']
+    bad = ['/cyberworld/map/index.html', '/tmp/xxx', '/foo.html']
 
-good = ['/','/test.html']
-bad = ['/cyberworld/map/index.html','/tmp/xxx','/foo.html']
 
-RobotTest(1, doc, good, bad)
-
-# 2.
-doc = """
-# robots.txt for http://www.example.com/
-
-User-agent: *
-Disallow: /cyberworld/map/ # This is an infinite virtual URL space
-
-# Cybermapper knows where to go.
-User-agent: cybermapper
-Disallow:
-
-"""
-
-good = ['/','/test.html',('cybermapper','/cyberworld/map/index.html')]
-bad = ['/cyberworld/map/index.html']
-
-RobotTest(2, doc, good, bad)
-
-# 3.
-doc = """
+class RejectAllRobotsTest(BaseRobotTest, unittest.TestCase):
+    robots_txt = """\
 # go away
 User-agent: *
 Disallow: /
-"""
+    """
+    good = []
+    bad = ['/cyberworld/map/index.html', '/', '/tmp/']
 
-good = []
-bad = ['/cyberworld/map/index.html','/','/tmp/']
 
-RobotTest(3, doc, good, bad)
-
-# Examples from http://www.robotstxt.org/wc/norobots-rfc.html (fetched 2002)
-
-# 4.
-doc = """
-User-agent: figtree
-Disallow: /tmp
-Disallow: /a%3cd.html
-Disallow: /a%2fb.html
-Disallow: /%7ejoe/index.html
-"""
-
-good = [] # XFAIL '/a/b.html'
-bad = ['/tmp','/tmp.html','/tmp/a.html',
-       '/a%3cd.html','/a%3Cd.html','/a%2fb.html',
-       '/~joe/index.html'
-       ]
-
-RobotTest(4, doc, good, bad, 'figtree')
-RobotTest(5, doc, good, bad, 'FigTree Robot libwww-perl/5.04')
-
-# 6.
-doc = """
-User-agent: *
-Disallow: /tmp/
-Disallow: /a%3Cd.html
-Disallow: /a/b.html
-Disallow: /%7ejoe/index.html
-"""
-
-good = ['/tmp',] # XFAIL: '/a%2fb.html'
-bad = ['/tmp/','/tmp/a.html',
-       '/a%3cd.html','/a%3Cd.html',"/a/b.html",
-       '/%7Ejoe/index.html']
-
-RobotTest(6, doc, good, bad)
-
-# From bug report #523041
-
-# 7.
-doc = """
-User-Agent: *
-Disallow: /.
-"""
-
-good = ['/foo.html']
-bad = [] # Bug report says "/" should be denied, but that is not in the RFC
-
-RobotTest(7, doc, good, bad)
-
-# From Google: http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=40364
-
-# 8.
-doc = """
-User-agent: Googlebot
-Allow: /folder1/myfile.html
-Disallow: /folder1/
-"""
-
-good = ['/folder1/myfile.html']
-bad = ['/folder1/anotherfile.html']
-
-RobotTest(8, doc, good, bad, agent="Googlebot")
-
-# 9.  This file is incorrect because "Googlebot" is a substring of
-#     "Googlebot-Mobile", so test 10 works just like test 9.
-doc = """
+class UserAgentOrderingTest(BaseRobotTest, unittest.TestCase):
+    # the order of User-agent should be correct. note
+    # that this file is incorrect because "Googlebot" is a
+    # substring of "Googlebot-Mobile"
+    robots_txt = """\
 User-agent: Googlebot
 Disallow: /
 
 User-agent: Googlebot-Mobile
 Allow: /
-"""
-
-good = []
-bad = ['/something.jpg']
-
-RobotTest(9, doc, good, bad, agent="Googlebot")
-
-good = []
-bad = ['/something.jpg']
-
-RobotTest(10, doc, good, bad, agent="Googlebot-Mobile")
-
-# 11.  Get the order correct.
-doc = """
-User-agent: Googlebot-Mobile
-Allow: /
-
-User-agent: Googlebot
-Disallow: /
-"""
-
-good = []
-bad = ['/something.jpg']
-
-RobotTest(11, doc, good, bad, agent="Googlebot")
-
-good = ['/something.jpg']
-bad = []
-
-RobotTest(12, doc, good, bad, agent="Googlebot-Mobile")
+    """
+    agent = 'Googlebot'
+    bad = ['/something.jpg']
 
 
-# 13.  Google also got the order wrong in #8.  You need to specify the
-#      URLs from more specific to more general.
-doc = """
+class UserAgentGoogleMobileTest(UserAgentOrderingTest):
+    agent = 'Googlebot-Mobile'
+
+
+class GoogleURLOrderingTest(BaseRobotTest, unittest.TestCase):
+    # Google also got the order wrong. You need
+    # to specify the URLs from more specific to more general
+    robots_txt = """\
 User-agent: Googlebot
 Allow: /folder1/myfile.html
 Disallow: /folder1/
-"""
-
-good = ['/folder1/myfile.html']
-bad = ['/folder1/anotherfile.html']
-
-RobotTest(13, doc, good, bad, agent="googlebot")
+    """
+    agent = 'googlebot'
+    good = ['/folder1/myfile.html']
+    bad = ['/folder1/anotherfile.html']
 
 
-# 14. For issue #6325 (query string support)
-doc = """
+class DisallowQueryStringTest(BaseRobotTest, unittest.TestCase):
+    # see issue #6325 for details
+    robots_txt = """\
 User-agent: *
 Disallow: /some/path?name=value
-"""
+    """
+    good = ['/some/path']
+    bad = ['/some/path?name=value']
 
-good = ['/some/path']
-bad = ['/some/path?name=value']
 
-RobotTest(14, doc, good, bad)
-
-# 15. For issue #4108 (obey first * entry)
-doc = """
+class UseFirstUserAgentWildcardTest(BaseRobotTest, unittest.TestCase):
+    # obey first * entry (#4108)
+    robots_txt = """\
 User-agent: *
 Disallow: /some/path
 
 User-agent: *
 Disallow: /another/path
-"""
+    """
+    good = ['/another/path']
+    bad = ['/some/path']
 
-good = ['/another/path']
-bad = ['/some/path']
 
-RobotTest(15, doc, good, bad)
-
-# 16. Empty query (issue #17403). Normalizing the url first.
-doc = """
+class EmptyQueryStringTest(BaseRobotTest, unittest.TestCase):
+    # normalize the URL first (#17403)
+    robots_txt = """\
 User-agent: *
 Allow: /some/path?
 Disallow: /another/path?
+    """
+    good = ['/some/path?']
+    bad = ['/another/path?']
+
+
+class DefaultEntryTest(BaseRobotTest, unittest.TestCase):
+    robots_txt = """\
+User-agent: *
+Crawl-delay: 1
+Request-rate: 3/15
+Disallow: /cyberworld/map/
+    """
+    good = ['/', '/test.html']
+    bad = ['/cyberworld/map/index.html']
+
+
+class StringFormattingTest(BaseRobotTest, unittest.TestCase):
+    robots_txt = """\
+User-agent: *
+Crawl-delay: 1
+Request-rate: 3/15
+Disallow: /cyberworld/map/ # This is an infinite virtual URL space
+
+# Cybermapper knows where to go.
+User-agent: cybermapper
+Disallow: /some/path
+    """
+
+    expected_output = """\
+User-agent: cybermapper
+Disallow: /some/path
+
+User-agent: *
+Disallow: /cyberworld/map/
+
 """
 
-good = ['/some/path?']
-bad = ['/another/path?']
+    def test_string_formatting(self):
+        self.assertEqual(str(self.parser), self.expected_output)
 
-RobotTest(16, doc, good, bad)
+
+class RobotHandler(BaseHTTPRequestHandler):
+
+    def do_GET(self):
+        self.send_error(403, "Forbidden access")
+
+    def log_message(self, format, *args):
+        pass
+
+
+@unittest.skipUnless(threading, 'threading required for this test')
+class PasswordProtectedSiteTestCase(unittest.TestCase):
+
+    def setUp(self):
+        self.server = HTTPServer((support.HOST, 0), RobotHandler)
+
+        self.t = threading.Thread(
+            name='HTTPServer serving',
+            target=self.server.serve_forever,
+            # Short poll interval to make the test finish quickly.
+            # Time between requests is short enough that we won't wake
+            # up spuriously too many times.
+            kwargs={'poll_interval':0.01})
+        self.t.daemon = True  # In case this function raises.
+        self.t.start()
+
+    def tearDown(self):
+        self.server.shutdown()
+        self.t.join()
+        self.server.server_close()
+
+    @support.reap_threads
+    def testPasswordProtectedSite(self):
+        addr = self.server.server_address
+        url = 'http://' + support.HOST + ':' + str(addr[1])
+        robots_url = url + "/robots.txt"
+        parser = robotparser.RobotFileParser()
+        parser.set_url(url)
+        parser.read()
+        self.assertFalse(parser.can_fetch("*", robots_url))
 
 
 class NetworkTestCase(unittest.TestCase):
 
-    def testPasswordProtectedSite(self):
-        test_support.requires('network')
-        with test_support.transient_internet('mueblesmoraleda.com'):
-            url = 'http://mueblesmoraleda.com'
-            robots_url = url + "/robots.txt"
-            # First check the URL is usable for our purposes, since the
-            # test site is a bit flaky.
-            try:
-                urlopen(robots_url)
-            except HTTPError as e:
-                if e.code not in {401, 403}:
-                    self.skipTest(
-                        "%r should return a 401 or 403 HTTP error, not %r"
-                        % (robots_url, e.code))
-            else:
-                self.skipTest(
-                    "%r should return a 401 or 403 HTTP error, not succeed"
-                    % (robots_url))
-            parser = robotparser.RobotFileParser()
-            parser.set_url(url)
-            try:
-                parser.read()
-            except IOError:
-                self.skipTest('%s is unavailable' % url)
-            self.assertEqual(parser.can_fetch("*", robots_url), False)
+    base_url = 'http://www.pythontest.net/'
+    robots_txt = '{}elsewhere/robots.txt'.format(base_url)
 
-    @unittest.skipUnless(HAVE_HTTPS, 'need SSL support to download license')
-    @test_support.system_must_validate_cert
-    def testPythonOrg(self):
-        test_support.requires('network')
-        with test_support.transient_internet('www.python.org'):
-            parser = robotparser.RobotFileParser(
-                "https://www.python.org/robots.txt")
-            parser.read()
-            self.assertTrue(
-                parser.can_fetch("*", "https://www.python.org/robots.txt"))
+    @classmethod
+    def setUpClass(cls):
+        support.requires('network')
+        with support.transient_internet(cls.base_url):
+            cls.parser = robotparser.RobotFileParser(cls.robots_txt)
+            cls.parser.read()
+
+    def url(self, path):
+        return '{}{}{}'.format(
+            self.base_url, path, '/' if not os.path.splitext(path)[1] else ''
+        )
+
+    def test_basic(self):
+        self.assertFalse(self.parser.disallow_all)
+        self.assertFalse(self.parser.allow_all)
+        self.assertGreater(self.parser.mtime(), 0)
+
+    def test_can_fetch(self):
+        self.assertTrue(self.parser.can_fetch('*', self.url('elsewhere')))
+        self.assertFalse(self.parser.can_fetch('Nutch', self.base_url))
+        self.assertFalse(self.parser.can_fetch('Nutch', self.url('brian')))
+        self.assertFalse(self.parser.can_fetch('Nutch', self.url('webstats')))
+        self.assertFalse(self.parser.can_fetch('*', self.url('webstats')))
+        self.assertTrue(self.parser.can_fetch('*', self.base_url))
+
+    def test_read_404(self):
+        parser = robotparser.RobotFileParser(self.url('i-robot.txt'))
+        parser.read()
+        self.assertTrue(parser.allow_all)
+        self.assertFalse(parser.disallow_all)
+        self.assertEqual(parser.mtime(), 0)
 
 
 def test_main():
-    test_support.run_unittest(tests)
-    test_support.run_unittest(NetworkTestCase)
+    support.run_unittest(
+        UserAgentWildcardTest,
+        RejectAllRobotsTest,
+        UserAgentOrderingTest,
+        UserAgentGoogleMobileTest,
+        GoogleURLOrderingTest,
+        DisallowQueryStringTest,
+        UseFirstUserAgentWildcardTest,
+        EmptyQueryStringTest,
+        DefaultEntryTest,
+        StringFormattingTest,
+        PasswordProtectedSiteTestCase,
+        NetworkTestCase)
 
-if __name__=='__main__':
-    test_support.verbose = 1
+
+if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py
index a4228dc..87a8658 100644
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -2,7 +2,8 @@
 # $Id$
 
 from xml.sax import make_parser, ContentHandler, \
-                    SAXException, SAXReaderNotAvailable, SAXParseException
+                    SAXException, SAXReaderNotAvailable, SAXParseException, \
+                    saxutils
 try:
     make_parser()
 except SAXReaderNotAvailable:
@@ -173,6 +174,21 @@
             input.setEncoding('iso-8859-1')
             self.check_parse(input)
 
+    def test_parse_close_source(self):
+        builtin_open = open
+        non_local = {'fileobj': None}
+
+        def mock_open(*args):
+            fileobj = builtin_open(*args)
+            non_local['fileobj'] = fileobj
+            return fileobj
+
+        with support.swap_attr(saxutils, 'open', mock_open):
+            make_xml_file(self.data, 'iso-8859-1', None)
+            with self.assertRaises(SAXException):
+                self.check_parse(TESTFN)
+            self.assertTrue(non_local['fileobj'].closed)
+
     def check_parseString(self, s):
         from xml.sax import parseString
         result = StringIO()
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
index 0869a9e..ca89fe5 100644
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -35,6 +35,7 @@
 
 try:
     import zipfile
+    import zlib
     ZIP_SUPPORT = True
 except ImportError:
     ZIP_SUPPORT = find_executable('zip')
@@ -460,7 +461,6 @@
         self.assertEqual(tarball, base_name + '.tar')
         self.assertTrue(os.path.isfile(tarball))
 
-    @unittest.skipUnless(zlib, "Requires zlib")
     @unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run')
     def test_make_zipfile(self):
         # creating something to zip
@@ -485,6 +485,7 @@
                     ['dist/', 'dist/file1', 'dist/file2',
                      'dist/sub/', 'dist/sub/file3', 'dist/sub2/',
                      'outer'])
+        support.unlink(res)
 
         with support.change_cwd(work_dir):
             base_name = os.path.abspath(rel_base_name)
@@ -498,7 +499,6 @@
                     ['dist/', 'dist/file1', 'dist/file2',
                      'dist/sub/', 'dist/sub/file3', 'dist/sub2/'])
 
-    @unittest.skipUnless(zlib, "Requires zlib")
     @unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run')
     @unittest.skipUnless(find_executable('zip'),
                          'Need the zip command to run')
@@ -524,7 +524,6 @@
             names2 = zf.namelist()
         self.assertEqual(sorted(names), sorted(names2))
 
-    @unittest.skipUnless(zlib, "Requires zlib")
     @unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run')
     @unittest.skipUnless(find_executable('unzip'),
                          'Need the unzip command to run')
@@ -544,6 +543,8 @@
                 subprocess.check_output(zip_cmd, stderr=subprocess.STDOUT)
             except subprocess.CalledProcessError as exc:
                 details = exc.output
+                if 'unrecognized option: t' in details:
+                    self.skipTest("unzip doesn't support -t")
                 msg = "{}\n\n**Unzip Output**\n{}"
                 self.fail(msg.format(exc, details))
 
diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
index 7483f64..5f4f579 100644
--- a/Lib/test/test_signal.py
+++ b/Lib/test/test_signal.py
@@ -138,6 +138,8 @@
         else:
             self.fail("pause returned of its own accord, and the signal"
                       " didn't arrive after another second.")
+        finally:
+            signal.alarm(0)
 
     # Issue 3864. Unknown if this affects earlier versions of freebsd also.
     @unittest.skipIf(sys.platform=='freebsd6',
@@ -185,6 +187,9 @@
                 self.fail('Test deadlocked after %d seconds.' %
                           self.MAX_DURATION)
 
+            # read the exit status to not leak a zombie process
+            os.waitpid(child, 0)
+
 
 @unittest.skipIf(sys.platform == "win32", "Not valid on Windows")
 class BasicSignalTests(unittest.TestCase):
@@ -243,11 +248,15 @@
         import select
 
         signal.alarm(1)
-        before_time = time.time()
-        # We attempt to get a signal during the sleep,
-        # before select is called
-        time.sleep(self.TIMEOUT_FULL)
-        mid_time = time.time()
+        try:
+            before_time = time.time()
+            # We attempt to get a signal during the sleep,
+            # before select is called
+            time.sleep(self.TIMEOUT_FULL)
+            mid_time = time.time()
+        finally:
+            signal.alarm(0)
+
         self.assertTrue(mid_time - before_time < self.TIMEOUT_HALF)
         select.select([self.read], [], [], self.TIMEOUT_FULL)
         after_time = time.time()
@@ -257,11 +266,15 @@
         import select
 
         signal.alarm(1)
-        before_time = time.time()
-        # We attempt to get a signal during the select call
-        self.assertRaises(select.error, select.select,
-            [self.read], [], [], self.TIMEOUT_FULL)
-        after_time = time.time()
+        try:
+            before_time = time.time()
+            # We attempt to get a signal during the select call
+            self.assertRaises(select.error, select.select,
+                [self.read], [], [], self.TIMEOUT_FULL)
+            after_time = time.time()
+        finally:
+            signal.alarm(0)
+
         self.assertTrue(after_time - before_time < self.TIMEOUT_HALF)
 
     def setUp(self):
@@ -490,6 +503,16 @@
         # and the handler should have been called
         self.assertEqual(self.hndl_called, True)
 
+    def test_setitimer_tiny(self):
+        # bpo-30807: C setitimer() takes a microsecond-resolution interval.
+        # Check that float -> timeval conversion doesn't round
+        # the interval down to zero, which would disable the timer.
+        self.itimer = signal.ITIMER_REAL
+        signal.setitimer(self.itimer, 1e-6)
+        time.sleep(1)
+        self.assertEqual(self.hndl_called, True)
+
+
 def test_main():
     test_support.run_unittest(BasicSignalTests, InterProcessSignalTests,
                               WakeupFDTests, WakeupSignalTests,
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
index d9a9324..9569135 100644
--- a/Lib/test/test_site.py
+++ b/Lib/test/test_site.py
@@ -8,6 +8,7 @@
 from test.test_support import run_unittest, TESTFN, EnvironmentVarGuard
 from test.test_support import captured_output
 import __builtin__
+import errno
 import os
 import sys
 import re
@@ -24,14 +25,30 @@
 else:
     raise unittest.SkipTest("importation of site.py suppressed")
 
-if site.ENABLE_USER_SITE and not os.path.isdir(site.USER_SITE):
-    # need to add user site directory for tests
-    try:
-        os.makedirs(site.USER_SITE)
-        site.addsitedir(site.USER_SITE)
-    except OSError as exc:
-        raise unittest.SkipTest('unable to create user site directory (%r): %s'
-                                % (site.USER_SITE, exc))
+
+OLD_SYS_PATH = None
+
+
+def setUpModule():
+    global OLD_SYS_PATH
+    OLD_SYS_PATH = sys.path[:]
+
+    if site.ENABLE_USER_SITE and not os.path.isdir(site.USER_SITE):
+        # need to add user site directory for tests
+        try:
+            os.makedirs(site.USER_SITE)
+            # modify sys.path: will be restored by tearDownModule()
+            site.addsitedir(site.USER_SITE)
+        except OSError as exc:
+            if exc.errno in (errno.EACCES, errno.EPERM):
+                raise unittest.SkipTest('unable to create user site directory (%r): %s'
+                                        % (site.USER_SITE, exc))
+            else:
+                raise
+
+
+def tearDownModule():
+    sys.path[:] = OLD_SYS_PATH
 
 
 class HelperFunctionsTests(unittest.TestCase):
diff --git a/Lib/test/test_smtplib.py b/Lib/test/test_smtplib.py
index 1bb6690..703b631 100644
--- a/Lib/test/test_smtplib.py
+++ b/Lib/test/test_smtplib.py
@@ -306,12 +306,14 @@
         self.sock.settimeout(15)
         self.port = test_support.bind_port(self.sock)
         servargs = (self.evt, self.respdata, self.sock)
-        threading.Thread(target=server, args=servargs).start()
+        self.thread = threading.Thread(target=server, args=servargs)
+        self.thread.start()
         self.evt.wait()
         self.evt.clear()
 
     def tearDown(self):
         self.evt.wait()
+        self.thread.join()
         sys.stdout = self.old_stdout
 
     def testLineTooLong(self):
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index 765d7c0..1460711 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -35,7 +35,7 @@
 
 HOST = test_support.HOST
 MSG = b'Michael Gilfix was here\n'
-SUPPORTS_IPV6 = socket.has_ipv6 and try_address('::1', family=socket.AF_INET6)
+SUPPORTS_IPV6 = test_support.IPV6_ENABLED
 
 try:
     import thread
@@ -733,6 +733,7 @@
                 self.assertRaises(socket.timeout, c.sendall,
                                   b"x" * test_support.SOCK_MAX_SIZE)
         finally:
+            signal.alarm(0)
             signal.signal(signal.SIGALRM, old_alarm)
             c.close()
             s.close()
@@ -1357,6 +1358,10 @@
         expected_errnos = [ errno.ECONNREFUSED, ]
         if hasattr(errno, 'ENETUNREACH'):
             expected_errnos.append(errno.ENETUNREACH)
+        if hasattr(errno, 'EADDRNOTAVAIL'):
+            # bpo-31910: socket.create_connection() fails randomly
+            # with EADDRNOTAVAIL on Travis CI
+            expected_errnos.append(errno.EADDRNOTAVAIL)
 
         self.assertIn(cm.exception.errno, expected_errnos)
 
@@ -1529,8 +1534,8 @@
             raise Alarm
         old_alarm = signal.signal(signal.SIGALRM, alarm_handler)
         try:
-            signal.alarm(2)    # POSIX allows alarm to be up to 1 second early
             try:
+                signal.alarm(2)    # POSIX allows alarm to be up to 1 second early
                 foo = self.serv.accept()
             except socket.timeout:
                 self.fail("caught timeout instead of Alarm")
@@ -1707,9 +1712,17 @@
     """
     if not hasattr(socket, "AF_TIPC"):
         return False
-    if not os.path.isfile("/proc/modules"):
-        return False
-    with open("/proc/modules") as f:
+    try:
+        f = open("/proc/modules")
+    except IOError as e:
+        # It's ok if the file does not exist, is a directory or if we
+        # have not the permission to read it. In any other case it's a
+        # real error, so raise it again.
+        if e.errno in (errno.ENOENT, errno.EISDIR, errno.EACCES):
+            return False
+        else:
+            raise
+    with f:
         for line in f:
             if line.startswith("tipc "):
                 return True
diff --git a/Lib/test/test_socketserver.py b/Lib/test/test_socketserver.py
index d645d20..847859d 100644
--- a/Lib/test/test_socketserver.py
+++ b/Lib/test/test_socketserver.py
@@ -69,17 +69,32 @@
     testcase.assertEqual(72 << 8, status)
 
 
+def close_server(server):
+    server.server_close()
+
+    if hasattr(server, 'active_children'):
+        # ForkingMixIn: Manually reap all child processes, since server_close()
+        # calls waitpid() in non-blocking mode using the WNOHANG flag.
+        for pid in server.active_children.copy():
+            try:
+                os.waitpid(pid, 0)
+            except ChildProcessError:
+                pass
+        server.active_children.clear()
+
+
 @unittest.skipUnless(threading, 'Threading required for this test.')
 class SocketServerTest(unittest.TestCase):
     """Test all socket servers."""
 
     def setUp(self):
+        self.addCleanup(signal_alarm, 0)
         signal_alarm(60)  # Kill deadlocks after 60 seconds.
         self.port_seed = 0
         self.test_files = []
 
     def tearDown(self):
-        signal_alarm(0)  # Didn't deadlock.
+        self.doCleanups()
         reap_children()
 
         for fn in self.test_files:
@@ -118,7 +133,7 @@
         class MyServer(svrcls):
             def handle_error(self, request, client_address):
                 self.close_request(request)
-                self.server_close()
+                close_server(self)
                 raise
 
         class MyHandler(hdlrbase):
@@ -158,7 +173,7 @@
         if verbose: print "waiting for server"
         server.shutdown()
         t.join()
-        server.server_close()
+        close_server(server)
         self.assertRaises(socket.error, server.socket.fileno)
         if verbose: print "done"
 
@@ -314,6 +329,7 @@
             s.shutdown()
         for t, s in threads:
             t.join()
+            close_server(s)
 
     def test_tcpserver_bind_leak(self):
         # Issue #22435: the server socket wouldn't be closed if bind()/listen()
@@ -347,7 +363,7 @@
         s.close()
         server.handle_request()
         self.assertEqual(server.shutdown_called, 1)
-        server.server_close()
+        close_server(server)
 
 
 def test_main():
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index a17d613..7d06dc5 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -14,7 +14,7 @@
 import os
 import errno
 import pprint
-import tempfile
+import shutil
 import urllib2
 import traceback
 import weakref
@@ -73,7 +73,7 @@
 NOKIACERT = data_file("nokia.pem")
 NULLBYTECERT = data_file("nullbytecert.pem")
 
-DHFILE = data_file("dh1024.pem")
+DHFILE = data_file("ffdh3072.pem")
 BYTES_DHFILE = DHFILE.encode(sys.getfilesystemencoding())
 
 
@@ -168,6 +168,13 @@
             ssl.OP_NO_COMPRESSION
         self.assertIn(ssl.HAS_SNI, {True, False})
         self.assertIn(ssl.HAS_ECDH, {True, False})
+        ssl.OP_NO_SSLv2
+        ssl.OP_NO_SSLv3
+        ssl.OP_NO_TLSv1
+        ssl.OP_NO_TLSv1_3
+        if ssl.OPENSSL_VERSION_INFO >= (1, 0, 1):
+            ssl.OP_NO_TLSv1_1
+            ssl.OP_NO_TLSv1_2
 
     def test_random(self):
         v = ssl.RAND_status()
@@ -194,9 +201,9 @@
                           (('commonName', 'localhost'),))
                         )
         # Note the next three asserts will fail if the keys are regenerated
-        self.assertEqual(p['notAfter'], asn1time('Oct  5 23:01:56 2020 GMT'))
-        self.assertEqual(p['notBefore'], asn1time('Oct  8 23:01:56 2010 GMT'))
-        self.assertEqual(p['serialNumber'], 'D7C7381919AFC24E')
+        self.assertEqual(p['notAfter'], asn1time('Jan 17 19:09:06 2028 GMT'))
+        self.assertEqual(p['notBefore'], asn1time('Jan 19 19:09:06 2018 GMT'))
+        self.assertEqual(p['serialNumber'], 'F9BA076D5B6ABD9B')
         self.assertEqual(p['subject'],
                          ((('countryName', 'XY'),),
                           (('localityName', 'Castle Anthrax'),),
@@ -777,7 +784,8 @@
             ctx.options = (ctx.options & ~ssl.OP_NO_TLSv1)
             self.assertEqual(default, ctx.options)
             ctx.options = 0
-            self.assertEqual(0, ctx.options)
+            # Ubuntu has OP_NO_SSLv3 forced on by default
+            self.assertEqual(0, ctx.options & ~ssl.OP_NO_SSLv3)
         else:
             with self.assertRaises(ValueError):
                 ctx.options = 0
@@ -981,6 +989,13 @@
 
 
     def test_load_dh_params(self):
+        filename = u'dhpäräm.pem'
+        fs_encoding = sys.getfilesystemencoding()
+        try:
+            filename.encode(fs_encoding)
+        except UnicodeEncodeError:
+            self.skipTest("filename %r cannot be encoded to the filesystem encoding %r" % (filename, fs_encoding))
+
         ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
         ctx.load_dh_params(DHFILE)
         if os.name != 'nt':
@@ -992,6 +1007,10 @@
         self.assertEqual(cm.exception.errno, errno.ENOENT)
         with self.assertRaises(ssl.SSLError) as cm:
             ctx.load_dh_params(CERTFILE)
+        with support.temp_dir() as d:
+            fname = os.path.join(d, filename)
+            shutil.copy(DHFILE, fname)
+            ctx.load_dh_params(fname)
 
     @skip_if_broken_ubuntu_ssl
     def test_session_stats(self):
@@ -1587,34 +1606,6 @@
                                         cert_reqs=ssl.CERT_NONE, ciphers="^$:,;?*'dorothyx")
                     s.connect(remote)
 
-    def test_algorithms(self):
-        # Issue #8484: all algorithms should be available when verifying a
-        # certificate.
-        # SHA256 was added in OpenSSL 0.9.8
-        if ssl.OPENSSL_VERSION_INFO < (0, 9, 8, 0, 15):
-            self.skipTest("SHA256 not available on %r" % ssl.OPENSSL_VERSION)
-        # sha256.tbs-internet.com needs SNI to use the correct certificate
-        if not ssl.HAS_SNI:
-            self.skipTest("SNI needed for this test")
-        # https://sha2.hboeck.de/ was used until 2011-01-08 (no route to host)
-        remote = ("sha256.tbs-internet.com", 443)
-        sha256_cert = os.path.join(os.path.dirname(__file__), "sha256.pem")
-        with support.transient_internet("sha256.tbs-internet.com"):
-            ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
-            ctx.verify_mode = ssl.CERT_REQUIRED
-            ctx.load_verify_locations(sha256_cert)
-            s = ctx.wrap_socket(socket.socket(socket.AF_INET),
-                                server_hostname="sha256.tbs-internet.com")
-            try:
-                s.connect(remote)
-                if support.verbose:
-                    sys.stdout.write("\nCipher with %r is %r\n" %
-                                     (remote, s.cipher()))
-                    sys.stdout.write("Certificate is:\n%s\n" %
-                                     pprint.pformat(s.getpeercert()))
-            finally:
-                s.close()
-
     def test_get_ca_certs_capath(self):
         # capath certs are loaded on request
         with support.transient_internet(REMOTE_HOST):
@@ -1794,7 +1785,7 @@
             else:
                 self.context = ssl.SSLContext(ssl_version
                                               if ssl_version is not None
-                                              else ssl.PROTOCOL_TLSv1)
+                                              else ssl.PROTOCOL_TLS)
                 self.context.verify_mode = (certreqs if certreqs is not None
                                             else ssl.CERT_NONE)
                 if cacerts:
@@ -1954,6 +1945,8 @@
             self.join()
             if support.verbose:
                 sys.stdout.write(" cleanup: successfully joined.\n")
+            # make sure that ConnectionHandler is removed from socket_map
+            asyncore.close_all(ignore_all=True)
 
         def start(self, flag=None):
             self.flag = flag
@@ -2218,10 +2211,10 @@
             connect to it with a wrong client certificate fails.
             """
             certfile = os.path.join(os.path.dirname(__file__) or os.curdir,
-                                       "wrongcert.pem")
-            server = ThreadedEchoServer(CERTFILE,
+                                       "keycert.pem")
+            server = ThreadedEchoServer(SIGNED_CERTFILE,
                                         certreqs=ssl.CERT_REQUIRED,
-                                        cacerts=CERTFILE, chatty=False,
+                                        cacerts=SIGNING_CA, chatty=False,
                                         connectionchatty=False)
             with server, \
                     closing(socket.socket()) as sock, \
@@ -2809,6 +2802,24 @@
                     self.assertEqual(s.version(), 'TLSv1')
                 self.assertIs(s.version(), None)
 
+        @unittest.skipUnless(ssl.HAS_TLSv1_3,
+                             "test requires TLSv1.3 enabled OpenSSL")
+        def test_tls1_3(self):
+            context = ssl.SSLContext(ssl.PROTOCOL_TLS)
+            context.load_cert_chain(CERTFILE)
+            # disable all but TLS 1.3
+            context.options |= (
+                ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 | ssl.OP_NO_TLSv1_2
+            )
+            with ThreadedEchoServer(context=context) as server:
+                with context.wrap_socket(socket.socket()) as s:
+                    s.connect((HOST, server.port))
+                    self.assertIn(s.cipher()[0], [
+                        'TLS13-AES-256-GCM-SHA384',
+                        'TLS13-CHACHA20-POLY1305-SHA256',
+                        'TLS13-AES-128-GCM-SHA256',
+                    ])
+
         @unittest.skipUnless(ssl.HAS_ECDH, "test requires ECDH-enabled OpenSSL")
         def test_default_ecdh_curve(self):
             # Issue #21015: elliptic curve-based Diffie Hellman key exchange
@@ -2963,8 +2974,9 @@
                 except ssl.SSLError as e:
                     stats = e
 
-                if expected is None and IS_OPENSSL_1_1:
-                    # OpenSSL 1.1.0 raises handshake error
+                if (expected is None and IS_OPENSSL_1_1
+                        and ssl.OPENSSL_VERSION_INFO < (1, 1, 0, 6)):
+                    # OpenSSL 1.1.0 to 1.1.0e raises handshake error
                     self.assertIsInstance(stats, ssl.SSLError)
                 else:
                     msg = "failed trying %s (s) and %s (c).\n" \
diff --git a/Lib/test/test_startfile.py b/Lib/test/test_startfile.py
index 3c22f3f..61212ad 100644
--- a/Lib/test/test_startfile.py
+++ b/Lib/test/test_startfile.py
@@ -10,8 +10,8 @@
 import unittest
 from test import test_support
 import os
+import sys
 from os import path
-from time import sleep
 
 startfile = test_support.get_attribute(os, 'startfile')
 
@@ -23,20 +23,23 @@
     def test_nonexisting_u(self):
         self.assertRaises(OSError, startfile, u"nonexisting.vbs")
 
+    def check_empty(self, empty):
+        # We need to make sure the child process starts in a directory
+        # we're not about to delete. If we're running under -j, that
+        # means the test harness provided directory isn't a safe option.
+        # See http://bugs.python.org/issue15526 for more details
+        with test_support.change_cwd(path.dirname(sys.executable)):
+            startfile(empty)
+            startfile(empty, "open")
+
     def test_empty(self):
         empty = path.join(path.dirname(__file__), "empty.vbs")
-        startfile(empty)
-        startfile(empty, "open")
-        # Give the child process some time to exit before we finish.
-        # Otherwise the cleanup code will not be able to delete the cwd,
-        # because it is still in use.
-        sleep(0.1)
+        self.check_empty(empty)
 
-    def test_empty_u(self):
+    def test_empty_unicode(self):
         empty = path.join(path.dirname(__file__), "empty.vbs")
-        startfile(unicode(empty, "mbcs"))
-        startfile(unicode(empty, "mbcs"), "open")
-        sleep(0.1)
+        empty = unicode(empty, "mbcs")
+        self.check_empty(empty)
 
 def test_main():
     test_support.run_unittest(TestCase)
diff --git a/Lib/test/test_str.py b/Lib/test/test_str.py
index 5bb9f48..8b306f4 100644
--- a/Lib/test/test_str.py
+++ b/Lib/test/test_str.py
@@ -465,6 +465,15 @@
             self.assertIn('str', exc)
             self.assertIn('tuple', exc)
 
+    def test_issue28598_strsubclass_rhs(self):
+        # A subclass of str with an __rmod__ method should be able to hook
+        # into the % operator
+        class SubclassedStr(str):
+            def __rmod__(self, other):
+                return 'Success, self.__rmod__({!r}) was called'.format(other)
+        self.assertEqual('lhs %% %r' % SubclassedStr('rhs'),
+                         "Success, self.__rmod__('lhs %% %r') was called")
+
 def test_main():
     test_support.run_unittest(StrTest)
 
diff --git a/Lib/test/test_strftime.py b/Lib/test/test_strftime.py
index b26ebec..325024c 100644
--- a/Lib/test/test_strftime.py
+++ b/Lib/test/test_strftime.py
@@ -60,8 +60,10 @@
             import java
             java.util.Locale.setDefault(java.util.Locale.US)
         except ImportError:
-            import locale
-            locale.setlocale(locale.LC_TIME, 'C')
+            from locale import setlocale, LC_TIME
+            saved_locale = setlocale(LC_TIME)
+            setlocale(LC_TIME, 'C')
+            self.addCleanup(setlocale, LC_TIME, saved_locale)
 
     def test_strftime(self):
         now = time.time()
diff --git a/Lib/test/test_strop.py b/Lib/test/test_strop.py
index 81d078e..50b8f6e 100644
--- a/Lib/test/test_strop.py
+++ b/Lib/test/test_strop.py
@@ -2,11 +2,12 @@
 warnings.filterwarnings("ignore", "strop functions are obsolete;",
                         DeprecationWarning,
                         r'test.test_strop|unittest')
-import strop
 import unittest
 import sys
 from test import test_support
 
+strop = test_support.import_module("strop")
+
 
 class StropFunctionTestCase(unittest.TestCase):
 
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index 160ccfe..0c215f7 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -2,6 +2,7 @@
 from test import test_support
 import subprocess
 import sys
+import platform
 import signal
 import os
 import errno
@@ -9,6 +10,14 @@
 import time
 import re
 import sysconfig
+import textwrap
+
+try:
+    import ctypes
+except ImportError:
+    ctypes = None
+else:
+    import ctypes.util
 
 try:
     import resource
@@ -19,6 +28,11 @@
 except ImportError:
     threading = None
 
+try:
+    import _testcapi
+except ImportError:
+    _testcapi = None
+
 mswindows = (sys.platform == "win32")
 
 #
@@ -43,6 +57,8 @@
             inst.wait()
         subprocess._cleanup()
         self.assertFalse(subprocess._active, "subprocess._active not empty")
+        self.doCleanups()
+        test_support.reap_children()
 
     def assertStderrEqual(self, stderr, expected, msg=None):
         # In a debug build, stuff like "[6580 refs]" is printed to stderr at
@@ -379,6 +395,46 @@
         self.addCleanup(p.stdout.close)
         self.assertEqual(p.stdout.read(), "orange")
 
+    def test_invalid_cmd(self):
+        # null character in the command name
+        cmd = sys.executable + '\0'
+        with self.assertRaises(TypeError):
+            subprocess.Popen([cmd, "-c", "pass"])
+
+        # null character in the command argument
+        with self.assertRaises(TypeError):
+            subprocess.Popen([sys.executable, "-c", "pass#\0"])
+
+    def test_invalid_env(self):
+        # null character in the enviroment variable name
+        newenv = os.environ.copy()
+        newenv["FRUIT\0VEGETABLE"] = "cabbage"
+        with self.assertRaises(TypeError):
+            subprocess.Popen([sys.executable, "-c", "pass"], env=newenv)
+
+        # null character in the enviroment variable value
+        newenv = os.environ.copy()
+        newenv["FRUIT"] = "orange\0VEGETABLE=cabbage"
+        with self.assertRaises(TypeError):
+            subprocess.Popen([sys.executable, "-c", "pass"], env=newenv)
+
+        # equal character in the enviroment variable name
+        newenv = os.environ.copy()
+        newenv["FRUIT=ORANGE"] = "lemon"
+        with self.assertRaises(ValueError):
+            subprocess.Popen([sys.executable, "-c", "pass"], env=newenv)
+
+        # equal character in the enviroment variable value
+        newenv = os.environ.copy()
+        newenv["FRUIT"] = "orange=lemon"
+        p = subprocess.Popen([sys.executable, "-c",
+                              'import sys, os;'
+                              'sys.stdout.write(os.getenv("FRUIT"))'],
+                             stdout=subprocess.PIPE,
+                             env=newenv)
+        stdout, stderr = p.communicate()
+        self.assertEqual(stdout, "orange=lemon")
+
     def test_communicate_stdin(self):
         p = subprocess.Popen([sys.executable, "-c",
                               'import sys;'
@@ -641,7 +697,7 @@
                                  stdout=subprocess.PIPE,
                                  stderr=subprocess.PIPE)
             # ignore errors that indicate the command was not found
-            if c.exception.errno not in (errno.ENOENT, errno.EACCES):
+            if c.exception.errno not in (errno.ENOENT, errno.ENOTDIR, errno.EACCES):
                 raise c.exception
 
     @unittest.skipIf(threading is None, "threading required")
@@ -787,8 +843,11 @@
             kw = {stream: subprocess.PIPE}
             with subprocess.Popen(args, **kw) as process:
                 signal.alarm(1)
-                # communicate() will be interrupted by SIGALRM
-                process.communicate()
+                try:
+                    # communicate() will be interrupted by SIGALRM
+                    process.communicate()
+                finally:
+                    signal.alarm(0)
 
 
 @unittest.skipIf(mswindows, "POSIX specific tests")
@@ -1216,6 +1275,29 @@
 
         self.assertEqual(p2.returncode, 0, "Unexpected error: " + repr(stderr))
 
+    @unittest.skipUnless(_testcapi is not None
+                         and hasattr(_testcapi, 'W_STOPCODE'),
+                         'need _testcapi.W_STOPCODE')
+    def test_stopped(self):
+        """Test wait() behavior when waitpid returns WIFSTOPPED; issue29335."""
+        args = [sys.executable, '-c', 'pass']
+        proc = subprocess.Popen(args)
+
+        # Wait until the real process completes to avoid zombie process
+        pid = proc.pid
+        pid, status = os.waitpid(pid, 0)
+        self.assertEqual(status, 0)
+
+        status = _testcapi.W_STOPCODE(3)
+
+        def mock_waitpid(pid, flags):
+            return (pid, status)
+
+        with test_support.swap_attr(os, 'waitpid', mock_waitpid):
+            returncode = proc.wait()
+
+        self.assertEqual(returncode, -3)
+
 
 @unittest.skipUnless(mswindows, "Windows specific tests")
 class Win32ProcessTestCase(BaseTestCase):
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
index 871f427..3c894af 100644
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -1,1712 +1,3 @@
-"""Supporting definitions for the Python regression tests."""
-
-if __name__ != 'test.test_support':
-    raise ImportError('test_support must be imported from the test package')
-
-import contextlib
-import errno
-import functools
-import gc
-import socket
-import stat
 import sys
-import os
-import platform
-import shutil
-import warnings
-import unittest
-import importlib
-import UserDict
-import re
-import time
-import struct
-import sysconfig
-try:
-    import thread
-except ImportError:
-    thread = None
-
-__all__ = ["Error", "TestFailed", "ResourceDenied", "import_module",
-           "verbose", "use_resources", "max_memuse", "record_original_stdout",
-           "get_original_stdout", "unload", "unlink", "rmtree", "forget",
-           "is_resource_enabled", "requires", "requires_mac_ver",
-           "find_unused_port", "bind_port",
-           "fcmp", "have_unicode", "is_jython", "TESTFN", "HOST", "FUZZ",
-           "SAVEDCWD", "temp_cwd", "findfile", "sortdict", "check_syntax_error",
-           "open_urlresource", "check_warnings", "check_py3k_warnings",
-           "CleanImport", "EnvironmentVarGuard", "captured_output",
-           "captured_stdout", "TransientResource", "transient_internet",
-           "run_with_locale", "set_memlimit", "bigmemtest", "bigaddrspacetest",
-           "BasicTestRunner", "run_unittest", "run_doctest", "threading_setup",
-           "threading_cleanup", "reap_threads", "start_threads", "cpython_only",
-           "check_impl_detail", "get_attribute", "py3k_bytes",
-           "import_fresh_module", "threading_cleanup", "reap_children",
-           "strip_python_stderr", "IPV6_ENABLED", "run_with_tz"]
-
-class Error(Exception):
-    """Base class for regression test exceptions."""
-
-class TestFailed(Error):
-    """Test failed."""
-
-class ResourceDenied(unittest.SkipTest):
-    """Test skipped because it requested a disallowed resource.
-
-    This is raised when a test calls requires() for a resource that
-    has not been enabled.  It is used to distinguish between expected
-    and unexpected skips.
-    """
-
-@contextlib.contextmanager
-def _ignore_deprecated_imports(ignore=True):
-    """Context manager to suppress package and module deprecation
-    warnings when importing them.
-
-    If ignore is False, this context manager has no effect."""
-    if ignore:
-        with warnings.catch_warnings():
-            warnings.filterwarnings("ignore", ".+ (module|package)",
-                                    DeprecationWarning)
-            yield
-    else:
-        yield
-
-
-def import_module(name, deprecated=False):
-    """Import and return the module to be tested, raising SkipTest if
-    it is not available.
-
-    If deprecated is True, any module or package deprecation messages
-    will be suppressed."""
-    with _ignore_deprecated_imports(deprecated):
-        try:
-            return importlib.import_module(name)
-        except ImportError, msg:
-            raise unittest.SkipTest(str(msg))
-
-
-def _save_and_remove_module(name, orig_modules):
-    """Helper function to save and remove a module from sys.modules
-
-       Raise ImportError if the module can't be imported."""
-    # try to import the module and raise an error if it can't be imported
-    if name not in sys.modules:
-        __import__(name)
-        del sys.modules[name]
-    for modname in list(sys.modules):
-        if modname == name or modname.startswith(name + '.'):
-            orig_modules[modname] = sys.modules[modname]
-            del sys.modules[modname]
-
-def _save_and_block_module(name, orig_modules):
-    """Helper function to save and block a module in sys.modules
-
-       Return True if the module was in sys.modules, False otherwise."""
-    saved = True
-    try:
-        orig_modules[name] = sys.modules[name]
-    except KeyError:
-        saved = False
-    sys.modules[name] = None
-    return saved
-
-
-def import_fresh_module(name, fresh=(), blocked=(), deprecated=False):
-    """Imports and returns a module, deliberately bypassing the sys.modules cache
-    and importing a fresh copy of the module. Once the import is complete,
-    the sys.modules cache is restored to its original state.
-
-    Modules named in fresh are also imported anew if needed by the import.
-    If one of these modules can't be imported, None is returned.
-
-    Importing of modules named in blocked is prevented while the fresh import
-    takes place.
-
-    If deprecated is True, any module or package deprecation messages
-    will be suppressed."""
-    # NOTE: test_heapq, test_json, and test_warnings include extra sanity
-    # checks to make sure that this utility function is working as expected
-    with _ignore_deprecated_imports(deprecated):
-        # Keep track of modules saved for later restoration as well
-        # as those which just need a blocking entry removed
-        orig_modules = {}
-        names_to_remove = []
-        _save_and_remove_module(name, orig_modules)
-        try:
-            for fresh_name in fresh:
-                _save_and_remove_module(fresh_name, orig_modules)
-            for blocked_name in blocked:
-                if not _save_and_block_module(blocked_name, orig_modules):
-                    names_to_remove.append(blocked_name)
-            fresh_module = importlib.import_module(name)
-        except ImportError:
-            fresh_module = None
-        finally:
-            for orig_name, module in orig_modules.items():
-                sys.modules[orig_name] = module
-            for name_to_remove in names_to_remove:
-                del sys.modules[name_to_remove]
-        return fresh_module
-
-
-def get_attribute(obj, name):
-    """Get an attribute, raising SkipTest if AttributeError is raised."""
-    try:
-        attribute = getattr(obj, name)
-    except AttributeError:
-        raise unittest.SkipTest("module %s has no attribute %s" % (
-            obj.__name__, name))
-    else:
-        return attribute
-
-
-verbose = 1              # Flag set to 0 by regrtest.py
-use_resources = None     # Flag set to [] by regrtest.py
-max_memuse = 0           # Disable bigmem tests (they will still be run with
-                         # small sizes, to make sure they work.)
-real_max_memuse = 0
-
-# _original_stdout is meant to hold stdout at the time regrtest began.
-# This may be "the real" stdout, or IDLE's emulation of stdout, or whatever.
-# The point is to have some flavor of stdout the user can actually see.
-_original_stdout = None
-def record_original_stdout(stdout):
-    global _original_stdout
-    _original_stdout = stdout
-
-def get_original_stdout():
-    return _original_stdout or sys.stdout
-
-def unload(name):
-    try:
-        del sys.modules[name]
-    except KeyError:
-        pass
-
-def _force_run(path, func, *args):
-    try:
-        return func(*args)
-    except EnvironmentError as err:
-        if verbose >= 2:
-            print('%s: %s' % (err.__class__.__name__, err))
-            print('re-run %s%r' % (func.__name__, args))
-        os.chmod(path, stat.S_IRWXU)
-        return func(*args)
-
-if sys.platform.startswith("win"):
-    def _waitfor(func, pathname, waitall=False):
-        # Perform the operation
-        func(pathname)
-        # Now setup the wait loop
-        if waitall:
-            dirname = pathname
-        else:
-            dirname, name = os.path.split(pathname)
-            dirname = dirname or '.'
-        # Check for `pathname` to be removed from the filesystem.
-        # The exponential backoff of the timeout amounts to a total
-        # of ~1 second after which the deletion is probably an error
-        # anyway.
-        # Testing on an i7@4.3GHz shows that usually only 1 iteration is
-        # required when contention occurs.
-        timeout = 0.001
-        while timeout < 1.0:
-            # Note we are only testing for the existence of the file(s) in
-            # the contents of the directory regardless of any security or
-            # access rights.  If we have made it this far, we have sufficient
-            # permissions to do that much using Python's equivalent of the
-            # Windows API FindFirstFile.
-            # Other Windows APIs can fail or give incorrect results when
-            # dealing with files that are pending deletion.
-            L = os.listdir(dirname)
-            if not (L if waitall else name in L):
-                return
-            # Increase the timeout and try again
-            time.sleep(timeout)
-            timeout *= 2
-        warnings.warn('tests may fail, delete still pending for ' + pathname,
-                      RuntimeWarning, stacklevel=4)
-
-    def _unlink(filename):
-        _waitfor(os.unlink, filename)
-
-    def _rmdir(dirname):
-        _waitfor(os.rmdir, dirname)
-
-    def _rmtree(path):
-        def _rmtree_inner(path):
-            for name in _force_run(path, os.listdir, path):
-                fullname = os.path.join(path, name)
-                if os.path.isdir(fullname):
-                    _waitfor(_rmtree_inner, fullname, waitall=True)
-                    _force_run(fullname, os.rmdir, fullname)
-                else:
-                    _force_run(fullname, os.unlink, fullname)
-        _waitfor(_rmtree_inner, path, waitall=True)
-        _waitfor(lambda p: _force_run(p, os.rmdir, p), path)
-else:
-    _unlink = os.unlink
-    _rmdir = os.rmdir
-
-    def _rmtree(path):
-        try:
-            shutil.rmtree(path)
-            return
-        except EnvironmentError:
-            pass
-
-        def _rmtree_inner(path):
-            for name in _force_run(path, os.listdir, path):
-                fullname = os.path.join(path, name)
-                try:
-                    mode = os.lstat(fullname).st_mode
-                except EnvironmentError:
-                    mode = 0
-                if stat.S_ISDIR(mode):
-                    _rmtree_inner(fullname)
-                    _force_run(path, os.rmdir, fullname)
-                else:
-                    _force_run(path, os.unlink, fullname)
-        _rmtree_inner(path)
-        os.rmdir(path)
-
-def unlink(filename):
-    try:
-        _unlink(filename)
-    except OSError:
-        pass
-
-def rmdir(dirname):
-    try:
-        _rmdir(dirname)
-    except OSError as error:
-        # The directory need not exist.
-        if error.errno != errno.ENOENT:
-            raise
-
-def rmtree(path):
-    try:
-        _rmtree(path)
-    except OSError, e:
-        # Unix returns ENOENT, Windows returns ESRCH.
-        if e.errno not in (errno.ENOENT, errno.ESRCH):
-            raise
-
-def forget(modname):
-    '''"Forget" a module was ever imported by removing it from sys.modules and
-    deleting any .pyc and .pyo files.'''
-    unload(modname)
-    for dirname in sys.path:
-        unlink(os.path.join(dirname, modname + os.extsep + 'pyc'))
-        # Deleting the .pyo file cannot be within the 'try' for the .pyc since
-        # the chance exists that there is no .pyc (and thus the 'try' statement
-        # is exited) but there is a .pyo file.
-        unlink(os.path.join(dirname, modname + os.extsep + 'pyo'))
-
-# Check whether a gui is actually available
-def _is_gui_available():
-    if hasattr(_is_gui_available, 'result'):
-        return _is_gui_available.result
-    reason = None
-    if sys.platform.startswith('win'):
-        # if Python is running as a service (such as the buildbot service),
-        # gui interaction may be disallowed
-        import ctypes
-        import ctypes.wintypes
-        UOI_FLAGS = 1
-        WSF_VISIBLE = 0x0001
-        class USEROBJECTFLAGS(ctypes.Structure):
-            _fields_ = [("fInherit", ctypes.wintypes.BOOL),
-                        ("fReserved", ctypes.wintypes.BOOL),
-                        ("dwFlags", ctypes.wintypes.DWORD)]
-        dll = ctypes.windll.user32
-        h = dll.GetProcessWindowStation()
-        if not h:
-            raise ctypes.WinError()
-        uof = USEROBJECTFLAGS()
-        needed = ctypes.wintypes.DWORD()
-        res = dll.GetUserObjectInformationW(h,
-            UOI_FLAGS,
-            ctypes.byref(uof),
-            ctypes.sizeof(uof),
-            ctypes.byref(needed))
-        if not res:
-            raise ctypes.WinError()
-        if not bool(uof.dwFlags & WSF_VISIBLE):
-            reason = "gui not available (WSF_VISIBLE flag not set)"
-    elif sys.platform == 'darwin':
-        # The Aqua Tk implementations on OS X can abort the process if
-        # being called in an environment where a window server connection
-        # cannot be made, for instance when invoked by a buildbot or ssh
-        # process not running under the same user id as the current console
-        # user.  To avoid that, raise an exception if the window manager
-        # connection is not available.
-        from ctypes import cdll, c_int, pointer, Structure
-        from ctypes.util import find_library
-
-        app_services = cdll.LoadLibrary(find_library("ApplicationServices"))
-
-        if app_services.CGMainDisplayID() == 0:
-            reason = "gui tests cannot run without OS X window manager"
-        else:
-            class ProcessSerialNumber(Structure):
-                _fields_ = [("highLongOfPSN", c_int),
-                            ("lowLongOfPSN", c_int)]
-            psn = ProcessSerialNumber()
-            psn_p = pointer(psn)
-            if (  (app_services.GetCurrentProcess(psn_p) < 0) or
-                  (app_services.SetFrontProcess(psn_p) < 0) ):
-                reason = "cannot run without OS X gui process"
-
-    # check on every platform whether tkinter can actually do anything
-    if not reason:
-        try:
-            from Tkinter import Tk
-            root = Tk()
-            root.withdraw()
-            root.update()
-            root.destroy()
-        except Exception as e:
-            err_string = str(e)
-            if len(err_string) > 50:
-                err_string = err_string[:50] + ' [...]'
-            reason = 'Tk unavailable due to {}: {}'.format(type(e).__name__,
-                                                           err_string)
-
-    _is_gui_available.reason = reason
-    _is_gui_available.result = not reason
-
-    return _is_gui_available.result
-
-def is_resource_enabled(resource):
-    """Test whether a resource is enabled.
-
-    Known resources are set by regrtest.py.  If not running under regrtest.py,
-    all resources are assumed enabled unless use_resources has been set.
-    """
-    return use_resources is None or resource in use_resources
-
-def requires(resource, msg=None):
-    """Raise ResourceDenied if the specified resource is not available."""
-    if not is_resource_enabled(resource):
-        if msg is None:
-            msg = "Use of the `%s' resource not enabled" % resource
-        raise ResourceDenied(msg)
-    if resource == 'gui' and not _is_gui_available():
-        raise ResourceDenied(_is_gui_available.reason)
-
-def requires_mac_ver(*min_version):
-    """Decorator raising SkipTest if the OS is Mac OS X and the OS X
-    version if less than min_version.
-
-    For example, @requires_mac_ver(10, 5) raises SkipTest if the OS X version
-    is lesser than 10.5.
-    """
-    def decorator(func):
-        @functools.wraps(func)
-        def wrapper(*args, **kw):
-            if sys.platform == 'darwin':
-                version_txt = platform.mac_ver()[0]
-                try:
-                    version = tuple(map(int, version_txt.split('.')))
-                except ValueError:
-                    pass
-                else:
-                    if version < min_version:
-                        min_version_txt = '.'.join(map(str, min_version))
-                        raise unittest.SkipTest(
-                            "Mac OS X %s or higher required, not %s"
-                            % (min_version_txt, version_txt))
-            return func(*args, **kw)
-        wrapper.min_version = min_version
-        return wrapper
-    return decorator
-
-
-# Don't use "localhost", since resolving it uses the DNS under recent
-# Windows versions (see issue #18792).
-HOST = "127.0.0.1"
-HOSTv6 = "::1"
-
-
-def find_unused_port(family=socket.AF_INET, socktype=socket.SOCK_STREAM):
-    """Returns an unused port that should be suitable for binding.  This is
-    achieved by creating a temporary socket with the same family and type as
-    the 'sock' parameter (default is AF_INET, SOCK_STREAM), and binding it to
-    the specified host address (defaults to 0.0.0.0) with the port set to 0,
-    eliciting an unused ephemeral port from the OS.  The temporary socket is
-    then closed and deleted, and the ephemeral port is returned.
-
-    Either this method or bind_port() should be used for any tests where a
-    server socket needs to be bound to a particular port for the duration of
-    the test.  Which one to use depends on whether the calling code is creating
-    a python socket, or if an unused port needs to be provided in a constructor
-    or passed to an external program (i.e. the -accept argument to openssl's
-    s_server mode).  Always prefer bind_port() over find_unused_port() where
-    possible.  Hard coded ports should *NEVER* be used.  As soon as a server
-    socket is bound to a hard coded port, the ability to run multiple instances
-    of the test simultaneously on the same host is compromised, which makes the
-    test a ticking time bomb in a buildbot environment. On Unix buildbots, this
-    may simply manifest as a failed test, which can be recovered from without
-    intervention in most cases, but on Windows, the entire python process can
-    completely and utterly wedge, requiring someone to log in to the buildbot
-    and manually kill the affected process.
-
-    (This is easy to reproduce on Windows, unfortunately, and can be traced to
-    the SO_REUSEADDR socket option having different semantics on Windows versus
-    Unix/Linux.  On Unix, you can't have two AF_INET SOCK_STREAM sockets bind,
-    listen and then accept connections on identical host/ports.  An EADDRINUSE
-    socket.error will be raised at some point (depending on the platform and
-    the order bind and listen were called on each socket).
-
-    However, on Windows, if SO_REUSEADDR is set on the sockets, no EADDRINUSE
-    will ever be raised when attempting to bind two identical host/ports. When
-    accept() is called on each socket, the second caller's process will steal
-    the port from the first caller, leaving them both in an awkwardly wedged
-    state where they'll no longer respond to any signals or graceful kills, and
-    must be forcibly killed via OpenProcess()/TerminateProcess().
-
-    The solution on Windows is to use the SO_EXCLUSIVEADDRUSE socket option
-    instead of SO_REUSEADDR, which effectively affords the same semantics as
-    SO_REUSEADDR on Unix.  Given the propensity of Unix developers in the Open
-    Source world compared to Windows ones, this is a common mistake.  A quick
-    look over OpenSSL's 0.9.8g source shows that they use SO_REUSEADDR when
-    openssl.exe is called with the 's_server' option, for example. See
-    http://bugs.python.org/issue2550 for more info.  The following site also
-    has a very thorough description about the implications of both REUSEADDR
-    and EXCLUSIVEADDRUSE on Windows:
-    http://msdn2.microsoft.com/en-us/library/ms740621(VS.85).aspx)
-
-    XXX: although this approach is a vast improvement on previous attempts to
-    elicit unused ports, it rests heavily on the assumption that the ephemeral
-    port returned to us by the OS won't immediately be dished back out to some
-    other process when we close and delete our temporary socket but before our
-    calling code has a chance to bind the returned port.  We can deal with this
-    issue if/when we come across it."""
-    tempsock = socket.socket(family, socktype)
-    port = bind_port(tempsock)
-    tempsock.close()
-    del tempsock
-    return port
-
-def bind_port(sock, host=HOST):
-    """Bind the socket to a free port and return the port number.  Relies on
-    ephemeral ports in order to ensure we are using an unbound port.  This is
-    important as many tests may be running simultaneously, especially in a
-    buildbot environment.  This method raises an exception if the sock.family
-    is AF_INET and sock.type is SOCK_STREAM, *and* the socket has SO_REUSEADDR
-    or SO_REUSEPORT set on it.  Tests should *never* set these socket options
-    for TCP/IP sockets.  The only case for setting these options is testing
-    multicasting via multiple UDP sockets.
-
-    Additionally, if the SO_EXCLUSIVEADDRUSE socket option is available (i.e.
-    on Windows), it will be set on the socket.  This will prevent anyone else
-    from bind()'ing to our host/port for the duration of the test.
-    """
-    if sock.family == socket.AF_INET and sock.type == socket.SOCK_STREAM:
-        if hasattr(socket, 'SO_REUSEADDR'):
-            if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) == 1:
-                raise TestFailed("tests should never set the SO_REUSEADDR "   \
-                                 "socket option on TCP/IP sockets!")
-        if hasattr(socket, 'SO_REUSEPORT'):
-            try:
-                if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT) == 1:
-                    raise TestFailed("tests should never set the SO_REUSEPORT "   \
-                                     "socket option on TCP/IP sockets!")
-            except EnvironmentError:
-                # Python's socket module was compiled using modern headers
-                # thus defining SO_REUSEPORT but this process is running
-                # under an older kernel that does not support SO_REUSEPORT.
-                pass
-        if hasattr(socket, 'SO_EXCLUSIVEADDRUSE'):
-            sock.setsockopt(socket.SOL_SOCKET, socket.SO_EXCLUSIVEADDRUSE, 1)
-
-    sock.bind((host, 0))
-    port = sock.getsockname()[1]
-    return port
-
-def _is_ipv6_enabled():
-    """Check whether IPv6 is enabled on this host."""
-    if socket.has_ipv6:
-        sock = None
-        try:
-            sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
-            sock.bind((HOSTv6, 0))
-            return True
-        except socket.error:
-            pass
-        finally:
-            if sock:
-                sock.close()
-    return False
-
-IPV6_ENABLED = _is_ipv6_enabled()
-
-def system_must_validate_cert(f):
-    """Skip the test on TLS certificate validation failures."""
-    @functools.wraps(f)
-    def dec(*args, **kwargs):
-        try:
-            f(*args, **kwargs)
-        except IOError as e:
-            if "CERTIFICATE_VERIFY_FAILED" in str(e):
-                raise unittest.SkipTest("system does not contain "
-                                        "necessary certificates")
-            raise
-    return dec
-
-FUZZ = 1e-6
-
-def fcmp(x, y): # fuzzy comparison function
-    if isinstance(x, float) or isinstance(y, float):
-        try:
-            fuzz = (abs(x) + abs(y)) * FUZZ
-            if abs(x-y) <= fuzz:
-                return 0
-        except:
-            pass
-    elif type(x) == type(y) and isinstance(x, (tuple, list)):
-        for i in range(min(len(x), len(y))):
-            outcome = fcmp(x[i], y[i])
-            if outcome != 0:
-                return outcome
-        return (len(x) > len(y)) - (len(x) < len(y))
-    return (x > y) - (x < y)
-
-
-# A constant likely larger than the underlying OS pipe buffer size, to
-# make writes blocking.
-# Windows limit seems to be around 512 B, and many Unix kernels have a
-# 64 KiB pipe buffer size or 16 * PAGE_SIZE: take a few megs to be sure.
-# (see issue #17835 for a discussion of this number).
-PIPE_MAX_SIZE = 4 * 1024 * 1024 + 1
-
-# A constant likely larger than the underlying OS socket buffer size, to make
-# writes blocking.
-# The socket buffer sizes can usually be tuned system-wide (e.g. through sysctl
-# on Linux), or on a per-socket basis (SO_SNDBUF/SO_RCVBUF). See issue #18643
-# for a discussion of this number).
-SOCK_MAX_SIZE = 16 * 1024 * 1024 + 1
-
-is_jython = sys.platform.startswith('java')
-
-try:
-    unicode
-    have_unicode = True
-except NameError:
-    have_unicode = False
-
-requires_unicode = unittest.skipUnless(have_unicode, 'no unicode support')
-
-def u(s):
-    return unicode(s, 'unicode-escape')
-
-# FS_NONASCII: non-ASCII Unicode character encodable by
-# sys.getfilesystemencoding(), or None if there is no such character.
-FS_NONASCII = None
-if have_unicode:
-    for character in (
-        # First try printable and common characters to have a readable filename.
-        # For each character, the encoding list are just example of encodings able
-        # to encode the character (the list is not exhaustive).
-
-        # U+00E6 (Latin Small Letter Ae): cp1252, iso-8859-1
-        unichr(0x00E6),
-        # U+0130 (Latin Capital Letter I With Dot Above): cp1254, iso8859_3
-        unichr(0x0130),
-        # U+0141 (Latin Capital Letter L With Stroke): cp1250, cp1257
-        unichr(0x0141),
-        # U+03C6 (Greek Small Letter Phi): cp1253
-        unichr(0x03C6),
-        # U+041A (Cyrillic Capital Letter Ka): cp1251
-        unichr(0x041A),
-        # U+05D0 (Hebrew Letter Alef): Encodable to cp424
-        unichr(0x05D0),
-        # U+060C (Arabic Comma): cp864, cp1006, iso8859_6, mac_arabic
-        unichr(0x060C),
-        # U+062A (Arabic Letter Teh): cp720
-        unichr(0x062A),
-        # U+0E01 (Thai Character Ko Kai): cp874
-        unichr(0x0E01),
-
-        # Then try more "special" characters. "special" because they may be
-        # interpreted or displayed differently depending on the exact locale
-        # encoding and the font.
-
-        # U+00A0 (No-Break Space)
-        unichr(0x00A0),
-        # U+20AC (Euro Sign)
-        unichr(0x20AC),
-    ):
-        try:
-            character.encode(sys.getfilesystemencoding())\
-                     .decode(sys.getfilesystemencoding())
-        except UnicodeError:
-            pass
-        else:
-            FS_NONASCII = character
-            break
-
-# Filename used for testing
-if os.name == 'java':
-    # Jython disallows @ in module names
-    TESTFN = '$test'
-elif os.name == 'riscos':
-    TESTFN = 'testfile'
-else:
-    TESTFN = '@test'
-    # Unicode name only used if TEST_FN_ENCODING exists for the platform.
-    if have_unicode:
-        # Assuming sys.getfilesystemencoding()!=sys.getdefaultencoding()
-        # TESTFN_UNICODE is a filename that can be encoded using the
-        # file system encoding, but *not* with the default (ascii) encoding
-        if isinstance('', unicode):
-            # python -U
-            # XXX perhaps unicode() should accept Unicode strings?
-            TESTFN_UNICODE = "@test-\xe0\xf2"
-        else:
-            # 2 latin characters.
-            TESTFN_UNICODE = unicode("@test-\xe0\xf2", "latin-1")
-        TESTFN_ENCODING = sys.getfilesystemencoding()
-        # TESTFN_UNENCODABLE is a filename that should *not* be
-        # able to be encoded by *either* the default or filesystem encoding.
-        # This test really only makes sense on Windows NT platforms
-        # which have special Unicode support in posixmodule.
-        if (not hasattr(sys, "getwindowsversion") or
-                sys.getwindowsversion()[3] < 2): #  0=win32s or 1=9x/ME
-            TESTFN_UNENCODABLE = None
-        else:
-            # Japanese characters (I think - from bug 846133)
-            TESTFN_UNENCODABLE = eval('u"@test-\u5171\u6709\u3055\u308c\u308b"')
-            try:
-                # XXX - Note - should be using TESTFN_ENCODING here - but for
-                # Windows, "mbcs" currently always operates as if in
-                # errors=ignore' mode - hence we get '?' characters rather than
-                # the exception.  'Latin1' operates as we expect - ie, fails.
-                # See [ 850997 ] mbcs encoding ignores errors
-                TESTFN_UNENCODABLE.encode("Latin1")
-            except UnicodeEncodeError:
-                pass
-            else:
-                print \
-                'WARNING: The filename %r CAN be encoded by the filesystem.  ' \
-                'Unicode filename tests may not be effective' \
-                % TESTFN_UNENCODABLE
-
-
-# Disambiguate TESTFN for parallel testing, while letting it remain a valid
-# module name.
-TESTFN = "{}_{}_tmp".format(TESTFN, os.getpid())
-
-# Save the initial cwd
-SAVEDCWD = os.getcwd()
-
-@contextlib.contextmanager
-def change_cwd(path, quiet=False):
-    """Return a context manager that changes the current working directory.
-
-    Arguments:
-
-      path: the directory to use as the temporary current working directory.
-
-      quiet: if False (the default), the context manager raises an exception
-        on error.  Otherwise, it issues only a warning and keeps the current
-        working directory the same.
-
-    """
-    saved_dir = os.getcwd()
-    try:
-        os.chdir(path)
-    except OSError:
-        if not quiet:
-            raise
-        warnings.warn('tests may fail, unable to change CWD to: ' + path,
-                      RuntimeWarning, stacklevel=3)
-    try:
-        yield os.getcwd()
-    finally:
-        os.chdir(saved_dir)
-
-
-@contextlib.contextmanager
-def temp_cwd(name='tempcwd', quiet=False):
-    """
-    Context manager that creates a temporary directory and set it as CWD.
-
-    The new CWD is created in the current directory and it's named *name*.
-    If *quiet* is False (default) and it's not possible to create or change
-    the CWD, an error is raised.  If it's True, only a warning is raised
-    and the original CWD is used.
-    """
-    if (have_unicode and isinstance(name, unicode) and
-        not os.path.supports_unicode_filenames):
-        try:
-            name = name.encode(sys.getfilesystemencoding() or 'ascii')
-        except UnicodeEncodeError:
-            if not quiet:
-                raise unittest.SkipTest('unable to encode the cwd name with '
-                                        'the filesystem encoding.')
-    saved_dir = os.getcwd()
-    is_temporary = False
-    try:
-        os.mkdir(name)
-        os.chdir(name)
-        is_temporary = True
-    except OSError:
-        if not quiet:
-            raise
-        warnings.warn('tests may fail, unable to change the CWD to ' + name,
-                      RuntimeWarning, stacklevel=3)
-    try:
-        yield os.getcwd()
-    finally:
-        os.chdir(saved_dir)
-        if is_temporary:
-            rmtree(name)
-
-
-def findfile(file, here=__file__, subdir=None):
-    """Try to find a file on sys.path and the working directory.  If it is not
-    found the argument passed to the function is returned (this does not
-    necessarily signal failure; could still be the legitimate path)."""
-    if os.path.isabs(file):
-        return file
-    if subdir is not None:
-        file = os.path.join(subdir, file)
-    path = sys.path
-    path = [os.path.dirname(here)] + path
-    for dn in path:
-        fn = os.path.join(dn, file)
-        if os.path.exists(fn): return fn
-    return file
-
-def sortdict(dict):
-    "Like repr(dict), but in sorted order."
-    items = dict.items()
-    items.sort()
-    reprpairs = ["%r: %r" % pair for pair in items]
-    withcommas = ", ".join(reprpairs)
-    return "{%s}" % withcommas
-
-def make_bad_fd():
-    """
-    Create an invalid file descriptor by opening and closing a file and return
-    its fd.
-    """
-    file = open(TESTFN, "wb")
-    try:
-        return file.fileno()
-    finally:
-        file.close()
-        unlink(TESTFN)
-
-def check_syntax_error(testcase, statement):
-    testcase.assertRaises(SyntaxError, compile, statement,
-                          '<test string>', 'exec')
-
-def open_urlresource(url, check=None):
-    import urlparse, urllib2
-
-    filename = urlparse.urlparse(url)[2].split('/')[-1] # '/': it's URL!
-
-    fn = os.path.join(os.path.dirname(__file__), "data", filename)
-
-    def check_valid_file(fn):
-        f = open(fn)
-        if check is None:
-            return f
-        elif check(f):
-            f.seek(0)
-            return f
-        f.close()
-
-    if os.path.exists(fn):
-        f = check_valid_file(fn)
-        if f is not None:
-            return f
-        unlink(fn)
-
-    # Verify the requirement before downloading the file
-    requires('urlfetch')
-
-    print >> get_original_stdout(), '\tfetching %s ...' % url
-    f = urllib2.urlopen(url, timeout=15)
-    try:
-        with open(fn, "wb") as out:
-            s = f.read()
-            while s:
-                out.write(s)
-                s = f.read()
-    finally:
-        f.close()
-
-    f = check_valid_file(fn)
-    if f is not None:
-        return f
-    raise TestFailed('invalid resource "%s"' % fn)
-
-
-class WarningsRecorder(object):
-    """Convenience wrapper for the warnings list returned on
-       entry to the warnings.catch_warnings() context manager.
-    """
-    def __init__(self, warnings_list):
-        self._warnings = warnings_list
-        self._last = 0
-
-    def __getattr__(self, attr):
-        if len(self._warnings) > self._last:
-            return getattr(self._warnings[-1], attr)
-        elif attr in warnings.WarningMessage._WARNING_DETAILS:
-            return None
-        raise AttributeError("%r has no attribute %r" % (self, attr))
-
-    @property
-    def warnings(self):
-        return self._warnings[self._last:]
-
-    def reset(self):
-        self._last = len(self._warnings)
-
-
-def _filterwarnings(filters, quiet=False):
-    """Catch the warnings, then check if all the expected
-    warnings have been raised and re-raise unexpected warnings.
-    If 'quiet' is True, only re-raise the unexpected warnings.
-    """
-    # Clear the warning registry of the calling module
-    # in order to re-raise the warnings.
-    frame = sys._getframe(2)
-    registry = frame.f_globals.get('__warningregistry__')
-    if registry:
-        registry.clear()
-    with warnings.catch_warnings(record=True) as w:
-        # Set filter "always" to record all warnings.  Because
-        # test_warnings swap the module, we need to look up in
-        # the sys.modules dictionary.
-        sys.modules['warnings'].simplefilter("always")
-        yield WarningsRecorder(w)
-    # Filter the recorded warnings
-    reraise = [warning.message for warning in w]
-    missing = []
-    for msg, cat in filters:
-        seen = False
-        for exc in reraise[:]:
-            message = str(exc)
-            # Filter out the matching messages
-            if (re.match(msg, message, re.I) and
-                issubclass(exc.__class__, cat)):
-                seen = True
-                reraise.remove(exc)
-        if not seen and not quiet:
-            # This filter caught nothing
-            missing.append((msg, cat.__name__))
-    if reraise:
-        raise AssertionError("unhandled warning %r" % reraise[0])
-    if missing:
-        raise AssertionError("filter (%r, %s) did not catch any warning" %
-                             missing[0])
-
-
-@contextlib.contextmanager
-def check_warnings(*filters, **kwargs):
-    """Context manager to silence warnings.
-
-    Accept 2-tuples as positional arguments:
-        ("message regexp", WarningCategory)
-
-    Optional argument:
-     - if 'quiet' is True, it does not fail if a filter catches nothing
-        (default True without argument,
-         default False if some filters are defined)
-
-    Without argument, it defaults to:
-        check_warnings(("", Warning), quiet=True)
-    """
-    quiet = kwargs.get('quiet')
-    if not filters:
-        filters = (("", Warning),)
-        # Preserve backward compatibility
-        if quiet is None:
-            quiet = True
-    return _filterwarnings(filters, quiet)
-
-
-@contextlib.contextmanager
-def check_py3k_warnings(*filters, **kwargs):
-    """Context manager to silence py3k warnings.
-
-    Accept 2-tuples as positional arguments:
-        ("message regexp", WarningCategory)
-
-    Optional argument:
-     - if 'quiet' is True, it does not fail if a filter catches nothing
-        (default False)
-
-    Without argument, it defaults to:
-        check_py3k_warnings(("", DeprecationWarning), quiet=False)
-    """
-    if sys.py3kwarning:
-        if not filters:
-            filters = (("", DeprecationWarning),)
-    else:
-        # It should not raise any py3k warning
-        filters = ()
-    return _filterwarnings(filters, kwargs.get('quiet'))
-
-
-class CleanImport(object):
-    """Context manager to force import to return a new module reference.
-
-    This is useful for testing module-level behaviours, such as
-    the emission of a DeprecationWarning on import.
-
-    Use like this:
-
-        with CleanImport("foo"):
-            importlib.import_module("foo") # new reference
-    """
-
-    def __init__(self, *module_names):
-        self.original_modules = sys.modules.copy()
-        for module_name in module_names:
-            if module_name in sys.modules:
-                module = sys.modules[module_name]
-                # It is possible that module_name is just an alias for
-                # another module (e.g. stub for modules renamed in 3.x).
-                # In that case, we also need delete the real module to clear
-                # the import cache.
-                if module.__name__ != module_name:
-                    del sys.modules[module.__name__]
-                del sys.modules[module_name]
-
-    def __enter__(self):
-        return self
-
-    def __exit__(self, *ignore_exc):
-        sys.modules.update(self.original_modules)
-
-
-class EnvironmentVarGuard(UserDict.DictMixin):
-
-    """Class to help protect the environment variable properly.  Can be used as
-    a context manager."""
-
-    def __init__(self):
-        self._environ = os.environ
-        self._changed = {}
-
-    def __getitem__(self, envvar):
-        return self._environ[envvar]
-
-    def __setitem__(self, envvar, value):
-        # Remember the initial value on the first access
-        if envvar not in self._changed:
-            self._changed[envvar] = self._environ.get(envvar)
-        self._environ[envvar] = value
-
-    def __delitem__(self, envvar):
-        # Remember the initial value on the first access
-        if envvar not in self._changed:
-            self._changed[envvar] = self._environ.get(envvar)
-        if envvar in self._environ:
-            del self._environ[envvar]
-
-    def keys(self):
-        return self._environ.keys()
-
-    def set(self, envvar, value):
-        self[envvar] = value
-
-    def unset(self, envvar):
-        del self[envvar]
-
-    def __enter__(self):
-        return self
-
-    def __exit__(self, *ignore_exc):
-        for (k, v) in self._changed.items():
-            if v is None:
-                if k in self._environ:
-                    del self._environ[k]
-            else:
-                self._environ[k] = v
-        os.environ = self._environ
-
-
-class DirsOnSysPath(object):
-    """Context manager to temporarily add directories to sys.path.
-
-    This makes a copy of sys.path, appends any directories given
-    as positional arguments, then reverts sys.path to the copied
-    settings when the context ends.
-
-    Note that *all* sys.path modifications in the body of the
-    context manager, including replacement of the object,
-    will be reverted at the end of the block.
-    """
-
-    def __init__(self, *paths):
-        self.original_value = sys.path[:]
-        self.original_object = sys.path
-        sys.path.extend(paths)
-
-    def __enter__(self):
-        return self
-
-    def __exit__(self, *ignore_exc):
-        sys.path = self.original_object
-        sys.path[:] = self.original_value
-
-
-class TransientResource(object):
-
-    """Raise ResourceDenied if an exception is raised while the context manager
-    is in effect that matches the specified exception and attributes."""
-
-    def __init__(self, exc, **kwargs):
-        self.exc = exc
-        self.attrs = kwargs
-
-    def __enter__(self):
-        return self
-
-    def __exit__(self, type_=None, value=None, traceback=None):
-        """If type_ is a subclass of self.exc and value has attributes matching
-        self.attrs, raise ResourceDenied.  Otherwise let the exception
-        propagate (if any)."""
-        if type_ is not None and issubclass(self.exc, type_):
-            for attr, attr_value in self.attrs.iteritems():
-                if not hasattr(value, attr):
-                    break
-                if getattr(value, attr) != attr_value:
-                    break
-            else:
-                raise ResourceDenied("an optional resource is not available")
-
-
-@contextlib.contextmanager
-def transient_internet(resource_name, timeout=30.0, errnos=()):
-    """Return a context manager that raises ResourceDenied when various issues
-    with the Internet connection manifest themselves as exceptions."""
-    default_errnos = [
-        ('ECONNREFUSED', 111),
-        ('ECONNRESET', 104),
-        ('EHOSTUNREACH', 113),
-        ('ENETUNREACH', 101),
-        ('ETIMEDOUT', 110),
-    ]
-    default_gai_errnos = [
-        ('EAI_AGAIN', -3),
-        ('EAI_FAIL', -4),
-        ('EAI_NONAME', -2),
-        ('EAI_NODATA', -5),
-        # Windows defines EAI_NODATA as 11001 but idiotic getaddrinfo()
-        # implementation actually returns WSANO_DATA i.e. 11004.
-        ('WSANO_DATA', 11004),
-    ]
-
-    denied = ResourceDenied("Resource '%s' is not available" % resource_name)
-    captured_errnos = errnos
-    gai_errnos = []
-    if not captured_errnos:
-        captured_errnos = [getattr(errno, name, num)
-                           for (name, num) in default_errnos]
-        gai_errnos = [getattr(socket, name, num)
-                      for (name, num) in default_gai_errnos]
-
-    def filter_error(err):
-        n = getattr(err, 'errno', None)
-        if (isinstance(err, socket.timeout) or
-            (isinstance(err, socket.gaierror) and n in gai_errnos) or
-            n in captured_errnos):
-            if not verbose:
-                sys.stderr.write(denied.args[0] + "\n")
-            raise denied
-
-    old_timeout = socket.getdefaulttimeout()
-    try:
-        if timeout is not None:
-            socket.setdefaulttimeout(timeout)
-        yield
-    except IOError as err:
-        # urllib can wrap original socket errors multiple times (!), we must
-        # unwrap to get at the original error.
-        while True:
-            a = err.args
-            if len(a) >= 1 and isinstance(a[0], IOError):
-                err = a[0]
-            # The error can also be wrapped as args[1]:
-            #    except socket.error as msg:
-            #        raise IOError('socket error', msg).with_traceback(sys.exc_info()[2])
-            elif len(a) >= 2 and isinstance(a[1], IOError):
-                err = a[1]
-            else:
-                break
-        filter_error(err)
-        raise
-    # XXX should we catch generic exceptions and look for their
-    # __cause__ or __context__?
-    finally:
-        socket.setdefaulttimeout(old_timeout)
-
-
-@contextlib.contextmanager
-def captured_output(stream_name):
-    """Return a context manager used by captured_stdout and captured_stdin
-    that temporarily replaces the sys stream *stream_name* with a StringIO."""
-    import StringIO
-    orig_stdout = getattr(sys, stream_name)
-    setattr(sys, stream_name, StringIO.StringIO())
-    try:
-        yield getattr(sys, stream_name)
-    finally:
-        setattr(sys, stream_name, orig_stdout)
-
-def captured_stdout():
-    """Capture the output of sys.stdout:
-
-       with captured_stdout() as s:
-           print "hello"
-       self.assertEqual(s.getvalue(), "hello")
-    """
-    return captured_output("stdout")
-
-def captured_stderr():
-    return captured_output("stderr")
-
-def captured_stdin():
-    return captured_output("stdin")
-
-def gc_collect():
-    """Force as many objects as possible to be collected.
-
-    In non-CPython implementations of Python, this is needed because timely
-    deallocation is not guaranteed by the garbage collector.  (Even in CPython
-    this can be the case in case of reference cycles.)  This means that __del__
-    methods may be called later than expected and weakrefs may remain alive for
-    longer than expected.  This function tries its best to force all garbage
-    objects to disappear.
-    """
-    gc.collect()
-    if is_jython:
-        time.sleep(0.1)
-    gc.collect()
-    gc.collect()
-
-
-_header = '2P'
-if hasattr(sys, "gettotalrefcount"):
-    _header = '2P' + _header
-_vheader = _header + 'P'
-
-def calcobjsize(fmt):
-    return struct.calcsize(_header + fmt + '0P')
-
-def calcvobjsize(fmt):
-    return struct.calcsize(_vheader + fmt + '0P')
-
-
-_TPFLAGS_HAVE_GC = 1<<14
-_TPFLAGS_HEAPTYPE = 1<<9
-
-def check_sizeof(test, o, size):
-    import _testcapi
-    result = sys.getsizeof(o)
-    # add GC header size
-    if ((type(o) == type) and (o.__flags__ & _TPFLAGS_HEAPTYPE) or\
-        ((type(o) != type) and (type(o).__flags__ & _TPFLAGS_HAVE_GC))):
-        size += _testcapi.SIZEOF_PYGC_HEAD
-    msg = 'wrong size for %s: got %d, expected %d' \
-            % (type(o), result, size)
-    test.assertEqual(result, size, msg)
-
-
-#=======================================================================
-# Decorator for running a function in a different locale, correctly resetting
-# it afterwards.
-
-def run_with_locale(catstr, *locales):
-    def decorator(func):
-        def inner(*args, **kwds):
-            try:
-                import locale
-                category = getattr(locale, catstr)
-                orig_locale = locale.setlocale(category)
-            except AttributeError:
-                # if the test author gives us an invalid category string
-                raise
-            except:
-                # cannot retrieve original locale, so do nothing
-                locale = orig_locale = None
-            else:
-                for loc in locales:
-                    try:
-                        locale.setlocale(category, loc)
-                        break
-                    except:
-                        pass
-
-            # now run the function, resetting the locale on exceptions
-            try:
-                return func(*args, **kwds)
-            finally:
-                if locale and orig_locale:
-                    locale.setlocale(category, orig_locale)
-        inner.func_name = func.func_name
-        inner.__doc__ = func.__doc__
-        return inner
-    return decorator
-
-#=======================================================================
-# Decorator for running a function in a specific timezone, correctly
-# resetting it afterwards.
-
-def run_with_tz(tz):
-    def decorator(func):
-        def inner(*args, **kwds):
-            try:
-                tzset = time.tzset
-            except AttributeError:
-                raise unittest.SkipTest("tzset required")
-            if 'TZ' in os.environ:
-                orig_tz = os.environ['TZ']
-            else:
-                orig_tz = None
-            os.environ['TZ'] = tz
-            tzset()
-
-            # now run the function, resetting the tz on exceptions
-            try:
-                return func(*args, **kwds)
-            finally:
-                if orig_tz is None:
-                    del os.environ['TZ']
-                else:
-                    os.environ['TZ'] = orig_tz
-                time.tzset()
-
-        inner.__name__ = func.__name__
-        inner.__doc__ = func.__doc__
-        return inner
-    return decorator
-
-#=======================================================================
-# Big-memory-test support. Separate from 'resources' because memory use should be configurable.
-
-# Some handy shorthands. Note that these are used for byte-limits as well
-# as size-limits, in the various bigmem tests
-_1M = 1024*1024
-_1G = 1024 * _1M
-_2G = 2 * _1G
-_4G = 4 * _1G
-
-MAX_Py_ssize_t = sys.maxsize
-
-def set_memlimit(limit):
-    global max_memuse
-    global real_max_memuse
-    sizes = {
-        'k': 1024,
-        'm': _1M,
-        'g': _1G,
-        't': 1024*_1G,
-    }
-    m = re.match(r'(\d+(\.\d+)?) (K|M|G|T)b?$', limit,
-                 re.IGNORECASE | re.VERBOSE)
-    if m is None:
-        raise ValueError('Invalid memory limit %r' % (limit,))
-    memlimit = int(float(m.group(1)) * sizes[m.group(3).lower()])
-    real_max_memuse = memlimit
-    if memlimit > MAX_Py_ssize_t:
-        memlimit = MAX_Py_ssize_t
-    if memlimit < _2G - 1:
-        raise ValueError('Memory limit %r too low to be useful' % (limit,))
-    max_memuse = memlimit
-
-def bigmemtest(minsize, memuse, overhead=5*_1M):
-    """Decorator for bigmem tests.
-
-    'minsize' is the minimum useful size for the test (in arbitrary,
-    test-interpreted units.) 'memuse' is the number of 'bytes per size' for
-    the test, or a good estimate of it. 'overhead' specifies fixed overhead,
-    independent of the testsize, and defaults to 5Mb.
-
-    The decorator tries to guess a good value for 'size' and passes it to
-    the decorated test function. If minsize * memuse is more than the
-    allowed memory use (as defined by max_memuse), the test is skipped.
-    Otherwise, minsize is adjusted upward to use up to max_memuse.
-    """
-    def decorator(f):
-        def wrapper(self):
-            if not max_memuse:
-                # If max_memuse is 0 (the default),
-                # we still want to run the tests with size set to a few kb,
-                # to make sure they work. We still want to avoid using
-                # too much memory, though, but we do that noisily.
-                maxsize = 5147
-                self.assertFalse(maxsize * memuse + overhead > 20 * _1M)
-            else:
-                maxsize = int((max_memuse - overhead) / memuse)
-                if maxsize < minsize:
-                    # Really ought to print 'test skipped' or something
-                    if verbose:
-                        sys.stderr.write("Skipping %s because of memory "
-                                         "constraint\n" % (f.__name__,))
-                    return
-                # Try to keep some breathing room in memory use
-                maxsize = max(maxsize - 50 * _1M, minsize)
-            return f(self, maxsize)
-        wrapper.minsize = minsize
-        wrapper.memuse = memuse
-        wrapper.overhead = overhead
-        return wrapper
-    return decorator
-
-def precisionbigmemtest(size, memuse, overhead=5*_1M, dry_run=True):
-    def decorator(f):
-        def wrapper(self):
-            if not real_max_memuse:
-                maxsize = 5147
-            else:
-                maxsize = size
-
-            if ((real_max_memuse or not dry_run)
-                and real_max_memuse < maxsize * memuse):
-                if verbose:
-                    sys.stderr.write("Skipping %s because of memory "
-                                     "constraint\n" % (f.__name__,))
-                return
-
-            return f(self, maxsize)
-        wrapper.size = size
-        wrapper.memuse = memuse
-        wrapper.overhead = overhead
-        return wrapper
-    return decorator
-
-def bigaddrspacetest(f):
-    """Decorator for tests that fill the address space."""
-    def wrapper(self):
-        if max_memuse < MAX_Py_ssize_t:
-            if verbose:
-                sys.stderr.write("Skipping %s because of memory "
-                                 "constraint\n" % (f.__name__,))
-        else:
-            return f(self)
-    return wrapper
-
-#=======================================================================
-# unittest integration.
-
-class BasicTestRunner:
-    def run(self, test):
-        result = unittest.TestResult()
-        test(result)
-        return result
-
-def _id(obj):
-    return obj
-
-def requires_resource(resource):
-    if resource == 'gui' and not _is_gui_available():
-        return unittest.skip(_is_gui_available.reason)
-    if is_resource_enabled(resource):
-        return _id
-    else:
-        return unittest.skip("resource {0!r} is not enabled".format(resource))
-
-def cpython_only(test):
-    """
-    Decorator for tests only applicable on CPython.
-    """
-    return impl_detail(cpython=True)(test)
-
-def impl_detail(msg=None, **guards):
-    if check_impl_detail(**guards):
-        return _id
-    if msg is None:
-        guardnames, default = _parse_guards(guards)
-        if default:
-            msg = "implementation detail not available on {0}"
-        else:
-            msg = "implementation detail specific to {0}"
-        guardnames = sorted(guardnames.keys())
-        msg = msg.format(' or '.join(guardnames))
-    return unittest.skip(msg)
-
-def _parse_guards(guards):
-    # Returns a tuple ({platform_name: run_me}, default_value)
-    if not guards:
-        return ({'cpython': True}, False)
-    is_true = guards.values()[0]
-    assert guards.values() == [is_true] * len(guards)   # all True or all False
-    return (guards, not is_true)
-
-# Use the following check to guard CPython's implementation-specific tests --
-# or to run them only on the implementation(s) guarded by the arguments.
-def check_impl_detail(**guards):
-    """This function returns True or False depending on the host platform.
-       Examples:
-          if check_impl_detail():               # only on CPython (default)
-          if check_impl_detail(jython=True):    # only on Jython
-          if check_impl_detail(cpython=False):  # everywhere except on CPython
-    """
-    guards, default = _parse_guards(guards)
-    return guards.get(platform.python_implementation().lower(), default)
-
-
-
-def _run_suite(suite):
-    """Run tests from a unittest.TestSuite-derived class."""
-    if verbose:
-        runner = unittest.TextTestRunner(sys.stdout, verbosity=2)
-    else:
-        runner = BasicTestRunner()
-
-    result = runner.run(suite)
-    if not result.wasSuccessful():
-        if len(result.errors) == 1 and not result.failures:
-            err = result.errors[0][1]
-        elif len(result.failures) == 1 and not result.errors:
-            err = result.failures[0][1]
-        else:
-            err = "multiple errors occurred"
-            if not verbose:
-                err += "; run in verbose mode for details"
-        raise TestFailed(err)
-
-
-def run_unittest(*classes):
-    """Run tests from unittest.TestCase-derived classes."""
-    valid_types = (unittest.TestSuite, unittest.TestCase)
-    suite = unittest.TestSuite()
-    for cls in classes:
-        if isinstance(cls, str):
-            if cls in sys.modules:
-                suite.addTest(unittest.findTestCases(sys.modules[cls]))
-            else:
-                raise ValueError("str arguments must be keys in sys.modules")
-        elif isinstance(cls, valid_types):
-            suite.addTest(cls)
-        else:
-            suite.addTest(unittest.makeSuite(cls))
-    _run_suite(suite)
-
-#=======================================================================
-# Check for the presence of docstrings.
-
-HAVE_DOCSTRINGS = (check_impl_detail(cpython=False) or
-                   sys.platform == 'win32' or
-                   sysconfig.get_config_var('WITH_DOC_STRINGS'))
-
-requires_docstrings = unittest.skipUnless(HAVE_DOCSTRINGS,
-                                          "test requires docstrings")
-
-
-#=======================================================================
-# doctest driver.
-
-def run_doctest(module, verbosity=None):
-    """Run doctest on the given module.  Return (#failures, #tests).
-
-    If optional argument verbosity is not specified (or is None), pass
-    test_support's belief about verbosity on to doctest.  Else doctest's
-    usual behavior is used (it searches sys.argv for -v).
-    """
-
-    import doctest
-
-    if verbosity is None:
-        verbosity = verbose
-    else:
-        verbosity = None
-
-    # Direct doctest output (normally just errors) to real stdout; doctest
-    # output shouldn't be compared by regrtest.
-    save_stdout = sys.stdout
-    sys.stdout = get_original_stdout()
-    try:
-        f, t = doctest.testmod(module, verbose=verbosity)
-        if f:
-            raise TestFailed("%d of %d doctests failed" % (f, t))
-    finally:
-        sys.stdout = save_stdout
-    if verbose:
-        print 'doctest (%s) ... %d tests with zero failures' % (module.__name__, t)
-    return f, t
-
-#=======================================================================
-# Threading support to prevent reporting refleaks when running regrtest.py -R
-
-# NOTE: we use thread._count() rather than threading.enumerate() (or the
-# moral equivalent thereof) because a threading.Thread object is still alive
-# until its __bootstrap() method has returned, even after it has been
-# unregistered from the threading module.
-# thread._count(), on the other hand, only gets decremented *after* the
-# __bootstrap() method has returned, which gives us reliable reference counts
-# at the end of a test run.
-
-def threading_setup():
-    if thread:
-        return thread._count(),
-    else:
-        return 1,
-
-def threading_cleanup(nb_threads):
-    if not thread:
-        return
-
-    _MAX_COUNT = 10
-    for count in range(_MAX_COUNT):
-        n = thread._count()
-        if n == nb_threads:
-            break
-        time.sleep(0.1)
-    # XXX print a warning in case of failure?
-
-def reap_threads(func):
-    """Use this function when threads are being used.  This will
-    ensure that the threads are cleaned up even when the test fails.
-    If threading is unavailable this function does nothing.
-    """
-    if not thread:
-        return func
-
-    @functools.wraps(func)
-    def decorator(*args):
-        key = threading_setup()
-        try:
-            return func(*args)
-        finally:
-            threading_cleanup(*key)
-    return decorator
-
-def reap_children():
-    """Use this function at the end of test_main() whenever sub-processes
-    are started.  This will help ensure that no extra children (zombies)
-    stick around to hog resources and create problems when looking
-    for refleaks.
-    """
-
-    # Reap all our dead child processes so we don't leave zombies around.
-    # These hog resources and might be causing some of the buildbots to die.
-    if hasattr(os, 'waitpid'):
-        any_process = -1
-        while True:
-            try:
-                # This will raise an exception on Windows.  That's ok.
-                pid, status = os.waitpid(any_process, os.WNOHANG)
-                if pid == 0:
-                    break
-            except:
-                break
-
-@contextlib.contextmanager
-def start_threads(threads, unlock=None):
-    threads = list(threads)
-    started = []
-    try:
-        try:
-            for t in threads:
-                t.start()
-                started.append(t)
-        except:
-            if verbose:
-                print("Can't start %d threads, only %d threads started" %
-                      (len(threads), len(started)))
-            raise
-        yield
-    finally:
-        if unlock:
-            unlock()
-        endtime = starttime = time.time()
-        for timeout in range(1, 16):
-            endtime += 60
-            for t in started:
-                t.join(max(endtime - time.time(), 0.01))
-            started = [t for t in started if t.isAlive()]
-            if not started:
-                break
-            if verbose:
-                print('Unable to join %d threads during a period of '
-                      '%d minutes' % (len(started), timeout))
-    started = [t for t in started if t.isAlive()]
-    if started:
-        raise AssertionError('Unable to join %d threads' % len(started))
-
-@contextlib.contextmanager
-def swap_attr(obj, attr, new_val):
-    """Temporary swap out an attribute with a new object.
-
-    Usage:
-        with swap_attr(obj, "attr", 5):
-            ...
-
-        This will set obj.attr to 5 for the duration of the with: block,
-        restoring the old value at the end of the block. If `attr` doesn't
-        exist on `obj`, it will be created and then deleted at the end of the
-        block.
-    """
-    if hasattr(obj, attr):
-        real_val = getattr(obj, attr)
-        setattr(obj, attr, new_val)
-        try:
-            yield
-        finally:
-            setattr(obj, attr, real_val)
-    else:
-        setattr(obj, attr, new_val)
-        try:
-            yield
-        finally:
-            delattr(obj, attr)
-
-def py3k_bytes(b):
-    """Emulate the py3k bytes() constructor.
-
-    NOTE: This is only a best effort function.
-    """
-    try:
-        # memoryview?
-        return b.tobytes()
-    except AttributeError:
-        try:
-            # iterable of ints?
-            return b"".join(chr(x) for x in b)
-        except TypeError:
-            return bytes(b)
-
-def args_from_interpreter_flags():
-    """Return a list of command-line arguments reproducing the current
-    settings in sys.flags."""
-    import subprocess
-    return subprocess._args_from_interpreter_flags()
-
-def strip_python_stderr(stderr):
-    """Strip the stderr of a Python process from potential debug output
-    emitted by the interpreter.
-
-    This will typically be run on the result of the communicate() method
-    of a subprocess.Popen object.
-    """
-    stderr = re.sub(br"\[\d+ refs\]\r?\n?$", b"", stderr).strip()
-    return stderr
-
-
-def check_free_after_iterating(test, iter, cls, args=()):
-    class A(cls):
-        def __del__(self):
-            done[0] = True
-            try:
-                next(it)
-            except StopIteration:
-                pass
-
-    done = [False]
-    it = iter(A(*args))
-    # Issue 26494: Shouldn't crash
-    test.assertRaises(StopIteration, next, it)
-    # The sequence should be deallocated just after the end of iterating
-    gc_collect()
-    test.assertTrue(done[0])
+import test.support
+sys.modules['test.test_support'] = test.support
diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py
index 0a61462..103b4c1 100644
--- a/Lib/test/test_syntax.py
+++ b/Lib/test/test_syntax.py
@@ -73,13 +73,12 @@
 
 >>> "abc" = 1
 Traceback (most recent call last):
-  File "<doctest test.test_syntax[8]>", line 1
+  File "<doctest test.test_syntax[9]>", line 1
 SyntaxError: can't assign to literal
 
->>> `1` = 1
+>>> b"" = 1
 Traceback (most recent call last):
-  File "<doctest test.test_syntax[10]>", line 1
-SyntaxError: can't assign to repr
+SyntaxError: can't assign to literal
 
 If the left-hand side of an assignment is a list or tuple, an illegal
 expression inside that contain should still cause a syntax error.
@@ -148,7 +147,7 @@
 
 From ast_for_call():
 
->>> def f(it, *varargs):
+>>> def f(it, *varargs, **kwargs):
 ...     return list(it)
 >>> L = range(10)
 >>> f(x for x in L)
@@ -157,73 +156,179 @@
 Traceback (most recent call last):
   File "<doctest test.test_syntax[23]>", line 1
 SyntaxError: Generator expression must be parenthesized if not sole argument
+>>> f(x for x in L, y=1)
+Traceback (most recent call last):
+SyntaxError: Generator expression must be parenthesized if not sole argument
+>>> f(L, x for x in L)
+Traceback (most recent call last):
+SyntaxError: Generator expression must be parenthesized if not sole argument
+>>> f(x for x in L, y for y in L)
+Traceback (most recent call last):
+SyntaxError: Generator expression must be parenthesized if not sole argument
+>>> f(x for x in L,)
+[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 >>> f((x for x in L), 1)
 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 
->>> f(i0,  i1,  i2,  i3,  i4,  i5,  i6,  i7,  i8,  i9,  i10,  i11,
-...   i12,  i13,  i14,  i15,  i16,  i17,  i18,  i19,  i20,  i21,  i22,
-...   i23,  i24,  i25,  i26,  i27,  i28,  i29,  i30,  i31,  i32,  i33,
-...   i34,  i35,  i36,  i37,  i38,  i39,  i40,  i41,  i42,  i43,  i44,
-...   i45,  i46,  i47,  i48,  i49,  i50,  i51,  i52,  i53,  i54,  i55,
-...   i56,  i57,  i58,  i59,  i60,  i61,  i62,  i63,  i64,  i65,  i66,
-...   i67,  i68,  i69,  i70,  i71,  i72,  i73,  i74,  i75,  i76,  i77,
-...   i78,  i79,  i80,  i81,  i82,  i83,  i84,  i85,  i86,  i87,  i88,
-...   i89,  i90,  i91,  i92,  i93,  i94,  i95,  i96,  i97,  i98,  i99,
-...   i100,  i101,  i102,  i103,  i104,  i105,  i106,  i107,  i108,
-...   i109,  i110,  i111,  i112,  i113,  i114,  i115,  i116,  i117,
-...   i118,  i119,  i120,  i121,  i122,  i123,  i124,  i125,  i126,
-...   i127,  i128,  i129,  i130,  i131,  i132,  i133,  i134,  i135,
-...   i136,  i137,  i138,  i139,  i140,  i141,  i142,  i143,  i144,
-...   i145,  i146,  i147,  i148,  i149,  i150,  i151,  i152,  i153,
-...   i154,  i155,  i156,  i157,  i158,  i159,  i160,  i161,  i162,
-...   i163,  i164,  i165,  i166,  i167,  i168,  i169,  i170,  i171,
-...   i172,  i173,  i174,  i175,  i176,  i177,  i178,  i179,  i180,
-...   i181,  i182,  i183,  i184,  i185,  i186,  i187,  i188,  i189,
-...   i190,  i191,  i192,  i193,  i194,  i195,  i196,  i197,  i198,
-...   i199,  i200,  i201,  i202,  i203,  i204,  i205,  i206,  i207,
-...   i208,  i209,  i210,  i211,  i212,  i213,  i214,  i215,  i216,
-...   i217,  i218,  i219,  i220,  i221,  i222,  i223,  i224,  i225,
-...   i226,  i227,  i228,  i229,  i230,  i231,  i232,  i233,  i234,
-...   i235,  i236,  i237,  i238,  i239,  i240,  i241,  i242,  i243,
-...   i244,  i245,  i246,  i247,  i248,  i249,  i250,  i251,  i252,
-...   i253,  i254,  i255)
+>>> def g(*args, **kwargs):
+...     print args, sorted(kwargs.items())
+>>> g(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+...   20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+...   38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+...   56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+...   74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+...   92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+...   108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+...   122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+...   136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+...   150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
+...   164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
+...   178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+...   192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+...   206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
+...   220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
+...   234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
+...   248, 249, 250, 251, 252, 253, 254)  # doctest: +ELLIPSIS
+(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..., 252, 253, 254) []
+>>> g(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+...   20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+...   38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+...   56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+...   74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+...   92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+...   108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+...   122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+...   136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+...   150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
+...   164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
+...   178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+...   192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+...   206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
+...   220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
+...   234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
+...   248, 249, 250, 251, 252, 253, 254, 255)
 Traceback (most recent call last):
   File "<doctest test.test_syntax[25]>", line 1
 SyntaxError: more than 255 arguments
 
-The actual error cases counts positional arguments, keyword arguments,
-and generator expression arguments separately.  This test combines the
-three.
-
->>> f(i0,  i1,  i2,  i3,  i4,  i5,  i6,  i7,  i8,  i9,  i10,  i11,
-...   i12,  i13,  i14,  i15,  i16,  i17,  i18,  i19,  i20,  i21,  i22,
-...   i23,  i24,  i25,  i26,  i27,  i28,  i29,  i30,  i31,  i32,  i33,
-...   i34,  i35,  i36,  i37,  i38,  i39,  i40,  i41,  i42,  i43,  i44,
-...   i45,  i46,  i47,  i48,  i49,  i50,  i51,  i52,  i53,  i54,  i55,
-...   i56,  i57,  i58,  i59,  i60,  i61,  i62,  i63,  i64,  i65,  i66,
-...   i67,  i68,  i69,  i70,  i71,  i72,  i73,  i74,  i75,  i76,  i77,
-...   i78,  i79,  i80,  i81,  i82,  i83,  i84,  i85,  i86,  i87,  i88,
-...   i89,  i90,  i91,  i92,  i93,  i94,  i95,  i96,  i97,  i98,  i99,
-...   i100,  i101,  i102,  i103,  i104,  i105,  i106,  i107,  i108,
-...   i109,  i110,  i111,  i112,  i113,  i114,  i115,  i116,  i117,
-...   i118,  i119,  i120,  i121,  i122,  i123,  i124,  i125,  i126,
-...   i127,  i128,  i129,  i130,  i131,  i132,  i133,  i134,  i135,
-...   i136,  i137,  i138,  i139,  i140,  i141,  i142,  i143,  i144,
-...   i145,  i146,  i147,  i148,  i149,  i150,  i151,  i152,  i153,
-...   i154,  i155,  i156,  i157,  i158,  i159,  i160,  i161,  i162,
-...   i163,  i164,  i165,  i166,  i167,  i168,  i169,  i170,  i171,
-...   i172,  i173,  i174,  i175,  i176,  i177,  i178,  i179,  i180,
-...   i181,  i182,  i183,  i184,  i185,  i186,  i187,  i188,  i189,
-...   i190,  i191,  i192,  i193,  i194,  i195,  i196,  i197,  i198,
-...   i199,  i200,  i201,  i202,  i203,  i204,  i205,  i206,  i207,
-...   i208,  i209,  i210,  i211,  i212,  i213,  i214,  i215,  i216,
-...   i217,  i218,  i219,  i220,  i221,  i222,  i223,  i224,  i225,
-...   i226,  i227,  i228,  i229,  i230,  i231,  i232,  i233,  i234,
-...   i235, i236,  i237,  i238,  i239,  i240,  i241,  i242,  i243,
-...   (x for x in i244),  i245,  i246,  i247,  i248,  i249,  i250,  i251,
-...    i252=1, i253=1,  i254=1,  i255=1)
+>>> g(a000=0, a001=1, a002=2, a003=3, a004=4, a005=5, a006=6, a007=7, a008=8,
+...   a009=9, a010=10, a011=11, a012=12, a013=13, a014=14, a015=15, a016=16,
+...   a017=17, a018=18, a019=19, a020=20, a021=21, a022=22, a023=23, a024=24,
+...   a025=25, a026=26, a027=27, a028=28, a029=29, a030=30, a031=31, a032=32,
+...   a033=33, a034=34, a035=35, a036=36, a037=37, a038=38, a039=39, a040=40,
+...   a041=41, a042=42, a043=43, a044=44, a045=45, a046=46, a047=47, a048=48,
+...   a049=49, a050=50, a051=51, a052=52, a053=53, a054=54, a055=55, a056=56,
+...   a057=57, a058=58, a059=59, a060=60, a061=61, a062=62, a063=63, a064=64,
+...   a065=65, a066=66, a067=67, a068=68, a069=69, a070=70, a071=71, a072=72,
+...   a073=73, a074=74, a075=75, a076=76, a077=77, a078=78, a079=79, a080=80,
+...   a081=81, a082=82, a083=83, a084=84, a085=85, a086=86, a087=87, a088=88,
+...   a089=89, a090=90, a091=91, a092=92, a093=93, a094=94, a095=95, a096=96,
+...   a097=97, a098=98, a099=99, a100=100, a101=101, a102=102, a103=103,
+...   a104=104, a105=105, a106=106, a107=107, a108=108, a109=109, a110=110,
+...   a111=111, a112=112, a113=113, a114=114, a115=115, a116=116, a117=117,
+...   a118=118, a119=119, a120=120, a121=121, a122=122, a123=123, a124=124,
+...   a125=125, a126=126, a127=127, a128=128, a129=129, a130=130, a131=131,
+...   a132=132, a133=133, a134=134, a135=135, a136=136, a137=137, a138=138,
+...   a139=139, a140=140, a141=141, a142=142, a143=143, a144=144, a145=145,
+...   a146=146, a147=147, a148=148, a149=149, a150=150, a151=151, a152=152,
+...   a153=153, a154=154, a155=155, a156=156, a157=157, a158=158, a159=159,
+...   a160=160, a161=161, a162=162, a163=163, a164=164, a165=165, a166=166,
+...   a167=167, a168=168, a169=169, a170=170, a171=171, a172=172, a173=173,
+...   a174=174, a175=175, a176=176, a177=177, a178=178, a179=179, a180=180,
+...   a181=181, a182=182, a183=183, a184=184, a185=185, a186=186, a187=187,
+...   a188=188, a189=189, a190=190, a191=191, a192=192, a193=193, a194=194,
+...   a195=195, a196=196, a197=197, a198=198, a199=199, a200=200, a201=201,
+...   a202=202, a203=203, a204=204, a205=205, a206=206, a207=207, a208=208,
+...   a209=209, a210=210, a211=211, a212=212, a213=213, a214=214, a215=215,
+...   a216=216, a217=217, a218=218, a219=219, a220=220, a221=221, a222=222,
+...   a223=223, a224=224, a225=225, a226=226, a227=227, a228=228, a229=229,
+...   a230=230, a231=231, a232=232, a233=233, a234=234, a235=235, a236=236,
+...   a237=237, a238=238, a239=239, a240=240, a241=241, a242=242, a243=243,
+...   a244=244, a245=245, a246=246, a247=247, a248=248, a249=249, a250=250,
+...   a251=251, a252=252, a253=253, a254=254)  # doctest: +ELLIPSIS
+() [('a000', 0), ('a001', 1), ('a002', 2), ..., ('a253', 253), ('a254', 254)]
+>>> g(a000=0, a001=1, a002=2, a003=3, a004=4, a005=5, a006=6, a007=7, a008=8,
+...   a009=9, a010=10, a011=11, a012=12, a013=13, a014=14, a015=15, a016=16,
+...   a017=17, a018=18, a019=19, a020=20, a021=21, a022=22, a023=23, a024=24,
+...   a025=25, a026=26, a027=27, a028=28, a029=29, a030=30, a031=31, a032=32,
+...   a033=33, a034=34, a035=35, a036=36, a037=37, a038=38, a039=39, a040=40,
+...   a041=41, a042=42, a043=43, a044=44, a045=45, a046=46, a047=47, a048=48,
+...   a049=49, a050=50, a051=51, a052=52, a053=53, a054=54, a055=55, a056=56,
+...   a057=57, a058=58, a059=59, a060=60, a061=61, a062=62, a063=63, a064=64,
+...   a065=65, a066=66, a067=67, a068=68, a069=69, a070=70, a071=71, a072=72,
+...   a073=73, a074=74, a075=75, a076=76, a077=77, a078=78, a079=79, a080=80,
+...   a081=81, a082=82, a083=83, a084=84, a085=85, a086=86, a087=87, a088=88,
+...   a089=89, a090=90, a091=91, a092=92, a093=93, a094=94, a095=95, a096=96,
+...   a097=97, a098=98, a099=99, a100=100, a101=101, a102=102, a103=103,
+...   a104=104, a105=105, a106=106, a107=107, a108=108, a109=109, a110=110,
+...   a111=111, a112=112, a113=113, a114=114, a115=115, a116=116, a117=117,
+...   a118=118, a119=119, a120=120, a121=121, a122=122, a123=123, a124=124,
+...   a125=125, a126=126, a127=127, a128=128, a129=129, a130=130, a131=131,
+...   a132=132, a133=133, a134=134, a135=135, a136=136, a137=137, a138=138,
+...   a139=139, a140=140, a141=141, a142=142, a143=143, a144=144, a145=145,
+...   a146=146, a147=147, a148=148, a149=149, a150=150, a151=151, a152=152,
+...   a153=153, a154=154, a155=155, a156=156, a157=157, a158=158, a159=159,
+...   a160=160, a161=161, a162=162, a163=163, a164=164, a165=165, a166=166,
+...   a167=167, a168=168, a169=169, a170=170, a171=171, a172=172, a173=173,
+...   a174=174, a175=175, a176=176, a177=177, a178=178, a179=179, a180=180,
+...   a181=181, a182=182, a183=183, a184=184, a185=185, a186=186, a187=187,
+...   a188=188, a189=189, a190=190, a191=191, a192=192, a193=193, a194=194,
+...   a195=195, a196=196, a197=197, a198=198, a199=199, a200=200, a201=201,
+...   a202=202, a203=203, a204=204, a205=205, a206=206, a207=207, a208=208,
+...   a209=209, a210=210, a211=211, a212=212, a213=213, a214=214, a215=215,
+...   a216=216, a217=217, a218=218, a219=219, a220=220, a221=221, a222=222,
+...   a223=223, a224=224, a225=225, a226=226, a227=227, a228=228, a229=229,
+...   a230=230, a231=231, a232=232, a233=233, a234=234, a235=235, a236=236,
+...   a237=237, a238=238, a239=239, a240=240, a241=241, a242=242, a243=243,
+...   a244=244, a245=245, a246=246, a247=247, a248=248, a249=249, a250=250,
+...   a251=251, a252=252, a253=253, a254=254, a255=255)
 Traceback (most recent call last):
-  File "<doctest test.test_syntax[26]>", line 1
+  File "<doctest test.test_syntax[35]>", line 1
+SyntaxError: more than 255 arguments
+
+>>> class C:
+...     def meth(self, *args):
+...         return args
+>>> obj = C()
+>>> obj.meth(
+...   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+...   20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+...   38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+...   56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+...   74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+...   92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+...   108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+...   122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+...   136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+...   150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
+...   164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
+...   178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+...   192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+...   206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
+...   220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
+...   234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
+...   248, 249, 250, 251, 252, 253, 254)  # doctest: +ELLIPSIS
+(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..., 252, 253, 254)
+>>> obj.meth(
+...   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+...   20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+...   38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+...   56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+...   74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+...   92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+...   108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+...   122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+...   136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+...   150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
+...   164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
+...   178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+...   192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+...   206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
+...   220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
+...   234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
+...   248, 249, 250, 251, 252, 253, 254, 255)
+Traceback (most recent call last):
+  File "<doctest test.test_syntax[38]>", line 1
 SyntaxError: more than 255 arguments
 
 >>> f(lambda x: x[0] = 3)
@@ -403,6 +508,16 @@
      ...
    SyntaxError: too many statically nested blocks
 
+Misuse of the global statement can lead to a few unique syntax errors.
+
+   >>> def f(x):
+   ...     global x
+   ... # doctest: +ELLIPSIS
+   Traceback (most recent call last):
+     ...
+   SyntaxError: name 'x' is local and global (<doctest ...>, line 1)
+
+
 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,
 leading to spurious errors.
@@ -458,9 +573,21 @@
      File "<doctest test.test_syntax[48]>", line 6
    SyntaxError: can't assign to function call
 
+Test the "raise X, Y[, Z]" form:
+
+   >>> raise ArithmeticError, 'bad number'
+   Traceback (most recent call last):
+     ...
+   ArithmeticError: bad number
+   >>> raise ArithmeticError, 'bad number', None
+   Traceback (most recent call last):
+     ...
+   ArithmeticError: bad number
+
+
 >>> f(a=23, a=234)
 Traceback (most recent call last):
-   ...
+  ...
   File "<doctest test.test_syntax[49]>", line 1
 SyntaxError: keyword argument repeated
 
@@ -476,6 +603,12 @@
    File "<doctest test.test_syntax[50]>", line 1
 SyntaxError: can't assign to literal
 
+Corner-case that used to fail to raise the correct error:
+
+    >>> def f(x=lambda __debug__:0): pass
+    Traceback (most recent call last):
+    SyntaxError: cannot assign to __debug__
+
 Corner-case that used to crash:
 
     >>> def f(*xx, **__debug__): pass
@@ -488,12 +621,12 @@
 import unittest
 import warnings
 
-from test import test_support
+from test import support
 
 class SyntaxTestCase(unittest.TestCase):
 
     def _check_error(self, code, errtext,
-                     filename="<testcase>", mode="exec", subclass=None):
+                     filename="<testcase>", mode="exec", subclass=None, lineno=None, offset=None):
         """Check that compiling code raises SyntaxError with errtext.
 
         errtest is a regular expression that must be present in the
@@ -501,13 +634,19 @@
         is the expected subclass of SyntaxError (e.g. IndentationError).
         """
         try:
-            compile(code, filename, mode)
-        except SyntaxError, err:
+            compile(code, filename or "<testcase>", mode)
+        except SyntaxError as err:
             if subclass and not isinstance(err, subclass):
                 self.fail("SyntaxError is not a %s" % subclass.__name__)
             mo = re.search(errtext, str(err))
             if mo is None:
                 self.fail("%s did not contain '%r'" % (err, errtext,))
+            if filename is not None:
+                self.assertEqual(err.filename, filename)
+            if lineno is not None:
+                self.assertEqual(err.lineno, lineno)
+            if offset is not None:
+                self.assertEqual(err.offset, offset)
         else:
             self.fail("compile() did not raise SyntaxError")
 
@@ -515,6 +654,11 @@
         self._check_error("def f((x)=23): pass",
                           "parenthesized arg with default")
 
+    def test_assign_repr(self):
+        with support.check_py3k_warnings(('backquote not supported',
+                                          SyntaxWarning)):
+            self._check_error("`1` = 1", "assign to repr")
+
     def test_assign_call(self):
         self._check_error("f() = 1", "assign")
 
@@ -524,28 +668,48 @@
     def test_global_err_then_warn(self):
         # Bug tickler:  The SyntaxError raised for one global statement
         # shouldn't be clobbered by a SyntaxWarning issued for a later one.
-        source = re.sub('(?m)^ *:', '', """\
-            :def error(a):
-            :    global a  # SyntaxError
-            :def warning():
-            :    b = 1
-            :    global b  # SyntaxWarning
-            :""")
-        warnings.filterwarnings(action='ignore', category=SyntaxWarning)
-        self._check_error(source, "global")
-        warnings.filters.pop(0)
+        source = """if 1:
+            def error(a):
+                global a  # SyntaxError
+            def warning():
+                b = 1
+                global b  # SyntaxWarning
+            """
+        with support.check_warnings((".*assigned to before global declaration",
+                                     SyntaxWarning)):
+            self._check_error(source, "local and global", lineno=2)
+
+    def test_misuse_global(self):
+        source = """if 1:
+            def f():
+                print(x)
+                global x
+            """
+        with support.check_warnings(('.*used prior to global declaration',
+                                     SyntaxWarning)):
+            compile(source, '<testcase>', 'exec')
+
+    def test_misuse_global_2(self):
+        source = """if 1:
+            def f():
+                x = 1
+                global x
+            """
+        with support.check_warnings(('.*assigned to before global declaration',
+                                     SyntaxWarning)):
+            compile(source, '<testcase>', 'exec')
 
     def test_break_outside_loop(self):
         self._check_error("break", "outside loop")
 
     def test_delete_deref(self):
-        source = re.sub('(?m)^ *:', '', """\
-            :def foo(x):
-            :  def bar():
-            :    print x
-            :  del x
-            :""")
-        self._check_error(source, "nested scope")
+        source = """if 1:
+            def foo(x):
+                def bar():
+                    print(x)
+                del x
+            """
+        self._check_error(source, "nested scope", filename=None)
 
     def test_unexpected_indent(self):
         self._check_error("foo()\n bar()\n", "unexpected indent",
@@ -564,11 +728,9 @@
         self._check_error("int(base=10, '2')", "non-keyword arg")
 
 def test_main():
-    test_support.run_unittest(SyntaxTestCase)
+    support.run_unittest(SyntaxTestCase)
     from test import test_syntax
-    with test_support.check_py3k_warnings(("backquote not supported",
-                                             SyntaxWarning)):
-        test_support.run_doctest(test_syntax, verbosity=True)
+    support.run_doctest(test_syntax, verbosity=True)
 
 if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index 95bd26e..9342716 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -164,6 +164,17 @@
         self.assertEqual(out, b'')
         self.assertEqual(err, b'')
 
+        # test that the exit machinery handles long exit codes
+        rc, out, err = assert_python_failure('-c', 'raise SystemExit(47L)')
+        self.assertEqual(rc, 47)
+        self.assertEqual(out, b'')
+        self.assertEqual(err, b'')
+
+        rc, out, err = assert_python_ok('-c', 'raise SystemExit(0L)')
+        self.assertEqual(rc, 0)
+        self.assertEqual(out, b'')
+        self.assertEqual(err, b'')
+
         def check_exit_message(code, expected, **env_vars):
             rc, out, err = assert_python_failure('-c', code, **env_vars)
             self.assertEqual(rc, 1)
@@ -737,7 +748,10 @@
         # tupleiterator
         check(iter(()), size('lP'))
         # type
-        s = vsize('P2P15Pl4PP9PP11PI'   # PyTypeObject
+        fmt = 'P2P15Pl4PP9PP11PI'
+        if hasattr(sys, 'getcounts'):
+            fmt += '3P2P'
+        s = vsize(fmt +                 # PyTypeObject
                   '39P'                 # PyNumberMethods
                   '3P'                  # PyMappingMethods
                   '10P'                 # PySequenceMethods
diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py
index cc9a581..d8737af 100644
--- a/Lib/test/test_sys_settrace.py
+++ b/Lib/test/test_sys_settrace.py
@@ -5,6 +5,19 @@
 import sys
 import difflib
 import gc
+from functools import wraps
+
+class tracecontext:
+    """Contex manager that traces its enter and exit."""
+    def __init__(self, output, value):
+        self.output = output
+        self.value = value
+
+    def __enter__(self):
+        self.output.append(self.value)
+
+    def __exit__(self, *exc_info):
+        self.output.append(-self.value)
 
 # A very basic example.  If this fails, we're in deep trouble.
 def basic():
@@ -467,311 +480,528 @@
 # command (aka. "Set next statement").
 
 class JumpTracer:
-    """Defines a trace function that jumps from one place to another,
-    with the source and destination lines of the jump being defined by
-    the 'jump' property of the function under test."""
+    """Defines a trace function that jumps from one place to another."""
 
-    def __init__(self, function):
-        self.function = function
-        self.jumpFrom = function.jump[0]
-        self.jumpTo = function.jump[1]
+    def __init__(self, function, jumpFrom, jumpTo, event='line',
+                 decorated=False):
+        self.code = function.func_code
+        self.jumpFrom = jumpFrom
+        self.jumpTo = jumpTo
+        self.event = event
+        self.firstLine = None if decorated else self.code.co_firstlineno
         self.done = False
 
     def trace(self, frame, event, arg):
-        if not self.done and frame.f_code == self.function.func_code:
-            firstLine = frame.f_code.co_firstlineno
-            if event == 'line' and frame.f_lineno == firstLine + self.jumpFrom:
+        if self.done:
+            return
+        # frame.f_code.co_firstlineno is the first line of the decorator when
+        # 'function' is decorated and the decorator may be written using
+        # multiple physical lines when it is too long. Use the first line
+        # trace event in 'function' to find the first line of 'function'.
+        if (self.firstLine is None and frame.f_code == self.code and
+                event == 'line'):
+            self.firstLine = frame.f_lineno - 1
+        if (event == self.event and self.firstLine and
+                frame.f_lineno == self.firstLine + self.jumpFrom):
+            f = frame
+            while f is not None and f.f_code != self.code:
+                f = f.f_back
+            if f is not None:
                 # Cope with non-integer self.jumpTo (because of
                 # no_jump_to_non_integers below).
                 try:
-                    frame.f_lineno = firstLine + self.jumpTo
+                    frame.f_lineno = self.firstLine + self.jumpTo
                 except TypeError:
                     frame.f_lineno = self.jumpTo
                 self.done = True
         return self.trace
 
-# The first set of 'jump' tests are for things that are allowed:
-
-def jump_simple_forwards(output):
-    output.append(1)
-    output.append(2)
-    output.append(3)
-
-jump_simple_forwards.jump = (1, 3)
-jump_simple_forwards.output = [3]
-
-def jump_simple_backwards(output):
-    output.append(1)
-    output.append(2)
-
-jump_simple_backwards.jump = (2, 1)
-jump_simple_backwards.output = [1, 1, 2]
-
-def jump_out_of_block_forwards(output):
-    for i in 1, 2:
-        output.append(2)
-        for j in [3]:  # Also tests jumping over a block
-            output.append(4)
-    output.append(5)
-
-jump_out_of_block_forwards.jump = (3, 5)
-jump_out_of_block_forwards.output = [2, 5]
-
-def jump_out_of_block_backwards(output):
-    output.append(1)
-    for i in [1]:
-        output.append(3)
-        for j in [2]:  # Also tests jumping over a block
-            output.append(5)
-        output.append(6)
-    output.append(7)
-
-jump_out_of_block_backwards.jump = (6, 1)
-jump_out_of_block_backwards.output = [1, 3, 5, 1, 3, 5, 6, 7]
-
-def jump_to_codeless_line(output):
-    output.append(1)
-    # Jumping to this line should skip to the next one.
-    output.append(3)
-
-jump_to_codeless_line.jump = (1, 2)
-jump_to_codeless_line.output = [3]
-
-def jump_to_same_line(output):
-    output.append(1)
-    output.append(2)
-    output.append(3)
-
-jump_to_same_line.jump = (2, 2)
-jump_to_same_line.output = [1, 2, 3]
-
-# Tests jumping within a finally block, and over one.
-def jump_in_nested_finally(output):
-    try:
-        output.append(2)
-    finally:
-        output.append(4)
-        try:
-            output.append(6)
-        finally:
-            output.append(8)
-        output.append(9)
-
-jump_in_nested_finally.jump = (4, 9)
-jump_in_nested_finally.output = [2, 9]
-
-def jump_infinite_while_loop(output):
-    output.append(1)
-    while 1:
-        output.append(2)
-    output.append(3)
-
-jump_infinite_while_loop.jump = (3, 4)
-jump_infinite_while_loop.output = [1, 3]
-
-# The second set of 'jump' tests are for things that are not allowed:
-
-def no_jump_too_far_forwards(output):
-    try:
-        output.append(2)
-        output.append(3)
-    except ValueError, e:
-        output.append('after' in str(e))
-
-no_jump_too_far_forwards.jump = (3, 6)
-no_jump_too_far_forwards.output = [2, True]
-
-def no_jump_too_far_backwards(output):
-    try:
-        output.append(2)
-        output.append(3)
-    except ValueError, e:
-        output.append('before' in str(e))
-
-no_jump_too_far_backwards.jump = (3, -1)
-no_jump_too_far_backwards.output = [2, True]
-
-# Test each kind of 'except' line.
-def no_jump_to_except_1(output):
-    try:
-        output.append(2)
-    except:
-        e = sys.exc_info()[1]
-        output.append('except' in str(e))
-
-no_jump_to_except_1.jump = (2, 3)
-no_jump_to_except_1.output = [True]
-
-def no_jump_to_except_2(output):
-    try:
-        output.append(2)
-    except ValueError:
-        e = sys.exc_info()[1]
-        output.append('except' in str(e))
-
-no_jump_to_except_2.jump = (2, 3)
-no_jump_to_except_2.output = [True]
-
-def no_jump_to_except_3(output):
-    try:
-        output.append(2)
-    except ValueError, e:
-        output.append('except' in str(e))
-
-no_jump_to_except_3.jump = (2, 3)
-no_jump_to_except_3.output = [True]
-
-def no_jump_to_except_4(output):
-    try:
-        output.append(2)
-    except (ValueError, RuntimeError), e:
-        output.append('except' in str(e))
-
-no_jump_to_except_4.jump = (2, 3)
-no_jump_to_except_4.output = [True]
-
-def no_jump_forwards_into_block(output):
-    try:
-        output.append(2)
-        for i in 1, 2:
-            output.append(4)
-    except ValueError, e:
-        output.append('into' in str(e))
-
-no_jump_forwards_into_block.jump = (2, 4)
-no_jump_forwards_into_block.output = [True]
-
-def no_jump_backwards_into_block(output):
-    try:
-        for i in 1, 2:
-            output.append(3)
-        output.append(4)
-    except ValueError, e:
-        output.append('into' in str(e))
-
-no_jump_backwards_into_block.jump = (4, 3)
-no_jump_backwards_into_block.output = [3, 3, True]
-
-def no_jump_into_finally_block(output):
-    try:
-        try:
-            output.append(3)
-            x = 1
-        finally:
-            output.append(6)
-    except ValueError, e:
-        output.append('finally' in str(e))
-
-no_jump_into_finally_block.jump = (4, 6)
-no_jump_into_finally_block.output = [3, 6, True]  # The 'finally' still runs
-
-def no_jump_out_of_finally_block(output):
-    try:
-        try:
-            output.append(3)
-        finally:
-            output.append(5)
-            output.append(6)
-    except ValueError, e:
-        output.append('finally' in str(e))
-
-no_jump_out_of_finally_block.jump = (5, 1)
-no_jump_out_of_finally_block.output = [3, True]
-
 # This verifies the line-numbers-must-be-integers rule.
 def no_jump_to_non_integers(output):
     try:
         output.append(2)
-    except ValueError, e:
+    except ValueError as e:
         output.append('integer' in str(e))
 
-no_jump_to_non_integers.jump = (2, "Spam")
-no_jump_to_non_integers.output = [True]
-
-def jump_across_with(output):
-    with open(test_support.TESTFN, "wb") as fp:
-        pass
-    with open(test_support.TESTFN, "wb") as fp:
-        pass
-jump_across_with.jump = (1, 3)
-jump_across_with.output = []
-
 # This verifies that you can't set f_lineno via _getframe or similar
 # trickery.
 def no_jump_without_trace_function():
     try:
         previous_frame = sys._getframe().f_back
         previous_frame.f_lineno = previous_frame.f_lineno
-    except ValueError, e:
+    except ValueError as e:
         # This is the exception we wanted; make sure the error message
         # talks about trace functions.
         if 'trace' not in str(e):
             raise
     else:
         # Something's wrong - the expected exception wasn't raised.
-        raise RuntimeError, "Trace-function-less jump failed to fail"
+        raise AssertionError("Trace-function-less jump failed to fail")
 
 
 class JumpTestCase(unittest.TestCase):
+    def setUp(self):
+        self.addCleanup(sys.settrace, sys.gettrace())
+        sys.settrace(None)
+
     def compare_jump_output(self, expected, received):
         if received != expected:
             self.fail( "Outputs don't match:\n" +
                        "Expected: " + repr(expected) + "\n" +
                        "Received: " + repr(received))
 
-    def run_test(self, func):
-        tracer = JumpTracer(func)
+    def run_test(self, func, jumpFrom, jumpTo, expected, error=None,
+                 event='line', decorated=False):
+        tracer = JumpTracer(func, jumpFrom, jumpTo, event, decorated)
         sys.settrace(tracer.trace)
         output = []
-        func(output)
+        if error is None:
+            func(output)
+        else:
+            with self.assertRaisesRegexp(*error):
+                func(output)
         sys.settrace(None)
-        self.compare_jump_output(func.output, output)
+        self.compare_jump_output(expected, output)
 
-    def test_01_jump_simple_forwards(self):
-        self.run_test(jump_simple_forwards)
-    def test_02_jump_simple_backwards(self):
-        self.run_test(jump_simple_backwards)
-    def test_03_jump_out_of_block_forwards(self):
-        self.run_test(jump_out_of_block_forwards)
-    def test_04_jump_out_of_block_backwards(self):
-        self.run_test(jump_out_of_block_backwards)
-    def test_05_jump_to_codeless_line(self):
-        self.run_test(jump_to_codeless_line)
-    def test_06_jump_to_same_line(self):
-        self.run_test(jump_to_same_line)
-    def test_07_jump_in_nested_finally(self):
-        self.run_test(jump_in_nested_finally)
-    def test_jump_infinite_while_loop(self):
-        self.run_test(jump_infinite_while_loop)
-    def test_08_no_jump_too_far_forwards(self):
-        self.run_test(no_jump_too_far_forwards)
-    def test_09_no_jump_too_far_backwards(self):
-        self.run_test(no_jump_too_far_backwards)
-    def test_10_no_jump_to_except_1(self):
-        self.run_test(no_jump_to_except_1)
-    def test_11_no_jump_to_except_2(self):
-        self.run_test(no_jump_to_except_2)
-    def test_12_no_jump_to_except_3(self):
-        self.run_test(no_jump_to_except_3)
-    def test_13_no_jump_to_except_4(self):
-        self.run_test(no_jump_to_except_4)
-    def test_14_no_jump_forwards_into_block(self):
-        self.run_test(no_jump_forwards_into_block)
-    def test_15_no_jump_backwards_into_block(self):
-        self.run_test(no_jump_backwards_into_block)
-    def test_16_no_jump_into_finally_block(self):
-        self.run_test(no_jump_into_finally_block)
-    def test_17_no_jump_out_of_finally_block(self):
-        self.run_test(no_jump_out_of_finally_block)
-    def test_18_no_jump_to_non_integers(self):
-        self.run_test(no_jump_to_non_integers)
-    def test_19_no_jump_without_trace_function(self):
+    def jump_test(jumpFrom, jumpTo, expected, error=None, event='line'):
+        """Decorator that creates a test that makes a jump
+        from one place to another in the following code.
+        """
+        def decorator(func):
+            @wraps(func)
+            def test(self):
+                self.run_test(func, jumpFrom, jumpTo, expected,
+                              error=error, event=event, decorated=True)
+            return test
+        return decorator
+
+    ## The first set of 'jump' tests are for things that are allowed:
+
+    @jump_test(1, 3, [3])
+    def test_jump_simple_forwards(output):
+        output.append(1)
+        output.append(2)
+        output.append(3)
+
+    @jump_test(2, 1, [1, 1, 2])
+    def test_jump_simple_backwards(output):
+        output.append(1)
+        output.append(2)
+
+    @jump_test(3, 5, [2, 5])
+    def test_jump_out_of_block_forwards(output):
+        for i in 1, 2:
+            output.append(2)
+            for j in [3]:  # Also tests jumping over a block
+                output.append(4)
+        output.append(5)
+
+    @jump_test(6, 1, [1, 3, 5, 1, 3, 5, 6, 7])
+    def test_jump_out_of_block_backwards(output):
+        output.append(1)
+        for i in [1]:
+            output.append(3)
+            for j in [2]:  # Also tests jumping over a block
+                output.append(5)
+            output.append(6)
+        output.append(7)
+
+    @jump_test(1, 2, [3])
+    def test_jump_to_codeless_line(output):
+        output.append(1)
+        # Jumping to this line should skip to the next one.
+        output.append(3)
+
+    @jump_test(2, 2, [1, 2, 3])
+    def test_jump_to_same_line(output):
+        output.append(1)
+        output.append(2)
+        output.append(3)
+
+    # Tests jumping within a finally block, and over one.
+    @jump_test(4, 9, [2, 9])
+    def test_jump_in_nested_finally(output):
+        try:
+            output.append(2)
+        finally:
+            output.append(4)
+            try:
+                output.append(6)
+            finally:
+                output.append(8)
+            output.append(9)
+
+    @jump_test(6, 7, [2, 7], (ZeroDivisionError, ''))
+    def test_jump_in_nested_finally_2(output):
+        try:
+            output.append(2)
+            1.0/0.0
+            return
+        finally:
+            output.append(6)
+            output.append(7)
+        output.append(8)
+
+    @jump_test(6, 11, [2, 11], (ZeroDivisionError, ''))
+    def test_jump_in_nested_finally_3(output):
+        try:
+            output.append(2)
+            1.0/0.0
+            return
+        finally:
+            output.append(6)
+            try:
+                output.append(8)
+            finally:
+                output.append(10)
+            output.append(11)
+        output.append(12)
+
+    @jump_test(3, 4, [1, 4])
+    def test_jump_infinite_while_loop(output):
+        output.append(1)
+        while True:
+            output.append(3)
+        output.append(4)
+
+    @jump_test(2, 3, [1, 3])
+    def test_jump_forwards_out_of_with_block(output):
+        with tracecontext(output, 1):
+            output.append(2)
+        output.append(3)
+
+    @jump_test(3, 1, [1, 2, 1, 2, 3, -2])
+    def test_jump_backwards_out_of_with_block(output):
+        output.append(1)
+        with tracecontext(output, 2):
+            output.append(3)
+
+    @jump_test(2, 5, [5])
+    def test_jump_forwards_out_of_try_finally_block(output):
+        try:
+            output.append(2)
+        finally:
+            output.append(4)
+        output.append(5)
+
+    @jump_test(3, 1, [1, 1, 3, 5])
+    def test_jump_backwards_out_of_try_finally_block(output):
+        output.append(1)
+        try:
+            output.append(3)
+        finally:
+            output.append(5)
+
+    @jump_test(2, 6, [6])
+    def test_jump_forwards_out_of_try_except_block(output):
+        try:
+            output.append(2)
+        except:
+            output.append(4)
+            raise
+        output.append(6)
+
+    @jump_test(3, 1, [1, 1, 3])
+    def test_jump_backwards_out_of_try_except_block(output):
+        output.append(1)
+        try:
+            output.append(3)
+        except:
+            output.append(5)
+            raise
+
+    @jump_test(5, 7, [4, 7, 8])
+    def test_jump_between_except_blocks(output):
+        try:
+            1.0/0.0
+        except ZeroDivisionError:
+            output.append(4)
+            output.append(5)
+        except FloatingPointError:
+            output.append(7)
+        output.append(8)
+
+    @jump_test(5, 6, [4, 6, 7])
+    def test_jump_within_except_block(output):
+        try:
+            1.0/0.0
+        except:
+            output.append(4)
+            output.append(5)
+            output.append(6)
+        output.append(7)
+
+    @jump_test(2, 4, [1, 4, 5, -4])
+    def test_jump_across_with(output):
+        output.append(1)
+        with tracecontext(output, 2):
+            output.append(3)
+        with tracecontext(output, 4):
+            output.append(5)
+
+    @jump_test(4, 5, [1, 3, 5, 6])
+    def test_jump_out_of_with_block_within_for_block(output):
+        output.append(1)
+        for i in [1]:
+            with tracecontext(output, 3):
+                output.append(4)
+            output.append(5)
+        output.append(6)
+
+    @jump_test(4, 5, [1, 2, 3, 5, -2, 6])
+    def test_jump_out_of_with_block_within_with_block(output):
+        output.append(1)
+        with tracecontext(output, 2):
+            with tracecontext(output, 3):
+                output.append(4)
+            output.append(5)
+        output.append(6)
+
+    @jump_test(5, 6, [2, 4, 6, 7])
+    def test_jump_out_of_with_block_within_finally_block(output):
+        try:
+            output.append(2)
+        finally:
+            with tracecontext(output, 4):
+                output.append(5)
+            output.append(6)
+        output.append(7)
+
+    @jump_test(8, 11, [1, 3, 5, 11, 12])
+    def test_jump_out_of_complex_nested_blocks(output):
+        output.append(1)
+        for i in [1]:
+            output.append(3)
+            for j in [1, 2]:
+                output.append(5)
+                try:
+                    for k in [1, 2]:
+                        output.append(8)
+                finally:
+                    output.append(10)
+            output.append(11)
+        output.append(12)
+
+    @jump_test(3, 5, [1, 2, 5])
+    def test_jump_out_of_with_assignment(output):
+        output.append(1)
+        with tracecontext(output, 2) \
+                as x:
+            output.append(4)
+        output.append(5)
+
+    @jump_test(3, 6, [1, 6, 8, 9])
+    def test_jump_over_return_in_try_finally_block(output):
+        output.append(1)
+        try:
+            output.append(3)
+            if not output: # always false
+                return
+            output.append(6)
+        finally:
+            output.append(8)
+        output.append(9)
+
+    @jump_test(5, 8, [1, 3, 8, 10, 11, 13])
+    def test_jump_over_break_in_try_finally_block(output):
+        output.append(1)
+        while True:
+            output.append(3)
+            try:
+                output.append(5)
+                if not output: # always false
+                    break
+                output.append(8)
+            finally:
+                output.append(10)
+            output.append(11)
+            break
+        output.append(13)
+
+    @jump_test(1, 7, [7, 8])
+    def test_jump_over_for_block_before_else(output):
+        output.append(1)
+        if not output:  # always false
+            for i in [3]:
+                output.append(4)
+        else:
+            output.append(6)
+            output.append(7)
+        output.append(8)
+
+    # The second set of 'jump' tests are for things that are not allowed:
+
+    @jump_test(2, 3, [1], (ValueError, 'after'))
+    def test_no_jump_too_far_forwards(output):
+        output.append(1)
+        output.append(2)
+
+    @jump_test(2, -2, [1], (ValueError, 'before'))
+    def test_no_jump_too_far_backwards(output):
+        output.append(1)
+        output.append(2)
+
+    # Test each kind of 'except' line.
+    @jump_test(2, 3, [4], (ValueError, 'except'))
+    def test_no_jump_to_except_1(output):
+        try:
+            output.append(2)
+        except:
+            output.append(4)
+            raise
+
+    @jump_test(2, 3, [4], (ValueError, 'except'))
+    def test_no_jump_to_except_2(output):
+        try:
+            output.append(2)
+        except ValueError:
+            output.append(4)
+            raise
+
+    @jump_test(2, 3, [4], (ValueError, 'except'))
+    def test_no_jump_to_except_3(output):
+        try:
+            output.append(2)
+        except ValueError as e:
+            output.append(4)
+            raise e
+
+    @jump_test(2, 3, [4], (ValueError, 'except'))
+    def test_no_jump_to_except_4(output):
+        try:
+            output.append(2)
+        except (ValueError, RuntimeError) as e:
+            output.append(4)
+            raise e
+
+    @jump_test(1, 3, [], (ValueError, 'into'))
+    def test_no_jump_forwards_into_for_block(output):
+        output.append(1)
+        for i in 1, 2:
+            output.append(3)
+
+    @jump_test(3, 2, [2, 2], (ValueError, 'into'))
+    def test_no_jump_backwards_into_for_block(output):
+        for i in 1, 2:
+            output.append(2)
+        output.append(3)
+
+    @jump_test(2, 4, [], (ValueError, 'into'))
+    def test_no_jump_forwards_into_while_block(output):
+        i = 1
+        output.append(2)
+        while i <= 2:
+            output.append(4)
+            i += 1
+
+    @jump_test(5, 3, [3, 3], (ValueError, 'into'))
+    def test_no_jump_backwards_into_while_block(output):
+        i = 1
+        while i <= 2:
+            output.append(3)
+            i += 1
+        output.append(5)
+
+    @jump_test(1, 3, [], (ValueError, 'into'))
+    def test_no_jump_forwards_into_with_block(output):
+        output.append(1)
+        with tracecontext(output, 2):
+            output.append(3)
+
+    @jump_test(3, 2, [1, 2, -1], (ValueError, 'into'))
+    def test_no_jump_backwards_into_with_block(output):
+        with tracecontext(output, 1):
+            output.append(2)
+        output.append(3)
+
+    @jump_test(1, 3, [], (ValueError, 'into'))
+    def test_no_jump_forwards_into_try_finally_block(output):
+        output.append(1)
+        try:
+            output.append(3)
+        finally:
+            output.append(5)
+
+    @jump_test(5, 2, [2, 4], (ValueError, 'into'))
+    def test_no_jump_backwards_into_try_finally_block(output):
+        try:
+            output.append(2)
+        finally:
+            output.append(4)
+        output.append(5)
+
+    @jump_test(1, 3, [], (ValueError, 'into'))
+    def test_no_jump_forwards_into_try_except_block(output):
+        output.append(1)
+        try:
+            output.append(3)
+        except:
+            output.append(5)
+            raise
+
+    @jump_test(6, 2, [2], (ValueError, 'into'))
+    def test_no_jump_backwards_into_try_except_block(output):
+        try:
+            output.append(2)
+        except:
+            output.append(4)
+            raise
+        output.append(6)
+
+    @jump_test(3, 6, [2, 5, 6], (ValueError, 'finally'))
+    def test_no_jump_into_finally_block(output):
+        try:
+            output.append(2)
+            output.append(3)
+        finally:  # still executed if the jump is failed
+            output.append(5)
+            output.append(6)
+        output.append(7)
+
+    @jump_test(1, 5, [], (ValueError, 'finally'))
+    def test_no_jump_into_finally_block_2(output):
+        output.append(1)
+        try:
+            output.append(3)
+        finally:
+            output.append(5)
+
+    @jump_test(5, 1, [1, 3], (ValueError, 'finally'))
+    def test_no_jump_out_of_finally_block(output):
+        output.append(1)
+        try:
+            output.append(3)
+        finally:
+            output.append(5)
+
+    @jump_test(3, 5, [1, 2, -2], (ValueError, 'into'))
+    def test_no_jump_between_with_blocks(output):
+        output.append(1)
+        with tracecontext(output, 2):
+            output.append(3)
+        with tracecontext(output, 4):
+            output.append(5)
+
+    @jump_test(7, 4, [1, 6], (ValueError, 'into'))
+    def test_no_jump_into_for_block_before_else(output):
+        output.append(1)
+        if not output:  # always false
+            for i in [3]:
+                output.append(4)
+        else:
+            output.append(6)
+            output.append(7)
+        output.append(8)
+
+    def test_no_jump_to_non_integers(self):
+        self.run_test(no_jump_to_non_integers, 2, "Spam", [True])
+
+    def test_no_jump_without_trace_function(self):
+        # Must set sys.settrace(None) in setUp(), else condition is not
+        # triggered.
         no_jump_without_trace_function()
-    def test_jump_across_with(self):
-        self.addCleanup(test_support.unlink, test_support.TESTFN)
-        self.run_test(jump_across_with)
 
-    def test_20_large_function(self):
+    def test_large_function(self):
         d = {}
         exec("""def f(output):        # line 0
             x = 0                     # line 1
@@ -783,10 +1013,7 @@
             output.append(x)          # line 1007
             return""" % ('\n' * 1000,), d)
         f = d['f']
-
-        f.jump = (2, 1007)
-        f.output = [0]
-        self.run_test(f)
+        self.run_test(f, 2, 1007, [0])
 
     def test_jump_to_firstlineno(self):
         # This tests that PDB can jump back to the first line in a
@@ -800,14 +1027,43 @@
 """, "<fake module>", "exec")
         class fake_function:
             func_code = code
-            jump = (2, 0)
-        tracer = JumpTracer(fake_function)
+        tracer = JumpTracer(fake_function, 2, 0)
         sys.settrace(tracer.trace)
         namespace = {"output": []}
         exec code in namespace
         sys.settrace(None)
         self.compare_jump_output([2, 3, 2, 3, 4], namespace["output"])
 
+    @jump_test(2, 3, [1], event='call', error=(ValueError, "can't jump from"
+               " the 'call' trace event of a new frame"))
+    def test_no_jump_from_call(output):
+        output.append(1)
+        def nested():
+            output.append(3)
+        nested()
+        output.append(5)
+
+    @jump_test(2, 1, [1], event='return', error=(ValueError,
+               "can only jump from a 'line' trace event"))
+    def test_no_jump_from_return_event(output):
+        output.append(1)
+        return
+
+    @jump_test(2, 1, [1], event='exception', error=(ValueError,
+               "can only jump from a 'line' trace event"))
+    def test_no_jump_from_exception_event(output):
+        output.append(1)
+        1 / 0
+
+    @jump_test(3, 2, [2], event='return', error=(ValueError,
+               "can't jump from a yield statement"))
+    def test_no_jump_from_yield(output):
+        def gen():
+            output.append(2)
+            yield 3
+        next(gen())
+        output.append(5)
+
 
 def test_main():
     test_support.run_unittest(
diff --git a/Lib/test/test_tcl.py b/Lib/test/test_tcl.py
index 4c2e8d5..84c4cea 100644
--- a/Lib/test/test_tcl.py
+++ b/Lib/test/test_tcl.py
@@ -256,7 +256,7 @@
             try:
                 p = Popen(cmd, stdout=PIPE, stderr=PIPE)
             except WindowsError as e:
-                if e.winerror == 5:
+                if e.winerror == 5 or e.winerror == 2:
                     self.skipTest('Not permitted to start the child process')
                 else:
                     raise
@@ -661,6 +661,43 @@
                 expected = {'a': (1, 2, 3), 'something': 'foo', 'status': ''}
             self.assertEqual(splitdict(tcl, arg), expected)
 
+    def test_join(self):
+        join = tkinter._join
+        tcl = self.interp.tk
+        def unpack(s):
+            return tcl.call('lindex', s, 0)
+        def check(value):
+            self.assertEqual(unpack(join([value])), value)
+            self.assertEqual(unpack(join([value, 0])), value)
+            self.assertEqual(unpack(unpack(join([[value]]))), value)
+            self.assertEqual(unpack(unpack(join([[value, 0]]))), value)
+            self.assertEqual(unpack(unpack(join([[value], 0]))), value)
+            self.assertEqual(unpack(unpack(join([[value, 0], 0]))), value)
+        check('')
+        check('spam')
+        check('sp am')
+        check('sp\tam')
+        check('sp\nam')
+        check(' \t\n')
+        check('{spam}')
+        check('{sp am}')
+        check('"spam"')
+        check('"sp am"')
+        check('{"spam"}')
+        check('"{spam}"')
+        check('sp\\am')
+        check('"sp\\am"')
+        check('"{}" "{}"')
+        check('"\\')
+        check('"{')
+        check('"}')
+        check('\n\\')
+        check('\n{')
+        check('\n}')
+        check('\\\n')
+        check('{\n')
+        check('}\n')
+
 
 character_size = 4 if sys.maxunicode > 0xFFFF else 2
 
@@ -705,25 +742,25 @@
         self.check_huge_string_builtins(value)
 
     def check_huge_string_builtins(self, value):
-        self.assertRaises(OverflowError, self.interp.tk.getint, value)
-        self.assertRaises(OverflowError, self.interp.tk.getdouble, value)
-        self.assertRaises(OverflowError, self.interp.tk.getboolean, value)
-        self.assertRaises(OverflowError, self.interp.eval, value)
-        self.assertRaises(OverflowError, self.interp.evalfile, value)
-        self.assertRaises(OverflowError, self.interp.record, value)
-        self.assertRaises(OverflowError, self.interp.adderrorinfo, value)
-        self.assertRaises(OverflowError, self.interp.setvar, value, 'x', 'a')
-        self.assertRaises(OverflowError, self.interp.setvar, 'x', value, 'a')
-        self.assertRaises(OverflowError, self.interp.unsetvar, value)
-        self.assertRaises(OverflowError, self.interp.unsetvar, 'x', value)
-        self.assertRaises(OverflowError, self.interp.adderrorinfo, value)
-        self.assertRaises(OverflowError, self.interp.exprstring, value)
-        self.assertRaises(OverflowError, self.interp.exprlong, value)
-        self.assertRaises(OverflowError, self.interp.exprboolean, value)
-        self.assertRaises(OverflowError, self.interp.splitlist, value)
-        self.assertRaises(OverflowError, self.interp.split, value)
-        self.assertRaises(OverflowError, self.interp.createcommand, value, max)
-        self.assertRaises(OverflowError, self.interp.deletecommand, value)
+        tk = self.interp.tk
+        self.assertRaises(OverflowError, tk.getint, value)
+        self.assertRaises(OverflowError, tk.getdouble, value)
+        self.assertRaises(OverflowError, tk.getboolean, value)
+        self.assertRaises(OverflowError, tk.eval, value)
+        self.assertRaises(OverflowError, tk.evalfile, value)
+        self.assertRaises(OverflowError, tk.record, value)
+        self.assertRaises(OverflowError, tk.adderrorinfo, value)
+        self.assertRaises(OverflowError, tk.setvar, value, 'x', 'a')
+        self.assertRaises(OverflowError, tk.setvar, 'x', value, 'a')
+        self.assertRaises(OverflowError, tk.unsetvar, value)
+        self.assertRaises(OverflowError, tk.unsetvar, 'x', value)
+        self.assertRaises(OverflowError, tk.exprstring, value)
+        self.assertRaises(OverflowError, tk.exprlong, value)
+        self.assertRaises(OverflowError, tk.exprboolean, value)
+        self.assertRaises(OverflowError, tk.splitlist, value)
+        self.assertRaises(OverflowError, tk.split, value)
+        self.assertRaises(OverflowError, tk.createcommand, value, max)
+        self.assertRaises(OverflowError, tk.deletecommand, value)
 
 
 def setUpModule():
diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py
index 078e4a9..2efb836 100644
--- a/Lib/test/test_tempfile.py
+++ b/Lib/test/test_tempfile.py
@@ -141,12 +141,15 @@
         try:
             pid = os.fork()
             if not pid:
+                # child process
                 os.close(read_fd)
                 os.write(write_fd, next(self.r).encode("ascii"))
                 os.close(write_fd)
                 # bypass the normal exit handlers- leave those to
                 # the parent.
                 os._exit(0)
+
+            # parent process
             parent_value = next(self.r)
             child_value = os.read(read_fd, len(parent_value)).decode("ascii")
         finally:
@@ -157,6 +160,10 @@
                     os.kill(pid, signal.SIGKILL)
                 except EnvironmentError:
                     pass
+
+                # Read the process exit status to avoid zombie process
+                os.waitpid(pid, 0)
+
             os.close(read_fd)
             os.close(write_fd)
         self.assertNotEqual(child_value, parent_value)
@@ -235,13 +242,12 @@
                     self.assertEqual(cm.exception.errno, errno.ENOENT)
                     self.assertEqual(os.listdir(our_temp_directory), [])
 
-                open = io.open
                 def bad_writer(*args, **kwargs):
-                    fp = open(*args, **kwargs)
+                    fp = orig_open(*args, **kwargs)
                     fp.write = raise_OSError
                     return fp
 
-                with support.swap_attr(io, "open", bad_writer):
+                with support.swap_attr(io, "open", bad_writer) as orig_open:
                     # test again with failing write()
                     with self.assertRaises(IOError) as cm:
                         tempfile._get_default_tempdir()
@@ -815,6 +821,7 @@
         old_fdopen = os.fdopen
         closed = []
         def close(fd):
+            old_close(fd)
             closed.append(fd)
         def fdopen(*args):
             raise ValueError()
diff --git a/Lib/test/test_test_support.py b/Lib/test/test_test_support.py
new file mode 100644
index 0000000..f9192a7
--- /dev/null
+++ b/Lib/test/test_test_support.py
@@ -0,0 +1,465 @@
+import importlib
+import shutil
+import stat
+import sys
+import os
+import unittest
+import socket
+import tempfile
+import textwrap
+import errno
+from test import support
+from test.support import script_helper
+
+TESTFN = support.TESTFN
+
+
+class ClassicClass:
+    pass
+
+class NewStyleClass(object):
+    pass
+
+
+class TestSupport(unittest.TestCase):
+
+    def test_import_module(self):
+        support.import_module("ftplib")
+        self.assertRaises(unittest.SkipTest, support.import_module, "foo")
+
+    def test_import_fresh_module(self):
+        support.import_fresh_module("ftplib")
+
+    def test_get_attribute(self):
+        self.assertEqual(support.get_attribute(self, "test_get_attribute"),
+                        self.test_get_attribute)
+        self.assertRaises(unittest.SkipTest, support.get_attribute, self, "foo")
+        with self.assertRaisesRegexp(unittest.SkipTest, 'unittest'):
+            support.get_attribute(unittest, 'foo')
+        with self.assertRaisesRegexp(unittest.SkipTest, 'ClassicClass'):
+            support.get_attribute(ClassicClass, 'foo')
+        with self.assertRaisesRegexp(unittest.SkipTest, 'ClassicClass'):
+            support.get_attribute(ClassicClass(), 'foo')
+        with self.assertRaisesRegexp(unittest.SkipTest, 'NewStyleClass'):
+            support.get_attribute(NewStyleClass, 'foo')
+        with self.assertRaisesRegexp(unittest.SkipTest, 'NewStyleClass'):
+            support.get_attribute(NewStyleClass(), 'foo')
+
+    @unittest.skip("failing buildbots")
+    def test_get_original_stdout(self):
+        self.assertEqual(support.get_original_stdout(), sys.stdout)
+
+    def test_unload(self):
+        import sched
+        self.assertIn("sched", sys.modules)
+        support.unload("sched")
+        self.assertNotIn("sched", sys.modules)
+
+    def test_unlink(self):
+        with open(TESTFN, "w") as f:
+            pass
+        support.unlink(TESTFN)
+        self.assertFalse(os.path.exists(TESTFN))
+        support.unlink(TESTFN)
+
+    def test_rmtree(self):
+        dirpath = support.TESTFN + 'd'
+        subdirpath = os.path.join(dirpath, 'subdir')
+        os.mkdir(dirpath)
+        os.mkdir(subdirpath)
+        support.rmtree(dirpath)
+        self.assertFalse(os.path.exists(dirpath))
+        with support.swap_attr(support, 'verbose', 0):
+            support.rmtree(dirpath)
+
+        os.mkdir(dirpath)
+        os.mkdir(subdirpath)
+        os.chmod(dirpath, stat.S_IRUSR|stat.S_IXUSR)
+        with support.swap_attr(support, 'verbose', 0):
+            support.rmtree(dirpath)
+        self.assertFalse(os.path.exists(dirpath))
+
+        os.mkdir(dirpath)
+        os.mkdir(subdirpath)
+        os.chmod(dirpath, 0)
+        with support.swap_attr(support, 'verbose', 0):
+            support.rmtree(dirpath)
+        self.assertFalse(os.path.exists(dirpath))
+
+    def test_forget(self):
+        mod_filename = TESTFN + '.py'
+        with open(mod_filename, 'wt') as f:
+            f.write('foo = 1\n')
+        sys.path.insert(0, os.curdir)
+        try:
+            mod = __import__(TESTFN)
+            self.assertIn(TESTFN, sys.modules)
+
+            support.forget(TESTFN)
+            self.assertNotIn(TESTFN, sys.modules)
+        finally:
+            del sys.path[0]
+            support.unlink(mod_filename)
+            support.rmtree('__pycache__')
+
+    def test_HOST(self):
+        s = socket.socket()
+        s.bind((support.HOST, 0))
+        s.close()
+
+    def test_find_unused_port(self):
+        port = support.find_unused_port()
+        s = socket.socket()
+        s.bind((support.HOST, port))
+        s.close()
+
+    def test_bind_port(self):
+        s = socket.socket()
+        support.bind_port(s)
+        s.listen(5)
+        s.close()
+
+    # Tests for temp_dir()
+
+    def test_temp_dir(self):
+        """Test that temp_dir() creates and destroys its directory."""
+        parent_dir = tempfile.mkdtemp()
+        parent_dir = os.path.realpath(parent_dir)
+
+        try:
+            path = os.path.join(parent_dir, 'temp')
+            self.assertFalse(os.path.isdir(path))
+            with support.temp_dir(path) as temp_path:
+                self.assertEqual(temp_path, path)
+                self.assertTrue(os.path.isdir(path))
+            self.assertFalse(os.path.isdir(path))
+        finally:
+            support.rmtree(parent_dir)
+
+    def test_temp_dir__path_none(self):
+        """Test passing no path."""
+        with support.temp_dir() as temp_path:
+            self.assertTrue(os.path.isdir(temp_path))
+        self.assertFalse(os.path.isdir(temp_path))
+
+    def test_temp_dir__existing_dir__quiet_default(self):
+        """Test passing a directory that already exists."""
+        def call_temp_dir(path):
+            with support.temp_dir(path) as temp_path:
+                raise Exception("should not get here")
+
+        path = tempfile.mkdtemp()
+        path = os.path.realpath(path)
+        try:
+            self.assertTrue(os.path.isdir(path))
+            with self.assertRaises(OSError) as cm:
+                call_temp_dir(path)
+            self.assertEqual(cm.exception.errno, errno.EEXIST)
+            # Make sure temp_dir did not delete the original directory.
+            self.assertTrue(os.path.isdir(path))
+        finally:
+            shutil.rmtree(path)
+
+    def test_temp_dir__existing_dir__quiet_true(self):
+        """Test passing a directory that already exists with quiet=True."""
+        path = tempfile.mkdtemp()
+        path = os.path.realpath(path)
+
+        try:
+            with support.check_warnings() as recorder:
+                with support.temp_dir(path, quiet=True) as temp_path:
+                    self.assertEqual(path, temp_path)
+                warnings = [str(w.message) for w in recorder.warnings]
+            # Make sure temp_dir did not delete the original directory.
+            self.assertTrue(os.path.isdir(path))
+        finally:
+            shutil.rmtree(path)
+
+        expected = ['tests may fail, unable to create temp dir: ' + path]
+        self.assertEqual(warnings, expected)
+
+    @unittest.skipUnless(hasattr(os, "fork"), "test requires os.fork")
+    def test_temp_dir__forked_child(self):
+        """Test that a forked child process does not remove the directory."""
+        # See bpo-30028 for details.
+        # Run the test as an external script, because it uses fork.
+        script_helper.assert_python_ok("-c", textwrap.dedent("""
+            import os
+            from test import support
+            with support.temp_cwd() as temp_path:
+                pid = os.fork()
+                if pid != 0:
+                    # parent process (child has pid == 0)
+
+                    # wait for the child to terminate
+                    (pid, status) = os.waitpid(pid, 0)
+                    if status != 0:
+                        raise AssertionError("Child process failed with exit "
+                                             "status indication "
+                                             "0x{:x}.".format(status))
+
+                    # Make sure that temp_path is still present. When the child
+                    # process leaves the 'temp_cwd'-context, the __exit__()-
+                    # method of the context must not remove the temporary
+                    # directory.
+                    if not os.path.isdir(temp_path):
+                        raise AssertionError("Child removed temp_path.")
+        """))
+
+    # Tests for change_cwd()
+
+    def test_change_cwd(self):
+        original_cwd = os.getcwd()
+
+        with support.temp_dir() as temp_path:
+            with support.change_cwd(temp_path) as new_cwd:
+                self.assertEqual(new_cwd, temp_path)
+                self.assertEqual(os.getcwd(), new_cwd)
+
+        self.assertEqual(os.getcwd(), original_cwd)
+
+    def test_change_cwd__non_existent_dir(self):
+        """Test passing a non-existent directory."""
+        original_cwd = os.getcwd()
+
+        def call_change_cwd(path):
+            with support.change_cwd(path) as new_cwd:
+                raise Exception("should not get here")
+
+        with support.temp_dir() as parent_dir:
+            non_existent_dir = os.path.join(parent_dir, 'does_not_exist')
+            with self.assertRaises(OSError) as cm:
+                call_change_cwd(non_existent_dir)
+            self.assertEqual(cm.exception.errno, errno.ENOENT)
+
+        self.assertEqual(os.getcwd(), original_cwd)
+
+    def test_change_cwd__non_existent_dir__quiet_true(self):
+        """Test passing a non-existent directory with quiet=True."""
+        original_cwd = os.getcwd()
+
+        with support.temp_dir() as parent_dir:
+            bad_dir = os.path.join(parent_dir, 'does_not_exist')
+            with support.check_warnings() as recorder:
+                with support.change_cwd(bad_dir, quiet=True) as new_cwd:
+                    self.assertEqual(new_cwd, original_cwd)
+                    self.assertEqual(os.getcwd(), new_cwd)
+                warnings = [str(w.message) for w in recorder.warnings]
+
+        expected = ['tests may fail, unable to change CWD to: ' + bad_dir]
+        self.assertEqual(warnings, expected)
+
+    # Tests for change_cwd()
+
+    def test_change_cwd__chdir_warning(self):
+        """Check the warning message when os.chdir() fails."""
+        path = TESTFN + '_does_not_exist'
+        with support.check_warnings() as recorder:
+            with support.change_cwd(path=path, quiet=True):
+                pass
+            messages = [str(w.message) for w in recorder.warnings]
+        self.assertEqual(messages, ['tests may fail, unable to change CWD to: ' + path])
+
+    # Tests for temp_cwd()
+
+    def test_temp_cwd(self):
+        here = os.getcwd()
+        with support.temp_cwd(name=TESTFN):
+            self.assertEqual(os.path.basename(os.getcwd()), TESTFN)
+        self.assertFalse(os.path.exists(TESTFN))
+        self.assertEqual(os.getcwd(), here)
+
+
+    def test_temp_cwd__name_none(self):
+        """Test passing None to temp_cwd()."""
+        original_cwd = os.getcwd()
+        with support.temp_cwd(name=None) as new_cwd:
+            self.assertNotEqual(new_cwd, original_cwd)
+            self.assertTrue(os.path.isdir(new_cwd))
+            self.assertEqual(os.getcwd(), new_cwd)
+        self.assertEqual(os.getcwd(), original_cwd)
+
+    def test_sortdict(self):
+        self.assertEqual(support.sortdict({3:3, 2:2, 1:1}), "{1: 1, 2: 2, 3: 3}")
+
+    def test_make_bad_fd(self):
+        fd = support.make_bad_fd()
+        with self.assertRaises(OSError) as cm:
+            os.write(fd, b"foo")
+        self.assertEqual(cm.exception.errno, errno.EBADF)
+
+    def test_check_syntax_error(self):
+        support.check_syntax_error(self, "def class", lineno=1, offset=9)
+        with self.assertRaises(AssertionError):
+            support.check_syntax_error(self, "x=1")
+
+    def test_CleanImport(self):
+        import importlib
+        with support.CleanImport("asyncore"):
+            importlib.import_module("asyncore")
+
+    def test_DirsOnSysPath(self):
+        with support.DirsOnSysPath('foo', 'bar'):
+            self.assertIn("foo", sys.path)
+            self.assertIn("bar", sys.path)
+        self.assertNotIn("foo", sys.path)
+        self.assertNotIn("bar", sys.path)
+
+    def test_captured_stdout(self):
+        with support.captured_stdout() as stdout:
+            print "hello"
+        self.assertEqual(stdout.getvalue(), "hello\n")
+
+    def test_captured_stderr(self):
+        with support.captured_stderr() as stderr:
+            print >>sys.stderr, "hello"
+        self.assertEqual(stderr.getvalue(), "hello\n")
+
+    def test_captured_stdin(self):
+        with support.captured_stdin() as stdin:
+            stdin.write('hello\n')
+            stdin.seek(0)
+            # call test code that consumes from sys.stdin
+            captured = raw_input()
+        self.assertEqual(captured, "hello")
+
+    def test_gc_collect(self):
+        support.gc_collect()
+
+    def test_python_is_optimized(self):
+        self.assertIsInstance(support.python_is_optimized(), bool)
+
+    def test_swap_attr(self):
+        class Obj:
+            pass
+        obj = Obj()
+        obj.x = 1
+        with support.swap_attr(obj, "x", 5) as x:
+            self.assertEqual(obj.x, 5)
+            self.assertEqual(x, 1)
+        self.assertEqual(obj.x, 1)
+        with support.swap_attr(obj, "y", 5) as y:
+            self.assertEqual(obj.y, 5)
+            self.assertIsNone(y)
+        self.assertFalse(hasattr(obj, 'y'))
+        with support.swap_attr(obj, "y", 5):
+            del obj.y
+        self.assertFalse(hasattr(obj, 'y'))
+
+    def test_swap_item(self):
+        D = {"x":1}
+        with support.swap_item(D, "x", 5) as x:
+            self.assertEqual(D["x"], 5)
+            self.assertEqual(x, 1)
+        self.assertEqual(D["x"], 1)
+        with support.swap_item(D, "y", 5) as y:
+            self.assertEqual(D["y"], 5)
+            self.assertIsNone(y)
+        self.assertNotIn("y", D)
+        with support.swap_item(D, "y", 5):
+            del D["y"]
+        self.assertNotIn("y", D)
+
+    def test_match_test(self):
+        class Test:
+            def __init__(self, test_id):
+                self.test_id = test_id
+
+            def id(self):
+                return self.test_id
+
+        test_access = Test('test.test_os.FileTests.test_access')
+        test_chdir = Test('test.test_os.Win32ErrorTests.test_chdir')
+
+        with support.swap_attr(support, '_match_test_func', None):
+            # match all
+            support.set_match_tests([])
+            self.assertTrue(support.match_test(test_access))
+            self.assertTrue(support.match_test(test_chdir))
+
+            # match all using None
+            support.set_match_tests(None)
+            self.assertTrue(support.match_test(test_access))
+            self.assertTrue(support.match_test(test_chdir))
+
+            # match the full test identifier
+            support.set_match_tests([test_access.id()])
+            self.assertTrue(support.match_test(test_access))
+            self.assertFalse(support.match_test(test_chdir))
+
+            # match the module name
+            support.set_match_tests(['test_os'])
+            self.assertTrue(support.match_test(test_access))
+            self.assertTrue(support.match_test(test_chdir))
+
+            # Test '*' pattern
+            support.set_match_tests(['test_*'])
+            self.assertTrue(support.match_test(test_access))
+            self.assertTrue(support.match_test(test_chdir))
+
+            # Test case sensitivity
+            support.set_match_tests(['filetests'])
+            self.assertFalse(support.match_test(test_access))
+            support.set_match_tests(['FileTests'])
+            self.assertTrue(support.match_test(test_access))
+
+            # Test pattern containing '.' and a '*' metacharacter
+            support.set_match_tests(['*test_os.*.test_*'])
+            self.assertTrue(support.match_test(test_access))
+            self.assertTrue(support.match_test(test_chdir))
+
+            # Multiple patterns
+            support.set_match_tests([test_access.id(), test_chdir.id()])
+            self.assertTrue(support.match_test(test_access))
+            self.assertTrue(support.match_test(test_chdir))
+
+            support.set_match_tests(['test_access', 'DONTMATCH'])
+            self.assertTrue(support.match_test(test_access))
+            self.assertFalse(support.match_test(test_chdir))
+
+    def test_fd_count(self):
+        # We cannot test the absolute value of fd_count(): on old Linux
+        # kernel or glibc versions, os.urandom() keeps a FD open on
+        # /dev/urandom device and Python has 4 FD opens instead of 3.
+        start = support.fd_count()
+        fd = os.open(__file__, os.O_RDONLY)
+        try:
+            more = support.fd_count()
+        finally:
+            os.close(fd)
+        self.assertEqual(more - start, 1)
+
+    # XXX -follows a list of untested API
+    # make_legacy_pyc
+    # is_resource_enabled
+    # requires
+    # fcmp
+    # umaks
+    # findfile
+    # check_warnings
+    # EnvironmentVarGuard
+    # TransientResource
+    # transient_internet
+    # run_with_locale
+    # set_memlimit
+    # bigmemtest
+    # precisionbigmemtest
+    # bigaddrspacetest
+    # requires_resource
+    # run_doctest
+    # threading_cleanup
+    # reap_threads
+    # reap_children
+    # strip_python_stderr
+    # args_from_interpreter_flags
+    # can_symlink
+    # skip_unless_symlink
+    # SuppressCrashReport
+
+
+def test_main():
+    tests = [TestSupport]
+    support.run_unittest(*tests)
+
+if __name__ == '__main__':
+    test_main()
diff --git a/Lib/test/test_thread.py b/Lib/test/test_thread.py
index b466138..93690a6 100644
--- a/Lib/test/test_thread.py
+++ b/Lib/test/test_thread.py
@@ -1,8 +1,8 @@
 import os
 import unittest
 import random
-from test import test_support
-thread = test_support.import_module('thread')
+from test import support
+thread = support.import_module('thread')
 import time
 import sys
 import weakref
@@ -17,11 +17,12 @@
 
 def verbose_print(arg):
     """Helper function for printing out debugging output."""
-    if test_support.verbose:
+    if support.verbose:
         with _print_mutex:
             print arg
 
 
+
 class BasicThreadTest(unittest.TestCase):
 
     def setUp(self):
@@ -33,6 +34,9 @@
         self.running = 0
         self.next_ident = 0
 
+        key = support.threading_setup()
+        self.addCleanup(support.threading_cleanup, *key)
+
 
 class ThreadRunningTests(BasicThreadTest):
 
@@ -56,12 +60,13 @@
                 self.done_mutex.release()
 
     def test_starting_threads(self):
-        # Basic test for thread creation.
-        for i in range(NUMTASKS):
-            self.newtask()
-        verbose_print("waiting for tasks to complete...")
-        self.done_mutex.acquire()
-        verbose_print("all tasks done")
+        with support.wait_threads_exit():
+            # Basic test for thread creation.
+            for i in range(NUMTASKS):
+                self.newtask()
+            verbose_print("waiting for tasks to complete...")
+            self.done_mutex.acquire()
+            verbose_print("all tasks done")
 
     def test_stack_size(self):
         # Various stack size tests.
@@ -91,12 +96,13 @@
             verbose_print("trying stack_size = (%d)" % tss)
             self.next_ident = 0
             self.created = 0
-            for i in range(NUMTASKS):
-                self.newtask()
+            with support.wait_threads_exit():
+                for i in range(NUMTASKS):
+                    self.newtask()
 
-            verbose_print("waiting for all tasks to complete")
-            self.done_mutex.acquire()
-            verbose_print("all tasks done")
+                verbose_print("waiting for all tasks to complete")
+                self.done_mutex.acquire()
+                verbose_print("all tasks done")
 
         thread.stack_size(0)
 
@@ -106,25 +112,28 @@
         mut = thread.allocate_lock()
         mut.acquire()
         started = []
+
         def task():
             started.append(None)
             mut.acquire()
             mut.release()
-        thread.start_new_thread(task, ())
-        while not started:
-            time.sleep(0.01)
-        self.assertEqual(thread._count(), orig + 1)
-        # Allow the task to finish.
-        mut.release()
-        # The only reliable way to be sure that the thread ended from the
-        # interpreter's point of view is to wait for the function object to be
-        # destroyed.
-        done = []
-        wr = weakref.ref(task, lambda _: done.append(None))
-        del task
-        while not done:
-            time.sleep(0.01)
-        self.assertEqual(thread._count(), orig)
+
+        with support.wait_threads_exit():
+            thread.start_new_thread(task, ())
+            while not started:
+                time.sleep(0.01)
+            self.assertEqual(thread._count(), orig + 1)
+            # Allow the task to finish.
+            mut.release()
+            # The only reliable way to be sure that the thread ended from the
+            # interpreter's point of view is to wait for the function object to be
+            # destroyed.
+            done = []
+            wr = weakref.ref(task, lambda _: done.append(None))
+            del task
+            while not done:
+                time.sleep(0.01)
+            self.assertEqual(thread._count(), orig)
 
     def test_save_exception_state_on_error(self):
         # See issue #14474
@@ -139,14 +148,13 @@
             real_write(self, *args)
         c = thread._count()
         started = thread.allocate_lock()
-        with test_support.captured_output("stderr") as stderr:
+        with support.captured_output("stderr") as stderr:
             real_write = stderr.write
             stderr.write = mywrite
             started.acquire()
-            thread.start_new_thread(task, ())
-            started.acquire()
-            while thread._count() > c:
-                time.sleep(0.01)
+            with support.wait_threads_exit():
+                thread.start_new_thread(task, ())
+                started.acquire()
         self.assertIn("Traceback", stderr.getvalue())
 
 
@@ -178,13 +186,14 @@
 class BarrierTest(BasicThreadTest):
 
     def test_barrier(self):
-        self.bar = Barrier(NUMTASKS)
-        self.running = NUMTASKS
-        for i in range(NUMTASKS):
-            thread.start_new_thread(self.task2, (i,))
-        verbose_print("waiting for tasks to end")
-        self.done_mutex.acquire()
-        verbose_print("tasks done")
+        with support.wait_threads_exit():
+            self.bar = Barrier(NUMTASKS)
+            self.running = NUMTASKS
+            for i in range(NUMTASKS):
+                thread.start_new_thread(self.task2, (i,))
+            verbose_print("waiting for tasks to end")
+            self.done_mutex.acquire()
+            verbose_print("tasks done")
 
     def task2(self, ident):
         for i in range(NUMTRIPS):
@@ -222,8 +231,9 @@
 
     @unittest.skipIf(sys.platform.startswith('win'),
                      "This test is only appropriate for POSIX-like systems.")
-    @test_support.reap_threads
+    @support.reap_threads
     def test_forkinthread(self):
+        non_local = {'status': None}
         def thread1():
             try:
                 pid = os.fork() # fork in a thread
@@ -241,10 +251,14 @@
                 os._exit(0)
             else: # parent
                 os.close(self.write_fd)
+                pid, status = os.waitpid(pid, 0)
+                non_local['status'] = status
 
-        thread.start_new_thread(thread1, ())
-        self.assertEqual(os.read(self.read_fd, 2), "OK",
-                         "Unable to fork() in thread")
+        with support.wait_threads_exit():
+            thread.start_new_thread(thread1, ())
+            self.assertEqual(os.read(self.read_fd, 2), "OK",
+                             "Unable to fork() in thread")
+        self.assertEqual(non_local['status'], 0)
 
     def tearDown(self):
         try:
@@ -259,7 +273,7 @@
 
 
 def test_main():
-    test_support.run_unittest(ThreadRunningTests, BarrierTest, LockTests,
+    support.run_unittest(ThreadRunningTests, BarrierTest, LockTests,
                               TestForkInThread)
 
 if __name__ == "__main__":
diff --git a/Lib/test/test_threadsignals.py b/Lib/test/test_threadsignals.py
index 2f7eb60..3d79fd5 100644
--- a/Lib/test/test_threadsignals.py
+++ b/Lib/test/test_threadsignals.py
@@ -52,9 +52,11 @@
         # wait for it return.
         if signal_blackboard[signal.SIGUSR1]['tripped'] == 0 \
            or signal_blackboard[signal.SIGUSR2]['tripped'] == 0:
-            signal.alarm(1)
-            signal.pause()
-            signal.alarm(0)
+            try:
+                signal.alarm(1)
+                signal.pause()
+            finally:
+                signal.alarm(0)
 
         self.assertEqual( signal_blackboard[signal.SIGUSR1]['tripped'], 1)
         self.assertEqual( signal_blackboard[signal.SIGUSR1]['tripped_by'],
diff --git a/Lib/test/test_time.py b/Lib/test/test_time.py
index 4571c10..4da6703 100644
--- a/Lib/test/test_time.py
+++ b/Lib/test/test_time.py
@@ -2,6 +2,12 @@
 import time
 import unittest
 import sys
+import sysconfig
+
+
+# Max year is only limited by the size of C int.
+SIZEOF_INT = sysconfig.get_config_var('SIZEOF_INT') or 4
+TIME_MAXYEAR = (1 << 8 * SIZEOF_INT - 1) - 1
 
 
 class TimeTestCase(unittest.TestCase):
@@ -45,6 +51,66 @@
             with self.assertRaises(ValueError):
                 time.strftime('%f')
 
+    def _bounds_checking(self, func):
+        # Make sure that strftime() checks the bounds of the various parts
+        # of the time tuple (0 is valid for *all* values).
+
+        # The year field is tested by other test cases above
+
+        # Check month [1, 12] + zero support
+        func((1900, 0, 1, 0, 0, 0, 0, 1, -1))
+        func((1900, 12, 1, 0, 0, 0, 0, 1, -1))
+        self.assertRaises(ValueError, func,
+                            (1900, -1, 1, 0, 0, 0, 0, 1, -1))
+        self.assertRaises(ValueError, func,
+                            (1900, 13, 1, 0, 0, 0, 0, 1, -1))
+        # Check day of month [1, 31] + zero support
+        func((1900, 1, 0, 0, 0, 0, 0, 1, -1))
+        func((1900, 1, 31, 0, 0, 0, 0, 1, -1))
+        self.assertRaises(ValueError, func,
+                            (1900, 1, -1, 0, 0, 0, 0, 1, -1))
+        self.assertRaises(ValueError, func,
+                            (1900, 1, 32, 0, 0, 0, 0, 1, -1))
+        # Check hour [0, 23]
+        func((1900, 1, 1, 23, 0, 0, 0, 1, -1))
+        self.assertRaises(ValueError, func,
+                            (1900, 1, 1, -1, 0, 0, 0, 1, -1))
+        self.assertRaises(ValueError, func,
+                            (1900, 1, 1, 24, 0, 0, 0, 1, -1))
+        # Check minute [0, 59]
+        func((1900, 1, 1, 0, 59, 0, 0, 1, -1))
+        self.assertRaises(ValueError, func,
+                            (1900, 1, 1, 0, -1, 0, 0, 1, -1))
+        self.assertRaises(ValueError, func,
+                            (1900, 1, 1, 0, 60, 0, 0, 1, -1))
+        # Check second [0, 61]
+        self.assertRaises(ValueError, func,
+                            (1900, 1, 1, 0, 0, -1, 0, 1, -1))
+        # C99 only requires allowing for one leap second, but Python's docs say
+        # allow two leap seconds (0..61)
+        func((1900, 1, 1, 0, 0, 60, 0, 1, -1))
+        func((1900, 1, 1, 0, 0, 61, 0, 1, -1))
+        self.assertRaises(ValueError, func,
+                            (1900, 1, 1, 0, 0, 62, 0, 1, -1))
+        # No check for upper-bound day of week;
+        #  value forced into range by a ``% 7`` calculation.
+        # Start check at -2 since gettmarg() increments value before taking
+        #  modulo.
+        self.assertEqual(func((1900, 1, 1, 0, 0, 0, -1, 1, -1)),
+                         func((1900, 1, 1, 0, 0, 0, +6, 1, -1)))
+        self.assertRaises(ValueError, func,
+                            (1900, 1, 1, 0, 0, 0, -2, 1, -1))
+        # Check day of the year [1, 366] + zero support
+        func((1900, 1, 1, 0, 0, 0, 0, 0, -1))
+        func((1900, 1, 1, 0, 0, 0, 0, 366, -1))
+        self.assertRaises(ValueError, func,
+                            (1900, 1, 1, 0, 0, 0, 0, -1, -1))
+        self.assertRaises(ValueError, func,
+                            (1900, 1, 1, 0, 0, 0, 0, 367, -1))
+
+    def test_strftime_bounding_check(self):
+        self._bounds_checking(lambda tup: time.strftime('', tup))
+
     def test_strftime_bounds_checking(self):
         # Make sure that strftime() checks the bounds of the various parts
         #of the time tuple (0 is valid for *all* values).
@@ -123,15 +189,15 @@
         time.asctime(time.gmtime(self.t))
         self.assertRaises(TypeError, time.asctime, 0)
         self.assertRaises(TypeError, time.asctime, ())
-        # XXX: Posix compiant asctime should refuse to convert
-        # year > 9999, but Linux implementation does not.
-        # self.assertRaises(ValueError, time.asctime,
-        #                  (12345, 1, 0, 0, 0, 0, 0, 0, 0))
-        # XXX: For now, just make sure we don't have a crash:
-        try:
-            time.asctime((12345, 1, 1, 0, 0, 0, 0, 1, 0))
-        except ValueError:
-            pass
+
+        # Max year is only limited by the size of C int.
+        asc = time.asctime((TIME_MAXYEAR, 6, 1) + (0,) * 6)
+        self.assertEqual(asc[-len(str(TIME_MAXYEAR)):], str(TIME_MAXYEAR))
+        self.assertRaises(OverflowError, time.asctime,
+                          (TIME_MAXYEAR + 1,) + (0,) * 8)
+        self.assertRaises(TypeError, time.asctime, 0)
+        self.assertRaises(TypeError, time.asctime, ())
+        self.assertRaises(TypeError, time.asctime, (0,) * 10)
 
     @unittest.skipIf(not hasattr(time, "tzset"),
         "time module has no attribute tzset")
diff --git a/Lib/test/test_tokenize.py b/Lib/test/test_tokenize.py
index fd9486b..a462597 100644
--- a/Lib/test/test_tokenize.py
+++ b/Lib/test/test_tokenize.py
@@ -1,32 +1,54 @@
 from test import test_support
-from tokenize import (untokenize, generate_tokens, NUMBER, NAME, OP,
+from tokenize import (untokenize, generate_tokens, NUMBER, NAME, OP, NEWLINE,
                      STRING, ENDMARKER, tok_name, Untokenizer, tokenize)
 from StringIO import StringIO
 import os
 from unittest import TestCase
 
 
+# Converts a source string into a list of textual representation
+# of the tokens such as:
+# `    NAME       'if'          (1, 0) (1, 2)`
+# to make writing tests easier.
+def stringify_tokens_from_source(token_generator, source_string):
+    result = []
+    num_lines = len(source_string.splitlines())
+    missing_trailing_nl = source_string[-1] not in '\r\n'
+
+    for type, token, start, end, line in token_generator:
+        if type == ENDMARKER:
+            break
+        # Ignore the new line on the last line if the input lacks one
+        if missing_trailing_nl and type == NEWLINE and end[0] == num_lines:
+            continue
+        type = tok_name[type]
+        result.append("    %(type)-10.10s %(token)-13.13r %(start)s %(end)s" %
+                          locals())
+
+    return result
+
 class TokenizeTest(TestCase):
     # Tests for the tokenize module.
 
     # The tests can be really simple. Given a small fragment of source
-    # code, print out a table with tokens. The ENDMARKER is omitted for
-    # brevity.
+    # code, print out a table with tokens. The ENDMARKER, ENCODING and
+    # final NEWLINE are omitted for brevity.
 
     def check_tokenize(self, s, expected):
         # Format the tokens in s in a table format.
-        # The ENDMARKER is omitted.
-        result = []
         f = StringIO(s)
-        for type, token, start, end, line in generate_tokens(f.readline):
-            if type == ENDMARKER:
-                break
-            type = tok_name[type]
-            result.append("    %(type)-10.10s %(token)-13.13r %(start)s %(end)s" %
-                          locals())
+        result = stringify_tokens_from_source(generate_tokens(f.readline), s)
+
         self.assertEqual(result,
                          expected.rstrip().splitlines())
 
+    def test_implicit_newline(self):
+        # Make sure that the tokenizer puts in an implicit NEWLINE
+        # when the input lacks a trailing new line.
+        f = StringIO("x")
+        tokens = list(generate_tokens(f.readline))
+        self.assertEqual(tokens[-2][0], NEWLINE)
+        self.assertEqual(tokens[-1][0], ENDMARKER)
 
     def test_basic(self):
         self.check_tokenize("1 + 1", """\
@@ -616,7 +638,7 @@
         self.check_roundtrip("if x == 1:\n"
                              "    print x\n")
         self.check_roundtrip("# This is a comment\n"
-                             "# This also")
+                             "# This also\n")
 
         # Some people use different formatting conventions, which makes
         # untokenize a little trickier. Note that this test involves trailing
diff --git a/Lib/test/test_tools.py b/Lib/test/test_tools.py
index 57b3ef1..51e4fd6 100644
--- a/Lib/test/test_tools.py
+++ b/Lib/test/test_tools.py
@@ -416,12 +416,15 @@
         with open(os.path.join(test_support.TESTFN, "file.py"), "w") as file:
             file.write("xx = 'unaltered'\n")
         script = os.path.join(scriptsdir, "fixcid.py")
-        output = self.run_script(args=(test_support.TESTFN,))
+        # ignore dbg() messages
+        with test_support.captured_stderr() as stderr:
+            output = self.run_script(args=(test_support.TESTFN,))
         self.assertMultiLineEqual(output,
             "{}:\n"
             "1\n"
             '< int xx;\n'
-            '> int yy;\n'.format(c_filename)
+            '> int yy;\n'.format(c_filename),
+            "stderr: %s" % stderr.getvalue()
         )
 
     def run_script(self, input="", args=("-",), substfile="xx yy\n"):
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index 0f2cf21..560b84c 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -1814,7 +1814,7 @@
                      b'repr=%V', None, b'abc\xff')
 
         # not supported: copy the raw format string. these tests are just here
-        # to check for crashs and should not be considered as specifications
+        # to check for crashes and should not be considered as specifications
         check_format(u'%s',
                      b'%1%s', b'abc')
         check_format(u'%1abc',
diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py
index c30ecf4..11f2cda 100644
--- a/Lib/test/test_unicodedata.py
+++ b/Lib/test/test_unicodedata.py
@@ -204,6 +204,19 @@
         b = u'C\u0338' * 20  + u'\xC7'
         self.assertEqual(self.db.normalize('NFC', a), b)
 
+    def test_issue29456(self):
+        # Fix #29456
+        u1176_str_a = u'\u1100\u1176\u11a8'
+        u1176_str_b = u'\u1100\u1176\u11a8'
+        u11a7_str_a = u'\u1100\u1175\u11a7'
+        u11a7_str_b = u'\uae30\u11a7'
+        u11c3_str_a = u'\u1100\u1175\u11c3'
+        u11c3_str_b = u'\uae30\u11c3'
+        self.assertEqual(self.db.normalize('NFC', u1176_str_a), u1176_str_b)
+        self.assertEqual(self.db.normalize('NFC', u11a7_str_a), u11a7_str_b)
+        self.assertEqual(self.db.normalize('NFC', u11c3_str_a), u11c3_str_b)
+
+
     def test_east_asian_width(self):
         eaw = self.db.east_asian_width
         self.assertRaises(TypeError, eaw, 'a')
diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
index 7b1ef6a..1ce9201 100644
--- a/Lib/test/test_urllib.py
+++ b/Lib/test/test_urllib.py
@@ -185,11 +185,12 @@
     def test_proxy_bypass_environment_host_match(self):
         bypass = urllib.proxy_bypass_environment
         self.env.set('NO_PROXY',
-            'localhost, anotherdomain.com, newdomain.com:1234')
+                     'localhost, anotherdomain.com, newdomain.com:1234, .d.o.t')
         self.assertTrue(bypass('localhost'))
         self.assertTrue(bypass('LocalHost'))                 # MixedCase
         self.assertTrue(bypass('LOCALHOST'))                 # UPPERCASE
         self.assertTrue(bypass('newdomain.com:1234'))
+        self.assertTrue(bypass('foo.d.o.t'))                 # issue 29142
         self.assertTrue(bypass('anotherdomain.com:8888'))
         self.assertTrue(bypass('www.newdomain.com:1234'))
         self.assertFalse(bypass('prelocalhost'))
@@ -878,6 +879,26 @@
         self.assertEqual(splithost('/foo/bar/baz.html'),
                          (None, '/foo/bar/baz.html'))
 
+        # bpo-30500: # starts a fragment.
+        self.assertEqual(splithost('//127.0.0.1#@host.com'),
+                         ('127.0.0.1', '/#@host.com'))
+        self.assertEqual(splithost('//127.0.0.1#@host.com:80'),
+                         ('127.0.0.1', '/#@host.com:80'))
+        self.assertEqual(splithost('//127.0.0.1:80#@host.com'),
+                         ('127.0.0.1:80', '/#@host.com'))
+
+        # Empty host is returned as empty string.
+        self.assertEqual(splithost("///file"),
+                         ('', '/file'))
+
+        # Trailing semicolon, question mark and hash symbol are kept.
+        self.assertEqual(splithost("//example.net/file;"),
+                         ('example.net', '/file;'))
+        self.assertEqual(splithost("//example.net/file?"),
+                         ('example.net', '/file?'))
+        self.assertEqual(splithost("//example.net/file#"),
+                         ('example.net', '/file#'))
+
     def test_splituser(self):
         splituser = urllib.splituser
         self.assertEqual(splituser('User:Pass@www.python.org:080'),
diff --git a/Lib/test/test_urllib2_localnet.py b/Lib/test/test_urllib2_localnet.py
index 9199cb9..932b572 100644
--- a/Lib/test/test_urllib2_localnet.py
+++ b/Lib/test/test_urllib2_localnet.py
@@ -278,6 +278,7 @@
         self._threads = test_support.threading_setup()
 
     def tearDown(self):
+        self.doCleanups()
         test_support.threading_cleanup(*self._threads)
 
 
@@ -296,10 +297,7 @@
         self.server_url = 'http://127.0.0.1:%s' % self.server.port
         self.server.start()
         self.server.ready.wait()
-
-    def tearDown(self):
-        self.server.stop()
-        super(BasicAuthTests, self).tearDown()
+        self.addCleanup(self.server.stop)
 
     def test_basic_auth_success(self):
         ah = urllib2.HTTPBasicAuthHandler()
@@ -347,15 +345,12 @@
         self.server = LoopbackHttpServerThread(create_fake_proxy_handler)
         self.server.start()
         self.server.ready.wait()
+        self.addCleanup(self.server.stop)
         proxy_url = "http://127.0.0.1:%d" % self.server.port
         handler = urllib2.ProxyHandler({"http" : proxy_url})
         self.proxy_digest_handler = urllib2.ProxyDigestAuthHandler()
         self.opener = urllib2.build_opener(handler, self.proxy_digest_handler)
 
-    def tearDown(self):
-        self.server.stop()
-        super(ProxyAuthTests, self).tearDown()
-
     def test_proxy_with_bad_password_raises_httperror(self):
         self.proxy_digest_handler.add_password(self.REALM, self.URL,
                                                self.USER, self.PASSWD+"bad")
@@ -472,6 +467,7 @@
         self.server = LoopbackHttpServerThread(handler)
         self.server.start()
         self.server.ready.wait()
+        self.addCleanup(self.server.stop)
         port = self.server.port
         handler.port = port
         return handler
@@ -496,15 +492,12 @@
 
         handler = self.start_server(responses)
 
-        try:
-            f = urllib2.urlopen('http://localhost:%s/' % handler.port)
-            data = f.read()
-            f.close()
+        f = urllib2.urlopen('http://localhost:%s/' % handler.port)
+        data = f.read()
+        f.close()
 
-            self.assertEqual(data, expected_response)
-            self.assertEqual(handler.requests, ['/', '/somewhere_else'])
-        finally:
-            self.server.stop()
+        self.assertEqual(data, expected_response)
+        self.assertEqual(handler.requests, ['/', '/somewhere_else'])
 
 
     def test_404(self):
@@ -512,49 +505,40 @@
         handler = self.start_server([(404, [], expected_response)])
 
         try:
-            try:
-                urllib2.urlopen('http://localhost:%s/weeble' % handler.port)
-            except urllib2.URLError, f:
-                pass
-            else:
-                self.fail('404 should raise URLError')
+            urllib2.urlopen('http://localhost:%s/weeble' % handler.port)
+        except urllib2.URLError, f:
+            pass
+        else:
+            self.fail('404 should raise URLError')
 
-            data = f.read()
-            f.close()
+        data = f.read()
+        f.close()
 
-            self.assertEqual(data, expected_response)
-            self.assertEqual(handler.requests, ['/weeble'])
-        finally:
-            self.server.stop()
+        self.assertEqual(data, expected_response)
+        self.assertEqual(handler.requests, ['/weeble'])
 
 
     def test_200(self):
         expected_response = 'pycon 2008...'
         handler = self.start_server([(200, [], expected_response)])
 
-        try:
-            f = urllib2.urlopen('http://localhost:%s/bizarre' % handler.port)
-            data = f.read()
-            f.close()
+        f = urllib2.urlopen('http://localhost:%s/bizarre' % handler.port)
+        data = f.read()
+        f.close()
 
-            self.assertEqual(data, expected_response)
-            self.assertEqual(handler.requests, ['/bizarre'])
-        finally:
-            self.server.stop()
+        self.assertEqual(data, expected_response)
+        self.assertEqual(handler.requests, ['/bizarre'])
 
     def test_200_with_parameters(self):
         expected_response = 'pycon 2008...'
         handler = self.start_server([(200, [], expected_response)])
 
-        try:
-            f = urllib2.urlopen('http://localhost:%s/bizarre' % handler.port, 'get=with_feeling')
-            data = f.read()
-            f.close()
+        f = urllib2.urlopen('http://localhost:%s/bizarre' % handler.port, 'get=with_feeling')
+        data = f.read()
+        f.close()
 
-            self.assertEqual(data, expected_response)
-            self.assertEqual(handler.requests, ['/bizarre', 'get=with_feeling'])
-        finally:
-            self.server.stop()
+        self.assertEqual(data, expected_response)
+        self.assertEqual(handler.requests, ['/bizarre', 'get=with_feeling'])
 
     def test_https(self):
         handler = self.start_https_server()
@@ -593,7 +577,7 @@
         sni_name = [None]
         def cb_sni(ssl_sock, server_name, initial_context):
             sni_name[0] = server_name
-        context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
+        context = ssl.SSLContext(ssl.PROTOCOL_TLS)
         context.set_servername_callback(cb_sni)
         handler = self.start_https_server(context=context, certfile=CERT_localhost)
         context = ssl.create_default_context(cafile=CERT_localhost)
@@ -603,52 +587,40 @@
     def test_sending_headers(self):
         handler = self.start_server([(200, [], "we don't care")])
 
-        try:
-            req = urllib2.Request("http://localhost:%s/" % handler.port,
-                                  headers={'Range': 'bytes=20-39'})
-            urllib2.urlopen(req)
-            self.assertEqual(handler.headers_received['Range'], 'bytes=20-39')
-        finally:
-            self.server.stop()
+        req = urllib2.Request("http://localhost:%s/" % handler.port,
+                              headers={'Range': 'bytes=20-39'})
+        urllib2.urlopen(req)
+        self.assertEqual(handler.headers_received['Range'], 'bytes=20-39')
 
     def test_basic(self):
         handler = self.start_server([(200, [], "we don't care")])
 
+        open_url = urllib2.urlopen("http://localhost:%s" % handler.port)
+        for attr in ("read", "close", "info", "geturl"):
+            self.assertTrue(hasattr(open_url, attr), "object returned from "
+                         "urlopen lacks the %s attribute" % attr)
         try:
-            open_url = urllib2.urlopen("http://localhost:%s" % handler.port)
-            for attr in ("read", "close", "info", "geturl"):
-                self.assertTrue(hasattr(open_url, attr), "object returned from "
-                             "urlopen lacks the %s attribute" % attr)
-            try:
-                self.assertTrue(open_url.read(), "calling 'read' failed")
-            finally:
-                open_url.close()
+            self.assertTrue(open_url.read(), "calling 'read' failed")
         finally:
-            self.server.stop()
+            open_url.close()
 
     def test_info(self):
         handler = self.start_server([(200, [], "we don't care")])
 
-        try:
-            open_url = urllib2.urlopen("http://localhost:%s" % handler.port)
-            info_obj = open_url.info()
-            self.assertIsInstance(info_obj, mimetools.Message,
-                                  "object returned by 'info' is not an "
-                                  "instance of mimetools.Message")
-            self.assertEqual(info_obj.getsubtype(), "plain")
-        finally:
-            self.server.stop()
+        open_url = urllib2.urlopen("http://localhost:%s" % handler.port)
+        info_obj = open_url.info()
+        self.assertIsInstance(info_obj, mimetools.Message,
+                              "object returned by 'info' is not an "
+                              "instance of mimetools.Message")
+        self.assertEqual(info_obj.getsubtype(), "plain")
 
     def test_geturl(self):
         # Make sure same URL as opened is returned by geturl.
         handler = self.start_server([(200, [], "we don't care")])
 
-        try:
-            open_url = urllib2.urlopen("http://localhost:%s" % handler.port)
-            url = open_url.geturl()
-            self.assertEqual(url, "http://localhost:%s" % handler.port)
-        finally:
-            self.server.stop()
+        open_url = urllib2.urlopen("http://localhost:%s" % handler.port)
+        url = open_url.geturl()
+        self.assertEqual(url, "http://localhost:%s" % handler.port)
 
 
     def test_bad_address(self):
@@ -682,26 +654,21 @@
     def test_iteration(self):
         expected_response = "pycon 2008..."
         handler = self.start_server([(200, [], expected_response)])
-        try:
-            data = urllib2.urlopen("http://localhost:%s" % handler.port)
-            for line in data:
-                self.assertEqual(line, expected_response)
-        finally:
-            self.server.stop()
+
+        data = urllib2.urlopen("http://localhost:%s" % handler.port)
+        for line in data:
+            self.assertEqual(line, expected_response)
 
     def ztest_line_iteration(self):
         lines = ["We\n", "got\n", "here\n", "verylong " * 8192 + "\n"]
         expected_response = "".join(lines)
         handler = self.start_server([(200, [], expected_response)])
-        try:
-            data = urllib2.urlopen("http://localhost:%s" % handler.port)
-            for index, line in enumerate(data):
-                self.assertEqual(line, lines[index],
-                                 "Fetched line number %s doesn't match expected:\n"
-                                 "    Expected length was %s, got %s" %
-                                 (index, len(lines[index]), len(line)))
-        finally:
-            self.server.stop()
+        data = urllib2.urlopen("http://localhost:%s" % handler.port)
+        for index, line in enumerate(data):
+            self.assertEqual(line, lines[index],
+                             "Fetched line number %s doesn't match expected:\n"
+                             "    Expected length was %s, got %s" %
+                             (index, len(lines[index]), len(line)))
         self.assertEqual(index + 1, len(lines))
 
 def test_main():
diff --git a/Lib/test/test_urllib2net.py b/Lib/test/test_urllib2net.py
index 8eec3ad..4ba79cb 100644
--- a/Lib/test/test_urllib2net.py
+++ b/Lib/test/test_urllib2net.py
@@ -102,8 +102,8 @@
 
     def test_ftp(self):
         urls = [
-            'ftp://ftp.debian.org/debian/README',
-            ('ftp://ftp.debian.org/debian/non-existent-file',
+            'ftp://www.pythontest.net/README',
+            ('ftp://www.pythontest.net/non-existent-file',
              None, urllib2.URLError),
             ]
         self._test_urls(urls, self._extra_handlers())
@@ -184,6 +184,7 @@
             opener.open(request)
             self.assertEqual(request.get_header('User-agent'),'Test-Agent')
 
+    @unittest.skip('XXX: http://www.imdb.com is gone')
     def test_sites_no_connection_close(self):
         # Some sites do not send Connection: close header.
         # Verify that those work properly. (#issue12576)
@@ -282,7 +283,7 @@
             u = _urlopen_with_retry(url, timeout=120)
             self.assertEqual(u.fp._sock.fp._sock.gettimeout(), 120)
 
-    FTP_HOST = 'ftp://ftp.debian.org/debian/'
+    FTP_HOST = 'ftp://www.pythontest.net/'
 
     def test_ftp_basic(self):
         self.assertIsNone(socket.getdefaulttimeout())
diff --git a/Lib/test/test_uu.py b/Lib/test/test_uu.py
index 51a4fbe..df41cbc 100644
--- a/Lib/test/test_uu.py
+++ b/Lib/test/test_uu.py
@@ -4,9 +4,10 @@
 """
 
 import unittest
-from test import test_support
+from test import test_support as support
 
-import sys, os, uu, cStringIO
+import cStringIO
+import sys
 import uu
 
 plaintext = "The smooth-scaled python crept over the sleeping dog\n"
@@ -108,114 +109,64 @@
 
 class UUFileTest(unittest.TestCase):
 
-    def _kill(self, f):
-        # close and remove file
-        try:
-            f.close()
-        except (SystemExit, KeyboardInterrupt):
-            raise
-        except:
-            pass
-        try:
-            os.unlink(f.name)
-        except (SystemExit, KeyboardInterrupt):
-            raise
-        except:
-            pass
-
     def setUp(self):
-        self.tmpin  = test_support.TESTFN + "i"
-        self.tmpout = test_support.TESTFN + "o"
-
-    def tearDown(self):
-        del self.tmpin
-        del self.tmpout
+        self.tmpin  = support.TESTFN + "i"
+        self.tmpout = support.TESTFN + "o"
+        self.addCleanup(support.unlink, self.tmpin)
+        self.addCleanup(support.unlink, self.tmpout)
 
     def test_encode(self):
-        fin = fout = None
-        try:
-            test_support.unlink(self.tmpin)
-            fin = open(self.tmpin, 'wb')
+        with open(self.tmpin, 'wb') as fin:
             fin.write(plaintext)
-            fin.close()
 
-            fin = open(self.tmpin, 'rb')
-            fout = open(self.tmpout, 'w')
-            uu.encode(fin, fout, self.tmpin, mode=0644)
-            fin.close()
-            fout.close()
+        with open(self.tmpin, 'rb') as fin:
+            with open(self.tmpout, 'w') as fout:
+                uu.encode(fin, fout, self.tmpin, mode=0o644)
 
-            fout = open(self.tmpout, 'r')
+        with open(self.tmpout, 'r') as fout:
             s = fout.read()
-            fout.close()
-            self.assertEqual(s, encodedtextwrapped % (0644, self.tmpin))
+        self.assertEqual(s, encodedtextwrapped % (0o644, self.tmpin))
 
-            # in_file and out_file as filenames
-            uu.encode(self.tmpin, self.tmpout, self.tmpin, mode=0644)
-            fout = open(self.tmpout, 'r')
+        # in_file and out_file as filenames
+        uu.encode(self.tmpin, self.tmpout, self.tmpin, mode=0o644)
+        with open(self.tmpout, 'r') as fout:
             s = fout.read()
-            fout.close()
-            self.assertEqual(s, encodedtextwrapped % (0644, self.tmpin))
-
-        finally:
-            self._kill(fin)
-            self._kill(fout)
+        self.assertEqual(s, encodedtextwrapped % (0o644, self.tmpin))
 
     def test_decode(self):
-        f = None
-        try:
-            test_support.unlink(self.tmpin)
-            f = open(self.tmpin, 'w')
-            f.write(encodedtextwrapped % (0644, self.tmpout))
-            f.close()
+        with open(self.tmpin, 'w') as f:
+            f.write(encodedtextwrapped % (0o644, self.tmpout))
 
-            f = open(self.tmpin, 'r')
+        with open(self.tmpin, 'r') as f:
             uu.decode(f)
-            f.close()
 
-            f = open(self.tmpout, 'r')
+        with open(self.tmpout, 'r') as f:
             s = f.read()
-            f.close()
-            self.assertEqual(s, plaintext)
-            # XXX is there an xp way to verify the mode?
-        finally:
-            self._kill(f)
+        self.assertEqual(s, plaintext)
+        # XXX is there an xp way to verify the mode?
 
     def test_decode_filename(self):
-        f = None
-        try:
-            test_support.unlink(self.tmpin)
-            f = open(self.tmpin, 'w')
-            f.write(encodedtextwrapped % (0644, self.tmpout))
-            f.close()
+        with open(self.tmpin, 'w') as f:
+            f.write(encodedtextwrapped % (0o644, self.tmpout))
 
-            uu.decode(self.tmpin)
+        uu.decode(self.tmpin)
 
-            f = open(self.tmpout, 'r')
+        with open(self.tmpout, 'r') as f:
             s = f.read()
-            f.close()
-            self.assertEqual(s, plaintext)
-        finally:
-            self._kill(f)
+        self.assertEqual(s, plaintext)
 
     def test_decodetwice(self):
         # Verify that decode() will refuse to overwrite an existing file
-        f = None
-        try:
-            f = cStringIO.StringIO(encodedtextwrapped % (0644, self.tmpout))
-
-            f = open(self.tmpin, 'r')
+        with open(self.tmpin, 'wb') as f:
+            f.write(encodedtextwrapped % (0o644, self.tmpout))
+        with open(self.tmpin, 'r') as f:
             uu.decode(f)
-            f.close()
 
-            f = open(self.tmpin, 'r')
+        with open(self.tmpin, 'r') as f:
             self.assertRaises(uu.Error, uu.decode, f)
-            f.close()
-        finally:
-            self._kill(f)
 
 def test_main():
-    test_support.run_unittest(UUTest, UUStdIOTest, UUFileTest)
+    support.run_unittest(UUTest, UUStdIOTest, UUFileTest)
 
 if __name__=="__main__":
     test_main()
diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py
index 0a8130e..6cd2c39 100644
--- a/Lib/test/test_uuid.py
+++ b/Lib/test/test_uuid.py
@@ -287,6 +287,39 @@
         node2 = uuid.getnode()
         self.assertEqual(node1, node2, '%012x != %012x' % (node1, node2))
 
+    # bpo-32502: UUID1 requires a 48-bit identifier, but hardware identifiers
+    # need not necessarily be 48 bits (e.g., EUI-64).
+    def test_uuid1_eui64(self):
+        # Confirm that uuid.getnode ignores hardware addresses larger than 48
+        # bits. Mock out each platform's *_getnode helper functions to return
+        # something just larger than 48 bits to test. This will cause
+        # uuid.getnode to fall back on uuid._random_getnode, which will
+        # generate a valid value.
+        too_large_getter = lambda: 1 << 48
+
+        uuid_real__node = uuid._node
+        uuid_real__NODE_GETTERS_WIN32 = uuid._NODE_GETTERS_WIN32
+        uuid_real__NODE_GETTERS_UNIX = uuid._NODE_GETTERS_UNIX
+        uuid._node = None
+        uuid._NODE_GETTERS_WIN32 = [too_large_getter]
+        uuid._NODE_GETTERS_UNIX = [too_large_getter]
+        try:
+            node = uuid.getnode()
+        finally:
+            uuid._node = uuid_real__node
+            uuid._NODE_GETTERS_WIN32 = uuid_real__NODE_GETTERS_WIN32
+            uuid._NODE_GETTERS_UNIX = uuid_real__NODE_GETTERS_UNIX
+
+        self.assertTrue(0 < node < (1 << 48), '%012x' % node)
+
+        # Confirm that uuid1 can use the generated node, i.e., the that
+        # uuid.getnode fell back on uuid._random_getnode() rather than using
+        # the value from too_large_getter above.
+        try:
+            uuid.uuid1(node=node)
+        except ValueError as e:
+            self.fail('uuid1 was given an invalid node ID')
+
     @unittest.skipUnless(importable('ctypes'), 'requires ctypes')
     def test_uuid1(self):
         equal = self.assertEqual
@@ -429,54 +462,52 @@
             )
             self.assertEqual(mac, 0x1234567890ab)
 
-    def check_node(self, node, requires=None, network=False):
+    def check_node(self, node, requires=None):
         if requires and node is None:
             self.skipTest('requires ' + requires)
         hex = '%012x' % node
         if test_support.verbose >= 2:
             print hex + ' ',
-        if network:
-            # 47 bit will never be set in IEEE 802 addresses obtained
-            # from network cards.
-            self.assertFalse(node & 0x010000000000, hex)
         self.assertTrue(0 < node < (1L << 48),
                         "%s is not an RFC 4122 node ID" % hex)
 
     @unittest.skipUnless(os.name == 'posix', 'requires Posix')
     def test_ifconfig_getnode(self):
         node = uuid._ifconfig_getnode()
-        self.check_node(node, 'ifconfig', True)
+        self.check_node(node, 'ifconfig')
 
     @unittest.skipUnless(os.name == 'posix', 'requires Posix')
     def test_arp_getnode(self):
         node = uuid._arp_getnode()
-        self.check_node(node, 'arp', True)
+        self.check_node(node, 'arp')
 
     @unittest.skipUnless(os.name == 'posix', 'requires Posix')
     def test_lanscan_getnode(self):
         node = uuid._lanscan_getnode()
-        self.check_node(node, 'lanscan', True)
+        self.check_node(node, 'lanscan')
 
     @unittest.skipUnless(os.name == 'posix', 'requires Posix')
     def test_netstat_getnode(self):
         node = uuid._netstat_getnode()
-        self.check_node(node, 'netstat', True)
+        self.check_node(node, 'netstat')
 
     @unittest.skipUnless(os.name == 'nt', 'requires Windows')
     def test_ipconfig_getnode(self):
         node = uuid._ipconfig_getnode()
-        self.check_node(node, 'ipconfig', True)
+        self.check_node(node, 'ipconfig')
 
     @unittest.skipUnless(importable('win32wnet'), 'requires win32wnet')
     @unittest.skipUnless(importable('netbios'), 'requires netbios')
     def test_netbios_getnode(self):
         node = uuid._netbios_getnode()
-        self.check_node(node, network=True)
+        self.check_node(node)
 
     def test_random_getnode(self):
         node = uuid._random_getnode()
-        # Least significant bit of first octet must be set.
-        self.assertTrue(node & 0x010000000000, '%012x' % node)
+        # The multicast bit, i.e. the least significant bit of first octet,
+        # must be set for randomly generated MAC addresses.  See RFC 4122,
+        # $4.1.6.
+        self.assertTrue(node & (1 << 40), '%012x' % node)
         self.check_node(node)
 
     @unittest.skipUnless(os.name == 'posix', 'requires Posix')
diff --git a/Lib/test/test_warnings.py b/Lib/test/test_warnings.py
index 607d9f9..a9568f6 100644
--- a/Lib/test/test_warnings.py
+++ b/Lib/test/test_warnings.py
@@ -107,10 +107,14 @@
             self.module.resetwarnings()
             self.module.filterwarnings("always", category=UserWarning)
             message = "FilterTests.test_always"
-            self.module.warn(message, UserWarning)
-            self.assertTrue(message, w[-1].message)
-            self.module.warn(message, UserWarning)
-            self.assertTrue(w[-1].message, message)
+            def f():
+                self.module.warn(message, UserWarning)
+            f()
+            self.assertEqual(len(w), 1)
+            self.assertEqual(w[-1].message.args[0], message)
+            f()
+            self.assertEqual(len(w), 2)
+            self.assertEqual(w[-1].message.args[0], message)
 
     def test_default(self):
         with original_warnings.catch_warnings(record=True,
@@ -584,6 +588,38 @@
         self.assertNotIn(b'Warning!', stderr)
         self.assertNotIn(b'Error', stderr)
 
+    def test_issue31285(self):
+        # warn_explicit() shouldn't raise a SystemError in case the return
+        # value of get_source() has a bad splitlines() method.
+        class BadLoader:
+            def get_source(self, fullname):
+                class BadSource(str):
+                    def splitlines(self):
+                        return 42
+                return BadSource('spam')
+
+        wmod = self.module
+        with original_warnings.catch_warnings(module=wmod):
+            wmod.filterwarnings('default', category=UserWarning)
+
+            with test_support.captured_stderr() as stderr:
+                wmod.warn_explicit(
+                    'foo', UserWarning, 'bar', 1,
+                    module_globals={'__loader__': BadLoader(),
+                                    '__name__': 'foobar'})
+            self.assertIn('UserWarning: foo', stderr.getvalue())
+
+    @test_support.cpython_only
+    def test_issue31411(self):
+        # warn_explicit() shouldn't raise a SystemError in case
+        # warnings.onceregistry isn't a dictionary.
+        wmod = self.module
+        with original_warnings.catch_warnings(module=wmod):
+            wmod.filterwarnings('once')
+            with test_support.swap_attr(wmod, 'onceregistry', None):
+                with self.assertRaises(TypeError):
+                    wmod.warn_explicit('foo', Warning, 'bar', 1, registry=None)
+
 
 class WarningsDisplayTests(unittest.TestCase):
 
diff --git a/Lib/test/test_weakref.py b/Lib/test/test_weakref.py
index 4073d49..418481d 100644
--- a/Lib/test/test_weakref.py
+++ b/Lib/test/test_weakref.py
@@ -6,6 +6,7 @@
 import operator
 import contextlib
 import copy
+import time
 
 from test import test_support
 
@@ -56,6 +57,32 @@
         self.cycle = self
 
 
+@contextlib.contextmanager
+def collect_in_thread(period=0.001):
+    """
+    Ensure GC collections happen in a different thread, at a high frequency.
+    """
+    threading = test_support.import_module('threading')
+    please_stop = False
+
+    def collect():
+        while not please_stop:
+            time.sleep(period)
+            gc.collect()
+
+    with test_support.disable_gc():
+        old_interval = sys.getcheckinterval()
+        sys.setcheckinterval(20)
+        t = threading.Thread(target=collect)
+        t.start()
+        try:
+            yield
+        finally:
+            please_stop = True
+            t.join()
+            sys.setcheckinterval(old_interval)
+
+
 class TestBase(unittest.TestCase):
 
     def setUp(self):
@@ -574,6 +601,7 @@
         del c1, c2, C, D
         gc.collect()
 
+    @test_support.requires_type_collecting
     def test_callback_in_cycle_resurrection(self):
         import gc
 
@@ -1394,6 +1422,35 @@
         self.assertEqual(len(d), 0)
         self.assertEqual(count, 2)
 
+    def test_threaded_weak_valued_setdefault(self):
+        d = weakref.WeakValueDictionary()
+        with collect_in_thread():
+            for i in range(50000):
+                x = d.setdefault(10, RefCycle())
+                self.assertIsNot(x, None)  # we never put None in there!
+                del x
+
+    def test_threaded_weak_valued_pop(self):
+        d = weakref.WeakValueDictionary()
+        with collect_in_thread():
+            for i in range(50000):
+                d[10] = RefCycle()
+                x = d.pop(10, 10)
+                self.assertIsNot(x, None)  # we never put None in there!
+
+    def test_threaded_weak_valued_consistency(self):
+        # Issue #28427: old keys should not remove new values from
+        # WeakValueDictionary when collecting from another thread.
+        d = weakref.WeakValueDictionary()
+        with collect_in_thread():
+            for i in range(200000):
+                o = RefCycle()
+                d[10] = o
+                # o is still alive, so the dict can't be empty
+                self.assertEqual(len(d), 1)
+                o = None  # lose ref
+
+
 from test import mapping_tests
 
 class WeakValueDictionaryTestCase(mapping_tests.BasicTestMappingProtocol):
diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py
index 9fb6c99..c75d55f 100644
--- a/Lib/test/test_xml_etree.py
+++ b/Lib/test/test_xml_etree.py
@@ -1,26 +1,36 @@
-# xml.etree test.  This file contains enough tests to make sure that
-# all included components work as they should.
-# Large parts are extracted from the upstream test suite.
-
-# IMPORTANT: the same doctests are run from "test_xml_etree_c" in
-# order to ensure consistency between the C implementation and the
-# Python implementation.
+# -*- coding: utf-8 -*-
+# IMPORTANT: the same tests are run from "test_xml_etree_c" in order
+# to ensure consistency between the C implementation and the Python
+# implementation.
 #
 # For this purpose, the module-level "ET" symbol is temporarily
 # monkey-patched when running the "test_xml_etree_c" test suite.
-# Don't re-import "xml.etree.ElementTree" module in the docstring,
-# except if the test is specific to the Python implementation.
 
-import sys
 import cgi
+import copy
+import functools
+import io
+import pickle
+import StringIO
+import sys
+import types
+import unittest
+import warnings
+import weakref
 
-from test import test_support
-from test.test_support import findfile
+from test import test_support as support
+from test.test_support import TESTFN, findfile, gc_collect, swap_attr
 
-from xml.etree import ElementTree as ET
+# pyET is the pure-Python implementation.
+#
+# ET is pyET in test_xml_etree and is the C accelerated version in
+# test_xml_etree_c.
+from xml.etree import ElementTree as pyET
+ET = None
 
 SIMPLE_XMLFILE = findfile("simple.xml", subdir="xmltestdata")
 SIMPLE_NS_XMLFILE = findfile("simple-ns.xml", subdir="xmltestdata")
+UTF8_BUG_XMLFILE = findfile("expat224_utf8_bug.xml", subdir="xmltestdata")
 
 SAMPLE_XML = """\
 <body>
@@ -52,959 +62,22 @@
 </body>
 """
 
+SAMPLE_XML_NS_ELEMS = """
+<root>
+<h:table xmlns:h="hello">
+  <h:tr>
+    <h:td>Apples</h:td>
+    <h:td>Bananas</h:td>
+  </h:tr>
+</h:table>
 
-def sanity():
-    """
-    Import sanity.
-
-    >>> from xml.etree import ElementTree
-    >>> from xml.etree import ElementInclude
-    >>> from xml.etree import ElementPath
-    """
-
-def check_method(method):
-    if not hasattr(method, '__call__'):
-        print method, "not callable"
-
-def serialize(elem, to_string=True, **options):
-    import StringIO
-    file = StringIO.StringIO()
-    tree = ET.ElementTree(elem)
-    tree.write(file, **options)
-    if to_string:
-        return file.getvalue()
-    else:
-        file.seek(0)
-        return file
-
-def summarize(elem):
-    if elem.tag == ET.Comment:
-        return "<Comment>"
-    return elem.tag
-
-def summarize_list(seq):
-    return [summarize(elem) for elem in seq]
-
-def normalize_crlf(tree):
-    for elem in tree.iter():
-        if elem.text:
-            elem.text = elem.text.replace("\r\n", "\n")
-        if elem.tail:
-            elem.tail = elem.tail.replace("\r\n", "\n")
-
-def check_string(string):
-    len(string)
-    for char in string:
-        if len(char) != 1:
-            print "expected one-character string, got %r" % char
-    new_string = string + ""
-    new_string = string + " "
-    string[:0]
-
-def check_mapping(mapping):
-    len(mapping)
-    keys = mapping.keys()
-    items = mapping.items()
-    for key in keys:
-        item = mapping[key]
-    mapping["key"] = "value"
-    if mapping["key"] != "value":
-        print "expected value string, got %r" % mapping["key"]
-
-def check_element(element):
-    if not ET.iselement(element):
-        print "not an element"
-    if not hasattr(element, "tag"):
-        print "no tag member"
-    if not hasattr(element, "attrib"):
-        print "no attrib member"
-    if not hasattr(element, "text"):
-        print "no text member"
-    if not hasattr(element, "tail"):
-        print "no tail member"
-
-    check_string(element.tag)
-    check_mapping(element.attrib)
-    if element.text is not None:
-        check_string(element.text)
-    if element.tail is not None:
-        check_string(element.tail)
-    for elem in element:
-        check_element(elem)
-
-# --------------------------------------------------------------------
-# element tree tests
-
-def interface():
-    r"""
-    Test element tree interface.
-
-    >>> element = ET.Element("tag")
-    >>> check_element(element)
-    >>> tree = ET.ElementTree(element)
-    >>> check_element(tree.getroot())
-
-    >>> element = ET.Element("t\xe4g", key="value")
-    >>> tree = ET.ElementTree(element)
-    >>> repr(element)   # doctest: +ELLIPSIS
-    "<Element 't\\xe4g' at 0x...>"
-    >>> element = ET.Element("tag", key="value")
-
-    Make sure all standard element methods exist.
-
-    >>> check_method(element.append)
-    >>> check_method(element.extend)
-    >>> check_method(element.insert)
-    >>> check_method(element.remove)
-    >>> check_method(element.getchildren)
-    >>> check_method(element.find)
-    >>> check_method(element.iterfind)
-    >>> check_method(element.findall)
-    >>> check_method(element.findtext)
-    >>> check_method(element.clear)
-    >>> check_method(element.get)
-    >>> check_method(element.set)
-    >>> check_method(element.keys)
-    >>> check_method(element.items)
-    >>> check_method(element.iter)
-    >>> check_method(element.itertext)
-    >>> check_method(element.getiterator)
-
-    These methods return an iterable. See bug 6472.
-
-    >>> check_method(element.iter("tag").next)
-    >>> check_method(element.iterfind("tag").next)
-    >>> check_method(element.iterfind("*").next)
-    >>> check_method(tree.iter("tag").next)
-    >>> check_method(tree.iterfind("tag").next)
-    >>> check_method(tree.iterfind("*").next)
-
-    These aliases are provided:
-
-    >>> assert ET.XML == ET.fromstring
-    >>> assert ET.PI == ET.ProcessingInstruction
-    >>> assert ET.XMLParser == ET.XMLTreeBuilder
-    """
-
-def simpleops():
-    """
-    Basic method sanity checks.
-
-    >>> elem = ET.XML("<body><tag/></body>")
-    >>> serialize(elem)
-    '<body><tag /></body>'
-    >>> e = ET.Element("tag2")
-    >>> elem.append(e)
-    >>> serialize(elem)
-    '<body><tag /><tag2 /></body>'
-    >>> elem.remove(e)
-    >>> serialize(elem)
-    '<body><tag /></body>'
-    >>> elem.insert(0, e)
-    >>> serialize(elem)
-    '<body><tag2 /><tag /></body>'
-    >>> elem.remove(e)
-    >>> elem.extend([e])
-    >>> serialize(elem)
-    '<body><tag /><tag2 /></body>'
-    >>> elem.remove(e)
-
-    >>> element = ET.Element("tag", key="value")
-    >>> serialize(element) # 1
-    '<tag key="value" />'
-    >>> subelement = ET.Element("subtag")
-    >>> element.append(subelement)
-    >>> serialize(element) # 2
-    '<tag key="value"><subtag /></tag>'
-    >>> element.insert(0, subelement)
-    >>> serialize(element) # 3
-    '<tag key="value"><subtag /><subtag /></tag>'
-    >>> element.remove(subelement)
-    >>> serialize(element) # 4
-    '<tag key="value"><subtag /></tag>'
-    >>> element.remove(subelement)
-    >>> serialize(element) # 5
-    '<tag key="value" />'
-    >>> element.remove(subelement)
-    Traceback (most recent call last):
-    ValueError: list.remove(x): x not in list
-    >>> serialize(element) # 6
-    '<tag key="value" />'
-    >>> element[0:0] = [subelement, subelement, subelement]
-    >>> serialize(element[1])
-    '<subtag />'
-    >>> element[1:9] == [element[1], element[2]]
-    True
-    >>> element[:9:2] == [element[0], element[2]]
-    True
-    >>> del element[1:2]
-    >>> serialize(element)
-    '<tag key="value"><subtag /><subtag /></tag>'
-    """
-
-def cdata():
-    """
-    Test CDATA handling (etc).
-
-    >>> serialize(ET.XML("<tag>hello</tag>"))
-    '<tag>hello</tag>'
-    >>> serialize(ET.XML("<tag>&#104;&#101;&#108;&#108;&#111;</tag>"))
-    '<tag>hello</tag>'
-    >>> serialize(ET.XML("<tag><![CDATA[hello]]></tag>"))
-    '<tag>hello</tag>'
-    """
-
-# Only with Python implementation
-def simplefind():
-    """
-    Test find methods using the elementpath fallback.
-
-    >>> from xml.etree import ElementTree
-
-    >>> CurrentElementPath = ElementTree.ElementPath
-    >>> ElementTree.ElementPath = ElementTree._SimpleElementPath()
-    >>> elem = ElementTree.XML(SAMPLE_XML)
-    >>> elem.find("tag").tag
-    'tag'
-    >>> ElementTree.ElementTree(elem).find("tag").tag
-    'tag'
-    >>> elem.findtext("tag")
-    'text'
-    >>> elem.findtext("tog")
-    >>> elem.findtext("tog", "default")
-    'default'
-    >>> ElementTree.ElementTree(elem).findtext("tag")
-    'text'
-    >>> summarize_list(elem.findall("tag"))
-    ['tag', 'tag']
-    >>> summarize_list(elem.findall(".//tag"))
-    ['tag', 'tag', 'tag']
-
-    Path syntax doesn't work in this case.
-
-    >>> elem.find("section/tag")
-    >>> elem.findtext("section/tag")
-    >>> summarize_list(elem.findall("section/tag"))
-    []
-
-    >>> ElementTree.ElementPath = CurrentElementPath
-    """
-
-def find():
-    """
-    Test find methods (including xpath syntax).
-
-    >>> elem = ET.XML(SAMPLE_XML)
-    >>> elem.find("tag").tag
-    'tag'
-    >>> ET.ElementTree(elem).find("tag").tag
-    'tag'
-    >>> elem.find("section/tag").tag
-    'tag'
-    >>> elem.find("./tag").tag
-    'tag'
-    >>> ET.ElementTree(elem).find("./tag").tag
-    'tag'
-    >>> ET.ElementTree(elem).find("/tag").tag
-    'tag'
-    >>> elem[2] = ET.XML(SAMPLE_SECTION)
-    >>> elem.find("section/nexttag").tag
-    'nexttag'
-    >>> ET.ElementTree(elem).find("section/tag").tag
-    'tag'
-    >>> ET.ElementTree(elem).find("tog")
-    >>> ET.ElementTree(elem).find("tog/foo")
-    >>> elem.findtext("tag")
-    'text'
-    >>> elem.findtext("section/nexttag")
-    ''
-    >>> elem.findtext("section/nexttag", "default")
-    ''
-    >>> elem.findtext("tog")
-    >>> elem.findtext("tog", "default")
-    'default'
-    >>> ET.ElementTree(elem).findtext("tag")
-    'text'
-    >>> ET.ElementTree(elem).findtext("tog/foo")
-    >>> ET.ElementTree(elem).findtext("tog/foo", "default")
-    'default'
-    >>> ET.ElementTree(elem).findtext("./tag")
-    'text'
-    >>> ET.ElementTree(elem).findtext("/tag")
-    'text'
-    >>> elem.findtext("section/tag")
-    'subtext'
-    >>> ET.ElementTree(elem).findtext("section/tag")
-    'subtext'
-    >>> summarize_list(elem.findall("."))
-    ['body']
-    >>> summarize_list(elem.findall("tag"))
-    ['tag', 'tag']
-    >>> summarize_list(elem.findall("tog"))
-    []
-    >>> summarize_list(elem.findall("tog/foo"))
-    []
-    >>> summarize_list(elem.findall("*"))
-    ['tag', 'tag', 'section']
-    >>> summarize_list(elem.findall(".//tag"))
-    ['tag', 'tag', 'tag', 'tag']
-    >>> summarize_list(elem.findall("section/tag"))
-    ['tag']
-    >>> summarize_list(elem.findall("section//tag"))
-    ['tag', 'tag']
-    >>> summarize_list(elem.findall("section/*"))
-    ['tag', 'nexttag', 'nextsection']
-    >>> summarize_list(elem.findall("section//*"))
-    ['tag', 'nexttag', 'nextsection', 'tag']
-    >>> summarize_list(elem.findall("section/.//*"))
-    ['tag', 'nexttag', 'nextsection', 'tag']
-    >>> summarize_list(elem.findall("*/*"))
-    ['tag', 'nexttag', 'nextsection']
-    >>> summarize_list(elem.findall("*//*"))
-    ['tag', 'nexttag', 'nextsection', 'tag']
-    >>> summarize_list(elem.findall("*/tag"))
-    ['tag']
-    >>> summarize_list(elem.findall("*/./tag"))
-    ['tag']
-    >>> summarize_list(elem.findall("./tag"))
-    ['tag', 'tag']
-    >>> summarize_list(elem.findall(".//tag"))
-    ['tag', 'tag', 'tag', 'tag']
-    >>> summarize_list(elem.findall("././tag"))
-    ['tag', 'tag']
-    >>> summarize_list(elem.findall(".//tag[@class]"))
-    ['tag', 'tag', 'tag']
-    >>> summarize_list(elem.findall(".//tag[@class='a']"))
-    ['tag']
-    >>> summarize_list(elem.findall(".//tag[@class='b']"))
-    ['tag', 'tag']
-    >>> summarize_list(elem.findall(".//tag[@id]"))
-    ['tag']
-    >>> summarize_list(elem.findall(".//section[tag]"))
-    ['section']
-    >>> summarize_list(elem.findall(".//section[element]"))
-    []
-    >>> summarize_list(elem.findall("../tag"))
-    []
-    >>> summarize_list(elem.findall("section/../tag"))
-    ['tag', 'tag']
-    >>> summarize_list(ET.ElementTree(elem).findall("./tag"))
-    ['tag', 'tag']
-
-    Following example is invalid in 1.2.
-    A leading '*' is assumed in 1.3.
-
-    >>> elem.findall("section//") == elem.findall("section//*")
-    True
-
-    ET's Path module handles this case incorrectly; this gives
-    a warning in 1.3, and the behaviour will be modified in 1.4.
-
-    >>> summarize_list(ET.ElementTree(elem).findall("/tag"))
-    ['tag', 'tag']
-
-    >>> elem = ET.XML(SAMPLE_XML_NS)
-    >>> summarize_list(elem.findall("tag"))
-    []
-    >>> summarize_list(elem.findall("{http://effbot.org/ns}tag"))
-    ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag']
-    >>> summarize_list(elem.findall(".//{http://effbot.org/ns}tag"))
-    ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag']
-    """
-
-def file_init():
-    """
-    >>> import StringIO
-
-    >>> stringfile = StringIO.StringIO(SAMPLE_XML)
-    >>> tree = ET.ElementTree(file=stringfile)
-    >>> tree.find("tag").tag
-    'tag'
-    >>> tree.find("section/tag").tag
-    'tag'
-
-    >>> tree = ET.ElementTree(file=SIMPLE_XMLFILE)
-    >>> tree.find("element").tag
-    'element'
-    >>> tree.find("element/../empty-element").tag
-    'empty-element'
-    """
-
-def bad_find():
-    """
-    Check bad or unsupported path expressions.
-
-    >>> elem = ET.XML(SAMPLE_XML)
-    >>> elem.findall("/tag")
-    Traceback (most recent call last):
-    SyntaxError: cannot use absolute path on element
-    """
-
-def path_cache():
-    """
-    Check that the path cache behaves sanely.
-
-    >>> elem = ET.XML(SAMPLE_XML)
-    >>> for i in range(10): ET.ElementTree(elem).find('./'+str(i))
-    >>> cache_len_10 = len(ET.ElementPath._cache)
-    >>> for i in range(10): ET.ElementTree(elem).find('./'+str(i))
-    >>> len(ET.ElementPath._cache) == cache_len_10
-    True
-    >>> for i in range(20): ET.ElementTree(elem).find('./'+str(i))
-    >>> len(ET.ElementPath._cache) > cache_len_10
-    True
-    >>> for i in range(600): ET.ElementTree(elem).find('./'+str(i))
-    >>> len(ET.ElementPath._cache) < 500
-    True
-    """
-
-def copy():
-    """
-    Test copy handling (etc).
-
-    >>> import copy
-    >>> e1 = ET.XML("<tag>hello<foo/></tag>")
-    >>> e2 = copy.copy(e1)
-    >>> e3 = copy.deepcopy(e1)
-    >>> e1.find("foo").tag = "bar"
-    >>> serialize(e1)
-    '<tag>hello<bar /></tag>'
-    >>> serialize(e2)
-    '<tag>hello<bar /></tag>'
-    >>> serialize(e3)
-    '<tag>hello<foo /></tag>'
-
-    """
-
-def attrib():
-    """
-    Test attribute handling.
-
-    >>> elem = ET.Element("tag")
-    >>> elem.get("key") # 1.1
-    >>> elem.get("key", "default") # 1.2
-    'default'
-    >>> elem.set("key", "value")
-    >>> elem.get("key") # 1.3
-    'value'
-
-    >>> elem = ET.Element("tag", key="value")
-    >>> elem.get("key") # 2.1
-    'value'
-    >>> elem.attrib # 2.2
-    {'key': 'value'}
-
-    >>> attrib = {"key": "value"}
-    >>> elem = ET.Element("tag", attrib)
-    >>> attrib.clear() # check for aliasing issues
-    >>> elem.get("key") # 3.1
-    'value'
-    >>> elem.attrib # 3.2
-    {'key': 'value'}
-
-    >>> attrib = {"key": "value"}
-    >>> elem = ET.Element("tag", **attrib)
-    >>> attrib.clear() # check for aliasing issues
-    >>> elem.get("key") # 4.1
-    'value'
-    >>> elem.attrib # 4.2
-    {'key': 'value'}
-
-    >>> elem = ET.Element("tag", {"key": "other"}, key="value")
-    >>> elem.get("key") # 5.1
-    'value'
-    >>> elem.attrib # 5.2
-    {'key': 'value'}
-
-    >>> elem = ET.Element('test')
-    >>> elem.text = "aa"
-    >>> elem.set('testa', 'testval')
-    >>> elem.set('testb', 'test2')
-    >>> ET.tostring(elem)
-    '<test testa="testval" testb="test2">aa</test>'
-    >>> sorted(elem.keys())
-    ['testa', 'testb']
-    >>> sorted(elem.items())
-    [('testa', 'testval'), ('testb', 'test2')]
-    >>> elem.attrib['testb']
-    'test2'
-    >>> elem.attrib['testb'] = 'test1'
-    >>> elem.attrib['testc'] = 'test2'
-    >>> ET.tostring(elem)
-    '<test testa="testval" testb="test1" testc="test2">aa</test>'
-    """
-
-def makeelement():
-    """
-    Test makeelement handling.
-
-    >>> elem = ET.Element("tag")
-    >>> attrib = {"key": "value"}
-    >>> subelem = elem.makeelement("subtag", attrib)
-    >>> if subelem.attrib is attrib:
-    ...     print "attrib aliasing"
-    >>> elem.append(subelem)
-    >>> serialize(elem)
-    '<tag><subtag key="value" /></tag>'
-
-    >>> elem.clear()
-    >>> serialize(elem)
-    '<tag />'
-    >>> elem.append(subelem)
-    >>> serialize(elem)
-    '<tag><subtag key="value" /></tag>'
-    >>> elem.extend([subelem, subelem])
-    >>> serialize(elem)
-    '<tag><subtag key="value" /><subtag key="value" /><subtag key="value" /></tag>'
-    >>> elem[:] = [subelem]
-    >>> serialize(elem)
-    '<tag><subtag key="value" /></tag>'
-    >>> elem[:] = tuple([subelem])
-    >>> serialize(elem)
-    '<tag><subtag key="value" /></tag>'
-
-    """
-
-def parsefile():
-    """
-    Test parsing from file.
-
-    >>> tree = ET.parse(SIMPLE_XMLFILE)
-    >>> normalize_crlf(tree)
-    >>> tree.write(sys.stdout)
-    <root>
-       <element key="value">text</element>
-       <element>text</element>tail
-       <empty-element />
-    </root>
-    >>> tree = ET.parse(SIMPLE_NS_XMLFILE)
-    >>> normalize_crlf(tree)
-    >>> tree.write(sys.stdout)
-    <ns0:root xmlns:ns0="namespace">
-       <ns0:element key="value">text</ns0:element>
-       <ns0:element>text</ns0:element>tail
-       <ns0:empty-element />
-    </ns0:root>
-
-    >>> with open(SIMPLE_XMLFILE) as f:
-    ...     data = f.read()
-
-    >>> parser = ET.XMLParser()
-    >>> parser.version  # doctest: +ELLIPSIS
-    'Expat ...'
-    >>> parser.feed(data)
-    >>> print serialize(parser.close())
-    <root>
-       <element key="value">text</element>
-       <element>text</element>tail
-       <empty-element />
-    </root>
-
-    >>> parser = ET.XMLTreeBuilder() # 1.2 compatibility
-    >>> parser.feed(data)
-    >>> print serialize(parser.close())
-    <root>
-       <element key="value">text</element>
-       <element>text</element>tail
-       <empty-element />
-    </root>
-
-    >>> target = ET.TreeBuilder()
-    >>> parser = ET.XMLParser(target=target)
-    >>> parser.feed(data)
-    >>> print serialize(parser.close())
-    <root>
-       <element key="value">text</element>
-       <element>text</element>tail
-       <empty-element />
-    </root>
-    """
-
-def parseliteral():
-    """
-    >>> element = ET.XML("<html><body>text</body></html>")
-    >>> ET.ElementTree(element).write(sys.stdout)
-    <html><body>text</body></html>
-    >>> element = ET.fromstring("<html><body>text</body></html>")
-    >>> ET.ElementTree(element).write(sys.stdout)
-    <html><body>text</body></html>
-    >>> sequence = ["<html><body>", "text</bo", "dy></html>"]
-    >>> element = ET.fromstringlist(sequence)
-    >>> print ET.tostring(element)
-    <html><body>text</body></html>
-    >>> print "".join(ET.tostringlist(element))
-    <html><body>text</body></html>
-    >>> ET.tostring(element, "ascii")
-    "<?xml version='1.0' encoding='ascii'?>\\n<html><body>text</body></html>"
-    >>> _, ids = ET.XMLID("<html><body>text</body></html>")
-    >>> len(ids)
-    0
-    >>> _, ids = ET.XMLID("<html><body id='body'>text</body></html>")
-    >>> len(ids)
-    1
-    >>> ids["body"].tag
-    'body'
-    """
-
-def iterparse():
-    """
-    Test iterparse interface.
-
-    >>> iterparse = ET.iterparse
-
-    >>> context = iterparse(SIMPLE_XMLFILE)
-    >>> action, elem = next(context)
-    >>> print action, elem.tag
-    end element
-    >>> for action, elem in context:
-    ...   print action, elem.tag
-    end element
-    end empty-element
-    end root
-    >>> context.root.tag
-    'root'
-
-    >>> context = iterparse(SIMPLE_NS_XMLFILE)
-    >>> for action, elem in context:
-    ...   print action, elem.tag
-    end {namespace}element
-    end {namespace}element
-    end {namespace}empty-element
-    end {namespace}root
-
-    >>> events = ()
-    >>> context = iterparse(SIMPLE_XMLFILE, events)
-    >>> for action, elem in context:
-    ...   print action, elem.tag
-
-    >>> events = ()
-    >>> context = iterparse(SIMPLE_XMLFILE, events=events)
-    >>> for action, elem in context:
-    ...   print action, elem.tag
-
-    >>> events = ("start", "end")
-    >>> context = iterparse(SIMPLE_XMLFILE, events)
-    >>> for action, elem in context:
-    ...   print action, elem.tag
-    start root
-    start element
-    end element
-    start element
-    end element
-    start empty-element
-    end empty-element
-    end root
-
-    >>> events = ("start", "end", "start-ns", "end-ns")
-    >>> context = iterparse(SIMPLE_NS_XMLFILE, events)
-    >>> for action, elem in context:
-    ...   if action in ("start", "end"):
-    ...     print action, elem.tag
-    ...   else:
-    ...     print action, elem
-    start-ns ('', 'namespace')
-    start {namespace}root
-    start {namespace}element
-    end {namespace}element
-    start {namespace}element
-    end {namespace}element
-    start {namespace}empty-element
-    end {namespace}empty-element
-    end {namespace}root
-    end-ns None
-
-    >>> import StringIO
-
-    >>> events = ('start-ns', 'end-ns')
-    >>> context = ET.iterparse(StringIO.StringIO(r"<root xmlns=''/>"), events)
-    >>> for action, elem in context:
-    ...   print action, elem
-    start-ns ('', '')
-    end-ns None
-
-    >>> events = ("start", "end", "bogus")
-    >>> with open(SIMPLE_XMLFILE, "rb") as f:
-    ...     iterparse(f, events)
-    Traceback (most recent call last):
-    ValueError: unknown event 'bogus'
-
-    >>> source = StringIO.StringIO(
-    ...     "<?xml version='1.0' encoding='iso-8859-1'?>\\n"
-    ...     "<body xmlns='http://&#233;ffbot.org/ns'\\n"
-    ...     "      xmlns:cl\\xe9='http://effbot.org/ns'>text</body>\\n")
-    >>> events = ("start-ns",)
-    >>> context = iterparse(source, events)
-    >>> for action, elem in context:
-    ...     print action, elem
-    start-ns ('', u'http://\\xe9ffbot.org/ns')
-    start-ns (u'cl\\xe9', 'http://effbot.org/ns')
-
-    >>> source = StringIO.StringIO("<document />junk")
-    >>> try:
-    ...   for action, elem in iterparse(source):
-    ...     print action, elem.tag
-    ... except ET.ParseError, v:
-    ...   print v
-    end document
-    junk after document element: line 1, column 12
-    """
-
-def writefile():
-    """
-    >>> elem = ET.Element("tag")
-    >>> elem.text = "text"
-    >>> serialize(elem)
-    '<tag>text</tag>'
-    >>> ET.SubElement(elem, "subtag").text = "subtext"
-    >>> serialize(elem)
-    '<tag>text<subtag>subtext</subtag></tag>'
-
-    Test tag suppression
-    >>> elem.tag = None
-    >>> serialize(elem)
-    'text<subtag>subtext</subtag>'
-    >>> elem.insert(0, ET.Comment("comment"))
-    >>> serialize(elem)     # assumes 1.3
-    'text<!--comment--><subtag>subtext</subtag>'
-    >>> elem[0] = ET.PI("key", "value")
-    >>> serialize(elem)
-    'text<?key value?><subtag>subtext</subtag>'
-    """
-
-def custom_builder():
-    """
-    Test parser w. custom builder.
-
-    >>> with open(SIMPLE_XMLFILE) as f:
-    ...     data = f.read()
-    >>> class Builder:
-    ...     def start(self, tag, attrib):
-    ...         print "start", tag
-    ...     def end(self, tag):
-    ...         print "end", tag
-    ...     def data(self, text):
-    ...         pass
-    >>> builder = Builder()
-    >>> parser = ET.XMLParser(target=builder)
-    >>> parser.feed(data)
-    start root
-    start element
-    end element
-    start element
-    end element
-    start empty-element
-    end empty-element
-    end root
-
-    >>> with open(SIMPLE_NS_XMLFILE) as f:
-    ...     data = f.read()
-    >>> class Builder:
-    ...     def start(self, tag, attrib):
-    ...         print "start", tag
-    ...     def end(self, tag):
-    ...         print "end", tag
-    ...     def data(self, text):
-    ...         pass
-    ...     def pi(self, target, data):
-    ...         print "pi", target, repr(data)
-    ...     def comment(self, data):
-    ...         print "comment", repr(data)
-    >>> builder = Builder()
-    >>> parser = ET.XMLParser(target=builder)
-    >>> parser.feed(data)
-    pi pi 'data'
-    comment ' comment '
-    start {namespace}root
-    start {namespace}element
-    end {namespace}element
-    start {namespace}element
-    end {namespace}element
-    start {namespace}empty-element
-    end {namespace}empty-element
-    end {namespace}root
-
-    """
-
-def getchildren():
-    """
-    Test Element.getchildren()
-
-    >>> with open(SIMPLE_XMLFILE, "r") as f:
-    ...     tree = ET.parse(f)
-    >>> for elem in tree.getroot().iter():
-    ...     summarize_list(elem.getchildren())
-    ['element', 'element', 'empty-element']
-    []
-    []
-    []
-    >>> for elem in tree.getiterator():
-    ...     summarize_list(elem.getchildren())
-    ['element', 'element', 'empty-element']
-    []
-    []
-    []
-
-    >>> elem = ET.XML(SAMPLE_XML)
-    >>> len(elem.getchildren())
-    3
-    >>> len(elem[2].getchildren())
-    1
-    >>> elem[:] == elem.getchildren()
-    True
-    >>> child1 = elem[0]
-    >>> child2 = elem[2]
-    >>> del elem[1:2]
-    >>> len(elem.getchildren())
-    2
-    >>> child1 == elem[0]
-    True
-    >>> child2 == elem[1]
-    True
-    >>> elem[0:2] = [child2, child1]
-    >>> child2 == elem[0]
-    True
-    >>> child1 == elem[1]
-    True
-    >>> child1 == elem[0]
-    False
-    >>> elem.clear()
-    >>> elem.getchildren()
-    []
-    """
-
-def writestring():
-    """
-    >>> elem = ET.XML("<html><body>text</body></html>")
-    >>> ET.tostring(elem)
-    '<html><body>text</body></html>'
-    >>> elem = ET.fromstring("<html><body>text</body></html>")
-    >>> ET.tostring(elem)
-    '<html><body>text</body></html>'
-    """
-
-def check_encoding(encoding):
-    """
-    >>> check_encoding("ascii")
-    >>> check_encoding("us-ascii")
-    >>> check_encoding("iso-8859-1")
-    >>> check_encoding("iso-8859-15")
-    >>> check_encoding("cp437")
-    >>> check_encoding("mac-roman")
-    >>> check_encoding("gbk")
-    Traceback (most recent call last):
-    ValueError: multi-byte encodings are not supported
-    >>> check_encoding("cp037")
-    Traceback (most recent call last):
-    ParseError: unknown encoding: line 1, column 30
-    """
-    ET.XML("<?xml version='1.0' encoding='%s'?><xml />" % encoding)
-
-def encoding():
-    r"""
-    Test encoding issues.
-
-    >>> elem = ET.Element("tag")
-    >>> elem.text = u"abc"
-    >>> serialize(elem)
-    '<tag>abc</tag>'
-    >>> serialize(elem, encoding="utf-8")
-    '<tag>abc</tag>'
-    >>> serialize(elem, encoding="us-ascii")
-    '<tag>abc</tag>'
-    >>> serialize(elem, encoding="iso-8859-1")
-    "<?xml version='1.0' encoding='iso-8859-1'?>\n<tag>abc</tag>"
-
-    >>> elem.text = "<&\"\'>"
-    >>> serialize(elem)
-    '<tag>&lt;&amp;"\'&gt;</tag>'
-    >>> serialize(elem, encoding="utf-8")
-    '<tag>&lt;&amp;"\'&gt;</tag>'
-    >>> serialize(elem, encoding="us-ascii") # cdata characters
-    '<tag>&lt;&amp;"\'&gt;</tag>'
-    >>> serialize(elem, encoding="iso-8859-1")
-    '<?xml version=\'1.0\' encoding=\'iso-8859-1\'?>\n<tag>&lt;&amp;"\'&gt;</tag>'
-
-    >>> elem.attrib["key"] = "<&\"\'>"
-    >>> elem.text = None
-    >>> serialize(elem)
-    '<tag key="&lt;&amp;&quot;\'&gt;" />'
-    >>> serialize(elem, encoding="utf-8")
-    '<tag key="&lt;&amp;&quot;\'&gt;" />'
-    >>> serialize(elem, encoding="us-ascii")
-    '<tag key="&lt;&amp;&quot;\'&gt;" />'
-    >>> serialize(elem, encoding="iso-8859-1")
-    '<?xml version=\'1.0\' encoding=\'iso-8859-1\'?>\n<tag key="&lt;&amp;&quot;\'&gt;" />'
-
-    >>> elem.text = u'\xe5\xf6\xf6<>'
-    >>> elem.attrib.clear()
-    >>> serialize(elem)
-    '<tag>&#229;&#246;&#246;&lt;&gt;</tag>'
-    >>> serialize(elem, encoding="utf-8")
-    '<tag>\xc3\xa5\xc3\xb6\xc3\xb6&lt;&gt;</tag>'
-    >>> serialize(elem, encoding="us-ascii")
-    '<tag>&#229;&#246;&#246;&lt;&gt;</tag>'
-    >>> serialize(elem, encoding="iso-8859-1")
-    "<?xml version='1.0' encoding='iso-8859-1'?>\n<tag>\xe5\xf6\xf6&lt;&gt;</tag>"
-
-    >>> elem.attrib["key"] = u'\xe5\xf6\xf6<>'
-    >>> elem.text = None
-    >>> serialize(elem)
-    '<tag key="&#229;&#246;&#246;&lt;&gt;" />'
-    >>> serialize(elem, encoding="utf-8")
-    '<tag key="\xc3\xa5\xc3\xb6\xc3\xb6&lt;&gt;" />'
-    >>> serialize(elem, encoding="us-ascii")
-    '<tag key="&#229;&#246;&#246;&lt;&gt;" />'
-    >>> serialize(elem, encoding="iso-8859-1")
-    '<?xml version=\'1.0\' encoding=\'iso-8859-1\'?>\n<tag key="\xe5\xf6\xf6&lt;&gt;" />'
-    """
-
-def methods():
-    r"""
-    Test serialization methods.
-
-    >>> e = ET.XML("<html><link/><script>1 &lt; 2</script></html>")
-    >>> e.tail = "\n"
-    >>> serialize(e)
-    '<html><link /><script>1 &lt; 2</script></html>\n'
-    >>> serialize(e, method=None)
-    '<html><link /><script>1 &lt; 2</script></html>\n'
-    >>> serialize(e, method="xml")
-    '<html><link /><script>1 &lt; 2</script></html>\n'
-    >>> serialize(e, method="html")
-    '<html><link><script>1 < 2</script></html>\n'
-    >>> serialize(e, method="text")
-    '1 < 2\n'
-    """
-
-def iterators():
-    """
-    Test iterators.
-
-    >>> e = ET.XML("<html><body>this is a <i>paragraph</i>.</body>..</html>")
-    >>> summarize_list(e.iter())
-    ['html', 'body', 'i']
-    >>> summarize_list(e.find("body").iter())
-    ['body', 'i']
-    >>> summarize(next(e.iter()))
-    'html'
-    >>> "".join(e.itertext())
-    'this is a paragraph...'
-    >>> "".join(e.find("body").itertext())
-    'this is a paragraph.'
-    >>> next(e.itertext())
-    'this is a '
-
-    Method iterparse should return an iterator. See bug 6472.
-
-    >>> sourcefile = serialize(e, to_string=False)
-    >>> next(ET.iterparse(sourcefile))  # doctest: +ELLIPSIS
-    ('end', <Element 'i' at 0x...>)
-
-    >>> tree = ET.ElementTree(None)
-    >>> tree.iter()
-    Traceback (most recent call last):
-    AttributeError: 'NoneType' object has no attribute 'iter'
-    """
+<f:table xmlns:f="foo">
+  <f:name>African Coffee Table</f:name>
+  <f:width>80</f:width>
+  <f:length>120</f:length>
+</f:table>
+</root>
+"""
 
 ENTITY_XML = """\
 <!DOCTYPE points [
@@ -1014,246 +87,921 @@
 <document>&entity;</document>
 """
 
-def entity():
-    """
-    Test entity handling.
 
-    1) good entities
+def checkwarnings(*filters):
+    def decorator(test):
+        def newtest(*args, **kwargs):
+            with support.check_warnings(*filters):
+                test(*args, **kwargs)
+        functools.update_wrapper(newtest, test)
+        return newtest
+    return decorator
 
-    >>> e = ET.XML("<document title='&#x8230;'>test</document>")
-    >>> serialize(e)
-    '<document title="&#33328;">test</document>'
 
-    2) bad entities
+class ModuleTest(unittest.TestCase):
+    # TODO: this should be removed once we get rid of the global module vars
 
-    >>> ET.XML("<document>&entity;</document>")
-    Traceback (most recent call last):
-    ParseError: undefined entity: line 1, column 10
+    def test_sanity(self):
+        # Import sanity.
 
-    >>> ET.XML(ENTITY_XML)
-    Traceback (most recent call last):
-    ParseError: undefined entity &entity;: line 5, column 10
+        from xml.etree import ElementTree
+        from xml.etree import ElementInclude
+        from xml.etree import ElementPath
 
-    3) custom entity
 
-    >>> parser = ET.XMLParser()
-    >>> parser.entity["entity"] = "text"
-    >>> parser.feed(ENTITY_XML)
-    >>> root = parser.close()
-    >>> serialize(root)
-    '<document>text</document>'
-    """
+def serialize(elem, to_string=True, **options):
+    file = StringIO.StringIO()
+    tree = ET.ElementTree(elem)
+    tree.write(file, **options)
+    if to_string:
+        return file.getvalue()
+    else:
+        file.seek(0)
+        return file
 
-def error(xml):
-    """
+def summarize_list(seq):
+    return [elem.tag for elem in seq]
 
-    Test error handling.
+def normalize_crlf(tree):
+    for elem in tree.iter():
+        if elem.text:
+            elem.text = elem.text.replace("\r\n", "\n")
+        if elem.tail:
+            elem.tail = elem.tail.replace("\r\n", "\n")
 
-    >>> issubclass(ET.ParseError, SyntaxError)
-    True
-    >>> error("foo").position
-    (1, 0)
-    >>> error("<tag>&foo;</tag>").position
-    (1, 5)
-    >>> error("foobar<").position
-    (1, 6)
+def python_only(test):
+    def wrapper(*args):
+        if ET is not pyET:
+            raise unittest.SkipTest('only for the Python version')
+        return test(*args)
+    return wrapper
 
-    """
-    try:
-        ET.XML(xml)
-    except ET.ParseError:
-        return sys.exc_value
+def cet_only(test):
+    def wrapper(*args):
+        if ET is pyET:
+            raise unittest.SkipTest('only for the C version')
+        return test(*args)
+    return wrapper
 
-def namespace():
-    """
-    Test namespace issues.
+# --------------------------------------------------------------------
+# element tree tests
 
-    1) xml namespace
+class ElementTreeTest(unittest.TestCase):
 
-    >>> elem = ET.XML("<tag xml:lang='en' />")
-    >>> serialize(elem) # 1.1
-    '<tag xml:lang="en" />'
+    def serialize_check(self, elem, expected):
+        self.assertEqual(serialize(elem), expected)
 
-    2) other "well-known" namespaces
+    def test_interface(self):
+        # Test element tree interface.
 
-    >>> elem = ET.XML("<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' />")
-    >>> serialize(elem) # 2.1
-    '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" />'
+        def check_string(string):
+            len(string)
+            for char in string:
+                self.assertEqual(len(char), 1,
+                        msg="expected one-character string, got %r" % char)
+            new_string = string + ""
+            new_string = string + " "
+            string[:0]
 
-    >>> elem = ET.XML("<html:html xmlns:html='http://www.w3.org/1999/xhtml' />")
-    >>> serialize(elem) # 2.2
-    '<html:html xmlns:html="http://www.w3.org/1999/xhtml" />'
+        def check_mapping(mapping):
+            len(mapping)
+            keys = mapping.keys()
+            items = mapping.items()
+            for key in keys:
+                item = mapping[key]
+            mapping["key"] = "value"
+            self.assertEqual(mapping["key"], "value",
+                    msg="expected value string, got %r" % mapping["key"])
 
-    >>> elem = ET.XML("<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope' />")
-    >>> serialize(elem) # 2.3
-    '<ns0:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope" />'
+        def check_element(element):
+            self.assertTrue(ET.iselement(element), msg="not an element")
+            self.assertTrue(hasattr(element, "tag"), msg="no tag member")
+            self.assertTrue(hasattr(element, "attrib"), msg="no attrib member")
+            self.assertTrue(hasattr(element, "text"), msg="no text member")
+            self.assertTrue(hasattr(element, "tail"), msg="no tail member")
 
-    3) unknown namespaces
-    >>> elem = ET.XML(SAMPLE_XML_NS)
-    >>> print serialize(elem)
-    <ns0:body xmlns:ns0="http://effbot.org/ns">
-      <ns0:tag>text</ns0:tag>
-      <ns0:tag />
-      <ns0:section>
-        <ns0:tag>subtext</ns0:tag>
-      </ns0:section>
-    </ns0:body>
-    """
+            check_string(element.tag)
+            check_mapping(element.attrib)
+            if element.text is not None:
+                check_string(element.text)
+            if element.tail is not None:
+                check_string(element.tail)
+            for elem in element:
+                check_element(elem)
 
-def qname():
-    """
-    Test QName handling.
+        element = ET.Element("tag")
+        check_element(element)
+        tree = ET.ElementTree(element)
+        check_element(tree.getroot())
+        element = ET.Element("t\xe4g", key="value")
+        tree = ET.ElementTree(element)
+        self.assertRegexpMatches(repr(element), r"^<Element 't\\xe4g' at 0x.*>$")
+        element = ET.Element("tag", key="value")
 
-    1) decorated tags
+        # Make sure all standard element methods exist.
 
-    >>> elem = ET.Element("{uri}tag")
-    >>> serialize(elem) # 1.1
-    '<ns0:tag xmlns:ns0="uri" />'
-    >>> elem = ET.Element(ET.QName("{uri}tag"))
-    >>> serialize(elem) # 1.2
-    '<ns0:tag xmlns:ns0="uri" />'
-    >>> elem = ET.Element(ET.QName("uri", "tag"))
-    >>> serialize(elem) # 1.3
-    '<ns0:tag xmlns:ns0="uri" />'
-    >>> elem = ET.Element(ET.QName("uri", "tag"))
-    >>> subelem = ET.SubElement(elem, ET.QName("uri", "tag1"))
-    >>> subelem = ET.SubElement(elem, ET.QName("uri", "tag2"))
-    >>> serialize(elem) # 1.4
-    '<ns0:tag xmlns:ns0="uri"><ns0:tag1 /><ns0:tag2 /></ns0:tag>'
+        def check_method(method):
+            self.assertTrue(hasattr(method, '__call__'),
+                    msg="%s not callable" % method)
 
-    2) decorated attributes
+        check_method(element.append)
+        check_method(element.extend)
+        check_method(element.insert)
+        check_method(element.remove)
+        check_method(element.getchildren)
+        check_method(element.find)
+        check_method(element.iterfind)
+        check_method(element.findall)
+        check_method(element.findtext)
+        check_method(element.clear)
+        check_method(element.get)
+        check_method(element.set)
+        check_method(element.keys)
+        check_method(element.items)
+        check_method(element.iter)
+        check_method(element.itertext)
+        check_method(element.getiterator)
 
-    >>> elem.clear()
-    >>> elem.attrib["{uri}key"] = "value"
-    >>> serialize(elem) # 2.1
-    '<ns0:tag xmlns:ns0="uri" ns0:key="value" />'
+        # These methods return an iterable. See bug 6472.
 
-    >>> elem.clear()
-    >>> elem.attrib[ET.QName("{uri}key")] = "value"
-    >>> serialize(elem) # 2.2
-    '<ns0:tag xmlns:ns0="uri" ns0:key="value" />'
+        def check_iter(it):
+            check_method(it.next)
 
-    3) decorated values are not converted by default, but the
-       QName wrapper can be used for values
+        check_iter(element.iter("tag"))
+        check_iter(element.iterfind("tag"))
+        check_iter(element.iterfind("*"))
+        check_iter(tree.iter("tag"))
+        check_iter(tree.iterfind("tag"))
+        check_iter(tree.iterfind("*"))
 
-    >>> elem.clear()
-    >>> elem.attrib["{uri}key"] = "{uri}value"
-    >>> serialize(elem) # 3.1
-    '<ns0:tag xmlns:ns0="uri" ns0:key="{uri}value" />'
+        # These aliases are provided:
 
-    >>> elem.clear()
-    >>> elem.attrib["{uri}key"] = ET.QName("{uri}value")
-    >>> serialize(elem) # 3.2
-    '<ns0:tag xmlns:ns0="uri" ns0:key="ns0:value" />'
+        self.assertEqual(ET.XML, ET.fromstring)
+        self.assertEqual(ET.PI, ET.ProcessingInstruction)
+        self.assertEqual(ET.XMLParser, ET.XMLTreeBuilder)
 
-    >>> elem.clear()
-    >>> subelem = ET.Element("tag")
-    >>> subelem.attrib["{uri1}key"] = ET.QName("{uri2}value")
-    >>> elem.append(subelem)
-    >>> elem.append(subelem)
-    >>> serialize(elem) # 3.3
-    '<ns0:tag xmlns:ns0="uri" xmlns:ns1="uri1" xmlns:ns2="uri2"><tag ns1:key="ns2:value" /><tag ns1:key="ns2:value" /></ns0:tag>'
+    def test_set_attribute(self):
+        element = ET.Element('tag')
 
-    4) Direct QName tests
+        self.assertEqual(element.tag, 'tag')
+        element.tag = 'Tag'
+        self.assertEqual(element.tag, 'Tag')
+        element.tag = 'TAG'
+        self.assertEqual(element.tag, 'TAG')
 
-    >>> str(ET.QName('ns', 'tag'))
-    '{ns}tag'
-    >>> str(ET.QName('{ns}tag'))
-    '{ns}tag'
-    >>> q1 = ET.QName('ns', 'tag')
-    >>> q2 = ET.QName('ns', 'tag')
-    >>> q1 == q2
-    True
-    >>> q2 = ET.QName('ns', 'other-tag')
-    >>> q1 == q2
-    False
-    >>> q1 == 'ns:tag'
-    False
-    >>> q1 == '{ns}tag'
-    True
-    """
+        self.assertIsNone(element.text)
+        element.text = 'Text'
+        self.assertEqual(element.text, 'Text')
+        element.text = 'TEXT'
+        self.assertEqual(element.text, 'TEXT')
 
-def doctype_public():
-    """
-    Test PUBLIC doctype.
+        self.assertIsNone(element.tail)
+        element.tail = 'Tail'
+        self.assertEqual(element.tail, 'Tail')
+        element.tail = 'TAIL'
+        self.assertEqual(element.tail, 'TAIL')
 
-    >>> elem = ET.XML('<!DOCTYPE html PUBLIC'
-    ...   ' "-//W3C//DTD XHTML 1.0 Transitional//EN"'
-    ...   ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
-    ...   '<html>text</html>')
+        self.assertEqual(element.attrib, {})
+        element.attrib = {'a': 'b', 'c': 'd'}
+        self.assertEqual(element.attrib, {'a': 'b', 'c': 'd'})
+        element.attrib = {'A': 'B', 'C': 'D'}
+        self.assertEqual(element.attrib, {'A': 'B', 'C': 'D'})
 
-    """
+    def test_simpleops(self):
+        # Basic method sanity checks.
 
-def xpath_tokenizer(p):
-    """
-    Test the XPath tokenizer.
+        elem = ET.XML("<body><tag/></body>")
+        self.serialize_check(elem, '<body><tag /></body>')
+        e = ET.Element("tag2")
+        elem.append(e)
+        self.serialize_check(elem, '<body><tag /><tag2 /></body>')
+        elem.remove(e)
+        self.serialize_check(elem, '<body><tag /></body>')
+        elem.insert(0, e)
+        self.serialize_check(elem, '<body><tag2 /><tag /></body>')
+        elem.remove(e)
+        elem.extend([e])
+        self.serialize_check(elem, '<body><tag /><tag2 /></body>')
+        elem.remove(e)
 
-    >>> # tests from the xml specification
-    >>> xpath_tokenizer("*")
-    ['*']
-    >>> xpath_tokenizer("text()")
-    ['text', '()']
-    >>> xpath_tokenizer("@name")
-    ['@', 'name']
-    >>> xpath_tokenizer("@*")
-    ['@', '*']
-    >>> xpath_tokenizer("para[1]")
-    ['para', '[', '1', ']']
-    >>> xpath_tokenizer("para[last()]")
-    ['para', '[', 'last', '()', ']']
-    >>> xpath_tokenizer("*/para")
-    ['*', '/', 'para']
-    >>> xpath_tokenizer("/doc/chapter[5]/section[2]")
-    ['/', 'doc', '/', 'chapter', '[', '5', ']', '/', 'section', '[', '2', ']']
-    >>> xpath_tokenizer("chapter//para")
-    ['chapter', '//', 'para']
-    >>> xpath_tokenizer("//para")
-    ['//', 'para']
-    >>> xpath_tokenizer("//olist/item")
-    ['//', 'olist', '/', 'item']
-    >>> xpath_tokenizer(".")
-    ['.']
-    >>> xpath_tokenizer(".//para")
-    ['.', '//', 'para']
-    >>> xpath_tokenizer("..")
-    ['..']
-    >>> xpath_tokenizer("../@lang")
-    ['..', '/', '@', 'lang']
-    >>> xpath_tokenizer("chapter[title]")
-    ['chapter', '[', 'title', ']']
-    >>> xpath_tokenizer("employee[@secretary and @assistant]")
-    ['employee', '[', '@', 'secretary', '', 'and', '', '@', 'assistant', ']']
+        element = ET.Element("tag", key="value")
+        self.serialize_check(element, '<tag key="value" />') # 1
+        subelement = ET.Element("subtag")
+        element.append(subelement)
+        self.serialize_check(element, '<tag key="value"><subtag /></tag>') # 2
+        element.insert(0, subelement)
+        self.serialize_check(element,
+                '<tag key="value"><subtag /><subtag /></tag>') # 3
+        element.remove(subelement)
+        self.serialize_check(element, '<tag key="value"><subtag /></tag>') # 4
+        element.remove(subelement)
+        self.serialize_check(element, '<tag key="value" />') # 5
+        with self.assertRaises(ValueError) as cm:
+            element.remove(subelement)
+        self.assertEqual(str(cm.exception), 'list.remove(x): x not in list')
+        self.serialize_check(element, '<tag key="value" />') # 6
+        element[0:0] = [subelement, subelement, subelement]
+        self.serialize_check(element[1], '<subtag />')
+        self.assertEqual(element[1:9], [element[1], element[2]])
+        self.assertEqual(element[:9:2], [element[0], element[2]])
+        del element[1:2]
+        self.serialize_check(element,
+                '<tag key="value"><subtag /><subtag /></tag>')
 
-    >>> # additional tests
-    >>> xpath_tokenizer("{http://spam}egg")
-    ['{http://spam}egg']
-    >>> xpath_tokenizer("./spam.egg")
-    ['.', '/', 'spam.egg']
-    >>> xpath_tokenizer(".//{http://spam}egg")
-    ['.', '//', '{http://spam}egg']
-    """
-    from xml.etree import ElementPath
-    out = []
-    for op, tag in ElementPath.xpath_tokenizer(p):
-        out.append(op or tag)
-    return out
+    def test_cdata(self):
+        # Test CDATA handling (etc).
 
-def processinginstruction():
-    """
-    Test ProcessingInstruction directly
+        self.serialize_check(ET.XML("<tag>hello</tag>"),
+                '<tag>hello</tag>')
+        self.serialize_check(ET.XML("<tag>&#104;&#101;&#108;&#108;&#111;</tag>"),
+                '<tag>hello</tag>')
+        self.serialize_check(ET.XML("<tag><![CDATA[hello]]></tag>"),
+                '<tag>hello</tag>')
 
-    >>> ET.tostring(ET.ProcessingInstruction('test', 'instruction'))
-    '<?test instruction?>'
-    >>> ET.tostring(ET.PI('test', 'instruction'))
-    '<?test instruction?>'
+    def test_file_init(self):
+        stringfile = StringIO.StringIO(SAMPLE_XML.encode("utf-8"))
+        tree = ET.ElementTree(file=stringfile)
+        self.assertEqual(tree.find("tag").tag, 'tag')
+        self.assertEqual(tree.find("section/tag").tag, 'tag')
 
-    Issue #2746
+        tree = ET.ElementTree(file=SIMPLE_XMLFILE)
+        self.assertEqual(tree.find("element").tag, 'element')
+        self.assertEqual(tree.find("element/../empty-element").tag,
+                'empty-element')
 
-    >>> ET.tostring(ET.PI('test', '<testing&>'))
-    '<?test <testing&>?>'
-    >>> ET.tostring(ET.PI('test', u'<testing&>\xe3'), 'latin1')
-    "<?xml version='1.0' encoding='latin1'?>\\n<?test <testing&>\\xe3?>"
-    """
+    def test_path_cache(self):
+        # Check that the path cache behaves sanely.
+
+        from xml.etree import ElementPath
+
+        elem = ET.XML(SAMPLE_XML)
+        for i in range(10): ET.ElementTree(elem).find('./'+str(i))
+        cache_len_10 = len(ElementPath._cache)
+        for i in range(10): ET.ElementTree(elem).find('./'+str(i))
+        self.assertEqual(len(ElementPath._cache), cache_len_10)
+        for i in range(20): ET.ElementTree(elem).find('./'+str(i))
+        self.assertGreater(len(ElementPath._cache), cache_len_10)
+        for i in range(600): ET.ElementTree(elem).find('./'+str(i))
+        self.assertLess(len(ElementPath._cache), 500)
+
+    def test_copy(self):
+        # Test copy handling (etc).
+
+        import copy
+        e1 = ET.XML("<tag>hello<foo/></tag>")
+        e2 = copy.copy(e1)
+        e3 = copy.deepcopy(e1)
+        e1.find("foo").tag = "bar"
+        self.serialize_check(e1, '<tag>hello<bar /></tag>')
+        self.serialize_check(e2, '<tag>hello<bar /></tag>')
+        self.serialize_check(e3, '<tag>hello<foo /></tag>')
+
+    def test_attrib(self):
+        # Test attribute handling.
+
+        elem = ET.Element("tag")
+        elem.get("key") # 1.1
+        self.assertEqual(elem.get("key", "default"), 'default') # 1.2
+
+        elem.set("key", "value")
+        self.assertEqual(elem.get("key"), 'value') # 1.3
+
+        elem = ET.Element("tag", key="value")
+        self.assertEqual(elem.get("key"), 'value') # 2.1
+        self.assertEqual(elem.attrib, {'key': 'value'}) # 2.2
+
+        attrib = {"key": "value"}
+        elem = ET.Element("tag", attrib)
+        attrib.clear() # check for aliasing issues
+        self.assertEqual(elem.get("key"), 'value') # 3.1
+        self.assertEqual(elem.attrib, {'key': 'value'}) # 3.2
+
+        attrib = {"key": "value"}
+        elem = ET.Element("tag", **attrib)
+        attrib.clear() # check for aliasing issues
+        self.assertEqual(elem.get("key"), 'value') # 4.1
+        self.assertEqual(elem.attrib, {'key': 'value'}) # 4.2
+
+        elem = ET.Element("tag", {"key": "other"}, key="value")
+        self.assertEqual(elem.get("key"), 'value') # 5.1
+        self.assertEqual(elem.attrib, {'key': 'value'}) # 5.2
+
+        elem = ET.Element('test')
+        elem.text = "aa"
+        elem.set('testa', 'testval')
+        elem.set('testb', 'test2')
+        self.assertEqual(ET.tostring(elem),
+                b'<test testa="testval" testb="test2">aa</test>')
+        self.assertEqual(sorted(elem.keys()), ['testa', 'testb'])
+        self.assertEqual(sorted(elem.items()),
+                [('testa', 'testval'), ('testb', 'test2')])
+        self.assertEqual(elem.attrib['testb'], 'test2')
+        elem.attrib['testb'] = 'test1'
+        elem.attrib['testc'] = 'test2'
+        self.assertEqual(ET.tostring(elem),
+                b'<test testa="testval" testb="test1" testc="test2">aa</test>')
+
+        elem = ET.Element('test')
+        elem.set('a', '\r')
+        elem.set('b', '\r\n')
+        elem.set('c', '\t\n\r ')
+        elem.set('d', '\n\n')
+        self.assertEqual(ET.tostring(elem),
+                b'<test a="\r" b="\r&#10;" c="\t&#10;\r " d="&#10;&#10;" />')
+
+    def test_makeelement(self):
+        # Test makeelement handling.
+
+        elem = ET.Element("tag")
+        attrib = {"key": "value"}
+        subelem = elem.makeelement("subtag", attrib)
+        self.assertIsNot(subelem.attrib, attrib, msg="attrib aliasing")
+        elem.append(subelem)
+        self.serialize_check(elem, '<tag><subtag key="value" /></tag>')
+
+        elem.clear()
+        self.serialize_check(elem, '<tag />')
+        elem.append(subelem)
+        self.serialize_check(elem, '<tag><subtag key="value" /></tag>')
+        elem.extend([subelem, subelem])
+        self.serialize_check(elem,
+            '<tag><subtag key="value" /><subtag key="value" /><subtag key="value" /></tag>')
+        elem[:] = [subelem]
+        self.serialize_check(elem, '<tag><subtag key="value" /></tag>')
+        elem[:] = tuple([subelem])
+        self.serialize_check(elem, '<tag><subtag key="value" /></tag>')
+
+    def test_parsefile(self):
+        # Test parsing from file.
+
+        tree = ET.parse(SIMPLE_XMLFILE)
+        normalize_crlf(tree)
+        stream = StringIO.StringIO()
+        tree.write(stream)
+        self.assertEqual(stream.getvalue(),
+                '<root>\n'
+                '   <element key="value">text</element>\n'
+                '   <element>text</element>tail\n'
+                '   <empty-element />\n'
+                '</root>')
+        tree = ET.parse(SIMPLE_NS_XMLFILE)
+        normalize_crlf(tree)
+        stream = StringIO.StringIO()
+        tree.write(stream)
+        self.assertEqual(stream.getvalue(),
+                '<ns0:root xmlns:ns0="namespace">\n'
+                '   <ns0:element key="value">text</ns0:element>\n'
+                '   <ns0:element>text</ns0:element>tail\n'
+                '   <ns0:empty-element />\n'
+                '</ns0:root>')
+
+        with open(SIMPLE_XMLFILE) as f:
+            data = f.read()
+
+        parser = ET.XMLParser()
+        self.assertRegexpMatches(parser.version, r'^Expat ')
+        parser.feed(data)
+        self.serialize_check(parser.close(),
+                '<root>\n'
+                '   <element key="value">text</element>\n'
+                '   <element>text</element>tail\n'
+                '   <empty-element />\n'
+                '</root>')
+
+        parser = ET.XMLTreeBuilder() # 1.2 compatibility
+        parser.feed(data)
+        self.serialize_check(parser.close(),
+                '<root>\n'
+                '   <element key="value">text</element>\n'
+                '   <element>text</element>tail\n'
+                '   <empty-element />\n'
+                '</root>')
+
+        target = ET.TreeBuilder()
+        parser = ET.XMLParser(target=target)
+        parser.feed(data)
+        self.serialize_check(parser.close(),
+                '<root>\n'
+                '   <element key="value">text</element>\n'
+                '   <element>text</element>tail\n'
+                '   <empty-element />\n'
+                '</root>')
+
+    def test_parseliteral(self):
+        element = ET.XML("<html><body>text</body></html>")
+        self.assertEqual(ET.tostring(element),
+                '<html><body>text</body></html>')
+        element = ET.fromstring("<html><body>text</body></html>")
+        self.assertEqual(ET.tostring(element),
+                '<html><body>text</body></html>')
+        sequence = ["<html><body>", "text</bo", "dy></html>"]
+        element = ET.fromstringlist(sequence)
+        self.assertEqual(ET.tostring(element),
+                '<html><body>text</body></html>')
+        self.assertEqual("".join(ET.tostringlist(element)),
+                '<html><body>text</body></html>')
+        self.assertEqual(ET.tostring(element, "ascii"),
+                "<?xml version='1.0' encoding='ascii'?>\n"
+                "<html><body>text</body></html>")
+        _, ids = ET.XMLID("<html><body>text</body></html>")
+        self.assertEqual(len(ids), 0)
+        _, ids = ET.XMLID("<html><body id='body'>text</body></html>")
+        self.assertEqual(len(ids), 1)
+        self.assertEqual(ids["body"].tag, 'body')
+
+    def test_iterparse(self):
+        # Test iterparse interface.
+
+        iterparse = ET.iterparse
+
+        context = iterparse(SIMPLE_XMLFILE)
+        action, elem = next(context)
+        self.assertEqual((action, elem.tag), ('end', 'element'))
+        self.assertEqual([(action, elem.tag) for action, elem in context], [
+                ('end', 'element'),
+                ('end', 'empty-element'),
+                ('end', 'root'),
+            ])
+        self.assertEqual(context.root.tag, 'root')
+
+        context = iterparse(SIMPLE_NS_XMLFILE)
+        self.assertEqual([(action, elem.tag) for action, elem in context], [
+                ('end', '{namespace}element'),
+                ('end', '{namespace}element'),
+                ('end', '{namespace}empty-element'),
+                ('end', '{namespace}root'),
+            ])
+
+        events = ()
+        context = iterparse(SIMPLE_XMLFILE, events)
+        self.assertEqual([(action, elem.tag) for action, elem in context], [])
+
+        events = ()
+        context = iterparse(SIMPLE_XMLFILE, events=events)
+        self.assertEqual([(action, elem.tag) for action, elem in context], [])
+
+        events = ("start", "end")
+        context = iterparse(SIMPLE_XMLFILE, events)
+        self.assertEqual([(action, elem.tag) for action, elem in context], [
+                ('start', 'root'),
+                ('start', 'element'),
+                ('end', 'element'),
+                ('start', 'element'),
+                ('end', 'element'),
+                ('start', 'empty-element'),
+                ('end', 'empty-element'),
+                ('end', 'root'),
+            ])
+
+        events = ("start", "end", "start-ns", "end-ns")
+        context = iterparse(SIMPLE_NS_XMLFILE, events)
+        self.assertEqual([(action, elem.tag) if action in ("start", "end")
+                                             else (action, elem)
+                          for action, elem in context], [
+                ('start-ns', ('', 'namespace')),
+                ('start', '{namespace}root'),
+                ('start', '{namespace}element'),
+                ('end', '{namespace}element'),
+                ('start', '{namespace}element'),
+                ('end', '{namespace}element'),
+                ('start', '{namespace}empty-element'),
+                ('end', '{namespace}empty-element'),
+                ('end', '{namespace}root'),
+                ('end-ns', None),
+            ])
+
+        events = ('start-ns', 'end-ns')
+        context = iterparse(StringIO.StringIO(r"<root xmlns=''/>"), events)
+        res = [(action, elem) for action, elem in context]
+        self.assertEqual(res, [('start-ns', ('', '')), ('end-ns', None)])
+
+        events = ("start", "end", "bogus")
+        with open(SIMPLE_XMLFILE, "rb") as f:
+            with self.assertRaises(ValueError) as cm:
+                iterparse(f, events)
+            self.assertFalse(f.closed)
+        self.assertEqual(str(cm.exception), "unknown event 'bogus'")
+
+        source = StringIO.StringIO(
+            "<?xml version='1.0' encoding='iso-8859-1'?>\n"
+            "<body xmlns='http://&#233;ffbot.org/ns'\n"
+            "      xmlns:cl\xe9='http://effbot.org/ns'>text</body>\n")
+        events = ("start-ns",)
+        context = iterparse(source, events)
+        self.assertEqual([(action, elem) for action, elem in context], [
+                ('start-ns', ('', u'http://\xe9ffbot.org/ns')),
+                ('start-ns', (u'cl\xe9', 'http://effbot.org/ns')),
+            ])
+
+        source = StringIO.StringIO("<document />junk")
+        it = iterparse(source)
+        action, elem = next(it)
+        self.assertEqual((action, elem.tag), ('end', 'document'))
+        with self.assertRaises(ET.ParseError) as cm:
+            next(it)
+        self.assertEqual(str(cm.exception),
+                'junk after document element: line 1, column 12')
+
+    def test_writefile(self):
+        elem = ET.Element("tag")
+        elem.text = "text"
+        self.serialize_check(elem, '<tag>text</tag>')
+        ET.SubElement(elem, "subtag").text = "subtext"
+        self.serialize_check(elem, '<tag>text<subtag>subtext</subtag></tag>')
+
+        # Test tag suppression
+        elem.tag = None
+        self.serialize_check(elem, 'text<subtag>subtext</subtag>')
+        elem.insert(0, ET.Comment("comment"))
+        self.serialize_check(elem,
+                'text<!--comment--><subtag>subtext</subtag>')     # assumes 1.3
+
+        elem[0] = ET.PI("key", "value")
+        self.serialize_check(elem, 'text<?key value?><subtag>subtext</subtag>')
+
+    def test_custom_builder(self):
+        # Test parser w. custom builder.
+
+        with open(SIMPLE_XMLFILE) as f:
+            data = f.read()
+        class Builder(list):
+            def start(self, tag, attrib):
+                self.append(("start", tag))
+            def end(self, tag):
+                self.append(("end", tag))
+            def data(self, text):
+                pass
+        builder = Builder()
+        parser = ET.XMLParser(target=builder)
+        parser.feed(data)
+        self.assertEqual(builder, [
+                ('start', 'root'),
+                ('start', 'element'),
+                ('end', 'element'),
+                ('start', 'element'),
+                ('end', 'element'),
+                ('start', 'empty-element'),
+                ('end', 'empty-element'),
+                ('end', 'root'),
+            ])
+
+        with open(SIMPLE_NS_XMLFILE) as f:
+            data = f.read()
+        class Builder(list):
+            def start(self, tag, attrib):
+                self.append(("start", tag))
+            def end(self, tag):
+                self.append(("end", tag))
+            def data(self, text):
+                pass
+            def pi(self, target, data):
+                self.append(("pi", target, data))
+            def comment(self, data):
+                self.append(("comment", data))
+        builder = Builder()
+        parser = ET.XMLParser(target=builder)
+        parser.feed(data)
+        self.assertEqual(builder, [
+                ('pi', 'pi', 'data'),
+                ('comment', ' comment '),
+                ('start', '{namespace}root'),
+                ('start', '{namespace}element'),
+                ('end', '{namespace}element'),
+                ('start', '{namespace}element'),
+                ('end', '{namespace}element'),
+                ('start', '{namespace}empty-element'),
+                ('end', '{namespace}empty-element'),
+                ('end', '{namespace}root'),
+            ])
+
+
+    # Element.getchildren() and ElementTree.getiterator() are deprecated.
+    @checkwarnings(("This method will be removed in future versions.  "
+                    "Use .+ instead.",
+                    (DeprecationWarning, PendingDeprecationWarning)))
+    def test_getchildren(self):
+        # Test Element.getchildren()
+
+        with open(SIMPLE_XMLFILE, "r") as f:
+            tree = ET.parse(f)
+        self.assertEqual([summarize_list(elem.getchildren())
+                          for elem in tree.getroot().iter()], [
+                ['element', 'element', 'empty-element'],
+                [],
+                [],
+                [],
+            ])
+        self.assertEqual([summarize_list(elem.getchildren())
+                          for elem in tree.getiterator()], [
+                ['element', 'element', 'empty-element'],
+                [],
+                [],
+                [],
+            ])
+
+        elem = ET.XML(SAMPLE_XML)
+        self.assertEqual(len(elem.getchildren()), 3)
+        self.assertEqual(len(elem[2].getchildren()), 1)
+        self.assertEqual(elem[:], elem.getchildren())
+        child1 = elem[0]
+        child2 = elem[2]
+        del elem[1:2]
+        self.assertEqual(len(elem.getchildren()), 2)
+        self.assertEqual(child1, elem[0])
+        self.assertEqual(child2, elem[1])
+        elem[0:2] = [child2, child1]
+        self.assertEqual(child2, elem[0])
+        self.assertEqual(child1, elem[1])
+        self.assertNotEqual(child1, elem[0])
+        elem.clear()
+        self.assertEqual(elem.getchildren(), [])
+
+    def test_writestring(self):
+        elem = ET.XML("<html><body>text</body></html>")
+        self.assertEqual(ET.tostring(elem), b'<html><body>text</body></html>')
+        elem = ET.fromstring("<html><body>text</body></html>")
+        self.assertEqual(ET.tostring(elem), b'<html><body>text</body></html>')
+
+    def test_encoding(self):
+        def check(encoding, body=''):
+            xml = ("<?xml version='1.0' encoding='%s'?><xml>%s</xml>" %
+                   (encoding, body))
+            self.assertEqual(ET.XML(xml.encode(encoding)).text, body)
+        check("ascii", 'a')
+        check("us-ascii", 'a')
+        check("iso-8859-1", u'\xbd')
+        check("iso-8859-15", u'\u20ac')
+        check("cp437", u'\u221a')
+        check("mac-roman", u'\u02da')
+
+        def xml(encoding):
+            return "<?xml version='1.0' encoding='%s'?><xml />" % encoding
+        def bxml(encoding):
+            return xml(encoding).encode(encoding)
+        supported_encodings = [
+            'ascii', 'utf-8', 'utf-8-sig', 'utf-16', 'utf-16be', 'utf-16le',
+            'iso8859-1', 'iso8859-2', 'iso8859-3', 'iso8859-4', 'iso8859-5',
+            'iso8859-6', 'iso8859-7', 'iso8859-8', 'iso8859-9', 'iso8859-10',
+            'iso8859-13', 'iso8859-14', 'iso8859-15', 'iso8859-16',
+            'cp437', 'cp720', 'cp737', 'cp775', 'cp850', 'cp852',
+            'cp855', 'cp856', 'cp857', 'cp858', 'cp860', 'cp861', 'cp862',
+            'cp863', 'cp865', 'cp866', 'cp869', 'cp874', 'cp1006',
+            'cp1250', 'cp1251', 'cp1252', 'cp1253', 'cp1254', 'cp1255',
+            'cp1256', 'cp1257', 'cp1258',
+            'mac-cyrillic', 'mac-greek', 'mac-iceland', 'mac-latin2',
+            'mac-roman', 'mac-turkish',
+            'iso2022-jp', 'iso2022-jp-1', 'iso2022-jp-2', 'iso2022-jp-2004',
+            'iso2022-jp-3', 'iso2022-jp-ext',
+            'koi8-r', 'koi8-u',
+            'ptcp154',
+        ]
+        for encoding in supported_encodings:
+            self.assertEqual(ET.tostring(ET.XML(bxml(encoding))), b'<xml />')
+
+        unsupported_ascii_compatible_encodings = [
+            'big5', 'big5hkscs',
+            'cp932', 'cp949', 'cp950',
+            'euc-jp', 'euc-jis-2004', 'euc-jisx0213', 'euc-kr',
+            'gb2312', 'gbk', 'gb18030',
+            'iso2022-kr', 'johab', 'hz',
+            'shift-jis', 'shift-jis-2004', 'shift-jisx0213',
+            'utf-7',
+        ]
+        for encoding in unsupported_ascii_compatible_encodings:
+            self.assertRaises(ValueError, ET.XML, bxml(encoding))
+
+        unsupported_ascii_incompatible_encodings = [
+            'cp037', 'cp424', 'cp500', 'cp864', 'cp875', 'cp1026', 'cp1140',
+            'utf_32', 'utf_32_be', 'utf_32_le',
+        ]
+        for encoding in unsupported_ascii_incompatible_encodings:
+            self.assertRaises(ET.ParseError, ET.XML, bxml(encoding))
+
+        self.assertRaises(ValueError, ET.XML, xml('undefined').encode('ascii'))
+        self.assertRaises(LookupError, ET.XML, xml('xxx').encode('ascii'))
+
+    def test_methods(self):
+        # Test serialization methods.
+
+        e = ET.XML("<html><link/><script>1 &lt; 2</script></html>")
+        e.tail = "\n"
+        self.assertEqual(serialize(e),
+                '<html><link /><script>1 &lt; 2</script></html>\n')
+        self.assertEqual(serialize(e, method=None),
+                '<html><link /><script>1 &lt; 2</script></html>\n')
+        self.assertEqual(serialize(e, method="xml"),
+                '<html><link /><script>1 &lt; 2</script></html>\n')
+        self.assertEqual(serialize(e, method="html"),
+                '<html><link><script>1 < 2</script></html>\n')
+        self.assertEqual(serialize(e, method="text"), '1 < 2\n')
+
+    def test_issue18347(self):
+        e = ET.XML('<html><CamelCase>text</CamelCase></html>')
+        self.assertEqual(serialize(e),
+                '<html><CamelCase>text</CamelCase></html>')
+        self.assertEqual(serialize(e, method="html"),
+                '<html><CamelCase>text</CamelCase></html>')
+
+    def test_entity(self):
+        # Test entity handling.
+
+        # 1) good entities
+
+        e = ET.XML("<document title='&#x8230;'>test</document>")
+        self.assertEqual(serialize(e, encoding="us-ascii"),
+                '<document title="&#33328;">test</document>')
+        self.serialize_check(e, '<document title="&#33328;">test</document>')
+
+        # 2) bad entities
+
+        with self.assertRaises(ET.ParseError) as cm:
+            ET.XML("<document>&entity;</document>")
+        self.assertEqual(str(cm.exception),
+                'undefined entity: line 1, column 10')
+
+        with self.assertRaises(ET.ParseError) as cm:
+            ET.XML(ENTITY_XML)
+        self.assertEqual(str(cm.exception),
+                'undefined entity &entity;: line 5, column 10')
+
+        # 3) custom entity
+
+        parser = ET.XMLParser()
+        parser.entity["entity"] = "text"
+        parser.feed(ENTITY_XML)
+        root = parser.close()
+        self.serialize_check(root, '<document>text</document>')
+
+    def test_namespace(self):
+        # Test namespace issues.
+
+        # 1) xml namespace
+
+        elem = ET.XML("<tag xml:lang='en' />")
+        self.serialize_check(elem, '<tag xml:lang="en" />') # 1.1
+
+        # 2) other "well-known" namespaces
+
+        elem = ET.XML("<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' />")
+        self.serialize_check(elem,
+            '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" />') # 2.1
+
+        elem = ET.XML("<html:html xmlns:html='http://www.w3.org/1999/xhtml' />")
+        self.serialize_check(elem,
+            '<html:html xmlns:html="http://www.w3.org/1999/xhtml" />') # 2.2
+
+        elem = ET.XML("<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope' />")
+        self.serialize_check(elem,
+            '<ns0:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope" />') # 2.3
+
+        # 3) unknown namespaces
+        elem = ET.XML(SAMPLE_XML_NS)
+        self.serialize_check(elem,
+            '<ns0:body xmlns:ns0="http://effbot.org/ns">\n'
+            '  <ns0:tag>text</ns0:tag>\n'
+            '  <ns0:tag />\n'
+            '  <ns0:section>\n'
+            '    <ns0:tag>subtext</ns0:tag>\n'
+            '  </ns0:section>\n'
+            '</ns0:body>')
+
+    def test_qname(self):
+        # Test QName handling.
+
+        # 1) decorated tags
+
+        elem = ET.Element("{uri}tag")
+        self.serialize_check(elem, '<ns0:tag xmlns:ns0="uri" />') # 1.1
+        elem = ET.Element(ET.QName("{uri}tag"))
+        self.serialize_check(elem, '<ns0:tag xmlns:ns0="uri" />') # 1.2
+        elem = ET.Element(ET.QName("uri", "tag"))
+        self.serialize_check(elem, '<ns0:tag xmlns:ns0="uri" />') # 1.3
+        elem = ET.Element(ET.QName("uri", "tag"))
+        subelem = ET.SubElement(elem, ET.QName("uri", "tag1"))
+        subelem = ET.SubElement(elem, ET.QName("uri", "tag2"))
+        self.serialize_check(elem,
+            '<ns0:tag xmlns:ns0="uri"><ns0:tag1 /><ns0:tag2 /></ns0:tag>') # 1.4
+
+        # 2) decorated attributes
+
+        elem.clear()
+        elem.attrib["{uri}key"] = "value"
+        self.serialize_check(elem,
+            '<ns0:tag xmlns:ns0="uri" ns0:key="value" />') # 2.1
+
+        elem.clear()
+        elem.attrib[ET.QName("{uri}key")] = "value"
+        self.serialize_check(elem,
+            '<ns0:tag xmlns:ns0="uri" ns0:key="value" />') # 2.2
+
+        # 3) decorated values are not converted by default, but the
+        # QName wrapper can be used for values
+
+        elem.clear()
+        elem.attrib["{uri}key"] = "{uri}value"
+        self.serialize_check(elem,
+            '<ns0:tag xmlns:ns0="uri" ns0:key="{uri}value" />') # 3.1
+
+        elem.clear()
+        elem.attrib["{uri}key"] = ET.QName("{uri}value")
+        self.serialize_check(elem,
+            '<ns0:tag xmlns:ns0="uri" ns0:key="ns0:value" />') # 3.2
+
+        elem.clear()
+        subelem = ET.Element("tag")
+        subelem.attrib["{uri1}key"] = ET.QName("{uri2}value")
+        elem.append(subelem)
+        elem.append(subelem)
+        self.serialize_check(elem,
+            '<ns0:tag xmlns:ns0="uri" xmlns:ns1="uri1" xmlns:ns2="uri2">'
+            '<tag ns1:key="ns2:value" />'
+            '<tag ns1:key="ns2:value" />'
+            '</ns0:tag>') # 3.3
+
+        # 4) Direct QName tests
+
+        self.assertEqual(str(ET.QName('ns', 'tag')), '{ns}tag')
+        self.assertEqual(str(ET.QName('{ns}tag')), '{ns}tag')
+        q1 = ET.QName('ns', 'tag')
+        q2 = ET.QName('ns', 'tag')
+        self.assertEqual(q1, q2)
+        q2 = ET.QName('ns', 'other-tag')
+        self.assertNotEqual(q1, q2)
+        self.assertNotEqual(q1, 'ns:tag')
+        self.assertEqual(q1, '{ns}tag')
+
+    def test_doctype_public(self):
+        # Test PUBLIC doctype.
+
+        elem = ET.XML('<!DOCTYPE html PUBLIC'
+                ' "-//W3C//DTD XHTML 1.0 Transitional//EN"'
+                ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
+                '<html>text</html>')
+
+    def test_xpath_tokenizer(self):
+        # Test the XPath tokenizer.
+        from xml.etree import ElementPath
+        def check(p, expected):
+            self.assertEqual([op or tag
+                              for op, tag in ElementPath.xpath_tokenizer(p)],
+                             expected)
+
+        # tests from the xml specification
+        check("*", ['*'])
+        check("text()", ['text', '()'])
+        check("@name", ['@', 'name'])
+        check("@*", ['@', '*'])
+        check("para[1]", ['para', '[', '1', ']'])
+        check("para[last()]", ['para', '[', 'last', '()', ']'])
+        check("*/para", ['*', '/', 'para'])
+        check("/doc/chapter[5]/section[2]",
+              ['/', 'doc', '/', 'chapter', '[', '5', ']',
+               '/', 'section', '[', '2', ']'])
+        check("chapter//para", ['chapter', '//', 'para'])
+        check("//para", ['//', 'para'])
+        check("//olist/item", ['//', 'olist', '/', 'item'])
+        check(".", ['.'])
+        check(".//para", ['.', '//', 'para'])
+        check("..", ['..'])
+        check("../@lang", ['..', '/', '@', 'lang'])
+        check("chapter[title]", ['chapter', '[', 'title', ']'])
+        check("employee[@secretary and @assistant]", ['employee',
+              '[', '@', 'secretary', '', 'and', '', '@', 'assistant', ']'])
+
+        # additional tests
+        check("{http://spam}egg", ['{http://spam}egg'])
+        check("./spam.egg", ['.', '/', 'spam.egg'])
+        check(".//{http://spam}egg", ['.', '//', '{http://spam}egg'])
+
+    def test_processinginstruction(self):
+        # Test ProcessingInstruction directly
+
+        self.assertEqual(ET.tostring(ET.ProcessingInstruction('test', 'instruction')),
+                '<?test instruction?>')
+        self.assertEqual(ET.tostring(ET.PI('test', 'instruction')),
+                '<?test instruction?>')
+
+        # Issue #2746
+
+        self.assertEqual(ET.tostring(ET.PI('test', '<testing&>')),
+                '<?test <testing&>?>')
+        self.assertEqual(ET.tostring(ET.PI('test', u'<testing&>\xe3'), 'latin1'),
+                "<?xml version='1.0' encoding='latin1'?>\n"
+                "<?test <testing&>\xe3?>")
+
+    def test_html_empty_elems_serialization(self):
+        # issue 15970
+        # from http://www.w3.org/TR/html401/index/elements.html
+        for element in ['AREA', 'BASE', 'BASEFONT', 'BR', 'COL', 'FRAME', 'HR',
+                        'IMG', 'INPUT', 'ISINDEX', 'LINK', 'META', 'PARAM']:
+            for elem in [element, element.lower()]:
+                expected = '<%s>' % elem
+                serialized = serialize(ET.XML('<%s />' % elem), method='html')
+                self.assertEqual(serialized, expected)
+                serialized = serialize(ET.XML('<%s></%s>' % (elem,elem)),
+                                       method='html')
+                self.assertEqual(serialized, expected)
+
 
 #
 # xinclude tests (samples from appendix C of the xinclude specification)
@@ -1331,96 +1079,6 @@
 </document>
 """.format(cgi.escape(SIMPLE_XMLFILE, True))
 
-def xinclude_loader(href, parse="xml", encoding=None):
-    try:
-        data = XINCLUDE[href]
-    except KeyError:
-        raise IOError("resource not found")
-    if parse == "xml":
-        from xml.etree.ElementTree import XML
-        return XML(data)
-    return data
-
-def xinclude():
-    r"""
-    Basic inclusion example (XInclude C.1)
-
-    >>> from xml.etree import ElementTree as ET
-    >>> from xml.etree import ElementInclude
-
-    >>> document = xinclude_loader("C1.xml")
-    >>> ElementInclude.include(document, xinclude_loader)
-    >>> print serialize(document) # C1
-    <document>
-      <p>120 Mz is adequate for an average home user.</p>
-      <disclaimer>
-      <p>The opinions represented herein represent those of the individual
-      and should not be interpreted as official policy endorsed by this
-      organization.</p>
-    </disclaimer>
-    </document>
-
-    Textual inclusion example (XInclude C.2)
-
-    >>> document = xinclude_loader("C2.xml")
-    >>> ElementInclude.include(document, xinclude_loader)
-    >>> print serialize(document) # C2
-    <document>
-      <p>This document has been accessed
-      324387 times.</p>
-    </document>
-
-    Textual inclusion after sibling element (based on modified XInclude C.2)
-
-    >>> document = xinclude_loader("C2b.xml")
-    >>> ElementInclude.include(document, xinclude_loader)
-    >>> print(serialize(document)) # C2b
-    <document>
-      <p>This document has been <em>accessed</em>
-      324387 times.</p>
-    </document>
-
-    Textual inclusion of XML example (XInclude C.3)
-
-    >>> document = xinclude_loader("C3.xml")
-    >>> ElementInclude.include(document, xinclude_loader)
-    >>> print serialize(document) # C3
-    <document>
-      <p>The following is the source of the "data.xml" resource:</p>
-      <example>&lt;?xml version='1.0'?&gt;
-    &lt;data&gt;
-      &lt;item&gt;&lt;![CDATA[Brooks &amp; Shields]]&gt;&lt;/item&gt;
-    &lt;/data&gt;
-    </example>
-    </document>
-
-    Fallback example (XInclude C.5)
-    Note! Fallback support is not yet implemented
-
-    >>> document = xinclude_loader("C5.xml")
-    >>> ElementInclude.include(document, xinclude_loader)
-    Traceback (most recent call last):
-    IOError: resource not found
-    >>> # print serialize(document) # C5
-    """
-
-def xinclude_default():
-    """
-    >>> from xml.etree import ElementInclude
-
-    >>> document = xinclude_loader("default.xml")
-    >>> ElementInclude.include(document)
-    >>> print serialize(document) # default
-    <document>
-      <p>Example.</p>
-      <root>
-       <element key="value">text</element>
-       <element>text</element>tail
-       <empty-element />
-    </root>
-    </document>
-    """
-
 #
 # badly formatted xi:include tags
 
@@ -1441,490 +1099,1655 @@
 </div>
 """
 
-def xinclude_failures():
-    r"""
-    Test failure to locate included XML file.
+class XIncludeTest(unittest.TestCase):
 
-    >>> from xml.etree import ElementInclude
+    def xinclude_loader(self, href, parse="xml", encoding=None):
+        try:
+            data = XINCLUDE[href]
+        except KeyError:
+            raise IOError("resource not found")
+        if parse == "xml":
+            data = ET.XML(data)
+        return data
 
-    >>> def none_loader(href, parser, encoding=None):
-    ...     return None
+    def none_loader(self, href, parser, encoding=None):
+        return None
 
-    >>> document = ET.XML(XINCLUDE["C1.xml"])
-    >>> ElementInclude.include(document, loader=none_loader)
-    Traceback (most recent call last):
-    FatalIncludeError: cannot load 'disclaimer.xml' as 'xml'
+    def test_xinclude_default(self):
+        from xml.etree import ElementInclude
+        doc = self.xinclude_loader('default.xml')
+        ElementInclude.include(doc)
+        self.assertEqual(serialize(doc),
+            '<document>\n'
+            '  <p>Example.</p>\n'
+            '  <root>\n'
+            '   <element key="value">text</element>\n'
+            '   <element>text</element>tail\n'
+            '   <empty-element />\n'
+            '</root>\n'
+            '</document>')
 
-    Test failure to locate included text file.
+    def test_xinclude(self):
+        from xml.etree import ElementInclude
 
-    >>> document = ET.XML(XINCLUDE["C2.xml"])
-    >>> ElementInclude.include(document, loader=none_loader)
-    Traceback (most recent call last):
-    FatalIncludeError: cannot load 'count.txt' as 'text'
+        # Basic inclusion example (XInclude C.1)
+        document = self.xinclude_loader("C1.xml")
+        ElementInclude.include(document, self.xinclude_loader)
+        self.assertEqual(serialize(document),
+            '<document>\n'
+            '  <p>120 Mz is adequate for an average home user.</p>\n'
+            '  <disclaimer>\n'
+            '  <p>The opinions represented herein represent those of the individual\n'
+            '  and should not be interpreted as official policy endorsed by this\n'
+            '  organization.</p>\n'
+            '</disclaimer>\n'
+            '</document>') # C1
 
-    Test bad parse type.
+        # Textual inclusion example (XInclude C.2)
+        document = self.xinclude_loader("C2.xml")
+        ElementInclude.include(document, self.xinclude_loader)
+        self.assertEqual(serialize(document),
+            '<document>\n'
+            '  <p>This document has been accessed\n'
+            '  324387 times.</p>\n'
+            '</document>') # C2
 
-    >>> document = ET.XML(XINCLUDE_BAD["B1.xml"])
-    >>> ElementInclude.include(document, loader=none_loader)
-    Traceback (most recent call last):
-    FatalIncludeError: unknown parse type in xi:include tag ('BAD_TYPE')
+        # Textual inclusion after sibling element (based on modified XInclude C.2)
+        document = self.xinclude_loader("C2b.xml")
+        ElementInclude.include(document, self.xinclude_loader)
+        self.assertEqual(serialize(document),
+            '<document>\n'
+            '  <p>This document has been <em>accessed</em>\n'
+            '  324387 times.</p>\n'
+            '</document>') # C2b
 
-    Test xi:fallback outside xi:include.
+        # Textual inclusion of XML example (XInclude C.3)
+        document = self.xinclude_loader("C3.xml")
+        ElementInclude.include(document, self.xinclude_loader)
+        self.assertEqual(serialize(document),
+            '<document>\n'
+            '  <p>The following is the source of the "data.xml" resource:</p>\n'
+            "  <example>&lt;?xml version='1.0'?&gt;\n"
+            '&lt;data&gt;\n'
+            '  &lt;item&gt;&lt;![CDATA[Brooks &amp; Shields]]&gt;&lt;/item&gt;\n'
+            '&lt;/data&gt;\n'
+            '</example>\n'
+            '</document>') # C3
 
-    >>> document = ET.XML(XINCLUDE_BAD["B2.xml"])
-    >>> ElementInclude.include(document, loader=none_loader)
-    Traceback (most recent call last):
-    FatalIncludeError: xi:fallback tag must be child of xi:include ('{http://www.w3.org/2001/XInclude}fallback')
-    """
+        # Fallback example (XInclude C.5)
+        # Note! Fallback support is not yet implemented
+        document = self.xinclude_loader("C5.xml")
+        with self.assertRaises(IOError) as cm:
+            ElementInclude.include(document, self.xinclude_loader)
+        self.assertEqual(str(cm.exception), 'resource not found')
+        self.assertEqual(serialize(document),
+            '<div xmlns:ns0="http://www.w3.org/2001/XInclude">\n'
+            '  <ns0:include href="example.txt" parse="text">\n'
+            '    <ns0:fallback>\n'
+            '      <ns0:include href="fallback-example.txt" parse="text">\n'
+            '        <ns0:fallback><a href="mailto:bob@example.org">Report error</a></ns0:fallback>\n'
+            '      </ns0:include>\n'
+            '    </ns0:fallback>\n'
+            '  </ns0:include>\n'
+            '</div>') # C5
+
+    def test_xinclude_failures(self):
+        from xml.etree import ElementInclude
+
+        # Test failure to locate included XML file.
+        document = ET.XML(XINCLUDE["C1.xml"])
+        with self.assertRaises(ElementInclude.FatalIncludeError) as cm:
+            ElementInclude.include(document, loader=self.none_loader)
+        self.assertEqual(str(cm.exception),
+                "cannot load 'disclaimer.xml' as 'xml'")
+
+        # Test failure to locate included text file.
+        document = ET.XML(XINCLUDE["C2.xml"])
+        with self.assertRaises(ElementInclude.FatalIncludeError) as cm:
+            ElementInclude.include(document, loader=self.none_loader)
+        self.assertEqual(str(cm.exception),
+                "cannot load 'count.txt' as 'text'")
+
+        # Test bad parse type.
+        document = ET.XML(XINCLUDE_BAD["B1.xml"])
+        with self.assertRaises(ElementInclude.FatalIncludeError) as cm:
+            ElementInclude.include(document, loader=self.none_loader)
+        self.assertEqual(str(cm.exception),
+                "unknown parse type in xi:include tag ('BAD_TYPE')")
+
+        # Test xi:fallback outside xi:include.
+        document = ET.XML(XINCLUDE_BAD["B2.xml"])
+        with self.assertRaises(ElementInclude.FatalIncludeError) as cm:
+            ElementInclude.include(document, loader=self.none_loader)
+        self.assertEqual(str(cm.exception),
+                "xi:fallback tag must be child of xi:include "
+                "('{http://www.w3.org/2001/XInclude}fallback')")
 
 # --------------------------------------------------------------------
 # reported bugs
 
-def bug_xmltoolkit21():
-    """
+class BugsTest(unittest.TestCase):
 
-    marshaller gives obscure errors for non-string values
+    def test_bug_xmltoolkit21(self):
+        # marshaller gives obscure errors for non-string values
 
-    >>> elem = ET.Element(123)
-    >>> serialize(elem) # tag
-    Traceback (most recent call last):
-    TypeError: cannot serialize 123 (type int)
-    >>> elem = ET.Element("elem")
-    >>> elem.text = 123
-    >>> serialize(elem) # text
-    Traceback (most recent call last):
-    TypeError: cannot serialize 123 (type int)
-    >>> elem = ET.Element("elem")
-    >>> elem.tail = 123
-    >>> serialize(elem) # tail
-    Traceback (most recent call last):
-    TypeError: cannot serialize 123 (type int)
-    >>> elem = ET.Element("elem")
-    >>> elem.set(123, "123")
-    >>> serialize(elem) # attribute key
-    Traceback (most recent call last):
-    TypeError: cannot serialize 123 (type int)
-    >>> elem = ET.Element("elem")
-    >>> elem.set("123", 123)
-    >>> serialize(elem) # attribute value
-    Traceback (most recent call last):
-    TypeError: cannot serialize 123 (type int)
+        def check(elem):
+            with self.assertRaises(TypeError) as cm:
+                serialize(elem)
+            self.assertEqual(str(cm.exception),
+                    'cannot serialize 123 (type int)')
 
-    """
+        elem = ET.Element(123)
+        check(elem) # tag
 
-def bug_xmltoolkit25():
-    """
+        elem = ET.Element("elem")
+        elem.text = 123
+        check(elem) # text
 
-    typo in ElementTree.findtext
+        elem = ET.Element("elem")
+        elem.tail = 123
+        check(elem) # tail
 
-    >>> elem = ET.XML(SAMPLE_XML)
-    >>> tree = ET.ElementTree(elem)
-    >>> tree.findtext("tag")
-    'text'
-    >>> tree.findtext("section/tag")
-    'subtext'
+        elem = ET.Element("elem")
+        elem.set(123, "123")
+        check(elem) # attribute key
 
-    """
+        elem = ET.Element("elem")
+        elem.set("123", 123)
+        check(elem) # attribute value
 
-def bug_xmltoolkit28():
-    """
+    def test_bug_xmltoolkit25(self):
+        # typo in ElementTree.findtext
 
-    .//tag causes exceptions
+        elem = ET.XML(SAMPLE_XML)
+        tree = ET.ElementTree(elem)
+        self.assertEqual(tree.findtext("tag"), 'text')
+        self.assertEqual(tree.findtext("section/tag"), 'subtext')
 
-    >>> tree = ET.XML("<doc><table><tbody/></table></doc>")
-    >>> summarize_list(tree.findall(".//thead"))
-    []
-    >>> summarize_list(tree.findall(".//tbody"))
-    ['tbody']
+    def test_bug_xmltoolkit28(self):
+        # .//tag causes exceptions
 
-    """
+        tree = ET.XML("<doc><table><tbody/></table></doc>")
+        self.assertEqual(summarize_list(tree.findall(".//thead")), [])
+        self.assertEqual(summarize_list(tree.findall(".//tbody")), ['tbody'])
 
-def bug_xmltoolkitX1():
-    """
+    def test_bug_xmltoolkitX1(self):
+        # dump() doesn't flush the output buffer
 
-    dump() doesn't flush the output buffer
+        tree = ET.XML("<doc><table><tbody/></table></doc>")
+        with support.captured_stdout() as stdout:
+            ET.dump(tree)
+            self.assertEqual(stdout.getvalue(), '<doc><table><tbody /></table></doc>\n')
 
-    >>> tree = ET.XML("<doc><table><tbody/></table></doc>")
-    >>> ET.dump(tree); sys.stdout.write("tail")
-    <doc><table><tbody /></table></doc>
-    tail
+    def test_bug_xmltoolkit39(self):
+        # non-ascii element and attribute names doesn't work
 
-    """
+        tree = ET.XML(b"<?xml version='1.0' encoding='iso-8859-1'?><t\xe4g />")
+        self.assertEqual(ET.tostring(tree, "utf-8"), b'<t\xc3\xa4g />')
 
-def bug_xmltoolkit39():
-    """
+        tree = ET.XML(b"<?xml version='1.0' encoding='iso-8859-1'?>"
+                      b"<tag \xe4ttr='v&#228;lue' />")
+        self.assertEqual(tree.attrib, {u'\xe4ttr': u'v\xe4lue'})
+        self.assertEqual(ET.tostring(tree, "utf-8"),
+                b'<tag \xc3\xa4ttr="v\xc3\xa4lue" />')
 
-    non-ascii element and attribute names doesn't work
+        tree = ET.XML(b"<?xml version='1.0' encoding='iso-8859-1'?>"
+                      b'<t\xe4g>text</t\xe4g>')
+        self.assertEqual(ET.tostring(tree, "utf-8"),
+                b'<t\xc3\xa4g>text</t\xc3\xa4g>')
 
-    >>> tree = ET.XML("<?xml version='1.0' encoding='iso-8859-1'?><t\xe4g />")
-    >>> ET.tostring(tree, "utf-8")
-    '<t\\xc3\\xa4g />'
+        tree = ET.Element(u"t\u00e4g")
+        self.assertEqual(ET.tostring(tree, "utf-8"), b'<t\xc3\xa4g />')
 
-    >>> tree = ET.XML("<?xml version='1.0' encoding='iso-8859-1'?><tag \xe4ttr='v&#228;lue' />")
-    >>> tree.attrib
-    {u'\\xe4ttr': u'v\\xe4lue'}
-    >>> ET.tostring(tree, "utf-8")
-    '<tag \\xc3\\xa4ttr="v\\xc3\\xa4lue" />'
+        tree = ET.Element("tag")
+        tree.set(u"\u00e4ttr", u"v\u00e4lue")
+        self.assertEqual(ET.tostring(tree, "utf-8"),
+                b'<tag \xc3\xa4ttr="v\xc3\xa4lue" />')
 
-    >>> tree = ET.XML("<?xml version='1.0' encoding='iso-8859-1'?><t\xe4g>text</t\xe4g>")
-    >>> ET.tostring(tree, "utf-8")
-    '<t\\xc3\\xa4g>text</t\\xc3\\xa4g>'
+    def test_bug_xmltoolkit54(self):
+        # problems handling internally defined entities
 
-    >>> tree = ET.Element(u"t\u00e4g")
-    >>> ET.tostring(tree, "utf-8")
-    '<t\\xc3\\xa4g />'
+        e = ET.XML("<!DOCTYPE doc [<!ENTITY ldots '&#x8230;'>]>"
+                   '<doc>&ldots;</doc>')
+        self.assertEqual(serialize(e), '<doc>&#33328;</doc>')
 
-    >>> tree = ET.Element("tag")
-    >>> tree.set(u"\u00e4ttr", u"v\u00e4lue")
-    >>> ET.tostring(tree, "utf-8")
-    '<tag \\xc3\\xa4ttr="v\\xc3\\xa4lue" />'
+    def test_bug_xmltoolkit55(self):
+        # make sure we're reporting the first error, not the last
 
-    """
+        with self.assertRaises(ET.ParseError) as cm:
+            ET.XML("<!DOCTYPE doc SYSTEM 'doc.dtd'>"
+                   '<doc>&ldots;&ndots;&rdots;</doc>')
+        self.assertEqual(str(cm.exception),
+                'undefined entity &ldots;: line 1, column 36')
 
-def bug_xmltoolkit54():
-    """
+    def test_bug_xmltoolkit60(self):
+        # Handle crash in stream source.
 
-    problems handling internally defined entities
+        class ExceptionFile:
+            def read(self, x):
+                raise IOError
 
-    >>> e = ET.XML("<!DOCTYPE doc [<!ENTITY ldots '&#x8230;'>]><doc>&ldots;</doc>")
-    >>> serialize(e)
-    '<doc>&#33328;</doc>'
+        self.assertRaises(IOError, ET.parse, ExceptionFile())
 
-    """
+    def test_bug_xmltoolkit62(self):
+        # Don't crash when using custom entities.
 
-def bug_xmltoolkit55():
-    """
-
-    make sure we're reporting the first error, not the last
-
-    >>> e = ET.XML("<!DOCTYPE doc SYSTEM 'doc.dtd'><doc>&ldots;&ndots;&rdots;</doc>")
-    Traceback (most recent call last):
-    ParseError: undefined entity &ldots;: line 1, column 36
-
-    """
-
-class ExceptionFile:
-    def read(self, x):
-        raise IOError
-
-def xmltoolkit60():
-    """
-
-    Handle crash in stream source.
-    >>> tree = ET.parse(ExceptionFile())
-    Traceback (most recent call last):
-    IOError
-
-    """
-
-XMLTOOLKIT62_DOC = """<?xml version="1.0" encoding="UTF-8"?>
+        ENTITIES = {u'rsquo': u'\u2019', u'lsquo': u'\u2018'}
+        parser = ET.XMLTreeBuilder()
+        parser.entity.update(ENTITIES)
+        parser.feed("""<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE patent-application-publication SYSTEM "pap-v15-2001-01-31.dtd" []>
 <patent-application-publication>
 <subdoc-abstract>
 <paragraph id="A-0001" lvl="0">A new cultivar of Begonia plant named &lsquo;BCT9801BEG&rsquo;.</paragraph>
 </subdoc-abstract>
-</patent-application-publication>"""
+</patent-application-publication>""")
+        t = parser.close()
+        self.assertEqual(t.find('.//paragraph').text,
+            u'A new cultivar of Begonia plant named \u2018BCT9801BEG\u2019.')
 
+    @unittest.skipIf(sys.gettrace(), "Skips under coverage.")
+    def test_bug_xmltoolkit63(self):
+        # Check reference leak.
+        def xmltoolkit63():
+            tree = ET.TreeBuilder()
+            tree.start("tag", {})
+            tree.data("text")
+            tree.end("tag")
 
-def xmltoolkit62():
-    """
+        xmltoolkit63()
+        count = sys.getrefcount(None)
+        for i in range(1000):
+            xmltoolkit63()
+        self.assertEqual(sys.getrefcount(None), count)
 
-    Don't crash when using custom entities.
+    def test_bug_200708_newline(self):
+        # Preserve newlines in attributes.
 
-    >>> xmltoolkit62()
-    u'A new cultivar of Begonia plant named \u2018BCT9801BEG\u2019.'
+        e = ET.Element('SomeTag', text="def _f():\n  return 3\n")
+        self.assertEqual(ET.tostring(e),
+                b'<SomeTag text="def _f():&#10;  return 3&#10;" />')
+        self.assertEqual(ET.XML(ET.tostring(e)).get("text"),
+                'def _f():\n  return 3\n')
+        self.assertEqual(ET.tostring(ET.XML(ET.tostring(e))),
+                b'<SomeTag text="def _f():&#10;  return 3&#10;" />')
 
-    """
-    ENTITIES = {u'rsquo': u'\u2019', u'lsquo': u'\u2018'}
-    parser = ET.XMLTreeBuilder()
-    parser.entity.update(ENTITIES)
-    parser.feed(XMLTOOLKIT62_DOC)
-    t = parser.close()
-    return t.find('.//paragraph').text
+    def test_bug_200708_close(self):
+        # Test default builder.
+        parser = ET.XMLParser() # default
+        parser.feed("<element>some text</element>")
+        self.assertEqual(parser.close().tag, 'element')
 
-def xmltoolkit63():
-    """
+        # Test custom builder.
+        class EchoTarget:
+            def start(self, tag, attrib):
+                pass
+            def end(self, tag):
+                pass
+            def data(self, text):
+                pass
+            def close(self):
+                return ET.Element("element") # simulate root
+        parser = ET.XMLParser(target=EchoTarget())
+        parser.feed("<element>some text</element>")
+        self.assertEqual(parser.close().tag, 'element')
 
-    Check reference leak.
-    >>> xmltoolkit63()
-    >>> count = sys.getrefcount(None)
-    >>> for i in range(1000):
-    ...     xmltoolkit63()
-    >>> sys.getrefcount(None) - count
-    0
+    def test_bug_200709_default_namespace(self):
+        e = ET.Element("{default}elem")
+        s = ET.SubElement(e, "{default}elem")
+        self.assertEqual(serialize(e, default_namespace="default"), # 1
+                '<elem xmlns="default"><elem /></elem>')
 
-    """
-    tree = ET.TreeBuilder()
-    tree.start("tag", {})
-    tree.data("text")
-    tree.end("tag")
+        e = ET.Element("{default}elem")
+        s = ET.SubElement(e, "{default}elem")
+        s = ET.SubElement(e, "{not-default}elem")
+        self.assertEqual(serialize(e, default_namespace="default"), # 2
+            '<elem xmlns="default" xmlns:ns1="not-default">'
+            '<elem />'
+            '<ns1:elem />'
+            '</elem>')
+
+        e = ET.Element("{default}elem")
+        s = ET.SubElement(e, "{default}elem")
+        s = ET.SubElement(e, "elem") # unprefixed name
+        with self.assertRaises(ValueError) as cm:
+            serialize(e, default_namespace="default") # 3
+        self.assertEqual(str(cm.exception),
+                'cannot use non-qualified names with default_namespace option')
+
+    def test_bug_200709_register_namespace(self):
+        e = ET.Element("{http://namespace.invalid/does/not/exist/}title")
+        self.assertEqual(ET.tostring(e),
+            '<ns0:title xmlns:ns0="http://namespace.invalid/does/not/exist/" />')
+        ET.register_namespace("foo", "http://namespace.invalid/does/not/exist/")
+        e = ET.Element("{http://namespace.invalid/does/not/exist/}title")
+        self.assertEqual(ET.tostring(e),
+            '<foo:title xmlns:foo="http://namespace.invalid/does/not/exist/" />')
+
+        # And the Dublin Core namespace is in the default list:
+
+        e = ET.Element("{http://purl.org/dc/elements/1.1/}title")
+        self.assertEqual(ET.tostring(e),
+            '<dc:title xmlns:dc="http://purl.org/dc/elements/1.1/" />')
+
+    def test_bug_200709_element_comment(self):
+        # Not sure if this can be fixed, really (since the serializer needs
+        # ET.Comment, not cET.comment).
+
+        a = ET.Element('a')
+        a.append(ET.Comment('foo'))
+        self.assertEqual(a[0].tag, ET.Comment)
+
+        a = ET.Element('a')
+        a.append(ET.PI('foo'))
+        self.assertEqual(a[0].tag, ET.PI)
+
+    def test_bug_200709_element_insert(self):
+        a = ET.Element('a')
+        b = ET.SubElement(a, 'b')
+        c = ET.SubElement(a, 'c')
+        d = ET.Element('d')
+        a.insert(0, d)
+        self.assertEqual(summarize_list(a), ['d', 'b', 'c'])
+        a.insert(-1, d)
+        self.assertEqual(summarize_list(a), ['d', 'b', 'd', 'c'])
+
+    def test_bug_200709_iter_comment(self):
+        a = ET.Element('a')
+        b = ET.SubElement(a, 'b')
+        comment_b = ET.Comment("TEST-b")
+        b.append(comment_b)
+        self.assertEqual(summarize_list(a.iter(ET.Comment)), [ET.Comment])
+
+    # --------------------------------------------------------------------
+    # reported on bugs.python.org
+
+    def test_bug_1534630(self):
+        bob = ET.TreeBuilder()
+        e = bob.data("data")
+        e = bob.start("tag", {})
+        e = bob.end("tag")
+        e = bob.close()
+        self.assertEqual(serialize(e), '<tag />')
+
+    def test_issue6233(self):
+        e = ET.XML(b"<?xml version='1.0' encoding='utf-8'?>"
+                   b'<body>t\xc3\xa3g</body>')
+        self.assertEqual(ET.tostring(e, 'ascii'),
+                b"<?xml version='1.0' encoding='ascii'?>\n"
+                b'<body>t&#227;g</body>')
+        e = ET.XML(b"<?xml version='1.0' encoding='iso-8859-1'?>"
+                   b'<body>t\xe3g</body>')
+        self.assertEqual(ET.tostring(e, 'ascii'),
+                b"<?xml version='1.0' encoding='ascii'?>\n"
+                b'<body>t&#227;g</body>')
+
+    def test_issue3151(self):
+        e = ET.XML('<prefix:localname xmlns:prefix="${stuff}"/>')
+        self.assertEqual(e.tag, '{${stuff}}localname')
+        t = ET.ElementTree(e)
+        self.assertEqual(ET.tostring(e), b'<ns0:localname xmlns:ns0="${stuff}" />')
+
+    def test_issue6565(self):
+        elem = ET.XML("<body><tag/></body>")
+        self.assertEqual(summarize_list(elem), ['tag'])
+        newelem = ET.XML(SAMPLE_XML)
+        elem[:] = newelem[:]
+        self.assertEqual(summarize_list(elem), ['tag', 'tag', 'section'])
+
+    def test_issue10777(self):
+        # Registering a namespace twice caused a "dictionary changed size during
+        # iteration" bug.
+
+        ET.register_namespace('test10777', 'http://myuri/')
+        ET.register_namespace('test10777', 'http://myuri/')
+
+    def check_expat224_utf8_bug(self, text):
+        xml = b'<a b="%s"/>' % text
+        root = ET.XML(xml)
+        self.assertEqual(root.get('b'), text.decode('utf-8'))
+
+    def test_expat224_utf8_bug(self):
+        # bpo-31170: Expat 2.2.3 had a bug in its UTF-8 decoder.
+        # Check that Expat 2.2.4 fixed the bug.
+        #
+        # Test buffer bounds at odd and even positions.
+
+        text = b'\xc3\xa0' * 1024
+        self.check_expat224_utf8_bug(text)
+
+        text = b'x' + b'\xc3\xa0' * 1024
+        self.check_expat224_utf8_bug(text)
+
+    def test_expat224_utf8_bug_file(self):
+        with open(UTF8_BUG_XMLFILE, 'rb') as fp:
+            raw = fp.read()
+        root = ET.fromstring(raw)
+        xmlattr = root.get('b')
+
+        # "Parse" manually the XML file to extract the value of the 'b'
+        # attribute of the <a b='xxx' /> XML element
+        text = raw.decode('utf-8').strip()
+        text = text.replace('\r\n', ' ')
+        text = text[6:-4]
+        self.assertEqual(root.get('b'), text)
+
 
 # --------------------------------------------------------------------
 
 
-def bug_200708_newline():
-    r"""
+class BasicElementTest(unittest.TestCase):
+    @python_only
+    def test_cyclic_gc(self):
+        class Dummy:
+            pass
 
-    Preserve newlines in attributes.
+        # Test the shortest cycle: d->element->d
+        d = Dummy()
+        d.dummyref = ET.Element('joe', attr=d)
+        wref = weakref.ref(d)
+        del d
+        gc_collect()
+        self.assertIsNone(wref())
 
-    >>> e = ET.Element('SomeTag', text="def _f():\n  return 3\n")
-    >>> ET.tostring(e)
-    '<SomeTag text="def _f():&#10;  return 3&#10;" />'
-    >>> ET.XML(ET.tostring(e)).get("text")
-    'def _f():\n  return 3\n'
-    >>> ET.tostring(ET.XML(ET.tostring(e)))
-    '<SomeTag text="def _f():&#10;  return 3&#10;" />'
+        # A longer cycle: d->e->e2->d
+        e = ET.Element('joe')
+        d = Dummy()
+        d.dummyref = e
+        wref = weakref.ref(d)
+        e2 = ET.SubElement(e, 'foo', attr=d)
+        del d, e, e2
+        gc_collect()
+        self.assertIsNone(wref())
 
-    """
+        # A cycle between Element objects as children of one another
+        # e1->e2->e3->e1
+        e1 = ET.Element('e1')
+        e2 = ET.Element('e2')
+        e3 = ET.Element('e3')
+        e1.append(e2)
+        e2.append(e2)
+        e3.append(e1)
+        wref = weakref.ref(e1)
+        del e1, e2, e3
+        gc_collect()
+        self.assertIsNone(wref())
 
-def bug_200708_close():
-    """
+    @python_only
+    def test_weakref(self):
+        flag = []
+        def wref_cb(w):
+            flag.append(True)
+        e = ET.Element('e')
+        wref = weakref.ref(e, wref_cb)
+        self.assertEqual(wref().tag, 'e')
+        del e
+        self.assertEqual(flag, [True])
+        self.assertEqual(wref(), None)
 
-    Test default builder.
-    >>> parser = ET.XMLParser() # default
-    >>> parser.feed("<element>some text</element>")
-    >>> summarize(parser.close())
-    'element'
+    @python_only
+    def test_get_keyword_args(self):
+        e1 = ET.Element('foo' , x=1, y=2, z=3)
+        self.assertEqual(e1.get('x', default=7), 1)
+        self.assertEqual(e1.get('w', default=7), 7)
 
-    Test custom builder.
-    >>> class EchoTarget:
-    ...     def close(self):
-    ...         return ET.Element("element") # simulate root
-    >>> parser = ET.XMLParser(EchoTarget())
-    >>> parser.feed("<element>some text</element>")
-    >>> summarize(parser.close())
-    'element'
 
-    """
+class BadElementTest(unittest.TestCase):
+    def test_extend_mutable_list(self):
+        class X(object):
+            @property
+            def __class__(self):
+                L[:] = [ET.Element('baz')]
+                return ET.Element
+        L = [X()]
+        e = ET.Element('foo')
+        try:
+            e.extend(L)
+        except TypeError:
+            pass
 
-def bug_200709_default_namespace():
-    """
+        if ET is pyET:
+            class Y(X, ET.Element):
+                pass
+            L = [Y('x')]
+            e = ET.Element('foo')
+            e.extend(L)
 
-    >>> e = ET.Element("{default}elem")
-    >>> s = ET.SubElement(e, "{default}elem")
-    >>> serialize(e, default_namespace="default") # 1
-    '<elem xmlns="default"><elem /></elem>'
+    def test_extend_mutable_list2(self):
+        class X(object):
+            @property
+            def __class__(self):
+                del L[:]
+                return ET.Element
+        L = [X(), ET.Element('baz')]
+        e = ET.Element('foo')
+        try:
+            e.extend(L)
+        except TypeError:
+            pass
 
-    >>> e = ET.Element("{default}elem")
-    >>> s = ET.SubElement(e, "{default}elem")
-    >>> s = ET.SubElement(e, "{not-default}elem")
-    >>> serialize(e, default_namespace="default") # 2
-    '<elem xmlns="default" xmlns:ns1="not-default"><elem /><ns1:elem /></elem>'
+        if ET is pyET:
+            class Y(X, ET.Element):
+                pass
+            L = [Y('bar'), ET.Element('baz')]
+            e = ET.Element('foo')
+            e.extend(L)
 
-    >>> e = ET.Element("{default}elem")
-    >>> s = ET.SubElement(e, "{default}elem")
-    >>> s = ET.SubElement(e, "elem") # unprefixed name
-    >>> serialize(e, default_namespace="default") # 3
-    Traceback (most recent call last):
-    ValueError: cannot use non-qualified names with default_namespace option
+    @python_only
+    def test_remove_with_mutating(self):
+        class X(ET.Element):
+            def __eq__(self, o):
+                del e[:]
+                return False
+            __hash__ = object.__hash__
+        e = ET.Element('foo')
+        e.extend([X('bar')])
+        self.assertRaises(ValueError, e.remove, ET.Element('baz'))
 
-    """
+        e = ET.Element('foo')
+        e.extend([ET.Element('bar')])
+        self.assertRaises(ValueError, e.remove, X('baz'))
 
-def bug_200709_register_namespace():
-    """
+    def test_recursive_repr(self):
+        # Issue #25455
+        e = ET.Element('foo')
+        with swap_attr(e, 'tag', e):
+            with self.assertRaises(RuntimeError):
+                repr(e)  # Should not crash
 
-    >>> ET.tostring(ET.Element("{http://namespace.invalid/does/not/exist/}title"))
-    '<ns0:title xmlns:ns0="http://namespace.invalid/does/not/exist/" />'
-    >>> ET.register_namespace("foo", "http://namespace.invalid/does/not/exist/")
-    >>> ET.tostring(ET.Element("{http://namespace.invalid/does/not/exist/}title"))
-    '<foo:title xmlns:foo="http://namespace.invalid/does/not/exist/" />'
+    def test_element_get_text(self):
+        # Issue #27863
+        class X(str):
+            def __del__(self):
+                try:
+                    elem.text
+                except NameError:
+                    pass
 
-    And the Dublin Core namespace is in the default list:
+        b = ET.TreeBuilder()
+        b.start('tag', {})
+        b.data('ABCD')
+        b.data(X('EFGH'))
+        b.data('IJKL')
+        b.end('tag')
 
-    >>> ET.tostring(ET.Element("{http://purl.org/dc/elements/1.1/}title"))
-    '<dc:title xmlns:dc="http://purl.org/dc/elements/1.1/" />'
+        elem = b.close()
+        self.assertEqual(elem.text, 'ABCDEFGHIJKL')
 
-    """
+    def test_element_get_tail(self):
+        # Issue #27863
+        class X(str):
+            def __del__(self):
+                try:
+                    elem[0].tail
+                except NameError:
+                    pass
 
-def bug_200709_element_comment():
-    """
+        b = ET.TreeBuilder()
+        b.start('root', {})
+        b.start('tag', {})
+        b.end('tag')
+        b.data('ABCD')
+        b.data(X('EFGH'))
+        b.data('IJKL')
+        b.end('root')
 
-    Not sure if this can be fixed, really (since the serializer needs
-    ET.Comment, not cET.comment).
+        elem = b.close()
+        self.assertEqual(elem[0].tail, 'ABCDEFGHIJKL')
 
-    >>> a = ET.Element('a')
-    >>> a.append(ET.Comment('foo'))
-    >>> a[0].tag == ET.Comment
-    True
+    def test_element_iter(self):
+        # Issue #27863
+        e = ET.Element('tag')
+        e.extend([None])  # non-Element
 
-    >>> a = ET.Element('a')
-    >>> a.append(ET.PI('foo'))
-    >>> a[0].tag == ET.PI
-    True
+        it = e.iter()
+        self.assertIs(next(it), e)
+        self.assertRaises((AttributeError, TypeError), list, it)
 
-    """
+    def test_subscr(self):
+        # Issue #27863
+        class X:
+            def __index__(self):
+                del e[:]
+                return 1
 
-def bug_200709_element_insert():
-    """
+        e = ET.Element('elem')
+        e.append(ET.Element('child'))
+        e[:X()]  # shouldn't crash
 
-    >>> a = ET.Element('a')
-    >>> b = ET.SubElement(a, 'b')
-    >>> c = ET.SubElement(a, 'c')
-    >>> d = ET.Element('d')
-    >>> a.insert(0, d)
-    >>> summarize_list(a)
-    ['d', 'b', 'c']
-    >>> a.insert(-1, d)
-    >>> summarize_list(a)
-    ['d', 'b', 'd', 'c']
+        e.append(ET.Element('child'))
+        e[0:10:X()]  # shouldn't crash
 
-    """
+    def test_ass_subscr(self):
+        # Issue #27863
+        class X:
+            def __index__(self):
+                e[:] = []
+                return 1
 
-def bug_200709_iter_comment():
-    """
+        e = ET.Element('elem')
+        for _ in range(10):
+            e.insert(0, ET.Element('child'))
 
-    >>> a = ET.Element('a')
-    >>> b = ET.SubElement(a, 'b')
-    >>> comment_b = ET.Comment("TEST-b")
-    >>> b.append(comment_b)
-    >>> summarize_list(a.iter(ET.Comment))
-    ['<Comment>']
+        e[0:10:X()] = []  # shouldn't crash
 
-    """
 
-def bug_18347():
-    """
+class MutatingElementPath(str):
+    def __new__(cls, elem, *args):
+        self = str.__new__(cls, *args)
+        self.elem = elem
+        return self
+    def __eq__(self, o):
+        del self.elem[:]
+        return True
+    __hash__ = str.__hash__
 
-    >>> e = ET.XML('<html><CamelCase>text</CamelCase></html>')
-    >>> serialize(e)
-    '<html><CamelCase>text</CamelCase></html>'
-    >>> serialize(e, method="html")
-    '<html><CamelCase>text</CamelCase></html>'
-    """
+class BadElementPath(str):
+    def __eq__(self, o):
+        raise 1.0/0.0
+    __hash__ = str.__hash__
+
+class BadElementPathTest(unittest.TestCase):
+    def setUp(self):
+        super(BadElementPathTest, self).setUp()
+        from xml.etree import ElementPath
+        self.path_cache = ElementPath._cache
+        ElementPath._cache = {}
+
+    def tearDown(self):
+        from xml.etree import ElementPath
+        ElementPath._cache = self.path_cache
+        super(BadElementPathTest, self).tearDown()
+
+    def test_find_with_mutating(self):
+        e = ET.Element('foo')
+        e.extend([ET.Element('bar')])
+        e.find(MutatingElementPath(e, 'x'))
+
+    def test_find_with_error(self):
+        e = ET.Element('foo')
+        e.extend([ET.Element('bar')])
+        try:
+            e.find(BadElementPath('x'))
+        except ZeroDivisionError:
+            pass
+
+    def test_findtext_with_mutating(self):
+        e = ET.Element('foo')
+        e.extend([ET.Element('bar')])
+        e.findtext(MutatingElementPath(e, 'x'))
+
+    def test_findtext_with_error(self):
+        e = ET.Element('foo')
+        e.extend([ET.Element('bar')])
+        try:
+            e.findtext(BadElementPath('x'))
+        except ZeroDivisionError:
+            pass
+
+    def test_findall_with_mutating(self):
+        e = ET.Element('foo')
+        e.extend([ET.Element('bar')])
+        e.findall(MutatingElementPath(e, 'x'))
+
+    def test_findall_with_error(self):
+        e = ET.Element('foo')
+        e.extend([ET.Element('bar')])
+        try:
+            e.findall(BadElementPath('x'))
+        except ZeroDivisionError:
+            pass
+
+
+class ElementTreeTypeTest(unittest.TestCase):
+    def test_istype(self):
+        self.assertIsInstance(ET.ParseError, type)
+        self.assertIsInstance(ET.QName, type)
+        self.assertIsInstance(ET.ElementTree, type)
+        if ET is pyET:
+            self.assertIsInstance(ET.Element, type)
+            self.assertIsInstance(ET.TreeBuilder, type)
+            self.assertIsInstance(ET.XMLParser, type)
+
+    @python_only
+    def test_Element_subclass_trivial(self):
+        class MyElement(ET.Element):
+            pass
+
+        mye = MyElement('foo')
+        self.assertIsInstance(mye, ET.Element)
+        self.assertIsInstance(mye, MyElement)
+        self.assertEqual(mye.tag, 'foo')
+
+        # test that attribute assignment works (issue 14849)
+        mye.text = "joe"
+        self.assertEqual(mye.text, "joe")
+
+    @python_only
+    def test_Element_subclass_constructor(self):
+        class MyElement(ET.Element):
+            def __init__(self, tag, attrib={}, **extra):
+                super(MyElement, self).__init__(tag + '__', attrib, **extra)
+
+        mye = MyElement('foo', {'a': 1, 'b': 2}, c=3, d=4)
+        self.assertEqual(mye.tag, 'foo__')
+        self.assertEqual(sorted(mye.items()),
+            [('a', 1), ('b', 2), ('c', 3), ('d', 4)])
+
+    @python_only
+    def test_Element_subclass_new_method(self):
+        class MyElement(ET.Element):
+            def newmethod(self):
+                return self.tag
+
+        mye = MyElement('joe')
+        self.assertEqual(mye.newmethod(), 'joe')
+
+
+class ElementFindTest(unittest.TestCase):
+    @python_only
+    def test_simplefind(self):
+        ET.ElementPath
+        with swap_attr(ET, 'ElementPath', ET._SimpleElementPath()):
+            e = ET.XML(SAMPLE_XML)
+            self.assertEqual(e.find('tag').tag, 'tag')
+            self.assertEqual(ET.ElementTree(e).find('tag').tag, 'tag')
+            self.assertEqual(e.findtext('tag'), 'text')
+            self.assertIsNone(e.findtext('tog'))
+            self.assertEqual(e.findtext('tog', 'default'), 'default')
+            self.assertEqual(ET.ElementTree(e).findtext('tag'), 'text')
+            self.assertEqual(summarize_list(e.findall('tag')), ['tag', 'tag'])
+            self.assertEqual(summarize_list(e.findall('.//tag')), ['tag', 'tag', 'tag'])
+
+            # Path syntax doesn't work in this case.
+            self.assertIsNone(e.find('section/tag'))
+            self.assertIsNone(e.findtext('section/tag'))
+            self.assertEqual(summarize_list(e.findall('section/tag')), [])
+
+    def test_find_simple(self):
+        e = ET.XML(SAMPLE_XML)
+        self.assertEqual(e.find('tag').tag, 'tag')
+        self.assertEqual(e.find('section/tag').tag, 'tag')
+        self.assertEqual(e.find('./tag').tag, 'tag')
+
+        e[2] = ET.XML(SAMPLE_SECTION)
+        self.assertEqual(e.find('section/nexttag').tag, 'nexttag')
+
+        self.assertEqual(e.findtext('./tag'), 'text')
+        self.assertEqual(e.findtext('section/tag'), 'subtext')
+
+        # section/nexttag is found but has no text
+        self.assertEqual(e.findtext('section/nexttag'), '')
+        self.assertEqual(e.findtext('section/nexttag', 'default'), '')
+
+        # tog doesn't exist and 'default' kicks in
+        self.assertIsNone(e.findtext('tog'))
+        self.assertEqual(e.findtext('tog', 'default'), 'default')
+
+        # Issue #16922
+        self.assertEqual(ET.XML('<tag><empty /></tag>').findtext('empty'), '')
+
+    def test_find_xpath(self):
+        LINEAR_XML = '''
+        <body>
+            <tag class='a'/>
+            <tag class='b'/>
+            <tag class='c'/>
+            <tag class='d'/>
+        </body>'''
+        e = ET.XML(LINEAR_XML)
+
+        # Test for numeric indexing and last()
+        self.assertEqual(e.find('./tag[1]').attrib['class'], 'a')
+        self.assertEqual(e.find('./tag[2]').attrib['class'], 'b')
+        self.assertEqual(e.find('./tag[last()]').attrib['class'], 'd')
+        self.assertEqual(e.find('./tag[last()-1]').attrib['class'], 'c')
+        self.assertEqual(e.find('./tag[last()-2]').attrib['class'], 'b')
+
+    def test_findall(self):
+        e = ET.XML(SAMPLE_XML)
+        e[2] = ET.XML(SAMPLE_SECTION)
+        self.assertEqual(summarize_list(e.findall('.')), ['body'])
+        self.assertEqual(summarize_list(e.findall('tag')), ['tag', 'tag'])
+        self.assertEqual(summarize_list(e.findall('tog')), [])
+        self.assertEqual(summarize_list(e.findall('tog/foo')), [])
+        self.assertEqual(summarize_list(e.findall('*')),
+            ['tag', 'tag', 'section'])
+        self.assertEqual(summarize_list(e.findall('.//tag')),
+            ['tag'] * 4)
+        self.assertEqual(summarize_list(e.findall('section/tag')), ['tag'])
+        self.assertEqual(summarize_list(e.findall('section//tag')), ['tag'] * 2)
+        self.assertEqual(summarize_list(e.findall('section/*')),
+            ['tag', 'nexttag', 'nextsection'])
+        self.assertEqual(summarize_list(e.findall('section//*')),
+            ['tag', 'nexttag', 'nextsection', 'tag'])
+        self.assertEqual(summarize_list(e.findall('section/.//*')),
+            ['tag', 'nexttag', 'nextsection', 'tag'])
+        self.assertEqual(summarize_list(e.findall('*/*')),
+            ['tag', 'nexttag', 'nextsection'])
+        self.assertEqual(summarize_list(e.findall('*//*')),
+            ['tag', 'nexttag', 'nextsection', 'tag'])
+        self.assertEqual(summarize_list(e.findall('*/tag')), ['tag'])
+        self.assertEqual(summarize_list(e.findall('*/./tag')), ['tag'])
+        self.assertEqual(summarize_list(e.findall('./tag')), ['tag'] * 2)
+        self.assertEqual(summarize_list(e.findall('././tag')), ['tag'] * 2)
+
+        self.assertEqual(summarize_list(e.findall('.//tag[@class]')),
+            ['tag'] * 3)
+        self.assertEqual(summarize_list(e.findall('.//tag[@class="a"]')),
+            ['tag'])
+        self.assertEqual(summarize_list(e.findall('.//tag[@class="b"]')),
+            ['tag'] * 2)
+        self.assertEqual(summarize_list(e.findall('.//tag[@id]')),
+            ['tag'])
+        self.assertEqual(summarize_list(e.findall('.//section[tag]')),
+            ['section'])
+        self.assertEqual(summarize_list(e.findall('.//section[element]')), [])
+        self.assertEqual(summarize_list(e.findall('../tag')), [])
+        self.assertEqual(summarize_list(e.findall('section/../tag')),
+            ['tag'] * 2)
+        self.assertEqual(e.findall('section//'), e.findall('section//*'))
+
+    def test_test_find_with_ns(self):
+        e = ET.XML(SAMPLE_XML_NS)
+        self.assertEqual(summarize_list(e.findall('tag')), [])
+        self.assertEqual(
+            summarize_list(e.findall("{http://effbot.org/ns}tag")),
+            ['{http://effbot.org/ns}tag'] * 2)
+        self.assertEqual(
+            summarize_list(e.findall(".//{http://effbot.org/ns}tag")),
+            ['{http://effbot.org/ns}tag'] * 3)
+
+    def test_bad_find(self):
+        e = ET.XML(SAMPLE_XML)
+        with self.assertRaisesRegexp(SyntaxError,
+                                     'cannot use absolute path on element'):
+            e.findall('/tag')
+
+    def test_find_through_ElementTree(self):
+        e = ET.XML(SAMPLE_XML)
+        self.assertEqual(ET.ElementTree(e).find('tag').tag, 'tag')
+        self.assertEqual(ET.ElementTree(e).find('./tag').tag, 'tag')
+        # this produces a warning
+        msg = ("This search is broken in 1.3 and earlier, and will be fixed "
+               "in a future version.  If you rely on the current behaviour, "
+               "change it to '.+'")
+        with support.check_warnings((msg, FutureWarning)):
+            self.assertEqual(ET.ElementTree(e).find('/tag').tag, 'tag')
+        e[2] = ET.XML(SAMPLE_SECTION)
+        self.assertEqual(ET.ElementTree(e).find('section/tag').tag, 'tag')
+        self.assertIsNone(ET.ElementTree(e).find('tog'))
+        self.assertIsNone(ET.ElementTree(e).find('tog/foo'))
+
+        self.assertEqual(ET.ElementTree(e).findtext('tag'), 'text')
+        self.assertIsNone(ET.ElementTree(e).findtext('tog/foo'))
+        self.assertEqual(ET.ElementTree(e).findtext('tog/foo', 'default'),
+             'default')
+        self.assertEqual(ET.ElementTree(e).findtext('./tag'), 'text')
+        with support.check_warnings((msg, FutureWarning)):
+            self.assertEqual(ET.ElementTree(e).findtext('/tag'), 'text')
+        self.assertEqual(ET.ElementTree(e).findtext('section/tag'), 'subtext')
+
+        self.assertEqual(summarize_list(ET.ElementTree(e).findall('./tag')),
+            ['tag'] * 2)
+        with support.check_warnings((msg, FutureWarning)):
+            it = ET.ElementTree(e).findall('/tag')
+        self.assertEqual(summarize_list(it), ['tag'] * 2)
+
+
+class ElementIterTest(unittest.TestCase):
+    def _ilist(self, elem, tag=None):
+        return summarize_list(elem.iter(tag))
+
+    def test_basic(self):
+        doc = ET.XML("<html><body>this is a <i>paragraph</i>.</body>..</html>")
+        self.assertEqual(self._ilist(doc), ['html', 'body', 'i'])
+        self.assertEqual(self._ilist(doc.find('body')), ['body', 'i'])
+        self.assertEqual(next(doc.iter()).tag, 'html')
+        self.assertEqual(''.join(doc.itertext()), 'this is a paragraph...')
+        self.assertEqual(''.join(doc.find('body').itertext()),
+            'this is a paragraph.')
+        self.assertEqual(next(doc.itertext()), 'this is a ')
+
+        # Method iterparse should return an iterator. See bug 6472.
+        sourcefile = serialize(doc, to_string=False)
+        self.assertEqual(next(ET.iterparse(sourcefile))[0], 'end')
+
+        if ET is pyET:
+            # With an explitit parser too (issue #9708)
+            sourcefile = serialize(doc, to_string=False)
+            parser = ET.XMLParser(target=ET.TreeBuilder())
+            self.assertEqual(next(ET.iterparse(sourcefile, parser=parser))[0],
+                             'end')
+
+        tree = ET.ElementTree(None)
+        self.assertRaises(AttributeError, tree.iter)
+
+        # Issue #16913
+        doc = ET.XML("<root>a&amp;<sub>b&amp;</sub>c&amp;</root>")
+        self.assertEqual(''.join(doc.itertext()), 'a&b&c&')
+
+    def test_corners(self):
+        # single root, no subelements
+        a = ET.Element('a')
+        self.assertEqual(self._ilist(a), ['a'])
+
+        # one child
+        b = ET.SubElement(a, 'b')
+        self.assertEqual(self._ilist(a), ['a', 'b'])
+
+        # one child and one grandchild
+        c = ET.SubElement(b, 'c')
+        self.assertEqual(self._ilist(a), ['a', 'b', 'c'])
+
+        # two children, only first with grandchild
+        d = ET.SubElement(a, 'd')
+        self.assertEqual(self._ilist(a), ['a', 'b', 'c', 'd'])
+
+        # replace first child by second
+        a[0] = a[1]
+        del a[1]
+        self.assertEqual(self._ilist(a), ['a', 'd'])
+
+    def test_iter_by_tag(self):
+        doc = ET.XML('''
+            <document>
+                <house>
+                    <room>bedroom1</room>
+                    <room>bedroom2</room>
+                </house>
+                <shed>nothing here
+                </shed>
+                <house>
+                    <room>bedroom8</room>
+                </house>
+            </document>''')
+
+        self.assertEqual(self._ilist(doc, 'room'), ['room'] * 3)
+        self.assertEqual(self._ilist(doc, 'house'), ['house'] * 2)
+
+        if ET is pyET:
+            # test that iter also accepts 'tag' as a keyword arg
+            self.assertEqual(
+                summarize_list(doc.iter(tag='room')),
+                ['room'] * 3)
+
+        # make sure both tag=None and tag='*' return all tags
+        all_tags = ['document', 'house', 'room', 'room',
+                    'shed', 'house', 'room']
+        self.assertEqual(summarize_list(doc.iter()), all_tags)
+        self.assertEqual(self._ilist(doc), all_tags)
+        self.assertEqual(self._ilist(doc, '*'), all_tags)
+
+    def test_getiterator(self):
+        # Element.getiterator() is deprecated.
+        if sys.py3kwarning or ET is pyET:
+            with support.check_warnings(("This method will be removed in future versions.  "
+                                         "Use .+ instead.", PendingDeprecationWarning)):
+                self._test_getiterator()
+        else:
+            self._test_getiterator()
+
+    def _test_getiterator(self):
+        doc = ET.XML('''
+            <document>
+                <house>
+                    <room>bedroom1</room>
+                    <room>bedroom2</room>
+                </house>
+                <shed>nothing here
+                </shed>
+                <house>
+                    <room>bedroom8</room>
+                </house>
+            </document>''')
+
+        self.assertEqual(summarize_list(doc.getiterator('room')),
+                         ['room'] * 3)
+        self.assertEqual(summarize_list(doc.getiterator('house')),
+                         ['house'] * 2)
+
+        if ET is pyET:
+            # test that getiterator also accepts 'tag' as a keyword arg
+            self.assertEqual(
+                summarize_list(doc.getiterator(tag='room')),
+                ['room'] * 3)
+
+        # make sure both tag=None and tag='*' return all tags
+        all_tags = ['document', 'house', 'room', 'room',
+                    'shed', 'house', 'room']
+        self.assertEqual(summarize_list(doc.getiterator()), all_tags)
+        self.assertEqual(summarize_list(doc.getiterator(None)), all_tags)
+        self.assertEqual(summarize_list(doc.getiterator('*')), all_tags)
+
+    def test_copy(self):
+        a = ET.Element('a')
+        it = a.iter()
+        with self.assertRaises(TypeError):
+            copy.copy(it)
+
+    def test_pickle(self):
+        a = ET.Element('a')
+        it = a.iter()
+        for proto in range(pickle.HIGHEST_PROTOCOL + 1):
+            with self.assertRaises((TypeError, pickle.PicklingError)):
+                pickle.dumps(it, proto)
+
+
+class TreeBuilderTest(unittest.TestCase):
+    sample1 = ('<!DOCTYPE html PUBLIC'
+        ' "-//W3C//DTD XHTML 1.0 Transitional//EN"'
+        ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
+        '<html>text<div>subtext</div>tail</html>')
+
+    sample2 = '''<toplevel>sometext</toplevel>'''
+
+    def _check_sample1_element(self, e):
+        self.assertEqual(e.tag, 'html')
+        self.assertEqual(e.text, 'text')
+        self.assertEqual(e.tail, None)
+        self.assertEqual(e.attrib, {})
+        children = list(e)
+        self.assertEqual(len(children), 1)
+        child = children[0]
+        self.assertEqual(child.tag, 'div')
+        self.assertEqual(child.text, 'subtext')
+        self.assertEqual(child.tail, 'tail')
+        self.assertEqual(child.attrib, {})
+
+    def test_dummy_builder(self):
+        class DummyBuilder:
+            data = start = end = lambda *a: None
+
+            def close(self):
+                return 42
+
+        parser = ET.XMLParser(target=DummyBuilder())
+        parser.feed(self.sample1)
+        self.assertEqual(parser.close(), 42)
+
+    @python_only
+    def test_treebuilder_elementfactory_none(self):
+        parser = ET.XMLParser(target=ET.TreeBuilder(element_factory=None))
+        parser.feed(self.sample1)
+        e = parser.close()
+        self._check_sample1_element(e)
+
+    @python_only
+    def test_subclass(self):
+        class MyTreeBuilder(ET.TreeBuilder):
+            def foobar(self, x):
+                return x * 2
+
+        tb = MyTreeBuilder()
+        self.assertEqual(tb.foobar(10), 20)
+
+        parser = ET.XMLParser(target=tb)
+        parser.feed(self.sample1)
+
+        e = parser.close()
+        self._check_sample1_element(e)
+
+    @python_only
+    def test_element_factory(self):
+        lst = []
+        def myfactory(tag, attrib):
+            lst.append(tag)
+            return ET.Element(tag, attrib)
+
+        tb = ET.TreeBuilder(element_factory=myfactory)
+        parser = ET.XMLParser(target=tb)
+        parser.feed(self.sample2)
+        parser.close()
+
+        self.assertEqual(lst, ['toplevel'])
+
+    @python_only
+    def test_element_factory_subclass(self):
+        class MyElement(ET.Element):
+            pass
+
+        tb = ET.TreeBuilder(element_factory=MyElement)
+
+        parser = ET.XMLParser(target=tb)
+        parser.feed(self.sample1)
+        e = parser.close()
+        self.assertIsInstance(e, MyElement)
+        self._check_sample1_element(e)
+
+
+    @python_only
+    def test_doctype(self):
+        class DoctypeParser:
+            _doctype = None
+
+            def doctype(self, name, pubid, system):
+                self._doctype = (name, pubid, system)
+
+            data = start = end = lambda *a: None
+
+            def close(self):
+                return self._doctype
+
+        parser = ET.XMLParser(target=DoctypeParser())
+        parser.feed(self.sample1)
+
+        self.assertEqual(parser.close(),
+            ('html', '-//W3C//DTD XHTML 1.0 Transitional//EN',
+             'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'))
+
+    @cet_only  # PyET does not look up the attributes in XMLParser().__init__()
+    def test_builder_lookup_errors(self):
+        class RaisingBuilder(object):
+            def __init__(self, raise_in=None, what=ValueError):
+                self.raise_in = raise_in
+                self.what = what
+
+            def __getattr__(self, name):
+                if name == self.raise_in:
+                    raise self.what(self.raise_in)
+                def handle(*args):
+                    pass
+                return handle
+
+        ET.XMLParser(target=RaisingBuilder())
+        # cET also checks for 'close' and 'doctype', PyET does it only at need
+        for event in ('start', 'data', 'end', 'comment', 'pi'):
+            with self.assertRaises(ValueError):
+                ET.XMLParser(target=RaisingBuilder(event))
+
+        ET.XMLParser(target=RaisingBuilder(what=AttributeError))
+        for event in ('start', 'data', 'end', 'comment', 'pi'):
+            parser = ET.XMLParser(target=RaisingBuilder(event, what=AttributeError))
+            parser.feed(self.sample1)
+            self.assertIsNone(parser.close())
+
+
+class XMLParserTest(unittest.TestCase):
+    sample1 = b'<file><line>22</line></file>'
+    sample2 = (b'<!DOCTYPE html PUBLIC'
+        b' "-//W3C//DTD XHTML 1.0 Transitional//EN"'
+        b' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
+        b'<html>text</html>')
+
+    def _check_sample_element(self, e):
+        self.assertEqual(e.tag, 'file')
+        self.assertEqual(e[0].tag, 'line')
+        self.assertEqual(e[0].text, '22')
+
+    @python_only
+    def test_constructor_args(self):
+        # Positional args. The first (html) is not supported, but should be
+        # nevertheless correctly accepted.
+        with support.check_py3k_warnings((r'.*\bhtml\b', DeprecationWarning)):
+            parser = ET.XMLParser(None, ET.TreeBuilder(), 'utf-8')
+        parser.feed(self.sample1)
+        self._check_sample_element(parser.close())
+
+        # Now as keyword args.
+        parser2 = ET.XMLParser(encoding='utf-8',
+                               target=ET.TreeBuilder())
+        parser2.feed(self.sample1)
+        self._check_sample_element(parser2.close())
+
+    @python_only
+    def test_subclass(self):
+        class MyParser(ET.XMLParser):
+            pass
+        parser = MyParser()
+        parser.feed(self.sample1)
+        self._check_sample_element(parser.close())
+
+    @python_only
+    def test_doctype_warning(self):
+        parser = ET.XMLParser()
+        with support.check_warnings(('', DeprecationWarning)):
+            parser.doctype('html', '-//W3C//DTD XHTML 1.0 Transitional//EN',
+                'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd')
+        parser.feed('<html/>')
+        parser.close()
+
+    @python_only
+    def test_subclass_doctype(self):
+        _doctype = []
+        class MyParserWithDoctype(ET.XMLParser):
+            def doctype(self, name, pubid, system):
+                _doctype.append((name, pubid, system))
+
+        parser = MyParserWithDoctype()
+        with support.check_warnings(('', DeprecationWarning)):
+            parser.feed(self.sample2)
+        parser.close()
+        self.assertEqual(_doctype,
+            [('html', '-//W3C//DTD XHTML 1.0 Transitional//EN',
+              'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd')])
+
+        _doctype = []
+        _doctype2 = []
+        with warnings.catch_warnings():
+            warnings.simplefilter('error', DeprecationWarning)
+            class DoctypeParser:
+                data = start = end = close = lambda *a: None
+
+                def doctype(self, name, pubid, system):
+                    _doctype2.append((name, pubid, system))
+
+            parser = MyParserWithDoctype(target=DoctypeParser())
+            parser.feed(self.sample2)
+            parser.close()
+            self.assertEqual(_doctype, [])
+            self.assertEqual(_doctype2,
+                [('html', '-//W3C//DTD XHTML 1.0 Transitional//EN',
+                  'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd')])
+
+
+class NamespaceParseTest(unittest.TestCase):
+    def test_find_with_namespace(self):
+        nsmap = {'h': 'hello', 'f': 'foo'}
+        doc = ET.fromstring(SAMPLE_XML_NS_ELEMS)
+
+        self.assertEqual(len(doc.findall('{hello}table', nsmap)), 1)
+        self.assertEqual(len(doc.findall('.//{hello}td', nsmap)), 2)
+        self.assertEqual(len(doc.findall('.//{foo}name', nsmap)), 1)
+
+
+class ElementSlicingTest(unittest.TestCase):
+    def _elem_tags(self, elemlist):
+        return [e.tag for e in elemlist]
+
+    def _subelem_tags(self, elem):
+        return self._elem_tags(list(elem))
+
+    def _make_elem_with_children(self, numchildren):
+        """Create an Element with a tag 'a', with the given amount of children
+           named 'a0', 'a1' ... and so on.
+
+        """
+        e = ET.Element('a')
+        for i in range(numchildren):
+            ET.SubElement(e, 'a%s' % i)
+        return e
+
+    def test_getslice_single_index(self):
+        e = self._make_elem_with_children(10)
+
+        self.assertEqual(e[1].tag, 'a1')
+        self.assertEqual(e[-2].tag, 'a8')
+
+        self.assertRaises(IndexError, lambda: e[12])
+        self.assertRaises(IndexError, lambda: e[-12])
+
+    def test_getslice_range(self):
+        e = self._make_elem_with_children(6)
+
+        self.assertEqual(self._elem_tags(e[3:]), ['a3', 'a4', 'a5'])
+        self.assertEqual(self._elem_tags(e[3:6]), ['a3', 'a4', 'a5'])
+        self.assertEqual(self._elem_tags(e[3:16]), ['a3', 'a4', 'a5'])
+        self.assertEqual(self._elem_tags(e[3:5]), ['a3', 'a4'])
+        self.assertEqual(self._elem_tags(e[3:-1]), ['a3', 'a4'])
+        self.assertEqual(self._elem_tags(e[:2]), ['a0', 'a1'])
+
+    def test_getslice_steps(self):
+        e = self._make_elem_with_children(10)
+
+        self.assertEqual(self._elem_tags(e[8:10:1]), ['a8', 'a9'])
+        self.assertEqual(self._elem_tags(e[::3]), ['a0', 'a3', 'a6', 'a9'])
+        self.assertEqual(self._elem_tags(e[::8]), ['a0', 'a8'])
+        self.assertEqual(self._elem_tags(e[1::8]), ['a1', 'a9'])
+        self.assertEqual(self._elem_tags(e[3::sys.maxsize]), ['a3'])
+        self.assertEqual(self._elem_tags(e[3::sys.maxsize<<64]), ['a3'])
+
+    def test_getslice_negative_steps(self):
+        e = self._make_elem_with_children(4)
+
+        self.assertEqual(self._elem_tags(e[::-1]), ['a3', 'a2', 'a1', 'a0'])
+        self.assertEqual(self._elem_tags(e[::-2]), ['a3', 'a1'])
+        self.assertEqual(self._elem_tags(e[3::-sys.maxsize]), ['a3'])
+        self.assertEqual(self._elem_tags(e[3::-sys.maxsize-1]), ['a3'])
+        self.assertEqual(self._elem_tags(e[3::-sys.maxsize<<64]), ['a3'])
+
+    def test_delslice(self):
+        e = self._make_elem_with_children(4)
+        del e[0:2]
+        self.assertEqual(self._subelem_tags(e), ['a2', 'a3'])
+
+        e = self._make_elem_with_children(4)
+        del e[0:]
+        self.assertEqual(self._subelem_tags(e), [])
+
+        if ET is pyET:
+            e = self._make_elem_with_children(4)
+            del e[::-1]
+            self.assertEqual(self._subelem_tags(e), [])
+
+            e = self._make_elem_with_children(4)
+            del e[::-2]
+            self.assertEqual(self._subelem_tags(e), ['a0', 'a2'])
+
+            e = self._make_elem_with_children(4)
+            del e[1::2]
+            self.assertEqual(self._subelem_tags(e), ['a0', 'a2'])
+
+            e = self._make_elem_with_children(2)
+            del e[::2]
+            self.assertEqual(self._subelem_tags(e), ['a1'])
+
+    def test_setslice_single_index(self):
+        e = self._make_elem_with_children(4)
+        e[1] = ET.Element('b')
+        self.assertEqual(self._subelem_tags(e), ['a0', 'b', 'a2', 'a3'])
+
+        e[-2] = ET.Element('c')
+        self.assertEqual(self._subelem_tags(e), ['a0', 'b', 'c', 'a3'])
+
+        with self.assertRaises(IndexError):
+            e[5] = ET.Element('d')
+        with self.assertRaises(IndexError):
+            e[-5] = ET.Element('d')
+        self.assertEqual(self._subelem_tags(e), ['a0', 'b', 'c', 'a3'])
+
+    def test_setslice_range(self):
+        e = self._make_elem_with_children(4)
+        e[1:3] = [ET.Element('b%s' % i) for i in range(2)]
+        self.assertEqual(self._subelem_tags(e), ['a0', 'b0', 'b1', 'a3'])
+
+        e = self._make_elem_with_children(4)
+        e[1:3] = [ET.Element('b')]
+        self.assertEqual(self._subelem_tags(e), ['a0', 'b', 'a3'])
+
+        e = self._make_elem_with_children(4)
+        e[1:3] = [ET.Element('b%s' % i) for i in range(3)]
+        self.assertEqual(self._subelem_tags(e), ['a0', 'b0', 'b1', 'b2', 'a3'])
+
+    def test_setslice_steps(self):
+        e = self._make_elem_with_children(6)
+        e[1:5:2] = [ET.Element('b%s' % i) for i in range(2)]
+        self.assertEqual(self._subelem_tags(e), ['a0', 'b0', 'a2', 'b1', 'a4', 'a5'])
+
+        e = self._make_elem_with_children(6)
+        with self.assertRaises(ValueError):
+            e[1:5:2] = [ET.Element('b')]
+        with self.assertRaises(ValueError):
+            e[1:5:2] = [ET.Element('b%s' % i) for i in range(3)]
+        with self.assertRaises(ValueError):
+            e[1:5:2] = []
+        self.assertEqual(self._subelem_tags(e), ['a0', 'a1', 'a2', 'a3', 'a4', 'a5'])
+
+        e = self._make_elem_with_children(4)
+        e[1::sys.maxsize] = [ET.Element('b')]
+        self.assertEqual(self._subelem_tags(e), ['a0', 'b', 'a2', 'a3'])
+        e[1::sys.maxsize<<64] = [ET.Element('c')]
+        self.assertEqual(self._subelem_tags(e), ['a0', 'c', 'a2', 'a3'])
+
+    def test_setslice_negative_steps(self):
+        e = self._make_elem_with_children(4)
+        e[2:0:-1] = [ET.Element('b%s' % i) for i in range(2)]
+        self.assertEqual(self._subelem_tags(e), ['a0', 'b1', 'b0', 'a3'])
+
+        e = self._make_elem_with_children(4)
+        with self.assertRaises(ValueError):
+            e[2:0:-1] = [ET.Element('b')]
+        with self.assertRaises(ValueError):
+            e[2:0:-1] = [ET.Element('b%s' % i) for i in range(3)]
+        with self.assertRaises(ValueError):
+            e[2:0:-1] = []
+        self.assertEqual(self._subelem_tags(e), ['a0', 'a1', 'a2', 'a3'])
+
+        e = self._make_elem_with_children(4)
+        e[1::-sys.maxsize] = [ET.Element('b')]
+        self.assertEqual(self._subelem_tags(e), ['a0', 'b', 'a2', 'a3'])
+        e[1::-sys.maxsize-1] = [ET.Element('c')]
+        self.assertEqual(self._subelem_tags(e), ['a0', 'c', 'a2', 'a3'])
+        e[1::-sys.maxsize<<64] = [ET.Element('d')]
+        self.assertEqual(self._subelem_tags(e), ['a0', 'd', 'a2', 'a3'])
+
+
+class IOTest(unittest.TestCase):
+    def tearDown(self):
+        support.unlink(TESTFN)
+
+    def test_encoding(self):
+        # Test encoding issues.
+        elem = ET.Element("tag")
+        elem.text = u"abc"
+        self.assertEqual(serialize(elem), '<tag>abc</tag>')
+        self.assertEqual(serialize(elem, encoding="utf-8"),
+                '<tag>abc</tag>')
+        self.assertEqual(serialize(elem, encoding="us-ascii"),
+                '<tag>abc</tag>')
+        self.assertEqual(serialize(elem, encoding="iso-8859-1"),
+                "<?xml version='1.0' encoding='iso-8859-1'?>\n"
+                "<tag>abc</tag>")
+
+        elem = ET.Element("tag")
+        elem.text = "<&\"\'>"
+        self.assertEqual(serialize(elem), '<tag>&lt;&amp;"\'&gt;</tag>')
+        self.assertEqual(serialize(elem, encoding="utf-8"),
+                b'<tag>&lt;&amp;"\'&gt;</tag>')
+        self.assertEqual(serialize(elem, encoding="us-ascii"),
+                b'<tag>&lt;&amp;"\'&gt;</tag>')
+        self.assertEqual(serialize(elem, encoding="iso-8859-1"),
+                "<?xml version='1.0' encoding='iso-8859-1'?>\n"
+                "<tag>&lt;&amp;\"'&gt;</tag>")
+
+        elem = ET.Element("tag")
+        elem.attrib["key"] = "<&\"\'>"
+        self.assertEqual(serialize(elem), '<tag key="&lt;&amp;&quot;\'&gt;" />')
+        self.assertEqual(serialize(elem, encoding="utf-8"),
+                b'<tag key="&lt;&amp;&quot;\'&gt;" />')
+        self.assertEqual(serialize(elem, encoding="us-ascii"),
+                b'<tag key="&lt;&amp;&quot;\'&gt;" />')
+        self.assertEqual(serialize(elem, encoding="iso-8859-1"),
+                "<?xml version='1.0' encoding='iso-8859-1'?>\n"
+                "<tag key=\"&lt;&amp;&quot;'&gt;\" />")
+
+        elem = ET.Element("tag")
+        elem.text = u'\xe5\xf6\xf6<>'
+        self.assertEqual(serialize(elem),
+                '<tag>&#229;&#246;&#246;&lt;&gt;</tag>')
+        self.assertEqual(serialize(elem, encoding="utf-8"),
+                '<tag>\xc3\xa5\xc3\xb6\xc3\xb6&lt;&gt;</tag>')
+        self.assertEqual(serialize(elem, encoding="us-ascii"),
+                '<tag>&#229;&#246;&#246;&lt;&gt;</tag>')
+        self.assertEqual(serialize(elem, encoding="iso-8859-1"),
+                "<?xml version='1.0' encoding='iso-8859-1'?>\n"
+                "<tag>\xe5\xf6\xf6&lt;&gt;</tag>")
+
+        elem = ET.Element("tag")
+        elem.attrib["key"] = u'\xe5\xf6\xf6<>'
+        self.assertEqual(serialize(elem),
+                '<tag key="&#229;&#246;&#246;&lt;&gt;" />')
+        self.assertEqual(serialize(elem, encoding="utf-8"),
+                '<tag key="\xc3\xa5\xc3\xb6\xc3\xb6&lt;&gt;" />')
+        self.assertEqual(serialize(elem, encoding="us-ascii"),
+                '<tag key="&#229;&#246;&#246;&lt;&gt;" />')
+        self.assertEqual(serialize(elem, encoding="iso-8859-1"),
+                "<?xml version='1.0' encoding='iso-8859-1'?>\n"
+                "<tag key=\"\xe5\xf6\xf6&lt;&gt;\" />")
+
+    def test_write_to_filename(self):
+        tree = ET.ElementTree(ET.XML('''<site />'''))
+        tree.write(TESTFN)
+        with open(TESTFN, 'rb') as f:
+            self.assertEqual(f.read(), b'''<site />''')
+
+    def test_write_to_file(self):
+        tree = ET.ElementTree(ET.XML('''<site />'''))
+        with open(TESTFN, 'wb') as f:
+            tree.write(f)
+            self.assertFalse(f.closed)
+        with open(TESTFN, 'rb') as f:
+            self.assertEqual(f.read(), b'''<site />''')
+
+    def test_read_from_stringio(self):
+        tree = ET.ElementTree()
+        stream = StringIO.StringIO('''<?xml version="1.0"?><site></site>''')
+        tree.parse(stream)
+        self.assertEqual(tree.getroot().tag, 'site')
+
+    def test_write_to_stringio(self):
+        tree = ET.ElementTree(ET.XML('''<site />'''))
+        stream = StringIO.StringIO()
+        tree.write(stream)
+        self.assertEqual(stream.getvalue(), '''<site />''')
+
+    class dummy:
+        pass
+
+    def test_read_from_user_reader(self):
+        stream = StringIO.StringIO('''<?xml version="1.0"?><site></site>''')
+        reader = self.dummy()
+        reader.read = stream.read
+        tree = ET.ElementTree()
+        tree.parse(reader)
+        self.assertEqual(tree.getroot().tag, 'site')
+
+    def test_write_to_user_writer(self):
+        tree = ET.ElementTree(ET.XML('''<site />'''))
+        stream = StringIO.StringIO()
+        writer = self.dummy()
+        writer.write = stream.write
+        tree.write(writer)
+        self.assertEqual(stream.getvalue(), '''<site />''')
+
+    def test_tostringlist_invariant(self):
+        root = ET.fromstring('<tag>foo</tag>')
+        self.assertEqual(
+            ET.tostring(root),
+            ''.join(ET.tostringlist(root)))
+        self.assertEqual(
+            ET.tostring(root, 'utf-16'),
+            b''.join(ET.tostringlist(root, 'utf-16')))
+
+
+class ParseErrorTest(unittest.TestCase):
+    def test_subclass(self):
+        self.assertIsInstance(ET.ParseError(), SyntaxError)
+
+    def _get_error(self, s):
+        try:
+            ET.fromstring(s)
+        except ET.ParseError as e:
+            return e
+
+    def test_error_position(self):
+        self.assertEqual(self._get_error('foo').position, (1, 0))
+        self.assertEqual(self._get_error('<tag>&foo;</tag>').position, (1, 5))
+        self.assertEqual(self._get_error('foobar<').position, (1, 6))
+
+    @python_only
+    def test_error_code(self):
+        from xml.parsers import expat
+        self.assertEqual(expat.ErrorString(self._get_error('foo').code),
+                         expat.errors.XML_ERROR_SYNTAX)
+
+
+class KeywordArgsTest(unittest.TestCase):
+    # Test various issues with keyword arguments passed to ET.Element
+    # constructor and methods
+    def test_issue14818(self):
+        x = ET.XML("<a>foo</a>")
+        self.assertEqual(x.find('a', None),
+                         x.find(path='a', namespaces=None))
+        self.assertEqual(x.findtext('a', None, None),
+                         x.findtext(path='a', default=None, namespaces=None))
+        self.assertEqual(x.findall('a', None),
+                         x.findall(path='a', namespaces=None))
+        self.assertEqual(list(x.iterfind('a', None)),
+                         list(x.iterfind(path='a', namespaces=None)))
+
+        self.assertEqual(ET.Element('a').attrib, {})
+        elements = [
+            ET.Element('a', dict(href="#", id="foo")),
+            ET.Element('a', attrib=dict(href="#", id="foo")),
+            ET.Element('a', dict(href="#"), id="foo"),
+            ET.Element('a', href="#", id="foo"),
+            ET.Element('a', dict(href="#", id="foo"), href="#", id="foo"),
+        ]
+        for e in elements:
+            self.assertEqual(e.tag, 'a')
+            self.assertEqual(e.attrib, dict(href="#", id="foo"))
+
+        e2 = ET.SubElement(elements[0], 'foobar', attrib={'key1': 'value1'})
+        self.assertEqual(e2.attrib['key1'], 'value1')
+
+        with self.assertRaisesRegexp(TypeError, 'must be dict, not str'):
+            ET.Element('a', "I'm not a dict")
+        with self.assertRaisesRegexp(TypeError, 'must be dict, not str'):
+            ET.Element('a', attrib="I'm not a dict")
 
 # --------------------------------------------------------------------
-# reported on bugs.python.org
 
-def bug_1534630():
-    """
+class NoAcceleratorTest(unittest.TestCase):
+    def setUp(self):
+        if ET is not pyET:
+            raise unittest.SkipTest('only for the Python version')
 
-    >>> bob = ET.TreeBuilder()
-    >>> e = bob.data("data")
-    >>> e = bob.start("tag", {})
-    >>> e = bob.end("tag")
-    >>> e = bob.close()
-    >>> serialize(e)
-    '<tag />'
-
-    """
-
-def check_issue6233():
-    """
-
-    >>> e = ET.XML("<?xml version='1.0' encoding='utf-8'?><body>t\\xc3\\xa3g</body>")
-    >>> ET.tostring(e, 'ascii')
-    "<?xml version='1.0' encoding='ascii'?>\\n<body>t&#227;g</body>"
-    >>> e = ET.XML("<?xml version='1.0' encoding='iso-8859-1'?><body>t\\xe3g</body>")
-    >>> ET.tostring(e, 'ascii')
-    "<?xml version='1.0' encoding='ascii'?>\\n<body>t&#227;g</body>"
-
-    """
-
-def check_issue3151():
-    """
-
-    >>> e = ET.XML('<prefix:localname xmlns:prefix="${stuff}"/>')
-    >>> e.tag
-    '{${stuff}}localname'
-    >>> t = ET.ElementTree(e)
-    >>> ET.tostring(e)
-    '<ns0:localname xmlns:ns0="${stuff}" />'
-
-    """
-
-def check_issue6565():
-    """
-
-    >>> elem = ET.XML("<body><tag/></body>")
-    >>> summarize_list(elem)
-    ['tag']
-    >>> newelem = ET.XML(SAMPLE_XML)
-    >>> elem[:] = newelem[:]
-    >>> summarize_list(elem)
-    ['tag', 'tag', 'section']
-
-    """
-
-def check_html_empty_elems_serialization(self):
-    # issue 15970
-    # from http://www.w3.org/TR/html401/index/elements.html
-    """
-
-    >>> empty_elems = ['AREA', 'BASE', 'BASEFONT', 'BR', 'COL', 'FRAME', 'HR',
-    ...                'IMG', 'INPUT', 'ISINDEX', 'LINK', 'META', 'PARAM']
-    >>> elems = ''.join('<%s />' % elem for elem in empty_elems)
-    >>> serialize(ET.XML('<html>%s</html>' % elems), method='html')
-    '<html><AREA><BASE><BASEFONT><BR><COL><FRAME><HR><IMG><INPUT><ISINDEX><LINK><META><PARAM></html>'
-    >>> serialize(ET.XML('<html>%s</html>' % elems.lower()), method='html')
-    '<html><area><base><basefont><br><col><frame><hr><img><input><isindex><link><meta><param></html>'
-    >>> elems = ''.join('<%s></%s>' % (elem, elem) for elem in empty_elems)
-    >>> serialize(ET.XML('<html>%s</html>' % elems), method='html')
-    '<html><AREA><BASE><BASEFONT><BR><COL><FRAME><HR><IMG><INPUT><ISINDEX><LINK><META><PARAM></html>'
-    >>> serialize(ET.XML('<html>%s</html>' % elems.lower()), method='html')
-    '<html><area><base><basefont><br><col><frame><hr><img><input><isindex><link><meta><param></html>'
-
-    """
+    # Test that the C accelerator was not imported for pyET
+    def test_correct_import_pyET(self):
+        # The type of methods defined in Python code is types.FunctionType,
+        # while the type of methods defined inside _elementtree is
+        # <class 'wrapper_descriptor'>
+        self.assertIsInstance(pyET.Element.__init__, types.FunctionType)
+        self.assertIsInstance(pyET.XMLParser.__init__, types.FunctionType)
 
 # --------------------------------------------------------------------
 
 
-class CleanContext(object):
-    """Provide default namespace mapping and path cache."""
-    checkwarnings = None
+def test_main(module=None):
+    # When invoked without a module, runs the Python ET tests by loading pyET.
+    # Otherwise, uses the given module as the ET.
+    if module is None:
+        module = pyET
 
-    def __init__(self, quiet=False):
-        if sys.flags.optimize >= 2:
-            # under -OO, doctests cannot be run and therefore not all warnings
-            # will be emitted
-            quiet = True
-        deprecations = (
-            # Search behaviour is broken if search path starts with "/".
-            ("This search is broken in 1.3 and earlier, and will be fixed "
-             "in a future version.  If you rely on the current behaviour, "
-             "change it to '.+'", FutureWarning),
-            # Element.getchildren() and Element.getiterator() are deprecated.
-            ("This method will be removed in future versions.  "
-             "Use .+ instead.", DeprecationWarning),
-            ("This method will be removed in future versions.  "
-             "Use .+ instead.", PendingDeprecationWarning),
-            # XMLParser.doctype() is deprecated.
-            ("This method of XMLParser is deprecated.  Define doctype.. "
-             "method on the TreeBuilder target.", DeprecationWarning))
-        self.checkwarnings = test_support.check_warnings(*deprecations,
-                                                         quiet=quiet)
+    global ET
+    ET = module
 
-    def __enter__(self):
-        from xml.etree import ElementTree
-        self._nsmap = ElementTree._namespace_map
-        self._path_cache = ElementTree.ElementPath._cache
-        # Copy the default namespace mapping
-        ElementTree._namespace_map = self._nsmap.copy()
-        # Copy the path cache (should be empty)
-        ElementTree.ElementPath._cache = self._path_cache.copy()
-        self.checkwarnings.__enter__()
+    test_classes = [
+        ModuleTest,
+        ElementSlicingTest,
+        BasicElementTest,
+        BadElementTest,
+        BadElementPathTest,
+        ElementTreeTest,
+        IOTest,
+        ParseErrorTest,
+        XIncludeTest,
+        ElementTreeTypeTest,
+        ElementFindTest,
+        ElementIterTest,
+        TreeBuilderTest,
+        XMLParserTest,
+        BugsTest,
+        ]
 
-    def __exit__(self, *args):
-        from xml.etree import ElementTree
+    # These tests will only run for the pure-Python version that doesn't import
+    # _elementtree. We can't use skipUnless here, because pyET is filled in only
+    # after the module is loaded.
+    if pyET is not ET:
+        test_classes.extend([
+            NoAcceleratorTest,
+            ])
+
+    # Provide default namespace mapping and path cache.
+    from xml.etree import ElementPath
+    nsmap = pyET._namespace_map
+    # Copy the default namespace mapping
+    nsmap_copy = nsmap.copy()
+    # Copy the path cache (should be empty)
+    path_cache = ElementPath._cache
+    ElementPath._cache = path_cache.copy()
+    try:
+        support.run_unittest(*test_classes)
+    finally:
+        from xml.etree import ElementPath
         # Restore mapping and path cache
-        ElementTree._namespace_map = self._nsmap
-        ElementTree.ElementPath._cache = self._path_cache
-        self.checkwarnings.__exit__(*args)
+        nsmap.clear()
+        nsmap.update(nsmap_copy)
+        ElementPath._cache = path_cache
+        # don't interfere with subsequent tests
+        ET = None
 
 
-def test_main(module_name='xml.etree.ElementTree'):
-    from test import test_xml_etree
-
-    use_py_module = (module_name == 'xml.etree.ElementTree')
-
-    # The same doctests are used for both the Python and the C implementations
-    assert test_xml_etree.ET.__name__ == module_name
-
-    # XXX the C module should give the same warnings as the Python module
-    with CleanContext(quiet=not use_py_module):
-        test_support.run_doctest(test_xml_etree, verbosity=True)
-
-    # The module should not be changed by the tests
-    assert test_xml_etree.ET.__name__ == module_name
-
 if __name__ == '__main__':
     test_main()
diff --git a/Lib/test/test_xml_etree_c.py b/Lib/test/test_xml_etree_c.py
index 98410c5..71a755c 100644
--- a/Lib/test/test_xml_etree_c.py
+++ b/Lib/test/test_xml_etree_c.py
@@ -7,16 +7,7 @@
 cET = test_support.import_module('xml.etree.cElementTree')
 
 
-# cElementTree specific tests
-
-def sanity():
-    """
-    Import sanity.
-
-    >>> from xml.etree import cElementTree
-    """
-
-
+@unittest.skipUnless(cET, 'requires _elementtree')
 class MiscTests(unittest.TestCase):
     # Issue #8651.
     @precisionbigmemtest(size=_2G + 100, memuse=1)
@@ -62,26 +53,41 @@
             del element.attrib
         self.assertEqual(element.attrib, {'A': 'B', 'C': 'D'})
 
+    def test_bpo_31728(self):
+        # A crash shouldn't happen in case garbage collection triggers a call
+        # to clear() or a reading of text or tail, while a setter or clear()
+        # is already running.
+        elem = cET.Element('elem')
+        class X:
+            def __del__(self):
+                elem.text
+                elem.tail
+                elem.clear()
+
+        elem.text = X()
+        elem.clear()  # shouldn't crash
+
+        elem.tail = X()
+        elem.clear()  # shouldn't crash
+
+        elem.text = X()
+        elem.text = X()  # shouldn't crash
+        elem.clear()
+
+        elem.tail = X()
+        elem.tail = X()  # shouldn't crash
+        elem.clear()
+
 
 def test_main():
     from test import test_xml_etree, test_xml_etree_c
 
     # Run the tests specific to the C implementation
-    test_support.run_doctest(test_xml_etree_c, verbosity=True)
+    test_support.run_unittest(MiscTests)
 
-    # Assign the C implementation before running the doctests
-    # Patch the __name__, to prevent confusion with the pure Python test
-    pyET = test_xml_etree.ET
-    py__name__ = test_xml_etree.__name__
-    test_xml_etree.ET = cET
-    if __name__ != '__main__':
-        test_xml_etree.__name__ = __name__
-    try:
-        # Run the same test suite as xml.etree.ElementTree
-        test_xml_etree.test_main(module_name='xml.etree.cElementTree')
-    finally:
-        test_xml_etree.ET = pyET
-        test_xml_etree.__name__ = py__name__
+    # Run the same test suite as the Python module
+    test_xml_etree.test_main(module=cET)
+
 
 if __name__ == '__main__':
     test_main()
diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py
index 97d9e8f..36b3be6 100644
--- a/Lib/test/test_xmlrpc.py
+++ b/Lib/test/test_xmlrpc.py
@@ -854,13 +854,9 @@
 class ServerProxyTestCase(unittest.TestCase):
     def setUp(self):
         unittest.TestCase.setUp(self)
-        if threading:
-            self.url = URL
-        else:
-            # Without threading, http_server() and http_multi_server() will not
-            # be executed and URL is still equal to None. 'http://' is a just
-            # enough to choose the scheme (HTTP)
-            self.url = 'http://'
+        # Actual value of the URL doesn't matter if it is a string in
+        # the correct format.
+        self.url = 'http://fake.localhost'
 
     def test_close(self):
         p = xmlrpclib.ServerProxy(self.url)
diff --git a/Lib/test/wrongcert.pem b/Lib/test/wrongcert.pem
deleted file mode 100644
index 5f92f9b..0000000
--- a/Lib/test/wrongcert.pem
+++ /dev/null
@@ -1,32 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQC89ZNxjTgWgq7Z1g0tJ65w+k7lNAj5IgjLb155UkUrz0XsHDnH
-FlbsVUg2Xtk6+bo2UEYIzN7cIm5ImpmyW/2z0J1IDVDlvR2xJ659xrE0v5c2cB6T
-f9lnNTwpSoeK24Nd7Jwq4j9vk95fLrdqsBq0/KVlsCXeixS/CaqqduXfvwIDAQAB
-AoGAQFko4uyCgzfxr4Ezb4Mp5pN3Npqny5+Jey3r8EjSAX9Ogn+CNYgoBcdtFgbq
-1yif/0sK7ohGBJU9FUCAwrqNBI9ZHB6rcy7dx+gULOmRBGckln1o5S1+smVdmOsW
-7zUVLBVByKuNWqTYFlzfVd6s4iiXtAE2iHn3GCyYdlICwrECQQDhMQVxHd3EFbzg
-SFmJBTARlZ2GKA3c1g/h9/XbkEPQ9/RwI3vnjJ2RaSnjlfoLl8TOcf0uOGbOEyFe
-19RvCLXjAkEA1s+UE5ziF+YVkW3WolDCQ2kQ5WG9+ccfNebfh6b67B7Ln5iG0Sbg
-ky9cjsO3jbMJQtlzAQnH1850oRD5Gi51dQJAIbHCDLDZU9Ok1TI+I2BhVuA6F666
-lEZ7TeZaJSYq34OaUYUdrwG9OdqwZ9sy9LUav4ESzu2lhEQchCJrKMn23QJAReqs
-ZLHUeTjfXkVk7dHhWPWSlUZ6AhmIlA/AQ7Payg2/8wM/JkZEJEPvGVykms9iPUrv
-frADRr+hAGe43IewnQJBAJWKZllPgKuEBPwoEldHNS8nRu61D7HzxEzQ2xnfj+Nk
-2fgf1MAzzTRsikfGENhVsVWeqOcijWb6g5gsyCmlRpc=
------END RSA PRIVATE KEY-----
------BEGIN CERTIFICATE-----
-MIICsDCCAhmgAwIBAgIJAOqYOYFJfEEoMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
-BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
-aWRnaXRzIFB0eSBMdGQwHhcNMDgwNjI2MTgxNTUyWhcNMDkwNjI2MTgxNTUyWjBF
-MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50
-ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
-gQC89ZNxjTgWgq7Z1g0tJ65w+k7lNAj5IgjLb155UkUrz0XsHDnHFlbsVUg2Xtk6
-+bo2UEYIzN7cIm5ImpmyW/2z0J1IDVDlvR2xJ659xrE0v5c2cB6Tf9lnNTwpSoeK
-24Nd7Jwq4j9vk95fLrdqsBq0/KVlsCXeixS/CaqqduXfvwIDAQABo4GnMIGkMB0G
-A1UdDgQWBBTctMtI3EO9OjLI0x9Zo2ifkwIiNjB1BgNVHSMEbjBsgBTctMtI3EO9
-OjLI0x9Zo2ifkwIiNqFJpEcwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUt
-U3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAOqYOYFJ
-fEEoMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAQwa7jya/DfhaDn7E
-usPkpgIX8WCL2B1SqnRTXEZfBPPVq/cUmFGyEVRVATySRuMwi8PXbVcOhXXuocA+
-43W+iIsD9pXapCZhhOerCq18TC1dWK98vLUsoK8PMjB6e5H/O8bqojv0EeC+fyCw
-eSHj5jpC8iZKjCHBn+mAi4cQ514=
------END CERTIFICATE-----
diff --git a/Lib/test/xmltestdata/expat224_utf8_bug.xml b/Lib/test/xmltestdata/expat224_utf8_bug.xml
new file mode 100644
index 0000000..d66a8e6
--- /dev/null
+++ b/Lib/test/xmltestdata/expat224_utf8_bug.xml
@@ -0,0 +1,2 @@
+<a b='01234567890123456古人咏雪抽幽思骋妍辞竞险韵偶得一编奇绝辄擅美当时流声后代是以北门之风南山之雅梁园之简黄台之赋至今为作家称述尚矣及至洛阳之卧剡溪之兴灞桥之思亦皆传为故事钱塘沈履德先生隐居西湖两峰间孤高贞洁与雪同调方大雪满天皴肤粟背之际先生乃鹿中豹舄端居闭门或扶童曳杖踏遍六桥三竺时取古人诗讽咏之合唐宋元诸名家集句成诗得二百四十章联络通穿如出一人如呵一气气立于言表格备于篇中略无掇拾补凑之形非胸次包罗壮阔笔底驱走鲍谢欧苏诸公不能为此世称王荆公为集句擅长观其在钟山对雪仅题数篇未见有此噫嘻奇矣哉亦富矣哉予慕先生有袁安之节愧不能为慧可之立乃取新集命工传写使海内同好者知先生为博古传述之士而一新世人之耳目他日必有慕潜德阐幽光而剞劂以传者余实为之执殳矣

+弘治戊午仲冬望日慈溪杨子器衵于海虞官舍序毕诗部' />

diff --git a/Lib/tokenize.py b/Lib/tokenize.py
index d426cd2..6c857f8 100644
--- a/Lib/tokenize.py
+++ b/Lib/tokenize.py
@@ -306,8 +306,15 @@
     contline = None
     indents = [0]
 
+    last_line = b''
+    line = b''
     while 1:                                   # loop over lines in stream
         try:
+            # We capture the value of the line variable here because
+            # readline uses the empty string '' to signal end of input,
+            # hence `line` itself will always be overwritten at the end
+            # of this loop.
+            last_line = line
             line = readline()
         except StopIteration:
             line = ''
@@ -437,6 +444,9 @@
                            (lnum, pos), (lnum, pos+1), line)
                 pos += 1
 
+    # Add an implicit NEWLINE if the input doesn't end in one
+    if last_line and last_line[-1] not in '\r\n':
+        yield (NEWLINE, '', (lnum - 1, len(last_line)), (lnum - 1, len(last_line) + 1), '')
     for indent in indents[1:]:                 # pop remaining indent levels
         yield (DEDENT, '', (lnum, 0), (lnum, 0), '')
     yield (ENDMARKER, '', (lnum, 0), (lnum, 0), '')
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index 8f46101..a3f75af 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -526,7 +526,8 @@
         """Fail if the two objects are unequal as determined by their
            difference rounded to the given number of decimal places
            (default 7) and comparing to zero, or by comparing that the
-           between the two objects is more than the given delta.
+           difference 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 significant digit).
@@ -564,7 +565,7 @@
         """Fail if the two objects are equal as determined by their
            difference rounded to the given number of decimal places
            (default 7) and comparing to zero, or by comparing that the
-           between the two objects is less than the given delta.
+           difference 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 significant digit).
diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py
index 9163a1a..3c161b5 100644
--- a/Lib/unittest/loader.py
+++ b/Lib/unittest/loader.py
@@ -46,7 +46,7 @@
     _top_level_dir = None
 
     def loadTestsFromTestCase(self, testCaseClass):
-        """Return a suite of all tests cases contained in testCaseClass"""
+        """Return a suite of all test cases contained in testCaseClass"""
         if issubclass(testCaseClass, suite.TestSuite):
             raise TypeError("Test cases should not be derived from TestSuite." \
                                 " Maybe you meant to derive from TestCase?")
@@ -57,7 +57,7 @@
         return loaded_suite
 
     def loadTestsFromModule(self, module, use_load_tests=True):
-        """Return a suite of all tests cases contained in the given module"""
+        """Return a suite of all test cases contained in the given module"""
         tests = []
         for name in dir(module):
             obj = getattr(module, name)
@@ -75,7 +75,7 @@
         return tests
 
     def loadTestsFromName(self, name, module=None):
-        """Return a suite of all tests cases given a string specifier.
+        """Return a suite of all test cases given a string specifier.
 
         The name may resolve either to a module, a test case class, a
         test method within a test case class, or a callable object which
@@ -124,7 +124,7 @@
             raise TypeError("don't know how to make test from: %s" % obj)
 
     def loadTestsFromNames(self, names, module=None):
-        """Return a suite of all tests cases found using the given sequence
+        """Return a suite of all test cases found using the given sequence
         of string specifiers. See 'loadTestsFromName()'.
         """
         suites = [self.loadTestsFromName(name, module) for name in names]
diff --git a/Lib/unittest/signals.py b/Lib/unittest/signals.py
index e6a5fc5..9fbcc9f 100644
--- a/Lib/unittest/signals.py
+++ b/Lib/unittest/signals.py
@@ -10,7 +10,7 @@
     def __init__(self, default_handler):
         self.called = False
         self.original_handler = default_handler
-        if isinstance(default_handler, int):
+        if isinstance(default_handler, (int, long)):
             if default_handler == signal.SIG_DFL:
                 # Pretend it's signal.default_int_handler instead.
                 default_handler = signal.default_int_handler
diff --git a/Lib/unittest/test/test_loader.py b/Lib/unittest/test/test_loader.py
index 68e871c..d46ddc8 100644
--- a/Lib/unittest/test/test_loader.py
+++ b/Lib/unittest/test/test_loader.py
@@ -10,7 +10,7 @@
     ### Tests for TestLoader.loadTestsFromTestCase
     ################################################################
 
-    # "Return a suite of all tests cases contained in the TestCase-derived
+    # "Return a suite of all test cases contained in the TestCase-derived
     # class testCaseClass"
     def test_loadTestsFromTestCase(self):
         class Foo(unittest.TestCase):
@@ -23,7 +23,7 @@
         loader = unittest.TestLoader()
         self.assertEqual(loader.loadTestsFromTestCase(Foo), tests)
 
-    # "Return a suite of all tests cases contained in the TestCase-derived
+    # "Return a suite of all test cases contained in the TestCase-derived
     # class testCaseClass"
     #
     # Make sure it does the right thing even if no tests were found
@@ -36,7 +36,7 @@
         loader = unittest.TestLoader()
         self.assertEqual(loader.loadTestsFromTestCase(Foo), empty_suite)
 
-    # "Return a suite of all tests cases contained in the TestCase-derived
+    # "Return a suite of all test cases contained in the TestCase-derived
     # class testCaseClass"
     #
     # What happens if loadTestsFromTestCase() is given an object
@@ -57,7 +57,7 @@
         else:
             self.fail('Should raise TypeError')
 
-    # "Return a suite of all tests cases contained in the TestCase-derived
+    # "Return a suite of all test cases contained in the TestCase-derived
     # class testCaseClass"
     #
     # Make sure loadTestsFromTestCase() picks up the default test method
diff --git a/Lib/urllib.py b/Lib/urllib.py
index 7f70496..d85504a 100644
--- a/Lib/urllib.py
+++ b/Lib/urllib.py
@@ -1093,8 +1093,7 @@
     """splithost('//host[:port]/path') --> 'host[:port]', '/path'."""
     global _hostprog
     if _hostprog is None:
-        import re
-        _hostprog = re.compile('^//([^/?]*)(.*)$')
+        _hostprog = re.compile('//([^/#?]*)(.*)', re.DOTALL)
 
     match = _hostprog.match(url)
     if match:
@@ -1427,6 +1426,7 @@
     no_proxy_list = [proxy.strip() for proxy in no_proxy.split(',')]
     for name in no_proxy_list:
         if name:
+            name = name.lstrip('.')  # ignore leading dots
             name = re.escape(name)
             pattern = r'(.+\.)?%s$' % name
             if (re.match(pattern, hostonly, re.I)
diff --git a/Lib/uuid.py b/Lib/uuid.py
index 7432032..80d33c0 100644
--- a/Lib/uuid.py
+++ b/Lib/uuid.py
@@ -339,8 +339,9 @@
 def _ifconfig_getnode():
     """Get the hardware address on Unix by running ifconfig."""
     # This works on Linux ('' or '-a'), Tru64 ('-av'), but not all Unixes.
+    keywords = ('hwaddr', 'ether', 'address:', 'lladdr')
     for args in ('', '-a', '-av'):
-        mac = _find_mac('ifconfig', args, ['hwaddr', 'ether'], lambda i: i+1)
+        mac = _find_mac('ifconfig', args, keywords, lambda i: i+1)
         if mac:
             return mac
 
@@ -353,7 +354,20 @@
         return None
 
     # Try getting the MAC addr from arp based on our IP address (Solaris).
-    return _find_mac('arp', '-an', [ip_addr], lambda i: -1)
+    mac = _find_mac('arp', '-an', [ip_addr], lambda i: -1)
+    if mac:
+        return mac
+
+    # This works on OpenBSD
+    mac = _find_mac('arp', '-an', [ip_addr], lambda i: i+1)
+    if mac:
+        return mac
+
+    # This works on Linux, FreeBSD and NetBSD
+    mac = _find_mac('arp', '-an', ['(%s)' % ip_addr],
+                    lambda i: i+2)
+    if mac:
+        return mac
 
 def _lanscan_getnode():
     """Get the hardware address on Unix by running lanscan."""
@@ -405,7 +419,7 @@
         with pipe:
             for line in pipe:
                 value = line.split(':')[-1].strip().lower()
-                if re.match('([0-9a-f][0-9a-f]-){5}[0-9a-f][0-9a-f]', value):
+                if re.match('(?:[0-9a-f][0-9a-f]-){5}[0-9a-f][0-9a-f]$', value):
                     return int(value.replace('-', ''), 16)
 
 def _netbios_getnode():
@@ -508,6 +522,11 @@
 
 _node = None
 
+_NODE_GETTERS_WIN32 = [_windll_getnode, _netbios_getnode, _ipconfig_getnode]
+
+_NODE_GETTERS_UNIX = [_unixdll_getnode, _ifconfig_getnode, _arp_getnode,
+                      _lanscan_getnode, _netstat_getnode]
+
 def getnode():
     """Get the hardware address as a 48-bit positive integer.
 
@@ -523,18 +542,19 @@
 
     import sys
     if sys.platform == 'win32':
-        getters = [_windll_getnode, _netbios_getnode, _ipconfig_getnode]
+        getters = _NODE_GETTERS_WIN32
     else:
-        getters = [_unixdll_getnode, _ifconfig_getnode, _arp_getnode,
-                   _lanscan_getnode, _netstat_getnode]
+        getters = _NODE_GETTERS_UNIX
 
     for getter in getters + [_random_getnode]:
         try:
             _node = getter()
         except:
             continue
-        if _node is not None:
+        if (_node is not None) and (0 <= _node < (1 << 48)):
             return _node
+    assert False, '_random_getnode() returned invalid value: {}'.format(_node)
+
 
 _last_timestamp = None
 
diff --git a/Lib/warnings.py b/Lib/warnings.py
index b0d53aa..84f111d 100644
--- a/Lib/warnings.py
+++ b/Lib/warnings.py
@@ -84,10 +84,10 @@
            "category must be a class"
     assert issubclass(category, Warning), "category must be a Warning subclass"
     assert isinstance(module, basestring), "module must be a string"
-    assert isinstance(lineno, int) and lineno >= 0, \
+    assert isinstance(lineno, (int, long)) and lineno >= 0, \
            "lineno must be an int >= 0"
     item = (action, re.compile(message, re.I), category,
-            re.compile(module), lineno)
+            re.compile(module), int(lineno))
     if append:
         filters.append(item)
     else:
@@ -105,9 +105,9 @@
     """
     assert action in ("error", "ignore", "always", "default", "module",
                       "once"), "invalid action: %r" % (action,)
-    assert isinstance(lineno, int) and lineno >= 0, \
+    assert isinstance(lineno, (int, long)) and lineno >= 0, \
            "lineno must be an int >= 0"
-    item = (action, None, category, None, lineno)
+    item = (action, None, category, None, int(lineno))
     if append:
         filters.append(item)
     else:
@@ -309,9 +309,12 @@
 
     def __init__(self, message, category, filename, lineno, file=None,
                     line=None):
-        local_values = locals()
-        for attr in self._WARNING_DETAILS:
-            setattr(self, attr, local_values[attr])
+        self.message = message
+        self.category = category
+        self.filename = filename
+        self.lineno = lineno
+        self.file = file
+        self.line = line
         self._category_name = category.__name__ if category else None
 
     def __str__(self):
diff --git a/Lib/weakref.py b/Lib/weakref.py
index ca37f87..3e1fb81 100644
--- a/Lib/weakref.py
+++ b/Lib/weakref.py
@@ -18,7 +18,8 @@
      proxy,
      CallableProxyType,
      ProxyType,
-     ReferenceType)
+     ReferenceType,
+     _remove_dead_weakref)
 
 from _weakrefset import WeakSet, _IterationGuard
 
@@ -52,13 +53,15 @@
         args = args[1:]
         if len(args) > 1:
             raise TypeError('expected at most 1 arguments, got %d' % len(args))
-        def remove(wr, selfref=ref(self)):
+        def remove(wr, selfref=ref(self), _atomic_removal=_remove_dead_weakref):
             self = selfref()
             if self is not None:
                 if self._iterating:
                     self._pending_removals.append(wr.key)
                 else:
-                    del self.data[wr.key]
+                    # Atomic removal is necessary since this function
+                    # can be called asynchronously by the GC
+                    _atomic_removal(self.data, wr.key)
         self._remove = remove
         # A list of keys to be removed
         self._pending_removals = []
@@ -71,9 +74,12 @@
         # We shouldn't encounter any KeyError, because this method should
         # always be called *before* mutating the dict.
         while l:
-            del d[l.pop()]
+            key = l.pop()
+            _remove_dead_weakref(d, key)
 
     def __getitem__(self, key):
+        if self._pending_removals:
+            self._commit_removals()
         o = self.data[key]()
         if o is None:
             raise KeyError, key
@@ -86,6 +92,8 @@
         del self.data[key]
 
     def __contains__(self, key):
+        if self._pending_removals:
+            self._commit_removals()
         try:
             o = self.data[key]()
         except KeyError:
@@ -93,6 +101,8 @@
         return o is not None
 
     def has_key(self, key):
+        if self._pending_removals:
+            self._commit_removals()
         try:
             o = self.data[key]()
         except KeyError:
@@ -113,6 +123,8 @@
         self.data.clear()
 
     def copy(self):
+        if self._pending_removals:
+            self._commit_removals()
         new = WeakValueDictionary()
         for key, wr in self.data.items():
             o = wr()
@@ -124,6 +136,8 @@
 
     def __deepcopy__(self, memo):
         from copy import deepcopy
+        if self._pending_removals:
+            self._commit_removals()
         new = self.__class__()
         for key, wr in self.data.items():
             o = wr()
@@ -132,6 +146,8 @@
         return new
 
     def get(self, key, default=None):
+        if self._pending_removals:
+            self._commit_removals()
         try:
             wr = self.data[key]
         except KeyError:
@@ -145,6 +161,8 @@
                 return o
 
     def items(self):
+        if self._pending_removals:
+            self._commit_removals()
         L = []
         for key, wr in self.data.items():
             o = wr()
@@ -153,6 +171,8 @@
         return L
 
     def iteritems(self):
+        if self._pending_removals:
+            self._commit_removals()
         with _IterationGuard(self):
             for wr in self.data.itervalues():
                 value = wr()
@@ -160,6 +180,8 @@
                     yield wr.key, value
 
     def iterkeys(self):
+        if self._pending_removals:
+            self._commit_removals()
         with _IterationGuard(self):
             for k in self.data.iterkeys():
                 yield k
@@ -176,11 +198,15 @@
         keep the values around longer than needed.
 
         """
+        if self._pending_removals:
+            self._commit_removals()
         with _IterationGuard(self):
             for wr in self.data.itervalues():
                 yield wr
 
     def itervalues(self):
+        if self._pending_removals:
+            self._commit_removals()
         with _IterationGuard(self):
             for wr in self.data.itervalues():
                 obj = wr()
@@ -202,24 +228,27 @@
         try:
             o = self.data.pop(key)()
         except KeyError:
+            o = None
+        if o is None:
             if args:
                 return args[0]
-            raise
-        if o is None:
-            raise KeyError, key
+            else:
+                raise KeyError, key
         else:
             return o
 
     def setdefault(self, key, default=None):
+        if self._pending_removals:
+            self._commit_removals()
         try:
-            wr = self.data[key]
+            o = self.data[key]()
         except KeyError:
-            if self._pending_removals:
-                self._commit_removals()
+            o = None
+        if o is None:
             self.data[key] = KeyedRef(default, self._remove, key)
             return default
         else:
-            return wr()
+            return o
 
     def update(*args, **kwargs):
         if not args:
@@ -251,9 +280,13 @@
         keep the values around longer than needed.
 
         """
+        if self._pending_removals:
+            self._commit_removals()
         return self.data.values()
 
     def values(self):
+        if self._pending_removals:
+            self._commit_removals()
         L = []
         for wr in self.data.values():
             o = wr()
diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py
index 2389179..15eeb66 100755
--- a/Lib/webbrowser.py
+++ b/Lib/webbrowser.py
@@ -319,11 +319,10 @@
 class Opera(UnixBrowser):
     "Launcher class for Opera browser."
 
-    raise_opts = ["-noraise", ""]
-    remote_args = ['-remote', 'openURL(%s%action)']
+    remote_args = ['%action', '%s']
     remote_action = ""
-    remote_action_newwin = ",new-window"
-    remote_action_newtab = ",new-page"
+    remote_action_newwin = "--new-window"
+    remote_action_newtab = ""
     background = True
 
 
diff --git a/Lib/xml/etree/ElementTree.py b/Lib/xml/etree/ElementTree.py
index cf6402f..dca6910 100644
--- a/Lib/xml/etree/ElementTree.py
+++ b/Lib/xml/etree/ElementTree.py
@@ -1450,6 +1450,8 @@
         self._tail = 1
         return self._last
 
+_sentinel = ['sentinel']
+
 ##
 # Element structure builder for XML source data, based on the
 # <b>expat</b> parser.
@@ -1465,7 +1467,11 @@
 
 class XMLParser(object):
 
-    def __init__(self, html=0, target=None, encoding=None):
+    def __init__(self, html=_sentinel, target=None, encoding=None):
+        if html is not _sentinel:
+            warnings.warnpy3k(
+                "The html argument of XMLParser() is deprecated",
+                DeprecationWarning, stacklevel=2)
         try:
             from xml.parsers import expat
         except ImportError:
@@ -1617,7 +1623,7 @@
                     pubid = pubid[1:-1]
                 if hasattr(self.target, "doctype"):
                     self.target.doctype(name, pubid, system[1:-1])
-                elif self.doctype is not self._XMLParser__doctype:
+                elif self.doctype != self._XMLParser__doctype:
                     # warn about deprecated call
                     self._XMLParser__doctype(name, pubid, system[1:-1])
                     self.doctype(name, pubid, system[1:-1])
diff --git a/Lib/xml/sax/expatreader.py b/Lib/xml/sax/expatreader.py
index 21c9db9..bae663b 100644
--- a/Lib/xml/sax/expatreader.py
+++ b/Lib/xml/sax/expatreader.py
@@ -105,9 +105,16 @@
         source = saxutils.prepare_input_source(source)
 
         self._source = source
-        self.reset()
-        self._cont_handler.setDocumentLocator(ExpatLocator(self))
-        xmlreader.IncrementalParser.parse(self, source)
+        try:
+            self.reset()
+            self._cont_handler.setDocumentLocator(ExpatLocator(self))
+            xmlreader.IncrementalParser.parse(self, source)
+        except:
+            # bpo-30264: Close the source on error to not leak resources:
+            # xml.sax.parse() doesn't give access to the underlying parser
+            # to the caller
+            self._close_source()
+            raise
 
     def prepareParser(self, source):
         if source.getSystemId() is not None:
@@ -216,6 +223,17 @@
             # FIXME: when to invoke error()?
             self._err_handler.fatalError(exc)
 
+    def _close_source(self):
+        source = self._source
+        try:
+            file = source.getCharacterStream()
+            if file is not None:
+                file.close()
+        finally:
+            file = source.getByteStream()
+            if file is not None:
+                file.close()
+
     def close(self):
         if (self._entity_stack or self._parser is None or
             isinstance(self._parser, _ClosedParser)):
@@ -235,6 +253,7 @@
                 parser.ErrorColumnNumber = self._parser.ErrorColumnNumber
                 parser.ErrorLineNumber = self._parser.ErrorLineNumber
                 self._parser = parser
+            self._close_source()
 
     def _reset_cont_handler(self):
         self._parser.ProcessingInstructionHandler = \
diff --git a/Lib/zipfile.py b/Lib/zipfile.py
index 1d10650..3ab66ce 100644
--- a/Lib/zipfile.py
+++ b/Lib/zipfile.py
@@ -772,7 +772,6 @@
                 # set the modified flag so central directory gets written
                 # even if no files are added to the archive
                 self._didModify = True
-                self._start_disk = self.fp.tell()
             elif key == 'a':
                 try:
                     # See if file is a zip file
@@ -786,7 +785,6 @@
                     # set the modified flag so central directory gets written
                     # even if no files are added to the archive
                     self._didModify = True
-                    self._start_disk = self.fp.tell()
             else:
                 raise RuntimeError('Mode must be "r", "w" or "a"')
         except:
@@ -817,18 +815,17 @@
         offset_cd = endrec[_ECD_OFFSET]         # offset of central directory
         self._comment = endrec[_ECD_COMMENT]    # archive comment
 
-        # self._start_disk:  Position of the start of ZIP archive
-        # It is zero, unless ZIP was concatenated to another file
-        self._start_disk = endrec[_ECD_LOCATION] - size_cd - offset_cd
+        # "concat" is zero, unless zip was concatenated to another file
+        concat = endrec[_ECD_LOCATION] - size_cd - offset_cd
         if endrec[_ECD_SIGNATURE] == stringEndArchive64:
             # If Zip64 extension structures are present, account for them
-            self._start_disk -= (sizeEndCentDir64 + sizeEndCentDir64Locator)
+            concat -= (sizeEndCentDir64 + sizeEndCentDir64Locator)
 
         if self.debug > 2:
-            inferred = self._start_disk + offset_cd
-            print "given, inferred, offset", offset_cd, inferred, self._start_disk
+            inferred = concat + offset_cd
+            print "given, inferred, offset", offset_cd, inferred, concat
         # self.start_dir:  Position of start of central directory
-        self.start_dir = offset_cd + self._start_disk
+        self.start_dir = offset_cd + concat
         fp.seek(self.start_dir, 0)
         data = fp.read(size_cd)
         fp = cStringIO.StringIO(data)
@@ -858,7 +855,7 @@
                                      t>>11, (t>>5)&0x3F, (t&0x1F) * 2 )
 
             x._decodeExtra()
-            x.header_offset = x.header_offset + self._start_disk
+            x.header_offset = x.header_offset + concat
             x.filename = x._decodeFilename()
             self.filelist.append(x)
             self.NameToInfo[x.filename] = x
@@ -1201,7 +1198,7 @@
                 raise RuntimeError('Compressed size larger than uncompressed size')
         # Seek backwards and write file header (which will now include
         # correct CRC and file sizes)
-        position = self.fp.tell() # Preserve current position in file
+        position = self.fp.tell()       # Preserve current position in file
         self.fp.seek(zinfo.header_offset, 0)
         self.fp.write(zinfo.FileHeader(zip64))
         self.fp.seek(position, 0)
@@ -1287,10 +1284,11 @@
                         file_size = zinfo.file_size
                         compress_size = zinfo.compress_size
 
-                    header_offset = zinfo.header_offset - self._start_disk
-                    if header_offset > ZIP64_LIMIT:
-                        extra.append(header_offset)
+                    if zinfo.header_offset > ZIP64_LIMIT:
+                        extra.append(zinfo.header_offset)
                         header_offset = 0xffffffffL
+                    else:
+                        header_offset = zinfo.header_offset
 
                     extra_data = zinfo.extra
                     if extra:
@@ -1334,7 +1332,7 @@
                 # Write end-of-zip-archive record
                 centDirCount = len(self.filelist)
                 centDirSize = pos2 - pos1
-                centDirOffset = pos1 - self._start_disk
+                centDirOffset = pos1
                 requires_zip64 = None
                 if centDirCount > ZIP_FILECOUNT_LIMIT:
                     requires_zip64 = "Files count"
diff --git a/Mac/BuildScript/README.txt b/Mac/BuildScript/README.txt
index 6f6b20a..32e7edc 100644
--- a/Mac/BuildScript/README.txt
+++ b/Mac/BuildScript/README.txt
@@ -1,7 +1,15 @@
 Building a Python Mac OS X distribution
 =======================================
 
-The ``build-install.py`` script creates Python distributions, including
+WARNING
+-------
+
+The instructions in this README are incomplete and not up-to-date.
+In particular, they do not explain how to create a modern flat installer
+package from the now obsolete bundle-format installer package produced
+by ``build-installer.py``.
+
+The ``build-installer.py`` script creates Python distributions, including
 certain third-party libraries as necessary.  It builds a complete 
 framework-based Python out-of-tree, installs it in a funny place with 
 $DESTROOT, massages that installation to remove .pyc files and such, creates 
diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index 0951e5f..b97d55b 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -1,30 +1,36 @@
 #!/usr/bin/env python
 """
-This script is used to build "official" universal installers on Mac OS X.
-It requires at least Mac OS X 10.5, Xcode 3, and the 10.4u SDK for
-32-bit builds.  64-bit or four-way universal builds require at least
-OS X 10.5 and the 10.5 SDK.
+This script is used to build "official" universal installers on macOS.
+
+NEW for 3.6.5:
+- support Intel 64-bit-only () and 32-bit-only installer builds
+- build and link with private Tcl/Tk 8.6 for 10.9+ builds
+- deprecate use of explicit SDK (--sdk-path=) since all but the oldest
+  versions of Xcode support implicit setting of an SDK via environment
+  variables (SDKROOT and friends, see the xcrun man page for more info).
+  The SDK stuff was primarily needed for building universal installers
+  for 10.4; so as of 3.6.5, building installers for 10.4 is no longer
+  supported with build-installer.
+- use generic "gcc" as compiler (CC env var) rather than "gcc-4.2"
 
 Please ensure that this script keeps working with Python 2.5, to avoid
-bootstrap issues (/usr/bin/python is Python 2.5 on OSX 10.5).  Sphinx,
-which is used to build the documentation, currently requires at least
-Python 2.4.  However, as of Python 3.4.1, Doc builds require an external
-sphinx-build and the current versions of Sphinx now require at least
-Python 2.6.
+bootstrap issues (/usr/bin/python is Python 2.5 on OSX 10.5).  Doc builds
+use current versions of Sphinx and require a reasonably current python3.
+Sphinx and dependencies are installed into a venv using the python3's pip
+so will fetch them from PyPI if necessary.  Since python3 is now used for
+Sphinx, build-installer.py should also be converted to use python3!
 
-In addition to what is supplied with OS X 10.5+ and Xcode 3+, the script
-requires an installed version of hg and a third-party version of
-Tcl/Tk 8.4 (for OS X 10.4 and 10.5 deployment targets) or Tcl/TK 8.5
+For 10.9 or greater deployment targets, build-installer builds and links
+with its own copy of Tcl/Tk 8.5 and the rest of this paragraph does not
+apply.  Otherwise, build-installer requires an installed third-party version
+of Tcl/Tk 8.4 (for OS X 10.4 and 10.5 deployment targets) or Tcl/TK 8.5
 (for 10.6 or later) installed in /Library/Frameworks.  When installed,
 the Python built by this script will attempt to dynamically link first to
 Tcl and Tk frameworks in /Library/Frameworks if available otherwise fall
 back to the ones in /System/Library/Framework.  For the build, we recommend
-installing the most recent ActiveTcl 8.4 or 8.5 version.
-
-32-bit-only installer builds are still possible on OS X 10.4 with Xcode 2.5
-and the installation of additional components, such as a newer Python
-(2.5 is needed for Python parser updates), hg, and for the documentation
-build either svn (pre-3.4.1) or sphinx-build (3.4.1 and later).
+installing the most recent ActiveTcl 8.5 or 8.4 version, depending
+on the deployment target.  The actual version linked to depends on the
+path of /Library/Frameworks/{Tcl,Tk}.framework/Versions/Current.
 
 Usage: see USAGE variable in the script.
 """
@@ -101,6 +107,7 @@
 
 FW_PREFIX = ["Library", "Frameworks", "Python.framework"]
 FW_VERSION_PREFIX = "--undefined--" # initialized in parseOptions
+FW_SSL_DIRECTORY = "--undefined--" # initialized in parseOptions
 
 # The directory we'll use to create the build (will be erased and recreated)
 WORKDIR = "/tmp/_py"
@@ -110,32 +117,19 @@
 DEPSRC = os.path.join(WORKDIR, 'third-party')
 DEPSRC = os.path.expanduser('~/Universal/other-sources')
 
-# Location of the preferred SDK
-
-### There are some issues with the SDK selection below here,
-### The resulting binary doesn't work on all platforms that
-### it should. Always default to the 10.4u SDK until that
-### issue is resolved.
-###
-##if int(os.uname()[2].split('.')[0]) == 8:
-##    # Explicitly use the 10.4u (universal) SDK when
-##    # building on 10.4, the system headers are not
-##    # useable for a universal build
-##    SDKPATH = "/Developer/SDKs/MacOSX10.4u.sdk"
-##else:
-##    SDKPATH = "/"
-
-SDKPATH = "/Developer/SDKs/MacOSX10.4u.sdk"
-
 universal_opts_map = { '32-bit': ('i386', 'ppc',),
                        '64-bit': ('x86_64', 'ppc64',),
                        'intel':  ('i386', 'x86_64'),
+                       'intel-32':  ('i386',),
+                       'intel-64':  ('x86_64',),
                        '3-way':  ('ppc', 'i386', 'x86_64'),
                        'all':    ('i386', 'ppc', 'x86_64', 'ppc64',) }
 default_target_map = {
         '64-bit': '10.5',
         '3-way': '10.5',
         'intel': '10.5',
+        'intel-32': '10.4',
+        'intel-64': '10.5',
         'all': '10.5',
 }
 
@@ -153,23 +147,23 @@
         ))))
 
 # $MACOSX_DEPLOYMENT_TARGET -> minimum OS X level
-DEPTARGET = '10.3'
+DEPTARGET = '10.5'
 
 def getDeptargetTuple():
     return tuple([int(n) for n in DEPTARGET.split('.')[0:2]])
 
 def getTargetCompilers():
     target_cc_map = {
-        '10.3': ('gcc-4.0', 'g++-4.0'),
         '10.4': ('gcc-4.0', 'g++-4.0'),
-        '10.5': ('gcc-4.2', 'g++-4.2'),
-        '10.6': ('gcc-4.2', 'g++-4.2'),
+        '10.5': ('gcc', 'g++'),
+        '10.6': ('gcc', 'g++'),
     }
-    return target_cc_map.get(DEPTARGET, ('clang', 'clang++') )
+    return target_cc_map.get(DEPTARGET, ('gcc', 'g++') )
 
 CC, CXX = getTargetCompilers()
 
-PYTHON_3 = getVersionMajorMinor() >= (3, 0)
+PYTHON_2 = getVersionMajorMinor()[0] == 2
+PYTHON_3 = getVersionMajorMinor()[0] == 3
 
 USAGE = textwrap.dedent("""\
     Usage: build_python [options]
@@ -179,9 +173,9 @@
     -b DIR
     --build-dir=DIR:     Create build here (default: %(WORKDIR)r)
     --third-party=DIR:   Store third-party sources here (default: %(DEPSRC)r)
-    --sdk-path=DIR:      Location of the SDK (default: %(SDKPATH)r)
+    --sdk-path=DIR:      Location of the SDK (deprecated, use SDKROOT env variable)
     --src-dir=DIR:       Location of the Python sources (default: %(SRCDIR)r)
-    --dep-target=10.n    OS X deployment target (default: %(DEPTARGET)r)
+    --dep-target=10.n    macOS deployment target (default: %(DEPTARGET)r)
     --universal-archs=x  universal architectures (options: %(UNIVERSALOPTS)r, default: %(UNIVERSALARCHS)r)
 """)% globals()
 
@@ -193,6 +187,11 @@
 #                       '/Library/Frameworks/Tk.framework/Versions/8.5/Tk']
 EXPECTED_SHARED_LIBS = {}
 
+# Are we building and linking with our own copy of Tcl/TK?
+#   For now, do so if deployment target is 10.9+.
+def internalTk():
+    return getDeptargetTuple() >= (10, 9)
+
 # List of names of third party software built with this installer.
 # The names will be inserted into the rtf version of the License.
 THIRD_PARTY_LIBS = []
@@ -206,61 +205,27 @@
 
     LT_10_5 = bool(getDeptargetTuple() < (10, 5))
 
-    if not (10, 5) < getDeptargetTuple() < (10, 10):
-        # The OpenSSL libs shipped with OS X 10.5 and earlier are
-        # hopelessly out-of-date and do not include Apple's tie-in to
-        # the root certificates in the user and system keychains via TEA
-        # that was introduced in OS X 10.6.  Note that this applies to
-        # programs built and linked with a 10.5 SDK even when run on
-        # newer versions of OS X.
-        #
-        # Dealing with CAs is messy.  For now, just supply a
-        # local libssl and libcrypto for the older installer variants
-        # (e.g. the python.org 10.5+ 32-bit-only installer) that use the
-        # same default ssl certfile location as the system libs do:
-        #   /System/Library/OpenSSL/cert.pem
-        # Then at least TLS connections can be negotiated with sites that
-        # use sha-256 certs like python.org, assuming the proper CA certs
-        # have been supplied.  The default CA cert management issues for
-        # 10.5 and earlier builds are the same as before, other than it is
-        # now more obvious with cert checking enabled by default in the
-        # standard library.
-        #
-        # For builds with 10.6 through 10.9 SDKs,
-        # continue to use the deprecated but
-        # less out-of-date Apple 0.9.8 libs for now.  While they are less
-        # secure than using an up-to-date 1.0.1 version, doing so
-        # avoids the big problems of forcing users to have to manage
-        # default CAs themselves, thanks to the Apple libs using private TEA
-        # APIs for cert validation from keychains if validation using the
-        # standard OpenSSL locations (/System/Library/OpenSSL, normally empty)
-        # fails.
-        #
-        # Since Apple removed the header files for the deprecated system
-        # OpenSSL as of the Xcode 7 release (for OS X 10.10+), we do not
-        # have much choice but to build our own copy here, too.
+    # Since Apple removed the header files for the deprecated system
+    # OpenSSL as of the Xcode 7 release (for OS X 10.10+), we do not
+    # have much choice but to build our own copy here, too.
 
-        result.extend([
+    result.extend([
           dict(
-              name="OpenSSL 1.0.2j",
-              url="https://www.openssl.org/source/openssl-1.0.2j.tar.gz",
-              checksum='96322138f0b69e61b7212bc53d5e912b',
-              patches=[
-                  "openssl_sdk_makedepend.patch",
-                   ],
+              name="OpenSSL 1.0.2p",
+              url="https://www.openssl.org/source/openssl-1.0.2p.tar.gz",
+              checksum='ac5eb30bf5798aa14b1ae6d0e7da58df',
               buildrecipe=build_universal_openssl,
               configure=None,
               install=None,
           ),
-        ])
+    ])
 
-#   Disable for now
-    if False:   # if getDeptargetTuple() > (10, 5):
+    if internalTk():
         result.extend([
           dict(
-              name="Tcl 8.5.15",
-              url="ftp://ftp.tcl.tk/pub/tcl//tcl8_5/tcl8.5.15-src.tar.gz",
-              checksum='f3df162f92c69b254079c4d0af7a690f',
+              name="Tcl 8.6.8",
+              url="ftp://ftp.tcl.tk/pub/tcl//tcl8_6/tcl8.6.8-src.tar.gz",
+              checksum='81656d3367af032e0ae6157eff134f89',
               buildDir="unix",
               configure_pre=[
                     '--enable-shared',
@@ -270,15 +235,15 @@
               useLDFlags=False,
               install='make TCL_LIBRARY=%(TCL_LIBRARY)s && make install TCL_LIBRARY=%(TCL_LIBRARY)s DESTDIR=%(DESTDIR)s'%{
                   "DESTDIR": shellQuote(os.path.join(WORKDIR, 'libraries')),
-                  "TCL_LIBRARY": shellQuote('/Library/Frameworks/Python.framework/Versions/%s/lib/tcl8.5'%(getVersion())),
+                  "TCL_LIBRARY": shellQuote('/Library/Frameworks/Python.framework/Versions/%s/lib/tcl8.6'%(getVersion())),
                   },
               ),
           dict(
-              name="Tk 8.5.15",
-              url="ftp://ftp.tcl.tk/pub/tcl//tcl8_5/tk8.5.15-src.tar.gz",
-              checksum='55b8e33f903210a4e1c8bce0f820657f',
+              name="Tk 8.6.8",
+              url="ftp://ftp.tcl.tk/pub/tcl//tcl8_6/tk8.6.8-src.tar.gz",
+              checksum='5e0faecba458ee1386078fb228d008ba',
               patches=[
-                  "issue19373_tk_8_5_15_source.patch",
+                  "tk868_on_10_8_10_9.patch",
                    ],
               buildDir="unix",
               configure_pre=[
@@ -290,8 +255,8 @@
               useLDFlags=False,
               install='make TCL_LIBRARY=%(TCL_LIBRARY)s TK_LIBRARY=%(TK_LIBRARY)s && make install TCL_LIBRARY=%(TCL_LIBRARY)s TK_LIBRARY=%(TK_LIBRARY)s DESTDIR=%(DESTDIR)s'%{
                   "DESTDIR": shellQuote(os.path.join(WORKDIR, 'libraries')),
-                  "TCL_LIBRARY": shellQuote('/Library/Frameworks/Python.framework/Versions/%s/lib/tcl8.5'%(getVersion())),
-                  "TK_LIBRARY": shellQuote('/Library/Frameworks/Python.framework/Versions/%s/lib/tk8.5'%(getVersion())),
+                  "TCL_LIBRARY": shellQuote('/Library/Frameworks/Python.framework/Versions/%s/lib/tcl8.6'%(getVersion())),
+                  "TK_LIBRARY": shellQuote('/Library/Frameworks/Python.framework/Versions/%s/lib/tk8.6'%(getVersion())),
                   },
                 ),
         ])
@@ -299,9 +264,9 @@
     if PYTHON_3:
         result.extend([
           dict(
-              name="XZ 5.0.5",
-              url="http://tukaani.org/xz/xz-5.0.5.tar.gz",
-              checksum='19d924e066b6fff0bc9d1981b4e53196',
+              name="XZ 5.2.3",
+              url="http://tukaani.org/xz/xz-5.2.3.tar.gz",
+              checksum='ef68674fb47a8b8e741b34e429d86e9d',
               configure_pre=[
                     '--disable-dependency-tracking',
               ]
@@ -344,12 +309,14 @@
                   ),
           ),
           dict(
-              name="SQLite 3.8.3.1",
-              url="http://www.sqlite.org/2014/sqlite-autoconf-3080301.tar.gz",
-              checksum='509ff98d8dc9729b618b7e96612079c6',
+              name="SQLite 3.22.0",
+              url="https://www.sqlite.org/2018/sqlite-autoconf-3220000.tar.gz",
+              checksum='96b5648d542e8afa6ab7ffb8db8ddc3d',
               extra_cflags=('-Os '
+                            '-DSQLITE_ENABLE_FTS5 '
                             '-DSQLITE_ENABLE_FTS4 '
                             '-DSQLITE_ENABLE_FTS3_PARENTHESIS '
+                            '-DSQLITE_ENABLE_JSON1 '
                             '-DSQLITE_ENABLE_RTREE '
                             '-DSQLITE_TCL=0 '
                  '%s' % ('','-DSQLITE_WITHOUT_ZONEMALLOC ')[LT_10_5]),
@@ -370,11 +337,10 @@
               url="http://bzip.org/1.0.6/bzip2-1.0.6.tar.gz",
               checksum='00b516f4704d4a7cb50a1d97e6e8e15b',
               configure=None,
-              install='make install CC=%s CXX=%s, PREFIX=%s/usr/local/ CFLAGS="-arch %s -isysroot %s"'%(
+              install='make install CC=%s CXX=%s, PREFIX=%s/usr/local/ CFLAGS="-arch %s"'%(
                   CC, CXX,
                   shellQuote(os.path.join(WORKDIR, 'libraries')),
                   ' -arch '.join(ARCHLIST),
-                  SDKPATH,
               ),
           ),
           dict(
@@ -382,11 +348,10 @@
               url="http://www.gzip.org/zlib/zlib-1.2.3.tar.gz",
               checksum='debc62758716a169df9f62e6ab2bc634',
               configure=None,
-              install='make install CC=%s CXX=%s, prefix=%s/usr/local/ CFLAGS="-arch %s -isysroot %s"'%(
+              install='make install CC=%s CXX=%s, prefix=%s/usr/local/ CFLAGS="-arch %s"'%(
                   CC, CXX,
                   shellQuote(os.path.join(WORKDIR, 'libraries')),
                   ' -arch '.join(ARCHLIST),
-                  SDKPATH,
               ),
           ),
           dict(
@@ -433,8 +398,7 @@
             source="/Library/Frameworks/Python.framework",
             readme="""\
                 This package installs Python.framework, that is the python
-                interpreter and the standard library. This also includes Python
-                wrappers for lots of Mac OS X API's.
+                interpreter and the standard library.
             """,
             postflight="scripts/postflight.framework",
             selected='selected',
@@ -511,24 +475,6 @@
         ),
     ]
 
-    if getDeptargetTuple() < (10, 4) and not PYTHON_3:
-        result.append(
-            dict(
-                name="PythonSystemFixes",
-                long_name="Fix system Python",
-                readme="""\
-                    This package updates the system python installation on
-                    Mac OS X 10.3 to ensure that you can build new python extensions
-                    using that copy of python after installing this version.
-                    """,
-                postflight="../Tools/fixapplepython23.py",
-                topdir="/Library/Frameworks/Python.framework",
-                source="/empty-dir",
-                required=False,
-                selected=unselected_for_python3,
-            )
-        )
-
     return result
 
 def fatal(msg):
@@ -577,7 +523,7 @@
     """
     try:
         f = open(configfile, "r")
-    except:
+    except OSError:
         fatal("Framework configuration file not found: %s" % configfile)
 
     for l in f:
@@ -593,55 +539,54 @@
     Check that we're running on a supported system.
     """
 
-    if sys.version_info[0:2] < (2, 4):
-        fatal("This script must be run with Python 2.4 or later")
+    if sys.version_info[0:2] < (2, 5):
+        fatal("This script must be run with Python 2.5 (or later)")
 
     if platform.system() != 'Darwin':
-        fatal("This script should be run on a Mac OS X 10.4 (or later) system")
+        fatal("This script should be run on a macOS 10.5 (or later) system")
 
     if int(platform.release().split('.')[0]) < 8:
-        fatal("This script should be run on a Mac OS X 10.4 (or later) system")
-
-    if not os.path.exists(SDKPATH):
-        fatal("Please install the latest version of Xcode and the %s SDK"%(
-            os.path.basename(SDKPATH[:-4])))
+        fatal("This script should be run on a macOS 10.5 (or later) system")
 
     # Because we only support dynamic load of only one major/minor version of
+    # Tcl/Tk, if we are not using building and using our own private copy of
     # Tcl/Tk, ensure:
-    # 1. there are no user-installed frameworks of Tcl/Tk with version
-    #       higher than the Apple-supplied system version in
-    #       SDKROOT/System/Library/Frameworks
-    # 2. there is a user-installed framework (usually ActiveTcl) in (or linked
-    #       in) SDKROOT/Library/Frameworks with the same version as the system
-    #       version. This allows users to choose to install a newer patch level.
+    # 1. there is a user-installed framework (usually ActiveTcl) in (or linked
+    #       in) SDKROOT/Library/Frameworks.  As of Python 3.6.5, we no longer
+    #       enforce that the version of the user-installed framework also
+    #       exists in the system-supplied Tcl/Tk frameworks.  Time to support
+    #       Tcl/Tk 8.6 even if Apple does not.
+    if not internalTk():
+        frameworks = {}
+        for framework in ['Tcl', 'Tk']:
+            fwpth = 'Library/Frameworks/%s.framework/Versions/Current' % framework
+            libfw = os.path.join('/', fwpth)
+            usrfw = os.path.join(os.getenv('HOME'), fwpth)
+            frameworks[framework] = os.readlink(libfw)
+            if not os.path.exists(libfw):
+                fatal("Please install a link to a current %s %s as %s so "
+                        "the user can override the system framework."
+                        % (framework, frameworks[framework], libfw))
+            if os.path.exists(usrfw):
+                fatal("Please rename %s to avoid possible dynamic load issues."
+                        % usrfw)
 
-    frameworks = {}
-    for framework in ['Tcl', 'Tk']:
-        fwpth = 'Library/Frameworks/%s.framework/Versions/Current' % framework
-        sysfw = os.path.join(SDKPATH, 'System', fwpth)
-        libfw = os.path.join(SDKPATH, fwpth)
-        usrfw = os.path.join(os.getenv('HOME'), fwpth)
-        frameworks[framework] = os.readlink(sysfw)
-        if not os.path.exists(libfw):
-            fatal("Please install a link to a current %s %s as %s so "
-                    "the user can override the system framework."
-                    % (framework, frameworks[framework], libfw))
-        if os.readlink(libfw) != os.readlink(sysfw):
-            fatal("Version of %s must match %s" % (libfw, sysfw) )
-        if os.path.exists(usrfw):
-            fatal("Please rename %s to avoid possible dynamic load issues."
-                    % usrfw)
+        if frameworks['Tcl'] != frameworks['Tk']:
+            fatal("The Tcl and Tk frameworks are not the same version.")
 
-    if frameworks['Tcl'] != frameworks['Tk']:
-        fatal("The Tcl and Tk frameworks are not the same version.")
+        print(" -- Building with external Tcl/Tk %s frameworks"
+                    % frameworks['Tk'])
 
-    # add files to check after build
-    EXPECTED_SHARED_LIBS['_tkinter.so'] = [
-            "/Library/Frameworks/Tcl.framework/Versions/%s/Tcl"
-                % frameworks['Tcl'],
-            "/Library/Frameworks/Tk.framework/Versions/%s/Tk"
-                % frameworks['Tk'],
-            ]
+        # add files to check after build
+        EXPECTED_SHARED_LIBS['_tkinter.so'] = [
+                "/Library/Frameworks/Tcl.framework/Versions/%s/Tcl"
+                    % frameworks['Tcl'],
+                "/Library/Frameworks/Tk.framework/Versions/%s/Tk"
+                    % frameworks['Tk'],
+                ]
+    else:
+        print(" -- Building private copy of Tcl/Tk")
+    print("")
 
     # Remove inherited environment variables which might influence build
     environ_var_prefixes = ['CPATH', 'C_INCLUDE_', 'DYLD_', 'LANG', 'LC_',
@@ -663,18 +608,19 @@
         base_path = base_path + ':' + OLD_DEVELOPER_TOOLS
     os.environ['PATH'] = base_path
     print("Setting default PATH: %s"%(os.environ['PATH']))
-    # Ensure ws have access to hg and to sphinx-build.
-    # You may have to create links in /usr/bin for them.
-    runCommand('hg --version')
-    runCommand('sphinx-build --version')
+    if PYTHON_2:
+        # Ensure we have access to sphinx-build.
+        # You may have to define SDK_TOOLS_BIN and link to it there,
+        runCommand('sphinx-build --version')
 
 def parseOptions(args=None):
     """
     Parse arguments and update global settings.
     """
-    global WORKDIR, DEPSRC, SDKPATH, SRCDIR, DEPTARGET
+    global WORKDIR, DEPSRC, SRCDIR, DEPTARGET
     global UNIVERSALOPTS, UNIVERSALARCHS, ARCHLIST, CC, CXX
     global FW_VERSION_PREFIX
+    global FW_SSL_DIRECTORY
 
     if args is None:
         args = sys.argv[1:]
@@ -704,7 +650,7 @@
             DEPSRC=v
 
         elif k in ('--sdk-path',):
-            SDKPATH=v
+            print(" WARNING: --sdk-path is no longer supported")
 
         elif k in ('--src-dir',):
             SRCDIR=v
@@ -720,7 +666,7 @@
                 if deptarget is None:
                     # Select alternate default deployment
                     # target
-                    DEPTARGET = default_target_map.get(v, '10.3')
+                    DEPTARGET = default_target_map.get(v, '10.5')
             else:
                 raise NotImplementedError(v)
 
@@ -729,17 +675,16 @@
 
     SRCDIR=os.path.abspath(SRCDIR)
     WORKDIR=os.path.abspath(WORKDIR)
-    SDKPATH=os.path.abspath(SDKPATH)
     DEPSRC=os.path.abspath(DEPSRC)
 
     CC, CXX = getTargetCompilers()
 
     FW_VERSION_PREFIX = FW_PREFIX[:] + ["Versions", getVersion()]
+    FW_SSL_DIRECTORY = FW_VERSION_PREFIX[:] + ["etc", "openssl"]
 
     print("-- Settings:")
     print("   * Source directory:    %s" % SRCDIR)
     print("   * Build directory:     %s" % WORKDIR)
-    print("   * SDK location:        %s" % SDKPATH)
     print("   * Third-party source:  %s" % DEPSRC)
     print("   * Deployment target:   %s" % DEPTARGET)
     print("   * Universal archs:     %s" % str(ARCHLIST))
@@ -819,7 +764,7 @@
     except:
         try:
             os.unlink(fname)
-        except:
+        except OSError:
             pass
 
 def verifyThirdPartyFile(url, checksum, fname):
@@ -871,20 +816,26 @@
             "enable-tlsext",
             "no-ssl2",
             "no-ssl3",
-            "no-ssl3-method",
             # "enable-unit-test",
             "shared",
             "--install_prefix=%s"%shellQuote(archbase),
             "--prefix=%s"%os.path.join("/", *FW_VERSION_PREFIX),
-            "--openssldir=/System/Library/OpenSSL",
+            "--openssldir=%s"%os.path.join("/", *FW_SSL_DIRECTORY),
         ]
         if no_asm:
             configure_opts.append("no-asm")
+        # OpenSSL 1.0.2o broke the Configure test for whether the compiler
+        # in use supports dependency rule generation (cc -M) with gcc-4.2
+        # used for the 10.6+ installer builds.  Patch Configure here to
+        # force use of "cc -M" rather than "makedepend".
+        runCommand(
+            """sed -i "" 's|my $cc_as_makedepend = 0|my $cc_as_makedepend = 1|g' Configure""")
+
         runCommand(" ".join(["perl", "Configure"]
                         + arch_opts[arch] + configure_opts))
-        runCommand("make depend OSX_SDK=%s" % SDKPATH)
-        runCommand("make all OSX_SDK=%s" % SDKPATH)
-        runCommand("make install_sw OSX_SDK=%s" % SDKPATH)
+        runCommand("make depend")
+        runCommand("make all")
+        runCommand("make install_sw")
         # runCommand("make test")
         return
 
@@ -1043,27 +994,24 @@
 
         if recipe.get('useLDFlags', 1):
             configure_args.extend([
-                "CFLAGS=%s-mmacosx-version-min=%s -arch %s -isysroot %s "
+                "CFLAGS=%s-mmacosx-version-min=%s -arch %s "
                             "-I%s/usr/local/include"%(
                         recipe.get('extra_cflags', ''),
                         DEPTARGET,
                         ' -arch '.join(archList),
-                        shellQuote(SDKPATH)[1:-1],
                         shellQuote(basedir)[1:-1],),
-                "LDFLAGS=-mmacosx-version-min=%s -isysroot %s -L%s/usr/local/lib -arch %s"%(
+                "LDFLAGS=-mmacosx-version-min=%s -L%s/usr/local/lib -arch %s"%(
                     DEPTARGET,
-                    shellQuote(SDKPATH)[1:-1],
                     shellQuote(basedir)[1:-1],
                     ' -arch '.join(archList)),
             ])
         else:
             configure_args.extend([
-                "CFLAGS=%s-mmacosx-version-min=%s -arch %s -isysroot %s "
+                "CFLAGS=%s-mmacosx-version-min=%s -arch %s "
                             "-I%s/usr/local/include"%(
                         recipe.get('extra_cflags', ''),
                         DEPTARGET,
                         ' -arch '.join(archList),
-                        shellQuote(SDKPATH)[1:-1],
                         shellQuote(basedir)[1:-1],),
             ])
 
@@ -1108,17 +1056,22 @@
 
 def buildPythonDocs():
     # This stores the documentation as Resources/English.lproj/Documentation
-    # inside the framwork. pydoc and IDLE will pick it up there.
+    # inside the framework. pydoc and IDLE will pick it up there.
     print("Install python documentation")
     rootDir = os.path.join(WORKDIR, '_root')
     buildDir = os.path.join('../../Doc')
     docdir = os.path.join(rootDir, 'pydocs')
     curDir = os.getcwd()
     os.chdir(buildDir)
-    # The Doc build changed for 3.4 (technically, for 3.4.1) and for 2.7.9
     runCommand('make clean')
-    # Assume sphinx-build is on our PATH, checked in checkEnvironment
-    runCommand('make html')
+    if PYTHON_2:
+        # Python 2 doc builds do not use blurb nor do they have a venv target.
+        # Assume sphinx-build is on our PATH, checked in checkEnvironment
+        runCommand('make html')
+    else:
+        # Create virtual environment for docs builds with blurb and sphinx
+        runCommand('make venv')
+        runCommand('make html PYTHON=venv/bin/python')
     os.chdir(curDir)
     if not os.path.exists(docdir):
         os.mkdir(docdir)
@@ -1141,10 +1094,6 @@
     curdir = os.getcwd()
     os.chdir(buildDir)
 
-    # Not sure if this is still needed, the original build script
-    # claims that parts of the install assume python.exe exists.
-    os.symlink('python', os.path.join(buildDir, 'python.exe'))
-
     # Extract the version from the configure file, needed to calculate
     # several paths.
     version = getVersion()
@@ -1155,24 +1104,44 @@
     os.environ['DYLD_LIBRARY_PATH'] = os.path.join(WORKDIR,
                                         'libraries', 'usr', 'local', 'lib')
     print("Running configure...")
-    runCommand("%s -C --enable-framework --enable-universalsdk=%s "
+    runCommand("%s -C --enable-framework --enable-universalsdk=/ "
                "--with-universal-archs=%s "
                "%s "
                "%s "
+               "%s "
+               "%s "
                "LDFLAGS='-g -L%s/libraries/usr/local/lib' "
                "CFLAGS='-g -I%s/libraries/usr/local/include' 2>&1"%(
-        shellQuote(os.path.join(SRCDIR, 'configure')), shellQuote(SDKPATH),
+        shellQuote(os.path.join(SRCDIR, 'configure')),
         UNIVERSALARCHS,
         (' ', '--with-computed-gotos ')[PYTHON_3],
         (' ', '--without-ensurepip ')[PYTHON_3],
+        (' ', "--with-tcltk-includes='-I%s/libraries/usr/local/include'"%(
+                            shellQuote(WORKDIR)[1:-1],))[internalTk()],
+        (' ', "--with-tcltk-libs='-L%s/libraries/usr/local/lib -ltcl8.6 -ltk8.6'"%(
+                            shellQuote(WORKDIR)[1:-1],))[internalTk()],
         shellQuote(WORKDIR)[1:-1],
         shellQuote(WORKDIR)[1:-1]))
 
-    print("Running make touch")
-    runCommand("make touch")
+    # Look for environment value BUILDINSTALLER_BUILDPYTHON_MAKE_EXTRAS
+    # and, if defined, append its value to the make command.  This allows
+    # us to pass in version control tags, like GITTAG, to a build from a
+    # tarball rather than from a vcs checkout, thus eliminating the need
+    # to have a working copy of the vcs program on the build machine.
+    #
+    # A typical use might be:
+    #      export BUILDINSTALLER_BUILDPYTHON_MAKE_EXTRAS=" \
+    #                         GITVERSION='echo 123456789a' \
+    #                         GITTAG='echo v3.6.0' \
+    #                         GITBRANCH='echo 3.6'"
 
-    print("Running make")
-    runCommand("make")
+    make_extras = os.getenv("BUILDINSTALLER_BUILDPYTHON_MAKE_EXTRAS")
+    if make_extras:
+        make_cmd = "make " + make_extras
+    else:
+        make_cmd = "make"
+    print("Running " + make_cmd)
+    runCommand(make_cmd)
 
     print("Running make install")
     runCommand("make install DESTDIR=%s"%(
@@ -1185,21 +1154,31 @@
     del os.environ['DYLD_LIBRARY_PATH']
     print("Copying required shared libraries")
     if os.path.exists(os.path.join(WORKDIR, 'libraries', 'Library')):
-        runCommand("mv %s/* %s"%(
-            shellQuote(os.path.join(
+        build_lib_dir = os.path.join(
                 WORKDIR, 'libraries', 'Library', 'Frameworks',
-                'Python.framework', 'Versions', getVersion(),
-                'lib')),
-            shellQuote(os.path.join(WORKDIR, '_root', 'Library', 'Frameworks',
-                'Python.framework', 'Versions', getVersion(),
-                'lib'))))
+                'Python.framework', 'Versions', getVersion(), 'lib')
+        fw_lib_dir = os.path.join(
+                WORKDIR, '_root', 'Library', 'Frameworks',
+                'Python.framework', 'Versions', getVersion(), 'lib')
+        if internalTk():
+            # move Tcl and Tk pkgconfig files
+            runCommand("mv %s/pkgconfig/* %s/pkgconfig"%(
+                        shellQuote(build_lib_dir),
+                        shellQuote(fw_lib_dir) ))
+            runCommand("rm -r %s/pkgconfig"%(
+                        shellQuote(build_lib_dir), ))
+        runCommand("mv %s/* %s"%(
+                    shellQuote(build_lib_dir),
+                    shellQuote(fw_lib_dir) ))
 
-    path_to_lib = os.path.join(rootDir, 'Library', 'Frameworks',
-                                'Python.framework', 'Versions',
-                                version, 'lib', 'python%s'%(version,))
+    frmDir = os.path.join(rootDir, 'Library', 'Frameworks', 'Python.framework')
+    frmDirVersioned = os.path.join(frmDir, 'Versions', version)
+    path_to_lib = os.path.join(frmDirVersioned, 'lib', 'python%s'%(version,))
+    # create directory for OpenSSL certificates
+    sslDir = os.path.join(frmDirVersioned, 'etc', 'openssl')
+    os.makedirs(sslDir)
 
     print("Fix file modes")
-    frmDir = os.path.join(rootDir, 'Library', 'Frameworks', 'Python.framework')
     gid = grp.getgrnam('admin').gr_gid
 
     shared_lib_error = False
@@ -1249,6 +1228,8 @@
         LDVERSION = LDVERSION.replace('$(VERSION)', VERSION)
         LDVERSION = LDVERSION.replace('$(ABIFLAGS)', ABIFLAGS)
         config_suffix = '-' + LDVERSION
+        if getVersionMajorMinor() >= (3, 6):
+            config_suffix = config_suffix + '-darwin'
     else:
         config_suffix = ''      # Python 2.x
 
@@ -1274,7 +1255,7 @@
     fp.write(data)
     fp.close()
 
-    # fix _sysconfigdata if it exists
+    # fix _sysconfigdata
     #
     # TODO: make this more robust!  test_sysconfig_module of
     # distutils.tests.test_sysconfig.SysconfigTestCase tests that
@@ -1288,28 +1269,31 @@
     # _sysconfigdata.py).
 
     import pprint
-    path = os.path.join(path_to_lib, '_sysconfigdata.py')
-    if os.path.exists(path):
-        fp = open(path, 'r')
-        data = fp.read()
-        fp.close()
-        # create build_time_vars dict
-        exec(data)
-        vars = {}
-        for k, v in build_time_vars.items():
-            if type(v) == type(''):
-                for p in (include_path, lib_path):
-                    v = v.replace(' ' + p, '')
-                    v = v.replace(p + ' ', '')
-            vars[k] = v
+    if getVersionMajorMinor() >= (3, 6):
+        # XXX this is extra-fragile
+        path = os.path.join(path_to_lib, '_sysconfigdata_m_darwin_darwin.py')
+    else:
+        path = os.path.join(path_to_lib, '_sysconfigdata.py')
+    fp = open(path, 'r')
+    data = fp.read()
+    fp.close()
+    # create build_time_vars dict
+    exec(data)
+    vars = {}
+    for k, v in build_time_vars.items():
+        if type(v) == type(''):
+            for p in (include_path, lib_path):
+                v = v.replace(' ' + p, '')
+                v = v.replace(p + ' ', '')
+        vars[k] = v
 
-        fp = open(path, 'w')
-        # duplicated from sysconfig._generate_posix_vars()
-        fp.write('# system configuration generated and used by'
-                    ' the sysconfig module\n')
-        fp.write('build_time_vars = ')
-        pprint.pprint(vars, stream=fp)
-        fp.close()
+    fp = open(path, 'w')
+    # duplicated from sysconfig._generate_posix_vars()
+    fp.write('# system configuration generated and used by'
+                ' the sysconfig module\n')
+    fp.write('build_time_vars = ')
+    pprint.pprint(vars, stream=fp)
+    fp.close()
 
     # Add symlinks in /usr/local/bin, using relative links
     usr_local_bin = os.path.join(rootDir, 'usr', 'local', 'bin')
@@ -1553,6 +1537,10 @@
             shellQuote(os.path.join(WORKDIR, 'installer')),
             shellQuote(imagepath + ".tmp.dmg" )))
 
+    # Try to mitigate race condition in certain versions of macOS, e.g. 10.9,
+    # when hdiutil fails with  "Resource busy"
+
+    time.sleep(10)
 
     if not os.path.exists(os.path.join(WORKDIR, "mnt")):
         os.mkdir(os.path.join(WORKDIR, "mnt"))
@@ -1636,6 +1624,8 @@
     patchFile("resources/ReadMe.rtf",  fn)
     fn = os.path.join(folder, "Update Shell Profile.command")
     patchScript("scripts/postflight.patch-profile",  fn)
+    fn = os.path.join(folder, "Install Certificates.command")
+    patchScript("resources/install_certificates.command",  fn)
     os.chmod(folder, STAT_0o755)
     setIcon(folder, "../Icons/Python Folder.icns")
 
diff --git a/Mac/BuildScript/issue19373_tk_8_5_15_source.patch b/Mac/BuildScript/issue19373_tk_8_5_15_source.patch
deleted file mode 100644
index de5d08e..0000000
--- a/Mac/BuildScript/issue19373_tk_8_5_15_source.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Issue #19373: Patch to Tk 8.5.15 to correct refresh problem on OS x 10.9.
-From upstream checkin https://core.tcl.tk/tk/info/5a5abf71f9
-
---- tk8.5.15/macosx/tkMacOSXDraw.c	2013-09-16 09:41:21.000000000 -0700
-+++ Tk_Source_Code-5a5abf71f9fdb0da/macosx/tkMacOSXDraw.c	2013-10-27 13:27:00.000000000 -0700
-@@ -1688,6 +1688,7 @@
- {
-     if (dcPtr->context) {
- 	CGContextSynchronize(dcPtr->context);
-+	[[dcPtr->view window] setViewsNeedDisplay:YES];
- 	[[dcPtr->view window] enableFlushWindow];
- 	if (dcPtr->focusLocked) {
- 	    [dcPtr->view unlockFocus];
diff --git a/Mac/BuildScript/openssl_sdk_makedepend.patch b/Mac/BuildScript/openssl_sdk_makedepend.patch
deleted file mode 100644
index e22d67e..0000000
--- a/Mac/BuildScript/openssl_sdk_makedepend.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-# HG changeset patch
-#
-# 	using openssl 1.0.2j
-#
-# - support building with an OS X SDK
-
-diff Configure
-
-diff --git a/Configure b/Configure
---- a/Configure
-+++ b/Configure
-@@ -642,12 +642,12 @@
- 
- ##### MacOS X (a.k.a. Rhapsody or Darwin) setup
- "rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX_RHAPSODY::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}::",
--"darwin-ppc-cc","cc:-arch ppc -O3 -DB_ENDIAN -Wa,-force_cpusubtype_ALL::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
--"darwin64-ppc-cc","cc:-arch ppc64 -O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc64_asm}:osx64:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
--"darwin-i386-cc","cc:-arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:".eval{my $asm=$x86_asm;$asm=~s/cast\-586\.o//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
--"debug-darwin-i386-cc","cc:-arch i386 -g3 -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
--"darwin64-x86_64-cc","cc:-arch x86_64 -O3 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
--"debug-darwin64-x86_64-cc","cc:-arch x86_64 -ggdb -g2 -O0 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
-+"darwin-ppc-cc","cc:-arch ppc -isysroot \$(OSX_SDK) -O3 -DB_ENDIAN -Wa,-force_cpusubtype_ALL::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
-+"darwin64-ppc-cc","cc:-arch ppc64 -isysroot \$(OSX_SDK) -O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc64_asm}:osx64:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
-+"darwin-i386-cc","cc:-arch i386 -isysroot \$(OSX_SDK) -O3 -fomit-frame-pointer -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:".eval{my $asm=$x86_asm;$asm=~s/cast\-586\.o//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
-+"debug-darwin-i386-cc","cc:-arch i386 -isysroot \$(OSX_SDK) -g3 -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
-+"darwin64-x86_64-cc","cc:-arch x86_64 -isysroot \$(OSX_SDK) -O3 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
-+"debug-darwin64-x86_64-cc","cc:-arch x86_64 -isysroot \$(OSX_SDK) -ggdb -g2 -O0 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
- "debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
- # iPhoneOS/iOS
- "iphoneos-cross","llvm-gcc:-O3 -isysroot \$(CROSS_TOP)/SDKs/\$(CROSS_SDK) -fomit-frame-pointer -fno-common::-D_REENTRANT:iOS:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
-@@ -1728,8 +1728,7 @@
- 		s/^AR=\s*ar/AR= $ar/;
- 		s/^RANLIB=.*/RANLIB= $ranlib/;
- 		s/^RC=.*/RC= $windres/;
--		s/^MAKEDEPPROG=.*$/MAKEDEPPROG= $cc/ if $cc eq "gcc";
--		s/^MAKEDEPPROG=.*$/MAKEDEPPROG= $cc/ if $ecc eq "gcc" || $ecc eq "clang";
-+		s/^MAKEDEPPROG=.*$/MAKEDEPPROG= $cc/;
- 		}
- 	s/^CFLAG=.*$/CFLAG= $cflags/;
- 	s/^DEPFLAG=.*$/DEPFLAG=$depflags/;
diff --git a/Mac/BuildScript/resources/Conclusion.rtf b/Mac/BuildScript/resources/Conclusion.rtf
new file mode 100644
index 0000000..9e0fa9f
--- /dev/null
+++ b/Mac/BuildScript/resources/Conclusion.rtf
@@ -0,0 +1,20 @@
+{\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf200
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset0 LucidaGrande-Bold;\f2\fnil\fcharset0 LucidaGrande;
+\f3\fnil\fcharset0 Monaco;}
+{\colortbl;\red255\green255\blue255;}
+{\*\expandedcolortbl;;}
+\margl1440\margr1440\vieww10540\viewh8400\viewkind0
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
+
+\f0\fs28 \cf0 Congratulations!
+\fs24   
+\f1\b\fs28 Python $FULL_VERSION for macOS $MACOSX_DEPLOYMENT_TARGET
+\f2\b0  was successfully installed.
+\fs24 \
+\
+One more thing: to verify the identity of secure network connections, this Python needs a set of SSL root certificates.  You can download and install a current curated set from {\field{\*\fldinst{HYPERLINK "https://pypi.org/project/certifi/"}}{\fldrslt the Certifi project}} by double-clicking on the 
+\f3 Install Certificates
+\f2  icon in {\field{\*\fldinst{HYPERLINK "file://localhost/Applications/Python%20$VERSION/"}}{\fldrslt the Finder window}}.  See {\field{\*\fldinst{HYPERLINK "file://localhost/Applications/Python%20$VERSION/ReadMe.rtf"}}{\fldrslt the 
+\f3 ReadMe
+\f2  file}} for more information.\
+}
\ No newline at end of file
diff --git a/Mac/BuildScript/resources/License.rtf b/Mac/BuildScript/resources/License.rtf
index 20982a4..c6c3028 100644
--- a/Mac/BuildScript/resources/License.rtf
+++ b/Mac/BuildScript/resources/License.rtf
@@ -54,7 +54,7 @@
 \b0 \
 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using this software ("Python") in source or binary form and its associated documentation.\
 \
-2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Python Software Foundation; All Rights Reserved" are retained in Python alone or in any derivative version prepared by Licensee.\
+2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Python Software Foundation; All Rights Reserved" are retained in Python alone or in any derivative version prepared by Licensee.\
 \
 3. In the event Licensee prepares a derivative work that is based on or incorporates Python or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python.\
 \
@@ -139,4 +139,4 @@
 \
 \
 \
-}
\ No newline at end of file
+}
diff --git a/Mac/BuildScript/resources/ReadMe.rtf b/Mac/BuildScript/resources/ReadMe.rtf
index 67c056c..ebabb24 100644
--- a/Mac/BuildScript/resources/ReadMe.rtf
+++ b/Mac/BuildScript/resources/ReadMe.rtf
@@ -1,47 +1,78 @@
-{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf750
+{\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf400
 {\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fmodern\fcharset0 CourierNewPSMT;}
 {\colortbl;\red255\green255\blue255;}
 {\*\expandedcolortbl;;}
 \margl1440\margr1440\vieww15240\viewh15540\viewkind0
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
 
-\f0\fs24 \cf0 This package will install Python $FULL_VERSION for Mac OS X $MACOSX_DEPLOYMENT_TARGET for the following architecture(s): $ARCHITECTURES.\
+\f0\fs24 \cf0 This package will install Python $FULL_VERSION for macOS $MACOSX_DEPLOYMENT_TARGET for the following architecture(s): $ARCHITECTURES.\
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
 
-\b \cf0 \ul \ulc0 Which installer variant should I use?
+\b \cf0 \ul \ulc0 Which installer variant should I use? [CHANGED in 2.7.15]
 \b0 \ulnone \
 \
-Python.org provides two installer variants for download: one that installs a 
+
+\b **NEW**
+\b0  With Python 2.7.15, the python.org website now provides two installer variants for download: one that installs a 
+\i 64-bit-only 
+\i0 Python capable of running on 
+\i macOS 10.9 (Mavericks)
+\i0  or later; and one that installs a 
 \i 64-bit/32-bit Intel
 \i0  Python capable of running on 
-\i Mac OS X 10.6 (Snow Leopard)
-\i0  or later; and one that installs a 
-\i 32-bit-only (Intel and PPC)
-\i0  Python capable of running on 
-\i Mac OS X 10.5 (Leopard)
-\i0  or later.  This ReadMe was installed with the 
+\i macOS 10.6 (Snow Leopard)
+\i0  or later.  (This ReadMe was installed with the 
 \i $MACOSX_DEPLOYMENT_TARGET
-\i0  variant.  Unless you are installing to an 10.5 system or you need to build applications that can run on 10.5 systems, use the 10.6 variant if possible.  There are some additional operating system functions that are supported starting with 10.6 and you may see better performance using 64-bit mode.  By default, Python will automatically run in 64-bit mode if your system supports it.  Also see 
-\i Certificate verification and OpenSSL
-\i0  below.  The Pythons installed by these installers are built with private copies of some third-party libraries not included with or newer than those in OS X itself.  The list of these libraries varies by installer variant and is included at the end of the License.rtf file.
-\b \ul \
-\
-Update your version of Tcl/Tk to use IDLE or other Tk applications
-\b0 \ulnone \
-\
-To use IDLE or other programs that use the Tkinter graphical user interface toolkit, you need to install a newer third-party version of the 
-\i Tcl/Tk
-\i0  frameworks.  Visit {\field{\*\fldinst{HYPERLINK "https://www.python.org/download/mac/tcltk/"}}{\fldrslt https://www.python.org/download/mac/tcltk/}} for current information about supported and recommended versions of 
-\i Tcl/Tk
-\i0  for this version of Python and of Mac OS X.\
+\i0  variant.)  Previous Python 2.7.x releases provided the 10.6 or later installer and a 10.5 or later 32-bit-only variant. If you are running on macOS 10.9 or later and if you have no need for compatibility with older systems, use the 10.9 variant.  Use the 10.6 variant if you are running on macOS 10.6 through 10.8, if you need to maintain compatibility with previous 2.7.x releases, or if you want to produce standalone applications that can run on systems from 10.6.  The Pythons installed by these installers are built with private copies of some third-party libraries not included with or newer than those in macOS itself.  The list of these libraries varies by installer variant and is included at the end of the 
+\f1 License.rtf
+\f0  file.\
 
 \b \ul \
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
-\cf0 Packages installed with the system Python 2.7 are no longer searched for\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
-\cf0 \ulnone [CHANGED for Python 2.7.13]
-\b0 \
+Certificate verification and OpenSSL_[CHANGED in 2.7.15]\
+
+\b0 \ulnone \
+This variant of Python 2.7 now includes its own private copy of OpenSSL 1.0.2.  Unlike previous releases, the deprecated Apple-supplied OpenSSL libraries are no longer used.  This also means that the trust certificates in system and user keychains managed by the 
+\i Keychain Access 
+\i0 application and the 
+\i security
+\i0  command line utility are no longer used as defaults by the Python 
+\f1 ssl
+\f0  module.  A sample command script is included in 
+\f1 /Applications/Python 2.7
+\f0  to install a curated bundle of default root certificates from the third-party 
+\f1 certifi
+\f0  package ({\field{\*\fldinst{HYPERLINK "https://pypi.python.org/pypi/certifi"}}{\fldrslt https://pypi.python.org/pypi/certifi}}).  Click on 
+\f1 Install Certificates
+\f0  to run it.  If you choose to use 
+\f1 certifi
+\f0 , you should consider subscribing to the{\field{\*\fldinst{HYPERLINK "https://certifi.io/en/latest/"}}{\fldrslt  project's email update service}} to be notified when the certificate bundle is updated.\
+\
+The bundled 
+\f1 pip
+\f0  included with the Python 2.7 installer has its own default certificate store for verifying download connections.\
+\
+
+\b \ul Using IDLE or other Tk applications [NEW/CHANGED in 2.7.15] 
+\b0 \ulnone \
+\
+The 10.9+ installer variant comes with its own private version of Tcl/Tk 8.6. It does not use system-supplied or third-party supplied versions of Tcl/Tk.\
+\
+For the 10.6+ variant, you continue to need to install a newer third-party version of the 
+\i Tcl/Tk
+\i0  8.5 (not 8.6) frameworks to use IDLE or other programs that use the Tkinter graphical user interface toolkit.  Visit {\field{\*\fldinst{HYPERLINK "https://www.python.org/download/mac/tcltk/"}}{\fldrslt https://www.python.org/download/mac/tcltk/}} for current information about supported and recommended versions of 
+\i Tcl/Tk
+\i0  for this version of Python and of macOS.\
+
+\b \ul \
+Binary installer support for Mac OS X 10.5 and earlier discontinued [CHANGED for Python 2.7.15]
+\b0 \ulnone \
+\
+As of Python 2.7.15, binary installers from python.org no longer support Mac OS X 10.5 (Leopard) systems.   Binary installer support for Mac OS X 10.3.9 (Panther) and 10.4.x (Tiger) systems was previously dropped in Python 2.7.9.  Mac OS X 10.5 was originally released by Apple in 2007 and last updated in 2009 and was the last OS X release for PPC machines (G4 and G5).  If needed, it is still possible to build Python from source for 10.3.9, 10.4, or 10.5.\
+\
+
+\b \ul Packages installed with the system Python 2.7 are no longer searched for [CHANGED for Python 2.7.13]
+\b0 \ulnone \
 \
 As of Python 2.7.0, user-installed Python 2.7 versions from python.org installers added the system-wide site-packages directory for the Apple-supplied Python 2.7 to the end of their search path.  This meant that packages installed with the system Python 2.7 could also be used by the user-installed Python 2.7.  While sometimes convenient, this also often caused confusion with the implicit coupling between the two Python instances.  Separately, as of macOS 10.12, Apple changed the layout of the system site-packages directory, 
 \f1 /Library/Python/2.7/site-packages
@@ -53,36 +84,27 @@
 \f1 sys.path
 \f0 .  If you are using a package with both a user-installed Python 2.7 and the system Python 2.7, you will now need to ensure that separate copies of the package are installed for each instance.\
 \
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
 
-\b \cf0 \ul Installing on OS X 10.8 (Mountain Lion) or later systems\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
-\cf0 \ulnone [CHANGED for Python 2.7.9]
-\b0 \
+\b \ul Installing on OS X 10.8 (Mountain Lion) or later systems [CHANGED for Python 2.7.9]
+\b0 \ulnone \
 \
-As of Python 2.7.9, installer packages from python.org are now compatible with the Gatekeeper security feature introduced in OS X 10.8.   Downloaded packages can now be directly installed by double-clicking with the default system security settings.  Python.org installer packages for OS X are signed with the Developer ID of the builder, as identified on {\field{\*\fldinst{HYPERLINK "https://www.python.org/downloads/"}}{\fldrslt the download page}} for this release.  To inspect the digital signature of the package, click on the lock icon in the upper right corner of the 
+As of Python 2.7.9, installer packages from python.org are now compatible with the Gatekeeper security feature introduced in OS X 10.8.   Downloaded packages can now be directly installed by double-clicking with the default system security settings.  Python.org installer packages for macOS are signed with the Developer ID of the builder, as identified on {\field{\*\fldinst{HYPERLINK "https://www.python.org/downloads/"}}{\fldrslt the download page}} for this release.  To inspect the digital signature of the package, click on the lock icon in the upper right corner of the 
 \i Install Python
 \i0  installer window.  Refer to Apple\'92s support pages for {\field{\*\fldinst{HYPERLINK "http://support.apple.com/kb/ht5290"}}{\fldrslt more information on Gatekeeper}}.\
 \
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
 
-\b \cf0 \ul Simplified web-based installs\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
-\cf0 \ulnone [NEW for Python 2.7.9]
-\b0 \
+\b \ul Simplified web-based installs [NEW for Python 2.7.9]
+\b0 \ulnone \
 \
 With the change to the newer flat format installer package, the download file now has a 
 \f1 .pkg
 \f0  extension as it is no longer necessary to embed the installer within a disk image (
 \f1 .dmg
-\f0 ) container.   If you download the Python installer through a web browser, the OS X installer application may open automatically to allow you to perform the install.  If your browser settings do not allow automatic open, double click on the downloaded installer file.\
+\f0 ) container.   If you download the Python installer through a web browser, the macOS installer application may open automatically to allow you to perform the install.  If your browser settings do not allow automatic open, double click on the downloaded installer file.\
 \
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
 
-\b \cf0 \ul New Installation Options and Defaults\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
-\cf0 \ulnone [NEW for Python 2.7.9]
-\b0 \
+\b \ul New Installation Options and Defaults [NEW for Python 2.7.9]
+\b0 \ulnone \
 \
 The Python installer now includes an option to automatically install or upgrade 
 \f1 pip
@@ -96,74 +118,8 @@
 \i Release Notes
 \i0  link for this release at {\field{\*\fldinst{HYPERLINK "https://www.python.org/downloads/"}}{\fldrslt https://www.python.org/downloads/}}.\
 \
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
 
-\b \cf0 \ul Certificate verification and OpenSSL\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
-\cf0 \ulnone [CHANGED for Python 2.7.9]
-\b0 \
-\
-Python 2.7.9 includes a number of network security enhancements that have been approved for inclusion in Python 2.7 maintenance releases.  {\field{\*\fldinst{HYPERLINK "https://www.python.org/dev/peps/pep-0476/"}}{\fldrslt PEP 476}} changes several standard library modules, like 
-\i httplib
-\i0 , 
-\i urllib2
-\i0 , and 
-\i xmlrpclib
-\i0 , to by default verify certificates presented by servers over secure (TLS) connections.  The verification is performed by the OpenSSL libraries that Python is linked to.  Prior to 2.7.9, the python.org installers dynamically linked with Apple-supplied OpenSSL libraries shipped with OS X.  OS X provides a multiple level security framework that stores trust certificates in system and user keychains managed by the 
-\i Keychain Access 
-\i0 application and the 
-\i security
-\i0  command line utility.\
-\
-For OS X 10.5, Apple provides 
-\i OpenSSL 0.9.7
-\i0  libraries.  This version of Apple's OpenSSL 
-\b does not
-\b0  use the certificates from the system security framework, even when used on newer versions of OS X.  Instead it consults a traditional OpenSSL concatenated certificate file (
-\i cafile
-\i0 ) or certificate directory (
-\i capath
-\i0 ), located in 
-\f1 /System/Library/OpenSSL
-\f0 .  These directories are typically empty and not managed by OS X; you must manage them yourself or supply your own SSL contexts.  OpenSSL 0.9.7 is obsolete by current security standards, lacking a number of important features found in later versions.  Among the problems this causes is the inability to verify higher-security certificates now used by python.org services, including 
-\i t{\field{\*\fldinst{HYPERLINK "https://pypi.python.org/pypi"}}{\fldrslt he Python Package Index, PyPI}}
-\i0 .  To solve this problem, as of 2.7.9 the 
-\i 10.5+ 32-bit-only python.org variant
-\i0  is linked with a private copy of 
-\i OpenSSL 1.0
-\i0 ; it consults the same default certificate directory, 
-\f1 /System/Library/OpenSSL
-\f0 .   As before, it is still necessary to manage certificates yourself when you use this Python variant and, with certificate verification now enabled by default, you may now need to take additional steps to ensure your Python programs have access to CA certificates you trust.  If you use this Python variant to build standalone applications with third-party tools like {\field{\*\fldinst{HYPERLINK "https://pypi.python.org/pypi/py2app/"}}{\fldrslt 
-\f1 py2app}}, you may now need to bundle CA certificates in them or otherwise supply non-default SSL contexts.\
-\
-For OS X 10.6+, Apple also provides 
-\i OpenSSL
-\i0  
-\i 0.9.8 libraries
-\i0 .  Apple's 0.9.8 version includes an important additional feature: if a certificate cannot be verified using the manually administered certificates in 
-\f1 /System/Library/OpenSSL
-\f0 , the certificates managed by the system security framework In the user and system keychains are also consulted (using Apple private APIs).  For this reason, for 2.7.9 the 
-\i 64-bit/32-bit 10.6+ python.org variant
-\i0  continues to be dynamically linked with Apple's OpenSSL 0.9.8 since it was felt that the loss of the system-provided certificates and management tools outweighs the additional security features provided by newer versions of OpenSSL.  This will likely change in future releases of the python.org installers as Apple has deprecated use of the system-supplied OpenSSL libraries.  If you do need features from newer versions of OpenSSL, there are third-party OpenSSL wrapper packages available through 
-\i PyPI
-\i0 .\
-\
-The bundled 
-\f1 pip
-\f0  included with 2.7.9 has its own default certificate store for verifying download connections.\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
-
-\b \cf0 \ul \
-Binary installer support for OS X 10.4 and 10.3.9 discontinued\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
-\cf0 \ulnone [CHANGED for Python 2.7.9]
-\b0 \
-\
-As previously announced, binary installers for Python 2.7.9 from python.org no longer support Mac OS X 10.3.9 (Panther) and 10.4.x (Tiger) systems.  These systems were last updated by Apple in 2005 and 2007.  As of 2.7.9, the 32-bit-only installer supports PPC and Intel Macs running OS X 10.5 (Leopard).  10.5 was the last OS X release for PPC machines (G4 and G5).  The 64-/32-bit installer configuration remains unchanged and should normally be used on OS X 10.6 (Snow Leopard) and later systems.  This aligns Python 2.7.x installer configurations with those currently provided with Python 3.x.  If needed, it is still possible to build Python from source for 10.3.9 and 10.4.\
-\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
-
-\b \cf0 \ul Python 3 and Python 2 Co-existence\
+\b \ul Python 3 and Python 2 Co-existence\
 
 \b0 \ulnone \
 Python.org Python 2.7 and 3.x versions can both be installed on your system and will not conflict.  Python 2.7 command names contain a 2 or no digit: 
@@ -190,6 +146,9 @@
 \f1 idle3
 \f0 , 
 \f1 pip3
-\f0 , etc.\
+\f0 , etc.  Also, installing a python.org Python 2.7 does not alter or remove any Apple-supplied system Pythons, found in 
+\f1 /usr/bin
+\f0 .\
+\
 \
 }
\ No newline at end of file
diff --git a/Mac/BuildScript/resources/Welcome.rtf b/Mac/BuildScript/resources/Welcome.rtf
index ea15e0b..fcf9e04 100644
--- a/Mac/BuildScript/resources/Welcome.rtf
+++ b/Mac/BuildScript/resources/Welcome.rtf
@@ -1,37 +1,28 @@
-{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
+{\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf400
 \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fmodern\fcharset0 CourierNewPSMT;}
 {\colortbl;\red255\green255\blue255;}
-\paperw11905\paperh16837\margl1440\margr1440\vieww11180\viewh10860\viewkind0
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640
+{\*\expandedcolortbl;;}
+\paperw11905\paperh16837\margl1440\margr1440\vieww13360\viewh10920\viewkind0
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
 
 \f0\fs24 \cf0 This package will install 
 \b Python $FULL_VERSION
 \b0  for 
-\b Mac OS X $MACOSX_DEPLOYMENT_TARGET
+\b macOS $MACOSX_DEPLOYMENT_TARGET
 \b0 .\
-\
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\partightenfactor0
+\cf0 \
 
-\b Python for Mac OS X
-\b0  consists of the Python programming language interpreter, plus a set of programs to allow easy access to it for Mac OS X users including an integrated development environment 
+\b Python for macOS
+\b0  consists of the Python programming language interpreter, plus a set of programs to allow easy access to it for macOS users including an integrated development environment 
 \b IDLE
 \b0 .\
 \
 
-\b NEW for Python 2.7.9: 
-\b0 This package installs a version of 
-\f1 pip
-\f0 , the recommended tool for installing and managing Python packages.   Type 
-\f1 pip2.7 --help
-\f0  for an overview.  2.7.9 also includes a number of network security enhancements that may require changes to your Python applications.  See the 
-\f1 ReadMe
-\f0  file and {\field{\*\fldinst{HYPERLINK "https://docs.python.org/2/whatsnew/2.7.html#new-features-added-to-python-2-7-maintenance-releases"}}{\fldrslt the Python documentation}} for more information.\
-\
-
-\b IMPORTANT:
-\b0  
-\b IDLE
-\b0  and other programs using the 
-\b tkinter
-\b0  graphical user interface toolkit require specific versions of the 
-\b Tcl/Tk
-\b0  platform independent windowing toolkit.  Visit {\field{\*\fldinst{HYPERLINK "https://www.python.org/download/mac/tcltk/"}}{\fldrslt https://www.python.org/download/mac/tcltk/}} for current information on supported and recommended versions of Tcl/Tk for this version of Python and Mac OS X.}
\ No newline at end of file
+\b NEW in 2.7.15: 
+\b0 two installer variants (10.9+ 64-bit-only, 10.6+ 64-/32-bit), built-in Tcl/Tk 8.6 support in the 10.9+ variant (no additional third-party downloads!), updated  
+\f1 pip,
+\f0  built-in OpenSSL 1.0.2 (click on 
+\f1 Install Certificates
+\f0  for root certificates)\
+}
\ No newline at end of file
diff --git a/Mac/BuildScript/resources/install_certificates.command b/Mac/BuildScript/resources/install_certificates.command
new file mode 100755
index 0000000..6cae65c
--- /dev/null
+++ b/Mac/BuildScript/resources/install_certificates.command
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+/Library/Frameworks/Python.framework/Versions/@PYVER@/bin/python@PYVER@ << "EOF"
+
+# install_certifi.py
+#
+# sample script to install or update a set of default Root Certificates
+# for the ssl module.  Uses the certificates provided by the certifi package:
+#       https://pypi.python.org/pypi/certifi
+
+import os
+import os.path
+import ssl
+import stat
+import subprocess
+import sys
+
+STAT_0o775 = ( stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
+             | stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP
+             | stat.S_IROTH |                stat.S_IXOTH )
+
+def main():
+    openssl_dir, openssl_cafile = os.path.split(
+        ssl.get_default_verify_paths().openssl_cafile)
+
+    print(" -- pip install --upgrade certifi")
+    subprocess.check_call([sys.executable,
+        "-E", "-s", "-m", "pip", "install", "--upgrade", "certifi"])
+
+    import certifi
+
+    # change working directory to the default SSL directory
+    os.chdir(openssl_dir)
+    relpath_to_certifi_cafile = os.path.relpath(certifi.where())
+    print(" -- removing any existing file or link")
+    try:
+        os.remove(openssl_cafile)
+    except OSError:
+        pass
+    print(" -- creating symlink to certifi certificate bundle")
+    os.symlink(relpath_to_certifi_cafile, openssl_cafile)
+    print(" -- setting permissions")
+    os.chmod(openssl_cafile, STAT_0o775)
+    print(" -- update complete")
+
+if __name__ == '__main__':
+    main()
+EOF
diff --git a/Mac/BuildScript/scripts/postflight.documentation b/Mac/BuildScript/scripts/postflight.documentation
index b9f28a5..3cbbc1b 100755
--- a/Mac/BuildScript/scripts/postflight.documentation
+++ b/Mac/BuildScript/scripts/postflight.documentation
@@ -12,6 +12,7 @@
 # make link in /Applications/Python m.n/ for Finder users
 if [ -d "${APPDIR}" ]; then
     ln -fhs "${FWK_DOCDIR}/index.html" "${APPDIR}/Python Documentation.html"
+    open "${APPDIR}" || true  # open the applications folder
 fi
 
 # make share/doc link in framework for command line users
diff --git a/Mac/BuildScript/tk868_on_10_8_10_9.patch b/Mac/BuildScript/tk868_on_10_8_10_9.patch
new file mode 100644
index 0000000..8fe1060
--- /dev/null
+++ b/Mac/BuildScript/tk868_on_10_8_10_9.patch
@@ -0,0 +1,18 @@
+Fix build failure with +quartz variant on OS X 10.8 and 10.9.
+Even though Gestalt was deprecated in OS X 10.8, it should work fine
+through OS X 10.9, and its replacement NSOperatingSystemVersion was
+not introduced until OS X 10.10.
+
+Patch from MacPorts project and reported upstream:
+https://trac.macports.org/ticket/55649
+--- tk8.6.8/macosx/tkMacOSXXStubs.c.orig	2017-12-06 09:25:08.000000000 -0600
++++ tk8.6.8-patched/macosx/tkMacOSXXStubs.c	2018-01-06 19:34:17.000000000 -0600
+@@ -175,7 +175,7 @@
+     {
+ 	int major, minor, patch;
+ 
+-#if MAC_OS_X_VERSION_MIN_REQUIRED < 1080
++#if MAC_OS_X_VERSION_MIN_REQUIRED < 101000
+ 	Gestalt(gestaltSystemVersionMajor, (SInt32*)&major);
+ 	Gestalt(gestaltSystemVersionMinor, (SInt32*)&minor);
+ 	Gestalt(gestaltSystemVersionBugFix, (SInt32*)&patch);
diff --git a/Mac/IDLE/Info.plist.in b/Mac/IDLE/Info.plist.in
index 5e91509..1d3c076 100644
--- a/Mac/IDLE/Info.plist.in
+++ b/Mac/IDLE/Info.plist.in
@@ -36,7 +36,7 @@
 	<key>CFBundleExecutable</key>
 	<string>IDLE</string>
 	<key>CFBundleGetInfoString</key>
-	<string>%VERSION%, © 2001-2016 Python Software Foundation</string>
+	<string>%VERSION%, © 2001-2017 Python Software Foundation</string>
 	<key>CFBundleIconFile</key>
 	<string>IDLE.icns</string>
 	<key>CFBundleIdentifier</key>
diff --git a/Mac/IDLE/Makefile.in b/Mac/IDLE/Makefile.in
index 98590ab..2be3a37 100644
--- a/Mac/IDLE/Makefile.in
+++ b/Mac/IDLE/Makefile.in
@@ -11,7 +11,6 @@
 UNIVERSALSDK=@UNIVERSALSDK@
 builddir=	../..
 PYTHONFRAMEWORK=@PYTHONFRAMEWORK@
-LIPO_32BIT_FLAGS=@LIPO_32BIT_FLAGS@
 
 
 RUNSHARED=      @RUNSHARED@
@@ -71,10 +70,6 @@
 		--resource=$(srcdir)/../Icons/PythonCompiled.icns \
 		--python=$(prefix)/Resources/Python.app/Contents/MacOS/Python \
 		build
-ifneq ($(LIPO_32BIT_FLAGS),)
-	rm "IDLE.app/Contents/MacOS/Python"
-	lipo $(LIPO_32BIT_FLAGS) -output "IDLE.app/Contents/MacOS/Python" "$(BUILDPYTHON)"
-endif
 
 Info.plist: $(srcdir)/Info.plist.in
 	sed 's/%VERSION%/'"`$(RUNSHARED) $(BUILDPYTHON) -c 'import platform; print platform.python_version()'`"'/g' < $(srcdir)/Info.plist.in > Info.plist
diff --git a/Mac/PythonLauncher/Info.plist.in b/Mac/PythonLauncher/Info.plist.in
index 6c4bfe8..b84fffe 100644
--- a/Mac/PythonLauncher/Info.plist.in
+++ b/Mac/PythonLauncher/Info.plist.in
@@ -40,7 +40,7 @@
 	<key>CFBundleExecutable</key>
 	<string>PythonLauncher</string>
 	<key>CFBundleGetInfoString</key>
-	<string>%VERSION%, © 2001-2016 Python Software Foundation</string>
+	<string>%VERSION%, © 2001-2018 Python Software Foundation</string>
 	<key>CFBundleIconFile</key>
 	<string>PythonLauncher.icns</string>
 	<key>CFBundleIdentifier</key>
diff --git a/Mac/README b/Mac/README
index ec2cd27..51e69ef 100644
--- a/Mac/README
+++ b/Mac/README
@@ -7,7 +7,7 @@
     Ronald Oussoren (2010-04),
     Ned Deily (2014-05)
 
-:Version: 2.7.7
+:Version: 2.7.15
 
 This document provides a quick overview of some Mac OS X specific features in
 the Python distribution.
@@ -19,7 +19,7 @@
 
   If this argument is specified the build will create a Python.framework rather
   than a traditional Unix install. See the section
-  _`Building and using a framework-based Python on Mac OS X` for more 
+  _`Building and using a framework-based Python on Mac OS X` for more
   information on frameworks.
 
   If the optional directory argument is specified the framework is installed
@@ -44,10 +44,12 @@
   regular and framework builds.
 
   The optional argument specifies which OS X SDK should be used to perform the
-  build. This defaults to ``/Developer/SDKs/MacOSX.10.4u.sdk``.  When building
-  on OS X 10.5 or later, you can specify ``/`` to use the installed system
-  headers rather than an SDK.  As of OS X 10.9, you should install the optional
-  system headers from the Command Line Tools component using ``xcode-select``::
+  build.  If xcodebuild is available and configured, this defaults to
+  the Xcode default MacOS X SDK, otherwise ``/Developer/SDKs/MacOSX.10.4u.sdk``
+  if available or ``/`` if not.  When building on OS X 10.5 or later, you can
+  specify ``/`` to use the installed system headers rather than an SDK.  As of
+  OS X 10.9, you should install the optional system headers from the Command
+  Line Tools component using ``xcode-select``::
 
      $ sudo xcode-select --install
 
@@ -56,10 +58,11 @@
 
 * ``--with-universal-archs=VALUE``
 
-  Specify the kind of universal binary that should be created. This option is 
-  only valid when ``--enable-universalsdk`` is specified.
+  Specify the kind of universal binary that should be created. This option is
+  only valid when ``--enable-universalsdk`` is specified.  The default is
+  ``32-bit`` if a building with a SDK that supports PPC, otherwise defaults
+  to ``intel``.
 
-  
 
 Building and using a universal binary of Python on Mac OS X
 ===========================================================
@@ -91,30 +94,30 @@
 and the 10.4u SDK.  Starting with Xcode 3 and OS X 10.5, more configurations are
 available.
 
-The option ``--enable-universalsdk`` has an optional argument to specify an
-SDK, which defaults to the 10.4u SDK. When you build on OS X 10.5 or later
-you can use the system headers instead of an SDK::
-
-  $ ./configure --enable-universalsdk=/
-
 In general, universal builds depend on specific features provided by the
 Apple-supplied compilers and other build tools included in Apple's Xcode
 development tools.  You should install Xcode and the command line tools
 component appropriate for the OS X release you are running on.  See the
-Python Developer's Guide (http://docs.python.org/devguide/setup.html)
+Python Developer's Guide (https://devguide.python.org/setup/)
 for more information.
 
 2.1 Flavors of universal binaries
 .................................
 
 It is possible to build a number of flavors of the universal binary build,
-the default is a 32-bit only binary (i386 and ppc). Note that starting with
-Xcode 4, the build tools no longer support ppc. The flavor can be
-specified using the option ``--with-universal-archs=VALUE``. The following
+the default is a 32-bit only binary (i386 and ppc) in build environments that
+support ppc (10.4 with Xcode 2, 10.5 and 10.6 with Xcode 3) or an
+Intel-32/-64-bit binary (i386 and X86_64) in build environments that do not
+support ppc (Xcode 4 on 10.6 and later systems).  The flavor can be specified
+using the configure option ``--with-universal-archs=VALUE``. The following
 values are available:
 
   * ``intel``:	  ``i386``, ``x86_64``
 
+  * ``intel-32``: ``i386``
+
+  * ``intel-64``: ``x86_64``
+
   * ``32-bit``:   ``ppc``, ``i386``
 
   * ``3-way``:	  ``i386``, ``x86_64``, ``ppc``
@@ -178,14 +181,14 @@
 --------------------------------------------------------------------------
 
 The main reason is because you want to create GUI programs in Python. With the
-exception of X11/XDarwin-based GUI toolkits all GUI programs need to be run 
+exception of X11/XDarwin-based GUI toolkits all GUI programs need to be run
 from a Mac OS X application bundle (".app").
 
 While it is technically possible to create a .app without using frameworks you
 will have to do the work yourself if you really want this.
 
 A second reason for using frameworks is that they put Python-related items in
-only two places: "/Library/Framework/Python.framework" and 
+only two places: "/Library/Framework/Python.framework" and
 "/Applications/Python <VERSION>" where ``<VERSION>`` can be e.g. "3.4",
 "2.7", etc.  This simplifies matters for users installing
 Python from a binary distribution if they want to get rid of it again. Moreover,
@@ -222,7 +225,7 @@
 This directory contains a Makefile that will create a couple of python-related
 applications (full-blown OS X .app applications, that is) in
 "/Applications/Python <VERSION>", and a hidden helper application Python.app
-inside the Python.framework, and unix tools "python" and "pythonw" into
+inside the Python.framework, and unix tools including "python" into
 /usr/local/bin.  In addition it has a target "installmacsubtree" that installs
 the relevant portions of the Mac subtree into the Python.framework.
 
@@ -232,11 +235,11 @@
  1. ./configure --enable-framework
 
  2. make
- 
+
  3. make install
 
 This sequence will put the framework in ``/Library/Framework/Python.framework``,
-the applications in ``/Applications/Python <VERSION>`` and the unix tools in 
+the applications in ``/Applications/Python <VERSION>`` and the unix tools in
 ``/usr/local/bin``.
 
 Installing in another place, for instance ``$HOME/Library/Frameworks`` if you
@@ -313,7 +316,7 @@
 use your normal build directory nor does it install into /.
 
 Because of the way the script locates the files it needs you have to run it
-from within the BuildScript directory. The script accepts a number of 
+from within the BuildScript directory. The script accepts a number of
 command-line arguments, run it with --help for more information.
 
 Configure warnings
@@ -363,4 +366,4 @@
 
   *  http://www.python.org/community/sigs/current/pythonmac-sig/
 
-  *  http://docs.python.org/devguide/
+  *  https://devguide.python.org/
diff --git a/Mac/Resources/app/Info.plist.in b/Mac/Resources/app/Info.plist.in
index a0bb971..abe9ae2 100644
--- a/Mac/Resources/app/Info.plist.in
+++ b/Mac/Resources/app/Info.plist.in
@@ -37,7 +37,7 @@
 	<key>CFBundleInfoDictionaryVersion</key>
 	<string>6.0</string>
 	<key>CFBundleLongVersionString</key>
-	<string>%version%, (c) 2001-2016 Python Software Foundation.</string>
+	<string>%version%, (c) 2001-2018 Python Software Foundation.</string>
 	<key>CFBundleName</key>
 	<string>Python</string>
 	<key>CFBundlePackageType</key>
diff --git a/Mac/Resources/framework/Info.plist.in b/Mac/Resources/framework/Info.plist.in
index fcba7d9..c1ea9f6 100644
--- a/Mac/Resources/framework/Info.plist.in
+++ b/Mac/Resources/framework/Info.plist.in
@@ -17,9 +17,9 @@
 	<key>CFBundlePackageType</key>
 	<string>FMWK</string>
 	<key>CFBundleShortVersionString</key>
-	<string>%VERSION%, (c) 2001-2016 Python Software Foundation.</string>
+	<string>%VERSION%, (c) 2001-2018 Python Software Foundation.</string>
 	<key>CFBundleLongVersionString</key>
-	<string>%VERSION%, (c) 2001-2016 Python Software Foundation.</string>
+	<string>%VERSION%, (c) 2001-2018 Python Software Foundation.</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
diff --git a/Makefile.pre.in b/Makefile.pre.in
index e288964..9297e7f 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -38,10 +38,9 @@
 LINKCC=		@LINKCC@
 AR=		@AR@
 RANLIB=		@RANLIB@
-SVNVERSION=	@SVNVERSION@
-HGVERSION=	@HGVERSION@
-HGTAG=		@HGTAG@
-HGBRANCH=	@HGBRANCH@
+GITVERSION=	@GITVERSION@
+GITTAG=		@GITTAG@
+GITBRANCH=	@GITBRANCH@
 PGO_PROF_GEN_FLAG=@PGO_PROF_GEN_FLAG@
 PGO_PROF_USE_FLAG=@PGO_PROF_USE_FLAG@
 LLVM_PROF_MERGER=@LLVM_PROF_MERGER@
@@ -200,6 +199,7 @@
 PYTHON=		python$(EXE)
 BUILDPYTHON=	python$(BUILDEXE)
 
+PYTHON_FOR_REGEN=@PYTHON_FOR_REGEN@
 PYTHON_FOR_BUILD=@PYTHON_FOR_BUILD@
 _PYTHON_HOST_PLATFORM=@_PYTHON_HOST_PLATFORM@
 HOST_GNU_TYPE=  @host@
@@ -234,11 +234,6 @@
 
 
 ##########################################################################
-# Grammar
-GRAMMAR_H=	Include/graminit.h
-GRAMMAR_C=	Python/graminit.c
-GRAMMAR_INPUT=	$(srcdir)/Grammar/Grammar
-
 
 LIBFFI_INCLUDEDIR=	@LIBFFI_INCLUDEDIR@
 
@@ -298,29 +293,6 @@
 PGENOBJS=	$(POBJS) $(PGOBJS)
 
 ##########################################################################
-# AST
-AST_H_DIR=	Include
-AST_H=		$(AST_H_DIR)/Python-ast.h
-AST_C_DIR=	Python
-AST_C=		$(AST_C_DIR)/Python-ast.c
-AST_ASDL=	$(srcdir)/Parser/Python.asdl
-
-ASDLGEN_FILES=	$(srcdir)/Parser/asdl.py $(srcdir)/Parser/asdl_c.py
-# XXX Note that a build now requires Python exist before the build starts
-ASDLGEN=	$(srcdir)/Parser/asdl_c.py
-
-##########################################################################
-# Python
-
-OPCODETARGETS_H= \
-		$(srcdir)/Python/opcode_targets.h
-		
-OPCODETARGETGEN= \
-		$(srcdir)/Python/makeopcodetargets.py
-
-OPCODETARGETGEN_FILES= \
-		$(OPCODETARGETGEN) $(srcdir)/Lib/opcode.py
-
 PYTHON_OBJS=	\
 		Python/_warnings.o \
 		Python/Python-ast.o \
@@ -429,7 +401,16 @@
 
 # Default target
 all:		@DEF_MAKE_ALL_RULE@
-build_all:	$(BUILDPYTHON) oldsharedmods sharedmods gdbhooks
+build_all:	check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks
+
+# Check that the source is clean when building out of source.
+check-clean-src:
+	@if test -n "$(VPATH)" -a -f "$(srcdir)/Modules/python.o"; then \
+		echo "Error: The source directory ($(srcdir)) is not clean" ; \
+		echo "Building Python out of the source tree (in $(abs_builddir)) requires a clean source tree ($(abs_srcdir))" ; \
+		echo "Try to run: make -C \"$(srcdir)\" clean" ; \
+		exit 1; \
+	fi
 
 # Compile a binary with profile guided optimization.
 profile-opt:
@@ -456,7 +437,7 @@
 
 run_profile_task:
 	: # FIXME: can't run for a cross build
-	$(LLVM_PROF_FILE) ./$(BUILDPYTHON) $(PROFILE_TASK) || true
+	$(LLVM_PROF_FILE) $(RUNSHARED) ./$(BUILDPYTHON) $(PROFILE_TASK) || true
 
 build_all_merge_profile:
 	$(LLVM_PROF_MERGER)
@@ -494,9 +475,8 @@
 	@echo "lcov report at $(COVERAGE_REPORT)/index.html"
 	@echo
 
-coverage-report:
-	: # force rebuilding of parser
-	@touch $(GRAMMAR_INPUT)
+# Force regeneration of parser
+coverage-report: regen-grammar
 	: # build with coverage info
 	$(MAKE) coverage
 	: # run tests, ignore failures
@@ -645,6 +625,12 @@
 		echo "-----------------------------------------------"; \
 	fi
 
+
+############################################################################
+# Regenerate all generated files
+
+regen-all: regen-opcode-targets regen-grammar regen-ast
+
 ############################################################################
 # Special rules for object files
 
@@ -656,10 +642,9 @@
 		$(MODOBJS) \
 		$(srcdir)/Modules/getbuildinfo.c
 	$(CC) -c $(PY_CFLAGS) \
-	      -DSVNVERSION="\"`LC_ALL=C $(SVNVERSION)`\"" \
-	      -DHGVERSION="\"`LC_ALL=C $(HGVERSION)`\"" \
-	      -DHGTAG="\"`LC_ALL=C $(HGTAG)`\"" \
-	      -DHGBRANCH="\"`LC_ALL=C $(HGBRANCH)`\"" \
+	      -DGITVERSION="\"`LC_ALL=C $(GITVERSION)`\"" \
+	      -DGITTAG="\"`LC_ALL=C $(GITTAG)`\"" \
+	      -DGITBRANCH="\"`LC_ALL=C $(GITBRANCH)`\"" \
 	      -o $@ $(srcdir)/Modules/getbuildinfo.c
 
 Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile
@@ -679,15 +664,18 @@
 
 Modules/pwdmodule.o: $(srcdir)/Modules/pwdmodule.c $(srcdir)/Modules/posixmodule.h
 
-$(GRAMMAR_H): @GENERATED_COMMENT@ $(GRAMMAR_INPUT) $(PGEN)
-	@$(MKDIR_P) Include
-	$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
-$(GRAMMAR_C): @GENERATED_COMMENT@ $(GRAMMAR_H)
-	touch $(GRAMMAR_C)
-
 $(PGEN):	$(PGENOBJS)
 		$(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
 
+.PHONY: regen-grammar
+regen-grammar: $(PGEN)
+	# Regenerate Include/graminit.h and Python/graminit.c
+	# from Grammar/Grammar using pgen
+	@$(MKDIR_P) Include
+	$(PGEN) $(srcdir)/Grammar/Grammar \
+		$(srcdir)/Include/graminit.h \
+		$(srcdir)/Python/graminit.c
+
 Parser/grammar.o:	$(srcdir)/Parser/grammar.c \
 				$(srcdir)/Include/token.h \
 				$(srcdir)/Include/grammar.h
@@ -697,15 +685,20 @@
 
 Parser/pgenmain.o:	$(srcdir)/Include/parsetok.h
 
-$(AST_H): $(AST_ASDL) $(ASDLGEN_FILES)
-	$(MKDIR_P) $(AST_H_DIR)
-	$(ASDLGEN) -h $(AST_H_DIR) $(AST_ASDL)
+.PHONY=regen-ast
+regen-ast:
+	# Regenerate Include/Python-ast.h using Parser/asdl_c.py -h
+	$(MKDIR_P) $(srcdir)/Include
+	$(PYTHON_FOR_REGEN) $(srcdir)/Parser/asdl_c.py \
+		-h $(srcdir)/Include \
+		$(srcdir)/Parser/Python.asdl
+	# Regenerate Python/Python-ast.c using Parser/asdl_c.py -c
+	$(MKDIR_P) $(srcdir)/Python
+	$(PYTHON_FOR_REGEN) $(srcdir)/Parser/asdl_c.py \
+		-c $(srcdir)/Python \
+		$(srcdir)/Parser/Python.asdl
 
-$(AST_C): $(AST_ASDL) $(ASDLGEN_FILES)
-	$(MKDIR_P) $(AST_C_DIR)
-	$(ASDLGEN) -c $(AST_C_DIR) $(AST_ASDL)
-
-Python/compile.o Python/symtable.o Python/ast.o: $(GRAMMAR_H) $(AST_H)
+Python/compile.o Python/symtable.o Python/ast.o: $(srcdir)/Include/graminit.h $(srcdir)/Include/Python-ast.h
 
 Python/getplatform.o: $(srcdir)/Python/getplatform.c
 		$(CC) -c $(PY_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c
@@ -740,10 +733,14 @@
 Objects/stringobject.o: $(srcdir)/Objects/stringobject.c \
 				$(STRINGLIB_HEADERS)
 
-$(OPCODETARGETS_H): $(OPCODETARGETGEN_FILES)
-	$(OPCODETARGETGEN) $(OPCODETARGETS_H)
+.PHONY: regen-opcode-targets
+regen-opcode-targets:
+	# Regenerate Python/opcode_targets.h from Lib/opcode.py
+	# using Python/makeopcodetargets.py
+	$(PYTHON_FOR_REGEN) $(srcdir)/Python/makeopcodetargets.py \
+		$(srcdir)/Python/opcode_targets.h
 
-Python/ceval.o: $(OPCODETARGETS_H)
+Python/ceval.o: $(srcdir)/Python/opcode_targets.h
 
 Python/formatter_unicode.o: $(srcdir)/Python/formatter_unicode.c \
 				$(STRINGLIB_HEADERS)
@@ -838,7 +835,7 @@
 		Include/weakrefobject.h \
 		pyconfig.h \
 		$(PARSER_HEADERS) \
-		$(AST_H)
+		$(srcdir)/Include/Python-ast.h
 
 $(LIBRARY_OBJS) $(MODOBJS) Modules/python.o: $(PYTHON_HEADERS)
 
@@ -853,15 +850,17 @@
 # generated bytecode.  This is sometimes a very shy bug needing a lot of
 # sample data.
 
+.PHONY: test testall testuniversal buildbottest pythoninfo
+
 TESTOPTS=	-l $(EXTRATESTOPTS)
 TESTPROG=	$(srcdir)/Lib/test/regrtest.py
 TESTPYTHON=	$(RUNSHARED) ./$(BUILDPYTHON) -Wd -3 -E -tt $(TESTPYTHONOPTS)
-test:		all platform
+test:		@DEF_MAKE_RULE@ platform
 		-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
 		-$(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
 		$(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
 
-testall:	all platform
+testall:	@DEF_MAKE_RULE@ platform
 		-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
 		$(TESTPYTHON) $(srcdir)/Lib/compileall.py
 		-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
@@ -870,7 +869,7 @@
 
 #  Run the unitests for both architectures in a Universal build on OSX
 #  Must be run on an Intel box.
-testuniversal:	all platform
+testuniversal:	@DEF_MAKE_RULE@ platform
 		if [ `arch` != 'i386' ];then \
 			echo "This can only be used on OSX/i386" ;\
 			exit 1 ;\
@@ -887,24 +886,35 @@
 		-@if which pybuildbot.identify >/dev/null 2>&1; then \
 			pybuildbot.identify "CC='$(CC)'" "CXX='$(CXX)'"; \
 		fi
-		$(TESTPYTHON) -R $(TESTPROG) -uall -rwW $(TESTOPTS)
+		$(TESTPYTHON) -R $(TESTPROG) -uall --slowest -rwW $(TESTOPTS)
+
+pythoninfo: build_all
+		$(RUNSHARED) ./$(BUILDPYTHON) -m test.pythoninfo
 
 QUICKTESTOPTS=	$(TESTOPTS) -x test_subprocess test_io test_lib2to3 \
 		test_multibytecodec test_urllib2_localnet test_itertools \
 		test_multiprocessing test_mailbox test_socket test_poll \
 		test_select test_zipfile
-quicktest:	all platform
+quicktest:	@DEF_MAKE_RULE@ platform
 		-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
 		-$(TESTPYTHON) $(TESTPROG) $(QUICKTESTOPTS)
 		$(TESTPYTHON) $(TESTPROG) $(QUICKTESTOPTS)
 
 MEMTESTOPTS=    $(QUICKTESTOPTS) -x test_dl test___all__ test_fork1 \
 		test_longexp
-memtest:	all platform
+memtest:	@DEF_MAKE_RULE@ platform
 		-rm -f $(srcdir)/Lib/test/*.py[co]
 		-$(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS)
 		$(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS)
 
+# SSL tests
+.PHONY: multisslcompile multissltest
+multisslcompile: build_all
+	$(RUNSHARED) ./$(BUILDPYTHON) Tools/ssl/multissltests.py --compile-only
+
+multissltest: build_all
+	$(RUNSHARED) ./$(BUILDPYTHON) Tools/ssl/multissltests.py
+
 # Install everything
 install:	@FRAMEWORKINSTALLFIRST@ commoninstall bininstall maninstall @FRAMEWORKINSTALLLAST@
 	if test "x$(ENSUREPIP)" != "xno"  ; then \
@@ -927,7 +937,7 @@
 			$$ensurepip --root=$(DESTDIR)/ ; \
 	fi
 
-commoninstall:	@FRAMEWORKALTINSTALLFIRST@ \
+commoninstall:	check-clean-src @FRAMEWORKALTINSTALLFIRST@ \
 		altbininstall libinstall inclinstall libainstall \
 		sharedinstall oldsharedinstall altmaninstall \
 		@FRAMEWORKALTINSTALLLAST@
@@ -1044,6 +1054,7 @@
 		test/data test/cjkencodings test/decimaltestdata test/xmltestdata \
 		test/imghdrdata \
 		test/subprocessdata \
+		test/support \
 		test/tracedmodules \
 		encodings compiler hotshot \
 		email email/mime email/test email/test/data \
@@ -1190,7 +1201,7 @@
 # pkgconfig directory
 LIBPC=		$(LIBDIR)/pkgconfig
 
-libainstall:	all python-config
+libainstall:	@DEF_MAKE_RULE@ python-config
 	@for i in $(LIBDIR) $(LIBP) $(LIBPL) $(LIBPC); \
 	do \
 		if test ! -d $(DESTDIR)$$i; then \
@@ -1357,18 +1368,20 @@
 	$(SHELL) config.status --recheck
 	$(SHELL) config.status
 
-# Rebuild the configure script from configure.ac; also rebuild pyconfig.h.in
+# Regenerate configure and pyconfig.h.in
+.PHONY: autoconf
 autoconf:
+	# Regenerate the configure script from configure.ac using autoconf
 	(cd $(srcdir); autoconf)
+	# Regenerate pyconfig.h.in from configure.ac using autoheader
 	(cd $(srcdir); autoheader)
 
 # Create a tags file for vi
 tags::
-	cd $(srcdir); \
-	ctags -w -t Include/*.h; \
-	for i in $(SRCDIRS); do ctags -w -t -a $$i/*.[ch]; \
-	done; \
-	sort -o tags tags
+	ctags -w $(srcdir)/Include/*.h
+	for i in $(SRCDIRS); do ctags -f tags -w -a $(srcdir)/$$i/*.[ch]; done
+	ctags -f tags -w -a $(srcdir)/Modules/_ctypes/*.[ch]
+	LC_ALL=C sort -o tags tags
 
 # Create a tags file for GNU Emacs
 TAGS::
@@ -1376,11 +1389,6 @@
 	etags Include/*.h; \
 	for i in $(SRCDIRS); do etags -a $$i/*.[ch]; done
 
-# Touch generated files
-touch:
-	cd $(srcdir); \
-	touch Include/Python-ast.h Python/Python-ast.c
-
 # Sanitation targets -- clean leaves libraries, executables and tags
 # files, which clobber removes as well
 pycremoval:
@@ -1430,7 +1438,7 @@
 				     -exec rm -f {} ';'
 
 # Check for smelly exported symbols (not starting with Py/_Py)
-smelly: all
+smelly: @DEF_MAKE_RULE@
 	nm -p $(LIBRARY) | \
 		sed -n "/ [TDB] /s/.* //p" | grep -v "^_*Py" | sort -u; \
 
@@ -1472,13 +1480,13 @@
 Python/thread.o: @THREADHEADERS@
 
 # Declare targets that aren't real files
-.PHONY: all build_all sharedmods oldsharedmods test quicktest memtest
+.PHONY: all build_all sharedmods check-clean-src oldsharedmods test quicktest memtest
 .PHONY: install altinstall oldsharedinstall bininstall altbininstall
 .PHONY: maninstall libinstall inclinstall libainstall sharedinstall
 .PHONY: frameworkinstall frameworkinstallframework frameworkinstallstructure
 .PHONY: frameworkinstallmaclib frameworkinstallapps frameworkinstallunixtools
-.PHONY: frameworkaltinstallunixtools recheck autoconf clean clobber distclean
-.PHONY: smelly funny patchcheck touch altmaninstall commoninstall
+.PHONY: frameworkaltinstallunixtools recheck clean clobber distclean
+.PHONY: smelly funny patchcheck altmaninstall commoninstall
 .PHONY: gdbhooks
 
 # IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/Misc/ACKS b/Misc/ACKS
index 9cbc230..835d361 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -37,6 +37,7 @@
 Mark Anacker
 Shashwat Anand
 Anders Andersen
+Tycho Andersen
 John Anderson
 Pehr Anderson
 Erik Andersén
@@ -93,6 +94,7 @@
 Anthony Baxter
 Mike Bayer
 Samuel L. Bayer
+Bo Bayles
 Donald Beaudry
 David Beazley
 Carlo Beccarini
@@ -137,6 +139,7 @@
 Martin Bless
 Pablo Bleyer
 Erik van Blokland
+Stéphane Blondon
 Eric Blossom
 Sergey Bobrov
 Finn Bock
@@ -151,6 +154,7 @@
 Matias Bordese
 Jonas Borgström
 Jurjen Bos
+Jay Bosamiya
 Peter Bosch
 Dan Boswell
 Eric Bouck
@@ -260,6 +264,7 @@
 Robbie Clemons
 Steve Clift
 Hervé Coatanhay
+Riccardo Coccioli
 Nick Coghlan
 Josh Cogliati
 Dave Cole
@@ -314,6 +319,9 @@
 Jonathan Dasteel
 Pierre-Yves David
 A. Jesse Jiryu Davis
+Jake Davis
+Jamie (James C.) Davis
+Ratnadeep Debnath
 Merlijn van Deen
 John DeGood
 Ned Deily
@@ -321,6 +329,7 @@
 Arnaud Delobelle
 Konrad Delong
 Erik Demaine
+Jeroen Demeyer
 Martin Dengler
 John Dennis
 L. Peter Deutsch
@@ -372,6 +381,7 @@
 David Edelsohn
 John Edmonds
 Grant Edwards
+Zvi Effron
 John Ehresman
 Tal Einat
 Eric Eisner
@@ -499,6 +509,7 @@
 Tim Graham
 Nathaniel Gray
 Eddy De Greef
+Duane Griffin
 Grant Griffin
 Andrea Griffini
 Duncan Grisby
@@ -506,6 +517,7 @@
 Eric Groo
 Dag Gruneau
 Filip Gruszczyński
+Grzegorz Grzywacz
 Thomas Guettler
 Anuj Gupta
 Michael Guravage
@@ -539,6 +551,7 @@
 Brian Harring
 Jonathan Hartley
 Travis B. Hartwell
+Shane Harvey
 Larry Hastings
 Tim Hatch
 Shane Hathaway
@@ -711,11 +724,13 @@
 Lawrence Kesteloot
 Vivek Khera
 Dhiru Kholia
+Sanyam Khurana
 Mads Kiilerich
 Jason Killen
 Jan Kim
 Taek Joo Kim
 Sam Kimbrel
+Tomohiko Kinebuchi
 W. Trevor King
 Paul Kippes
 Steve Kirsch
@@ -733,6 +748,7 @@
 Lenny Kneler
 Pat Knight
 Jeff Knupp
+Nicholas Kobald
 Kubilay Kocak
 Greg Kochanski
 Manvisha Kodali
@@ -754,6 +770,7 @@
 Maksim Kozyarchuk
 Stefan Krah
 Bob Kras
+Oleg Krasnikov
 Sebastian Kreft
 Holger Krekel
 Michael Kremer
@@ -763,6 +780,7 @@
 Hannu Krosing
 Andrej Krpic
 Ivan Krstić
+Anselm Kruis
 Steven Kryskalla
 Andrew Kuchling
 Dave Kuhlman
@@ -790,6 +808,7 @@
 Simon Law
 Julia Lawall
 Chris Lawrence
+Michael Lazar
 Brian Leair
 Mathieu Leduc-Hamel
 Amandine Lee
@@ -899,6 +918,7 @@
 Pam McA'Nulty
 Matt McClure
 Rebecca McCreary
+Sean McCully
 Kirk McDonald
 Chris McDonough
 Greg McFarlane
@@ -986,6 +1006,7 @@
 Max Neunhöffer
 George Neville-Neil
 Hieu Nguyen
+Nam Nguyen
 Johannes Nicolai
 Samuel Nicolary
 Jonathan Niehof
@@ -1015,6 +1036,7 @@
 Pascal Oberndoerfer
 Jeffrey Ollie
 Adam Olsen
+Bryan Olson
 Grant Olson
 Koray Oner
 Piet van Oostrum
@@ -1023,6 +1045,7 @@
 Douglas Orr
 William Orr
 Michele Orrù
+Tomáš Orsava
 Oleg Oshmyan
 Denis S. Otkidach
 Peter Otten
@@ -1217,6 +1240,7 @@
 Chris Ryland
 Constantina S.
 Matthieu S
+Cheryl Sabella
 Patrick Sabin
 Sébastien Sablé
 Suman Saha
@@ -1329,6 +1353,7 @@
 Per Spilling
 Joshua Spoerri
 Noah Spurrier
+Zackery Spytz
 Nathan Srebro
 RajGopal Srinivasan
 Tage Stabell-Kulo
@@ -1540,6 +1565,7 @@
 Darren Worrall
 Thomas Wouters
 Daniel Wozniak
+Marcin Niemira
 Heiko Wundram
 Doug Wyatt
 Xiang Zhang
@@ -1547,11 +1573,13 @@
 Florent Xicluna
 Alakshendra Yadav
 Hirokazu Yamamoto
+Masayuki Yamamoto
 Ka-Ping Yee
 Jason Yeo
 EungJun Yi
 Bob Yodlowski
 Danny Yoo
+Wonsup Yoon
 Rory Yorke
 George Yoshida
 Kazuhiro Yoshida
@@ -1573,3 +1601,4 @@
 Jelle Zijlstra
 Gennadiy Zlobin
 Peter Åstrand
+Dhushyanth Ramasamy
diff --git a/Misc/NEWS b/Misc/NEWS
deleted file mode 100644
index b779e82..0000000
--- a/Misc/NEWS
+++ /dev/null
@@ -1,12207 +0,0 @@
-+++++++++++
-Python News
-+++++++++++
-
-What's New in Python 2.7.13
-===========================
-
-*Release date: 2016-12-17*
-
-Core and Builtins
------------------
-
-- Revert a37cc3d926ec (Issue #5322).
-
-
-What's New in Python 2.7.13 release candidate 1?
-================================================
-
-*Release date: 2016-12-03*
-
-Core and Builtins
------------------
-
-- Issue #28847: dumbdbm no longer writes the index file in when it is not
-  changed and supports reading read-only files.
-
-- Issue #11145: Fixed miscellaneous issues with C-style formatting of types
-  with custom __oct__ and __hex__.
-
-- Issue #24469: Fixed memory leak caused by int subclasses without overridden
-  tp_free (e.g. C-inherited Cython classes).
-
-- Issue #19398: Extra slash no longer added to sys.path components in case of
-  empty compile-time PYTHONPATH components.
-
-- Issue #21720: Improve exception message when the type of fromlist is unicode.
-  fromlist parameter of __import__() only accepts str in Python 2 and this
-  will help to identify the problem especially when the unicode_literals
-  future import is used.
-
-- Issue #26906: Resolving special methods of uninitialized type now causes
-  implicit initialization of the type instead of a fail.
-
-- Issue #18287: PyType_Ready() now checks that tp_name is not NULL.
-  Original patch by Niklas Koep.
-
-- Issue #24098: Fixed possible crash when AST is changed in process of
-  compiling it.
-
-- Issue #28350: String constants with null character no longer interned.
-
-- Issue #27942: String constants now interned recursively in tuples and frozensets.
-
-- Issue #15578: Correctly incref the parent module while importing.
-
-- Issue #26307: The profile-opt build now applies PGO to the built-in modules.
-
-- Issue #26020: set literal evaluation order did not match documented behaviour.
-
-- Issue #27870: A left shift of zero by a large integer no longer attempts
-  to allocate large amounts of memory.
-
-- Issue #25604: Fix a minor bug in integer true division; this bug could
-  potentially have caused off-by-one-ulp results on platforms with
-  unreliable ldexp implementations.
-
-- 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 #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.
-
-- Issue #27514: Make having too many statically nested blocks a SyntaxError
-  instead of SystemError.
-
-Library
--------
-
-- Issue #25659: In ctypes, prevent a crash calling the from_buffer() and
-  from_buffer_copy() methods on abstract classes like Array.
-
-- Issue #28563: Fixed possible DoS and arbitrary code execution when handle
-  plural form selections in the gettext module.  The expression parser now
-  supports exact syntax supported by GNU gettext.
-
-- Issue #28387: Fixed possible crash in _io.TextIOWrapper deallocator when
-  the garbage collector is invoked in other thread.  Based on patch by
-  Sebastian Cufre.
-
-- Issue #28449: tarfile.open() with mode "r" or "r:" now tries to open a tar
-  file with compression before trying to open it without compression.  Otherwise
-  it had 50% chance failed with ignore_zeros=True.
-
-- Issue #25464: Fixed HList.header_exists() in Tix module by adding
-  a workaround to Tix library bug.
-
-- Issue #28488: shutil.make_archive() no longer adds entry "./" to ZIP archive.
-
-- Issue #28480: Fix error building _sqlite3 module when multithreading is
-  disabled.
-
-- Issue #24452: Make webbrowser support Chrome on Mac OS X.
-
-- Issue #26293: Fixed writing ZIP files that starts not from the start of the
-  file.  Offsets in ZIP file now are relative to the start of the archive in
-  conforming to the specification.
-
-- Fix possible integer overflows and crashes in the mmap module with unusual
-  usage patterns.
-
-- Issue #27897: Fixed possible crash in sqlite3.Connection.create_collation()
-  if pass invalid string-like object as a name.  Original patch by Xiang Zhang.
-
-- Issue #1703178: Fix the ability to pass the --link-objects option to the
-  distutils build_ext command.
-
-- Issue #28253: Fixed calendar functions for extreme months: 0001-01
-  and 9999-12.
-
-  Methods itermonthdays() and itermonthdays2() are reimplemented so
-  that they don't call itermonthdates() which can cause datetime.date
-  under/overflow.
-
-- Issue #27963: Fixed possible null pointer dereference in
-  ctypes.set_conversion_mode().  Patch by Xiang Zhang.
-
-- Issue #28284: Strengthen resistance of ``_json.encode_basestring_ascii()`` to
-  integer overflow.
-
-- Issue #27611: Fixed support of default root window in the Tix module.
-
-- Issue #24363: When parsing HTTP header fields, if an invalid line is
-  encountered, skip it and continue parsing.  Previously, no more header
-  fields were parsed, which could lead to fields for HTTP framing like
-  Content-Length and Transfer-Encoding being overlooked.
-
-- Issue #27599: Fixed buffer overrun in binascii.b2a_qp() and binascii.a2b_qp().
-
-- Issue #25969: Update the lib2to3 grammar to handle the unpacking
-  generalizations added in 3.5.
-
-- Issue #24594: Validates persist parameter when opening MSI database
-
-- Issue #27570: Avoid zero-length memcpy() etc calls with null source
-  pointers in the "ctypes" and "array" modules.
-
-- Issue #22450: urllib now includes an "Accept: */*" header among the
-  default headers.  This makes the results of REST API requests more
-  consistent and predictable especially when proxy servers are involved.
-
-- lib2to3.pgen3.driver.load_grammar() now creates a stable cache file
-  between runs given the same Grammar.txt input regardless of the hash
-  randomization setting.
-
-- Issue #27691: Fix ssl module's parsing of GEN_RID subject alternative name
-  fields in X.509 certs.
-
-- Issue #27850: Remove 3DES from ssl module's default cipher list to counter
-  measure sweet32 attack (CVE-2016-2183).
-
-- Issue #27766: Add ChaCha20 Poly1305 to ssl module's default ciper list.
-  (Required OpenSSL 1.1.0 or LibreSSL).
-
-- Issue #26470: Port ssl and hashlib module to OpenSSL 1.1.0.
-
-- Issue #27944: Fix some memory-corruption bugs in the log reading code of the
-  _hotshot module.
-
-- Issue #27934: Use ``float.__repr__`` instead of plain ``repr`` when JSON-
-  encoding an instance of a float subclass. Thanks Eddie James.
-
-- Issue #27861: Fixed a crash in sqlite3.Connection.cursor() when a factory
-  creates not a cursor.  Patch by Xiang Zhang.
-
-- Issue #19884: Avoid spurious output on OS X with Gnu Readline.
-
-- Issue #10513: Fix a regression in Connection.commit().  Statements should
-  not be reset after a commit.
-
-- Issue #2466: posixpath.ismount now correctly recognizes mount points which
-  the user does not have permission to access.
-
-- Issue #27783: Fix possible usage of uninitialized memory in operator.methodcaller.
-
-- Issue #27774: Fix possible Py_DECREF on unowned object in _sre.
-
-- Issue #27760: Fix possible integer overflow in binascii.b2a_qp.
-
-- In the curses module, raise an error if window.getstr() or window.instr() is
-  passed a negative value.
-
-- Issue #27758: Fix possible integer overflow in the _csv module for large record
-  lengths.
-
-- Issue #23369: Fixed possible integer overflow in
-  _json.encode_basestring_ascii.
-
-- 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
-  2 or 4 GiB.
-
-- 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.
-
-- 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.
-
-- Issue #27079: Fixed curses.ascii functions isblank(), iscntrl() and ispunct().
-
-- Issue #22636: Avoid shell injection problems with
-  ctypes.util.find_library().
-
-- Issue #27330: Fixed possible leaks in the ctypes module.
-
-- Issue #27238: Got rid of bare excepts in the turtle module.  Original patch
-  by Jelle Zijlstra.
-
-- Issue #26386: Fixed ttk.TreeView selection operations with item id's
-  containing spaces.
-
-- Issue #25455: Fixed a crash in repr of cElementTree.Element with recursive tag.
-
-- Issue #21201: Improves readability of multiprocessing error message.  Thanks
-  to Wojciech Walczak for patch.
-
-IDLE
-----
-
-- Issue #27854: Make Help => IDLE Help work again on Windows.
-  Include idlelib/help.html in 2.7 Windows installer.
-
-- Issue #25507: Add back import needed for 2.x encoding warning box.
-  Add pointer to 'Encoding declaration' in Language Reference.
-
-- Issue #15308: Add 'interrupt execution' (^C) to Shell menu.
-  Patch by Roger Serwy, updated by Bayard Randel.
-
-- Issue #27922: Stop IDLE tests from 'flashing' gui widgets on the screen.
-
-- Issue #17642: add larger font sizes for classroom projection.
-
-- Add version to title of IDLE help window.
-
-- Issue #25564: In section on IDLE -- console differences, mention that
-  using exec means that __builtins__ is defined for each statement.
-
-- Issue #27714: text_textview and test_autocomplete now pass when re-run
-  in the same process.  This occurs when test_idle fails when run with the
-  -w option but without -jn.  Fix warning from test_config.
-
-- Issue #27452: add line counter and crc to IDLE configHandler test dump.
-
-- Issue #27365: Allow non-ascii chars in IDLE NEWS.txt, for contributor names.
-
-- Issue #27245: IDLE: Cleanly delete custom themes and key bindings.
-  Previously, when IDLE was started from a console or by import, a cascade
-  of warnings was emitted.  Patch by Serhiy Storchaka.
-
-Documentation
--------------
-
-- Issue #28513: Documented command-line interface of zipfile.
-
-- Issue #16484: Change the default PYTHONDOCS URL to "https:", and fix the
-  resulting links to use lowercase.  Patch by Sean Rodman, test by Kaushik
-  Nadikuditi.
-
-Tests
------
-
-- Issue #28666: Now test.test_support.rmtree is able to remove unwritable or
-  unreadable directories.
-
-- Issue #23839: Various caches now are cleared before running every test file.
-
-- Issue #27369: In test_pyexpat, avoid testing an error message detail that
-  changed in Expat 2.2.0.
-
-Build
------
-
-- Issue #10656: Fix out-of-tree building on AIX.  Patch by Tristan Carel and
-  Michael Haubenwallner.
-
-- Issue #26359: Rename --with-optimiations to --enable-optimizations.
-
-- Issue #28248: Update Windows build and OS X installers to use OpenSSL 1.0.2j.
-
-- Issue #28258: Fixed build with Estonian locale (distclean target in
-  Makefile).  Patch by Arfrever Frehtes Taifersar Arahesis.
-
-- Issue #26661: setup.py now detects system libffi with multiarch wrapper.
-
-- Issue #15819: The Include directory in the build tree is already searched;
-  drop unused code trying to add it again.
-
-- Issue #27566: Fix clean target in freeze makefile (patch by Lisa Roach)
-
-- Issue #27983: Cause lack of llvm-profdata tool when using clang as
-  required for PGO linking to be a configure time error rather than
-  make time when --with-optimizations is enabled.  Also improve our
-  ability to find the llvm-profdata tool on MacOS and some Linuxes.
-
-- Issue #26359: Add the --with-optimizations configure flag.
-
-- Issue #10910: Avoid C++ compilation errors on FreeBSD and OS X.
-  Also update FreedBSD version checks for the original ctype UTF-8 workaround.
-
-- Issue #27806: Fix 32-bit builds on macOS Sierra 10.12 broken by removal of
-  deprecated QuickTime/QuickTime.h header file.  Patch by Aleks Bunin.
-
-- Issue #28676: Prevent missing 'getentropy' declaration warning on macOS.
-  Initial patch by Gareth Rees.
-
-Tools/Demos
------------
-
-- Issue #27952: Get Tools/scripts/fixcid.py working with the current "re"
-  module, avoid invalid Python backslash escapes, and fix a bug parsing
-  escaped C quote signs.
-
-Windows
--------
-
-- Issue #27932: Prevent memory leak in win32_ver().
-
-- Issue #27888: Prevent Windows installer from displaying console windows and
-  failing when pip cannot be installed/uninstalled.
-
-Mac OS X
---------
-
-- Issue #28440: No longer add /Library/Python/site-packages, the Apple-supplied
-  system Python site-packages directory, to sys.path for macOS framework builds.
-  The coupling between the two Python instances often caused confusion and, as
-  of macOS 10.12, changes to the site-packages layout can cause pip component
-  installations to fail.  This change reverts the effects introduced in 2.7.0
-  by Issue #4865.  If you are using a package with both the Apple system Python
-  2.7 and a user-installed Python 2.7, you will need to ensure that copies of
-  the package are installed with both Python instances.
-
-
-What's New in Python 2.7.12?
-============================
-
-*Release date: 2016-06-25*
-
-Build
------
-
-- Issue #27641: The configure script now inserts comments into the makefile
-  to prevent the pgen executable from being cross-compiled.
-
-- Issue #26930: Update Windows builds to use OpenSSL 1.0.2h.
-
-IDLE
-----
-
-- Issue #27365: Fix about dialog.
-
-
-What's New in Python 2.7.12 release candidate 1?
-================================================
-
-*Release date: 2016-06-12*
-
-Core and Builtins
------------------
-
-- Issue #20041: Fixed TypeError when frame.f_trace is set to None.
-  Patch by Xavier de Gaye.
-
-- Issue #25702: A --with-lto configure option has been added that will
-  enable link time optimizations at build time during a make profile-opt.
-  Some compilers and toolchains are known to not produce stable code when
-  using LTO, be sure to test things thoroughly before relying on it.
-  It can provide a few % speed up over profile-opt alone.
-
-- Issue #26168: Fixed possible refleaks in failing Py_BuildValue() with the "N"
-  format unit.
-
-- Issue #27039: Fixed bytearray.remove() for values greater than 127.  Patch by
-  Joe Jevnik.
-
-- Issue #4806: Avoid masking the original TypeError exception when using star
-  (*) unpacking and the exception was raised from a generator.  Based on
-  patch by Hagen Fürstenau.
-
-- Issue #26659: Make the builtin slice type support cycle collection.
-
-- Issue #26718: super.__init__ no longer leaks memory if called multiple times.
-  NOTE: A direct call of super.__init__ is not endorsed!
-
-- Issue #13410: Fixed a bug in PyUnicode_Format where it failed to properly
-  ignore errors from a __int__() method.
-
-- Issue #26494: Fixed crash on iterating exhausting iterators.
-  Affected classes are generic sequence iterators, iterators of bytearray,
-  list, tuple, set, frozenset, dict, OrderedDict and corresponding views.
-
-- Issue #26581: If coding cookie is specified multiple times on a line in
-  Python source code file, only the first one is taken to account.
-
-- Issue #22836: Ensure exception reports from PyErr_Display() and
-  PyErr_WriteUnraisable() are sensible even when formatting them produces
-  secondary errors.  This affects the reports produced by
-  sys.__excepthook__() and when __del__() raises an exception.
-
-- Issue #22847: Improve method cache efficiency.
-
-- Issue #25843: When compiling code, don't merge constants if they are equal
-  but have a different types. For example, ``f1, f2 = lambda: 1, lambda: 1.0``
-  is now correctly compiled to two different functions: ``f1()`` returns ``1``
-  (``int``) and ``f2()`` returns ``1.0`` (``int``), even if ``1`` and ``1.0``
-  are equal.
-
-- Issue #22995: [UPDATE] Remove the one of the pickleability tests in
-  _PyObject_GetState() due to regressions observed in Cython-based projects.
-
-- Issue #25961: Disallowed null characters in the type name.
-
-- Issue #22995: Instances of extension types with a state that aren't
-  subclasses of list or dict and haven't implemented any pickle-related
-  methods (__reduce__, __reduce_ex__, __getnewargs__, __getnewargs_ex__,
-  or __getstate__), can no longer be pickled.  Including memoryview.
-
-- Issue #20440: Massive replacing unsafe attribute setting code with special
-  macro Py_SETREF.
-
-- Issue #25421: __sizeof__ methods of builtin types now use dynamic basic size.
-  This allows sys.getsize() to work correctly with their subclasses with
-  __slots__ defined.
-
-- Issue #19543: Added Py3k warning for decoding unicode.
-
-- Issue #24097: Fixed crash in object.__reduce__() if slot name is freed inside
-  __getattr__.
-
-- Issue #24731: Fixed crash on converting objects with special methods
-  __str__, __trunc__, and __float__ returning instances of subclasses of
-  str, long, and float to subclasses of str, long, and float correspondingly.
-
-- Issue #26478: Fix semantic bugs when using binary operators with dictionary
-  views and tuples.
-
-- Issue #26171: Fix possible integer overflow and heap corruption in
-  zipimporter.get_data().
-
-Library
--------
-
-- Issue #26556: Update expat to 2.1.1, fixes CVE-2015-1283.
-
-- Fix TLS stripping vulnerability in smptlib, CVE-2016-0772.  Reported by Team
-  Oststrom
-
-- Issue #7356: ctypes.util: Make parsing of ldconfig output independent of the
-  locale.
-
-- Issue #25738: Stop BaseHTTPServer.BaseHTTPRequestHandler.send_error() from
-  sending a message body for 205 Reset Content.  Also, don't send the
-  Content-Type header field in responses that don't have a body.  Based on
-  patch by Susumu Koshiba.
-
-- Issue #21313: Fix the "platform" module to tolerate when sys.version
-  contains truncated build information.
-
-- Issue #27211: Fix possible memory corruption in io.IOBase.readline().
-
-- Issue #27114: Fix SSLContext._load_windows_store_certs fails with
-  PermissionError
-
-- Issue #14132: Fix urllib.request redirect handling when the target only has
-  a query string.  Fix by Ján Janech.
-
-- Removed the requirements for the ctypes and modulefinder modules to be
-  compatible with earlier Python versions.
-
-- Issue #22274: In the subprocess module, allow stderr to be redirected to
-  stdout even when stdout is not redirected.  Patch by Akira Li.
-
-- Issue #12045: Avoid duplicate execution of command in ctypes.util._get_soname().
-  Patch by Sijin Joseph.
-
-- Issue #26960: Backported #16270 from Python 3 to Python 2, to prevent urllib
-  from hanging when retrieving certain FTP files.
-
-- Issue #25745: Fixed leaking a userptr in curses panel destructor.
-
-- Issue #17765: weakref.ref() no longer silently ignores keyword arguments.
-  Patch by Georg Brandl.
-
-- Issue #26873: xmlrpclib now raises ResponseError on unsupported type tags
-  instead of silently return incorrect result.
-
-- Issue #24114: Fix an uninitialized variable in `ctypes.util`.
-
-  The bug only occurs on SunOS when the ctypes implementation searches
-  for the `crle` program.  Patch by Xiang Zhang.  Tested on SunOS by
-  Kees Bos.
-
-- Issue #26864: In urllib, change the proxy bypass host checking against
-  no_proxy to be case-insensitive, and to not match unrelated host names that
-  happen to have a bypassed hostname as a suffix.  Patch by Xiang Zhang.
-
-- Issue #26804: urllib will prefer lower_case proxy environment variables over
-  UPPER_CASE or Mixed_Case ones. Patch contributed by Hans-Peter Jansen.
-
-- Issue #26837: assertSequenceEqual() now correctly outputs non-stringified
-  differing items.  This affects assertListEqual() and assertTupleEqual().
-
-- Issue #26822: itemgetter, attrgetter and methodcaller objects no longer
-  silently ignore keyword arguments.
-
-- Issue #26657: Fix directory traversal vulnerability with SimpleHTTPServer
-  on Windows.  This fixes a regression that was introduced in 2.7.7.  Based
-  on patch by Philipp Hagemeister.
-
-- Issue #19377: Add .svg to mimetypes.types_map.
-
-- Issue #13952: Add .csv to mimetypes.types_map.  Patch by Geoff Wilson.
-
-- Issue #16329: Add .webm to mimetypes.types_map.  Patch by Giampaolo Rodola'.
-
-- Issue #23735: Handle terminal resizing with Readline 6.3+ by installing our
-  own SIGWINCH handler.  Patch by Eric Price.
-
-- Issue #26644: Raise ValueError rather than SystemError when a negative
-  length is passed to SSLSocket.recv() or read().
-
-- Issue #23804: Fix SSL recv(0) and read(0) methods to return zero bytes
-  instead of up to 1024.
-
-- Issue #24266: Ctrl+C during Readline history search now cancels the search
-  mode when compiled with Readline 7.
-
-- Issue #23857: Implement PEP 493, adding a Python-2-only ssl module API and
-  environment variable to configure the default handling of SSL/TLS certificates
-  for HTTPS connections.
-
-- Issue #26313: ssl.py _load_windows_store_certs fails if windows cert store
-  is empty. Patch by Baji.
-
-- Issue #26513: Fixes platform module detection of Windows Server
-
-- Issue #23718: Fixed parsing time in week 0 before Jan 1.  Original patch by
-  Tamás Bence Gedai.
-
-- Issue #26177: Fixed the keys() method for Canvas and Scrollbar widgets.
-
-- Issue #15068: Got rid of excessive buffering in the fileinput module.
-  The bufsize parameter is no longer used.
-
-- Issue #2202: Fix UnboundLocalError in
-  AbstractDigestAuthHandler.get_algorithm_impls.  Initial patch by Mathieu Dupuy.
-
-- Issue #26475: Fixed debugging output for regular expressions with the (?x)
-  flag.
-
-- Issue #26385: Remove the file if the internal fdopen() call in
-  NamedTemporaryFile() fails.  Based on patch by Silent Ghost.
-
-- Issue #26309: In the "SocketServer" module, shut down the request (closing
-  the connected socket) when verify_request() returns false.  Based on patch
-  by Aviv Palivoda.
-
-- Issue #25939: On Windows open the cert store readonly in ssl.enum_certificates.
-
-- Issue #24303: Fix random EEXIST upon multiprocessing semaphores creation with
-  Linux PID namespaces enabled.
-
-- Issue #25698: Importing module if the stack is too deep no longer replaces
-  imported module with the empty one.
-
-- Issue #12923: Reset FancyURLopener's redirect counter even if there is an
-  exception.  Based on patches by Brian Brazil and Daniel Rocco.
-
-- Issue #25945: Fixed a crash when unpickle the functools.partial object with
-  wrong state.  Fixed a leak in failed functools.partial constructor.
-  "args" and "keywords" attributes of functools.partial have now always types
-  tuple and dict correspondingly.
-
-- Issue #19883: Fixed possible integer overflows in zipimport.
-
-- Issue #26147: xmlrpclib now works with unicode not encodable with used
-  non-UTF-8 encoding.
-
-- Issue #16620: Fixed AttributeError in msilib.Directory.glob().
-
-- Issue #21847: Fixed xmlrpclib on Unicode-disabled builds.
-
-- Issue #6500: Fixed infinite recursion in urllib2.Request.__getattr__().
-
-- Issue #26083: Workaround a subprocess bug that raises an incorrect
-  "ValueError: insecure string pickle" exception instead of the actual
-  exception on some platforms such as Mac OS X when an exception raised
-  in the forked child process prior to the exec() was large enough that
-  it overflowed the internal errpipe_read pipe buffer.
-
-- Issue #24103: Fixed possible use after free in ElementTree.iterparse().
-
-- Issue #20954: _args_from_interpreter_flags used by multiprocessing and some
-  tests no longer behaves incorrectly in the presence of the PYTHONHASHSEED
-  environment variable.
-
-- Issue #14285: When executing a package with the "python -m package" option,
-  and package initialization raises ImportError, a proper traceback is now
-  reported.
-
-- Issue #6478: _strptime's regexp cache now is reset after changing timezone
-  with time.tzset().
-
-- Issue #25718: Fixed copying object with state with boolean value is false.
-
-- Issue #25742: :func:`locale.setlocale` now accepts a Unicode string for
-  its second parameter.
-
-- Issue #10131: Fixed deep copying of minidom documents.  Based on patch
-  by Marian Ganisin.
-
-- Issue #25725: Fixed a reference leak in cPickle.loads() when unpickling
-  invalid data including tuple instructions.
-
-- Issue #25663: In the Readline completer, avoid listing duplicate global
-  names, and search the global namespace before searching builtins.
-
-- Issue #25688: Fixed file leak in ElementTree.iterparse() raising an error.
-
-- Issue #23914: Fixed SystemError raised by CPickle unpickler on broken data.
-
-- Issue #25924: Avoid unnecessary serialization of getaddrinfo(3) calls on
-  OS X versions 10.5 or higher.  Original patch by A. Jesse Jiryu Davis.
-
-- Issue #26406: Avoid unnecessary serialization of getaddrinfo(3) calls on
-  current versions of OpenBSD and NetBSD.  Patch by A. Jesse Jiryu Davis.
-
-IDLE
-----
-
-- Issue #5124: Paste with text selected now replaces the selection on X11.
-  This matches how paste works on Windows, Mac, most modern Linux apps,
-  and ttk widgets.  Original patch by Serhiy Storchaka.
-
-- Issue #24759: Make clear in idlelib.idle_test.__init__ that the directory
-  is a private implementation of test.test_idle and tool for maintainers.
-
-- Issue #26673: When tk reports font size as 0, change to size 10.
-  Such fonts on Linux prevented the configuration dialog from opening.
-
-- Issue #27044: Add ConfigDialog.remove_var_callbacks to stop memory leaks.
-
-- In the 'IDLE-console differences' section of the IDLE doc, clarify
-  how running with IDLE affects sys.modules and the standard streams.
-
-- Issue #25507: fix incorrect change in IOBinding that prevented printing.
-  Change also prevented saving shell window with non-ascii characters.
-  Augment IOBinding htest to include all major IOBinding functions.
-
-- Issue #25905: Revert unwanted conversion of ' to ’ RIGHT SINGLE QUOTATION
-  MARK in README.txt and open this and NEWS.txt with 'ascii'.
-  Re-encode CREDITS.txt to utf-8 and open it with 'utf-8'.
-
-- Issue #26417: Prevent spurious errors and incorrect defaults when
-  installing IDLE 2.7 on OS X: default configuration settings are
-  no longer installed from OS X specific copies.
-
-Documentation
--------------
-
-- Issue #26736: Used HTTPS for external links in the documentation if possible.
-
-- Issue #6953: Rework the Readline module documentation to group related
-  functions together, and add more details such as what underlying Readline
-  functions and variables are accessed.
-
-- Issue #26014: Guide users to the newer packaging documentation as was done
-  for Python 3.x.  In particular, the top-level 2.7 documentation page now
-  links to the newer installer and distributions pages rather than the
-  legacy install and Distutils pages; these are still linked to in the
-  library/distutils doc page.
-
-Tests
------
-
-- Issue #21916: Added tests for the turtle module.  Patch by ingrid,
-  Gregory Loyse and Jelle Zijlstra.
-
-- Issue #25940: Changed test_ssl to use self-signed.pythontest.net.  This
-  avoids relying on svn.python.org, which recently changed root certificate.
-
-- Issue #25616: Tests for OrderedDict are extracted from test_collections
-  into separate file test_ordered_dict.
-
-Build
------
-
-- Issue #22359: Avoid incorrect recursive $(MAKE), and disable the rules for
-  running pgen when cross-compiling.  The pgen output is normally saved with
-  the source code anyway, and is still regenerated when doing a native build.
-  Patch by Jonas Wagner and Xavier de Gaye.
-
-- Issue #19450: Update Windows builds to use SQLite 3.8.11.0.
-
-- Issue #27229: Fix the cross-compiling pgen rule for in-tree builds.  Patch
-  by Xavier de Gaye.
-
-- Issue #17603: Avoid error about nonexistant fileblocks.o file by using a
-  lower-level check for st_blocks in struct stat.
-
-- Issue #26465: Update Windows builds to use OpenSSL 1.0.2g.
-
-- Issue #24421: Compile Modules/_math.c once, before building extensions.
-  Previously it could fail to compile properly if the math and cmath builds
-  were concurrent.
-
-- Issue #25824: Fixes sys.winver to not include any architecture suffix.
-
-- Issue #25348: Added ``--pgo`` and ``--pgo-job`` arguments to
-  ``PCbuild\build.bat`` for building with Profile-Guided Optimization.  The
-  old ``PCbuild\build_pgo.bat`` script is now deprecated, and simply calls
-  ``PCbuild\build.bat --pgo %*``.
-
-- Issue #25827: Add support for building with ICC to ``configure``, including
-  a new ``--with-icc`` flag.
-
-- Issue #25696: Fix installation of Python on UNIX with make -j9.
-
-- Issue #26930: Update OS X 10.5+ 32-bit-only installer to build
-  and link with OpenSSL 1.0.2h.
-
-- Issue #26268: Update Windows builds to use OpenSSL 1.0.2f.
-
-- Issue #25136: Support Apple Xcode 7's new textual SDK stub libraries.
-
-Tools/Demos
------------
-
-- Issue #26799: Fix python-gdb.py: don't get C types once when the Python code
-  is loaded, but get C types on demand. The C types can change if
-  python-gdb.py is loaded before the Python executable. Patch written by Thomas
-  Ilsche.
-
-C API
------
-
-- Issue #26476: Fixed compilation error when use PyErr_BadInternalCall() in C++.
-  Patch by Jeroen Demeyer.
-
-Misc
-----
-
-- Issue #17500, and https://github.com/python/pythondotorg/issues/945: Remove
-  unused and outdated icons.
-
-
-What's New in Python 2.7.11?
-============================
-
-*Release date: 2015-12-05*
-
-Library
--------
-
-- Issue #25624: ZipFile now always writes a ZIP_STORED header for directory
-  entries.  Patch by Dingyuan Wang.
-
-
-What's New in Python 2.7.11 release candidate 1?
-================================================
-
-*Release date: 2015-11-21*
-
-Core and Builtins
------------------
-
-- Issue #25678: Avoid buffer overreads when int(), long(), float(), and
-  compile() are passed buffer objects.  These objects are not necessarily
-  terminated by a null byte, but the functions assumed they were.
-
-- Issue #25388: Fixed tokenizer hang when processing undecodable source code
-  with a null byte.
-
-- Issue #22995: Default implementation of __reduce__ and __reduce_ex__ now
-  rejects builtin types with not defined __new__.
-
-- Issue #7267: format(int, 'c') now raises OverflowError when the argument is
-  not in range(0, 256).
-
-- Issue #24806: Prevent builtin types that are not allowed to be subclassed from
-  being subclassed through multiple inheritance.
-
-- Issue #24848: Fixed a number of bugs in UTF-7 decoding of misformed data.
-
-- Issue #25003: os.urandom() doesn't use getentropy() on Solaris because
-  getentropy() is blocking, whereas os.urandom() should not block. getentropy()
-  is supported since Solaris 11.3.
-
-- Issue #21167: NAN operations are now handled correctly when python is
-  compiled with ICC even if -fp-model strict is not specified.
-
-- Issue #24467: Fixed possible buffer over-read in bytearray. The bytearray
-  object now always allocates place for trailing null byte and it's buffer now
-  is always null-terminated.
-
-- Issue #19543: encode() and decode() methods and constructors of str,
-  unicode and bytearray classes now emit deprecation warning for known
-  non-text encodings when Python is ran with the -3 option.
-
-- Issue #24115: Update uses of PyObject_IsTrue(), PyObject_Not(),
-  PyObject_IsInstance(), PyObject_RichCompareBool() and _PyDict_Contains()
-  to check for and handle errors correctly.
-
-- Issue #4753: On compilers where it is supported, use "computed gotos" for
-  bytecode dispatch in the interpreter. This improves interpretation
-  performance.
-
-- Issue #22939: Fixed integer overflow in iterator object.  Original patch by
-  Clement Rouault.
-
-- Issue #24102: Fixed exception type checking in standard error handlers.
-
-Library
--------
-
-- Issue #10128: backport issue #10845's mitigation of incompatibilities between
-  the multiprocessing module and directory and zipfile execution.
-  Multiprocessing on Windows will now automatically skip rerunning __main__ in
-  spawned processes, rather than failing with AssertionError.
-
-- Issue #25578: Fix (another) memory leak in SSLSocket.getpeercer().
-
-- Issue #25590: In the Readline completer, only call getattr() once per
-  attribute.
-
-- Issue #25530: Disable the vulnerable SSLv3 protocol by default when creating
-  ssl.SSLContext.
-
-- Issue #25569: Fix memory leak in SSLSocket.getpeercert().
-
-- Issue #7759: Fixed the mhlib module on filesystems that doesn't support
-  link counting for directories.
-
-- Issue #892902: Fixed pickling recursive objects.
-
-- Issue #18010: Fix the pydoc GUI's search function to handle exceptions
-  from importing packages.
-
-- Issue #25515: Always use os.urandom as a source of randomness in uuid.uuid4.
-
-- Issue #21827: Fixed textwrap.dedent() for the case when largest common
-  whitespace is a substring of smallest leading whitespace.
-  Based on patch by Robert Li.
-
-- Issue #21709: Fix the logging module to not depend upon __file__ being set
-  properly to get the filename of its caller from the stack.  This allows it
-  to work if run in a frozen or embedded environment where the module's
-  .__file__ attribute does not match its code object's .co_filename.
-
-- Issue #25319: When threading.Event is reinitialized, the underlying condition
-  should use a regular lock rather than a recursive lock.
-
-- Issue #25232: Fix CGIRequestHandler to split the query from the URL at the
-  first question mark (?) rather than the last. Patch from Xiang Zhang.
-
-- Issue #24657: Prevent CGIRequestHandler from collapsing slashes in the
-  query part of the URL as if it were a path. Patch from Xiang Zhang.
-
-- Issue #22958: Constructor and update method of weakref.WeakValueDictionary
-  now accept the self keyword argument.
-
-- Issue #22609: Constructor and the update method of collections.UserDict now
-  accept the self keyword argument.
-
-- Issue #25203: Failed readline.set_completer_delims() no longer left the
-  module in inconsistent state.
-
-- Issue #19143: platform module now reads Windows version from kernel32.dll to
-  avoid compatibility shims.
-
-- Issue #25135: Make deque_clear() safer by emptying the deque before clearing.
-  This helps avoid possible reentrancy issues.
-
-- Issue #24684: socket.socket.getaddrinfo() now calls
-  PyUnicode_AsEncodedString() instead of calling the encode() method of the
-  host, to handle correctly custom unicode string with an encode() method
-  which doesn't return a byte string. The encoder of the IDNA codec is now
-  called directly instead of calling the encode() method of the string.
-
-- Issue #24982: shutil.make_archive() with the "zip" format now adds entries
-  for directories (including empty directories) in ZIP file.
-
-- Issue #17849: Raise a sensible exception if an invalid response is
-  received for a HTTP tunnel request, as seen with some servers that
-  do not support tunnelling.  Initial patch from Cory Benfield.
-
-- Issue #16180: Exit pdb if file has syntax error, instead of trapping user
-  in an infinite loop.  Patch by Xavier de Gaye.
-
-- Issue #22812: Fix unittest discovery examples.
-  Patch from Pam McA'Nulty.
-
-- Issue #24634: Importing uuid should not try to load libc on Windows
-
-- Issue #23652: Make it possible to compile the select module against the
-  libc headers from the Linux Standard Base, which do not include some
-  EPOLL macros.  Initial patch by Matt Frank.
-
-- Issue #15138: Speed up base64.urlsafe_b64{en,de}code considerably.
-
-- Issue #23319: Fix ctypes.BigEndianStructure, swap correctly bytes. Patch
-  written by Matthieu Gautier.
-
-- Issue #23254: Document how to close the TCPServer listening socket.
-  Patch from Martin Panter.
-
-- Issue #17527: Add PATCH to wsgiref.validator. Patch from Luca Sbardella.
-
-- Issue #24613: Calling array.fromstring() with self is no longer allowed
-  to prevent the use-after-free error.  Patch by John Leitch.
-
-- Issue #24708: Fix possible integer overflow in strop.replace().
-
-- Issue #24620: Random.setstate() now validates the value of state last element.
-
-- Issue #13938: 2to3 converts StringTypes to a tuple. Patch from Mark Hammond.
-
-- Issue #24611: Fixed compiling the posix module on non-Windows platforms
-  without mknod() or makedev() (e.g. on Unixware).
-
-- Issue #18684: Fixed reading out of the buffer in the re module.
-
-- Issue #24259: tarfile now raises a ReadError if an archive is truncated
-  inside a data segment.
-
-- Issue #24514: tarfile now tolerates number fields consisting of only
-  whitespace.
-
-- Issue #20387: Restore semantic round-trip correctness in tokenize/untokenize
-  for tab-indented blocks.
-
-- Issue #24456: Fixed possible buffer over-read in adpcm2lin() and lin2adpcm()
-  functions of the audioop module.  Fixed SystemError when the state is not a
-  tuple.  Fixed possible memory leak.
-
-- Issue #24481: Fix possible memory corruption with large profiler info strings
-  in hotshot.
-
-- Issue #24489: ensure a previously set C errno doesn't disturb cmath.polar().
-
-- Issue #19543: io.TextIOWrapper (and hence io.open()) now uses the internal
-  codec marking system added to emit deprecation warning for known non-text
-  encodings at stream construction time when Python is ran with the -3 option.
-
-- Issue #24264: Fixed buffer overflow in the imageop module.
-
-- Issue #5633: Fixed timeit when the statement is a string and the setup is not.
-
-- Issue #24326: Fixed audioop.ratecv() with non-default weightB argument.
-  Original patch by David Moore.
-
-- Issue #22095: Fixed HTTPConnection.set_tunnel with default port.  The port
-  value in the host header was set to "None".  Patch by Demian Brecht.
-
-- Issue #24257: Fixed segmentation fault in sqlite3.Row constructor with faked
-  cursor type.
-
-- Issue #24286: Dict view were not registered with the MappingView abstract
-  base classes.  This caused key and item views in OrderedDict to not be equal
-  to their regular dict counterparts.
-
-- Issue #22107: tempfile.gettempdir() and tempfile.mkdtemp() now try again
-  when a directory with the chosen name already exists on Windows as well as
-  on Unix.  tempfile.mkstemp() now fails early if parent directory is not
-  valid (not exists or is a file) on Windows.
-
-- Issue #6598: Increased time precision and random number range in
-  email.utils.make_msgid() to strengthen the uniqueness of the message ID.
-
-- Issue #24091: Fixed various crashes in corner cases in cElementTree.
-
-- Issue #15267: HTTPConnection.request() now is compatibile with old-style
-  classes (such as TemporaryFile).  Original patch by Atsuo Ishimoto.
-
-- Issue #20014: array.array() now accepts unicode typecodes.  Based on patch by
-  Vajrasky Kok.
-
-- Issue #23637: Showing a warning no longer fails with UnicodeErrror.
-  Formatting unicode warning in the file with the path containing non-ascii
-  characters no longer fails with UnicodeErrror.
-
-- Issue #24134: Reverted issue #24134 changes.
-
-IDLE
-----
-
-- Issue #15348: Stop the debugger engine (normally in a user process)
-  before closing the debugger window (running in the IDLE process).
-  This prevents the RuntimeErrors that were being caught and ignored.
-
-- Issue #24455: Prevent IDLE from hanging when a) closing the shell while the
-  debugger is active (15347); b) closing the debugger with the [X] button
-  (15348); and c) activating the debugger when already active (24455).
-  The patch by Mark Roseman does this by making two changes.
-  1. Suspend and resume the gui.interaction method with the tcl vwait
-  mechanism intended for this purpose (instead of root.mainloop & .quit).
-  2. In gui.run, allow any existing interaction to terminate first.
-
-- Change 'The program' to 'Your program' in an IDLE 'kill program?' message
-  to make it clearer that the program referred to is the currently running
-  user program, not IDLE itself.
-
-- Issue #24750: Improve the appearance of the IDLE editor window status bar.
-  Patch by Mark Roseman.
-
-- Issue #25313: Change the handling of new built-in text color themes to better
-  address the compatibility problem introduced by the addition of IDLE Dark.
-  Consistently use the revised idleConf.CurrentTheme everywhere in idlelib.
-
-- Issue #24782: Extension configuration is now a tab in the IDLE Preferences
-  dialog rather than a separate dialog.   The former tabs are now a sorted
-  list.  Patch by Mark Roseman.
-
-- Issue #22726: Re-activate the config dialog help button with some content
-  about the other buttons and the new IDLE Dark theme.
-
-- Issue #24820: IDLE now has an 'IDLE Dark' built-in text color theme.
-  It is more or less IDLE Classic inverted, with a cobalt blue background.
-  Strings, comments, keywords, ... are still green, red, orange, ... .
-  To use it with IDLEs released before November 2015, hit the
-  'Save as New Custom Theme' button and enter a new name,
-  such as 'Custom Dark'.  The custom theme will work with any IDLE
-  release, and can be modified.
-
-- Issue #25224: README.txt is now an idlelib index for IDLE developers and
-  curious users.  The previous user content is now in the IDLE doc chapter.
-  'IDLE' now means 'Integrated Development and Learning Environment'.
-
-- Issue #24820: Users can now set breakpoint colors in
-  Settings -> Custom Highlighting.  Original patch by Mark Roseman.
-
-- Issue #24972: Inactive selection background now matches active selection
-  background, as configured by users, on all systems.  Found items are now
-  always highlighted on Windows.  Initial patch by Mark Roseman.
-
-- Issue #24570: Idle: make calltip and completion boxes appear on Macs
-  affected by a tk regression.  Initial patch by Mark Roseman.
-
-- Issue #24988: Idle ScrolledList context menus (used in debugger)
-  now work on Mac Aqua.  Patch by Mark Roseman.
-
-- Issue #24801: Make right-click for context menu work on Mac Aqua.
-  Patch by Mark Roseman.
-
-- Issue #25173: Associate tkinter messageboxes with a specific widget.
-  For Mac OSX, make them a 'sheet'.  Patch by Mark Roseman.
-
-- Issue #25198: Enhance the initial html viewer now used for Idle Help.
-  * Properly indent fixed-pitch text (patch by Mark Roseman).
-  * Give code snippet a very Sphinx-like light blueish-gray background.
-  * Re-use initial width and height set by users for shell and editor.
-  * When the Table of Contents (TOC) menu is used, put the section header
-  at the top of the screen.
-
-- Issue #25225: Condense and rewrite Idle doc section on text colors.
-
-- Issue #21995: Explain some differences between IDLE and console Python.
-
-- Issue #22820: Explain need for *print* when running file from Idle editor.
-
-- Issue #25224: Doc: augment Idle feature list and no-subprocess section.
-
-- Issue #25219: Update doc for Idle command line options.
-  Some were missing and notes were not correct.
-
-- Issue #24861: Most of idlelib is private and subject to change.
-  Use idleib.idle.* to start Idle. See idlelib.__init__.__doc__.
-
-- Issue #25199: Idle: add synchronization comments for future maintainers.
-
-- Issue #16893: Replace help.txt with help.html for Idle doc display.
-  The new idlelib/help.html is rstripped Doc/build/html/library/idle.html.
-  It looks better than help.txt and will better document Idle as released.
-  The tkinter html viewer that works for this file was written by Mark Roseman.
-  The now unused EditorWindow.HelpDialog class and helt.txt file are deprecated.
-
-- Issue #24199: Deprecate unused idlelib.idlever with possible removal in 3.6.
-
-- Issue #24790: Remove extraneous code (which also create 2 & 3 conflicts).
-
-- Issue #23672: Allow Idle to edit and run files with astral chars in name.
-  Patch by Mohd Sanad Zaki Rizvi.
-
-- Issue #24745: Idle editor default font. Switch from Courier to
-  platform-sensitive TkFixedFont.  This should not affect current customized
-  font selections.  If there is a problem, edit $HOME/.idlerc/config-main.cfg
-  and remove 'fontxxx' entries from [Editor Window].  Patch by Mark Roseman.
-
-- Issue #21192: Idle editor. When a file is run, put its name in the restart bar.
-  Do not print false prompts. Original patch by Adnan Umer.
-
-- Issue #13884: Idle menus. Remove tearoff lines. Patch by Roger Serwy.
-
-- Issue #15809: IDLE shell now uses locale encoding instead of Latin1 for
-  decoding unicode literals.
-
-Documentation
--------------
-
-- Issue #24952: Clarify the default size argument of stack_size() in
-  the "threading" and "thread" modules. Patch from Mattip.
-
-- Issue #20769: Improve reload() docs. Patch by Dorian Pula.
-
-- Issue #23589: Remove duplicate sentence from the FAQ.  Patch by Yongzhi Pan.
-
-- Issue #22155: Add File Handlers subsection with createfilehandler to Tkinter
-  doc.  Remove obsolete example from FAQ.  Patch by Martin Panter.
-
-Tests
------
-
-- Issue #24751: When running regrtest with the ``-w`` command line option,
-  a test run is no longer marked as a failure if all tests succeed when
-  re-run.
-
-- PCbuild\rt.bat now accepts an unlimited number of arguments to pass along
-  to regrtest.py.  Previously there was a limit of 9.
-
-Build
------
-
-- Issue #24915: When doing a PGO build, the test suite is now used instead of
-  pybench; Clang support was also added as part off this work. Initial patch by
-  Alecsandru Patrascu of Intel.
-
-- Issue #24986: It is now possible to build Python on Windows without errors
-  when external libraries are not available.
-
-- Issue #24508: Backported the MSBuild project files from Python 3.5.  The
-  backported files replace the old project files in PCbuild; the old files moved
-  to PC/VS9.0 and remain supported.
-
-- Issue #24603: Update Windows builds and OS X 10.5 installer to use OpenSSL
-  1.0.2d.
-
-Windows
--------
-
-- Issue #25022: Removed very outdated PC/example_nt/ directory.
-
-
-What's New in Python 2.7.10?
-============================
-
-*Release date: 2015-05-23*
-
-Library
--------
-
-- Issue #22931: Allow '[' and ']' in cookie values.
-
-
-What's New in Python 2.7.10 release candidate 1?
-================================================
-
-*Release date: 2015-05-10*
-
-Core and Builtins
------------------
-
-- Issue #23971: Fix underestimated presizing in dict.fromkeys().
-
-- Issue #23757: PySequence_Tuple() incorrectly called the concrete list API
-  when the data was a list subclass.
-
-- Issue #23629: Fix the default __sizeof__ implementation for variable-sized
-  objects.
-
-- Issue #23055: Fixed a buffer overflow in PyUnicode_FromFormatV.  Analysis
-  and fix by Guido Vranken.
-
-- Issue #23048: Fix jumping out of an infinite while loop in the pdb.
-
-Library
--------
-
-- The keywords attribute of functools.partial is now always a dictionary.
-
-- Issue #20274: When calling a _sqlite.Connection, it now complains if passed
-  any keyword arguments.  Previously it silently ignored them.
-
-- Issue #20274: Remove ignored and erroneous "kwargs" parameters from three
-  METH_VARARGS methods on _sqlite.Connection.
-
-- Issue #24134: assertRaises() and assertRaisesRegexp() checks are not longer
-  successful if the callable is None.
-
-- Issue #23008: Fixed resolving attributes with boolean value is False in pydoc.
-
-- Issues #24099, #24100, and #24101: Fix use-after-free bug in heapq's siftup
-  and siftdown functions.
-
-- Backport collections.deque fixes from Python 3.5.  Prevents reentrant badness
-  during deletion by deferring the decref until the container has been restored
-  to a consistent state.
-
-- Issue #23842: os.major(), os.minor() and os.makedev() now support ints again.
-
-- Issue #23811: Add missing newline to the PyCompileError error message.
-  Patch by Alex Shkop.
-
-- Issue #17898: Fix exception in gettext.py when parsing certain plural forms.
-
-- Issue #23865: close() methods in multiple modules now are idempotent and more
-  robust at shutdown. If they need to release multiple resources, all are
-  released even if errors occur.
-
-- Issue #23881: urllib.ftpwrapper constructor now closes the socket if the FTP
-  connection failed.
-
-- Issue #15133: _tkinter.tkapp.getboolean() now supports long and Tcl_Obj and
-  always returns bool.  tkinter.BooleanVar now validates input values (accepted
-  bool, int, long, str, unicode, and Tcl_Obj).  tkinter.BooleanVar.get() now
-  always returns bool.
-
-- Issue #23338: Fixed formatting ctypes error messages on Cygwin.
-  Patch by Makoto Kato.
-
-- Issue #16840: Tkinter now supports 64-bit integers added in Tcl 8.4 and
-  arbitrary precision integers added in Tcl 8.5.
-
-- Issue #23834: Fix socket.sendto(), use the C long type to store the result of
-  sendto() instead of the C int type.
-
-- Issue #21526: Tkinter now supports new boolean type in Tcl 8.5.
-
-- Issue #23838: linecache now clears the cache and returns an empty result on
-  MemoryError.
-
-- Issue #23742: ntpath.expandvars() no longer loses unbalanced single quotes.
-
-- Issue #21802: The reader in BufferedRWPair now is closed even when closing
-  writer failed in BufferedRWPair.close().
-
-- Issue #23671: string.Template now allows specifying the "self" parameter as
-  a keyword argument.  string.Formatter now allows specifying the "self" and
-  the "format_string" parameters as keyword arguments.
-
-- Issue #21560: An attempt to write a data of wrong type no longer cause
-  GzipFile corruption.  Original patch by Wolfgang Maier.
-
-- Issue #23647: Increase impalib's MAXLINE to accommodate modern mailbox sizes.
-
-- Issue #23539: If body is None, http.client.HTTPConnection.request now sets
-  Content-Length to 0 for PUT, POST, and PATCH headers to avoid 411 errors from
-  some web servers.
-
-- Issue #23136: _strptime now uniformly handles all days in week 0, including
-  Dec 30 of previous year.  Based on patch by Jim Carroll.
-
-- Issue #23138: Fixed parsing cookies with absent keys or values in cookiejar.
-  Patch by Demian Brecht.
-
-- Issue #23051: multiprocessing.Pool methods imap() and imap_unordered() now
-  handle exceptions raised by an iterator.  Patch by Alon Diamant and Davin
-  Potts.
-
-- Issue #22928: Disabled HTTP header injections in httplib.
-  Original patch by Demian Brecht.
-
-- Issue #23615: Module tarfile is now can be reloaded with imp.reload().
-
-- Issue #22853: Fixed a deadlock when use multiprocessing.Queue at import time.
-  Patch by Florian Finkernagel and Davin Potts.
-
-- Issue #23476: In the ssl module, enable OpenSSL's X509_V_FLAG_TRUSTED_FIRST
-  flag on certificate stores when it is available.
-
-- Issue #23576: Avoid stalling in SSL reads when EOF has been reached in the
-  SSL layer but the underlying connection hasn't been closed.
-
-- Issue #23504: Added an __all__ to the types module.
-
-- Issue #23458: On POSIX, the file descriptor kept open by os.urandom() is now
-  set to non inheritable
-
-- Issue #22113: struct.pack_into() now supports new buffer protocol (in
-  particular accepts writable memoryview).
-
-- Issues #814253, #9179: Warnings now are raised when group references and
-  conditional group references are used in lookbehind assertions in regular
-  expressions.
-
-- Issue #23215: Multibyte codecs with custom error handlers that ignores errors
-  consumed too much memory and raised SystemError or MemoryError.
-  Original patch by Aleksi Torhamo.
-
-- Issue #5700: io.FileIO() called flush() after closing the file.
-  flush() was not called in close() if closefd=False.
-
-- Issue #21548: Fix pydoc.synopsis() and pydoc.apropos() on modules with empty
-  docstrings.  Initial patch by Yuyang Guo.
-
-- Issue #22885: Fixed arbitrary code execution vulnerability in the dumbdbm
-  module.  Original patch by Claudiu Popa.
-
-- Issue #23481: Remove RC4 from the SSL module's default cipher list.
-
-- Issue #21849: Fixed xmlrpclib serialization of non-ASCII unicode strings in
-  the multiprocessing module.
-
-- Issue #21840: Fixed expanding unicode variables of form $var in
-  posixpath.expandvars().  Fixed all os.path implementations on
-  unicode-disabled builds.
-
-- Issue #23367: Fix possible overflows in the unicodedata module.
-
-- Issue #23363: Fix possible overflow in itertools.permutations.
-
-- Issue #23364: Fix possible overflow in itertools.product.
-
-- Issue #23365: Fixed possible integer overflow in
-  itertools.combinations_with_replacement.
-
-- Issue #23366: Fixed possible integer overflow in itertools.combinations.
-
-- Issue #23191: fnmatch functions that use caching are now threadsafe.
-
-- Issue #18518: timeit now rejects statements which can't be compiled outside
-  a function or a loop (e.g. "return" or "break").
-
-- Issue #19996: Make :mod:`httplib` ignore headers with no name rather than
-  assuming the body has started.
-
-- Issue #20188: Support Application-Layer Protocol Negotiation (ALPN) in the ssl
-  module.
-
-- Issue #23248: Update ssl error codes from latest OpenSSL git master.
-
-- Issue #23098: 64-bit dev_t is now supported in the os module.
-
-- Issue #23063: In the disutils' check command, fix parsing of reST with code or
-  code-block directives.
-
-- Issue #21356: Make ssl.RAND_egd() optional to support LibreSSL. The
-  availability of the function is checked during the compilation. Patch written
-  by Bernard Spil.
-
-- Backport the context argument to ftplib.FTP_TLS.
-
-- Issue #23111: Maximize compatibility in protocol versions of ftplib.FTP_TLS.
-
-- Issue #23112: Fix SimpleHTTPServer to correctly carry the query string and
-  fragment when it redirects to add a trailing slash.
-
-- Issue #22585: On OpenBSD 5.6 and newer, os.urandom() now calls getentropy(),
-  instead of reading /dev/urandom, to get pseudo-random bytes.
-
-- Issue #23093: In the io, module allow more operations to work on detached
-  streams.
-
-- Issue #23071: Added missing names to codecs.__all__.  Patch by Martin Panter.
-
-- Issue #23016: A warning no longer produces an AttributeError when sys.stderr
-  is None.
-
-- Issue #21032: Fixed socket leak if HTTPConnection.getresponse() fails.
-  Original patch by Martin Panter.
-
-- Issue #22609: Constructors and update methods of mapping classes in the
-  collections module now accept the self keyword argument.
-
-Documentation
--------------
-
-- Issue #23006: Improve the documentation and indexing of dict.__missing__.
-  Add an entry in the language datamodel special methods section.
-  Revise and index its discussion in the stdtypes mapping/dict section.
-  Backport the code example from 3.4.
-
-- Issue #21514: The documentation of the json module now refers to new JSON RFC
-  7159 instead of obsoleted RFC 4627.
-
-Tools/Demos
------------
-
-- Issue #23330: h2py now supports arbitrary filenames in #include.
-
-- Issue #6639: Module-level turtle functions no longer raise TclError after
-  closing the window.
-
-- Issue #22314: pydoc now works when the LINES environment variable is set.
-
-- Issue #18905: "pydoc -p 0" now outputs actually used port.  Based on patch by
-  Wieland Hoffmann.
-
-- Issue #23345: Prevent test_ssl failures with large OpenSSL patch level
-  values (like 0.9.8zc).
-
-Tests
------
-
-- Issue #23799: Added test.test_support.start_threads() for running and
-  cleaning up multiple threads.
-
-- Issue #22390: test.regrtest now emits a warning if temporary files or
-  directories are left after running a test.
-
-- Issue #23583: Added tests for standard IO streams in IDLE.
-
-- Issue #23392: Added tests for marshal C API that works with FILE*.
-
-- Issue #18982: Add tests for CLI of the calendar module.
-
-- Issue #19949: The test_xpickle test now tests compatibility with installed
-  Python 2.7 and reports skipped tests.  Based on patch by Zachary Ware.
-
-- Issue #11578: Backported test for the timeit module.
-
-- Issue #22943: bsddb tests are locale independend now.
-
-IDLE
-----
-
-- Issue #23583: Fixed writing unicode to standard output stream in IDLE.
-
-- Issue #20577: Configuration of the max line length for the FormatParagraph
-  extension has been moved from the General tab of the Idle preferences dialog
-  to the FormatParagraph tab of the Config Extensions dialog.
-  Patch by Tal Einat.
-
-- Issue #16893: Update Idle doc chapter to match current Idle and add new
-  information.
-
-- Issue #23180: Rename IDLE "Windows" menu item to "Window".
-  Patch by Al Sweigart.
-
-Build
------
-
-- Issue #15506: Use standard PKG_PROG_PKG_CONFIG autoconf macro in the configure
-  script.
-
-- Issue #23032: Fix installer build failures on OS X 10.4 Tiger
-  by disabling assembly code in the OpenSSL build.
-
-- Issue #23686: Update OS X 10.5 installer and Windows builds to use
-  OpenSSL 1.0.2a.
-
-C API
------
-
-- Issue #23998: PyImport_ReInitLock() now checks for lock allocation error
-
-- Issue #22079: PyType_Ready() now checks that statically allocated type has
-  no dynamically allocated bases.
-
-
-What's New in Python 2.7.9?
-===========================
-
-*Release date: 2014-12-10*
-
-Library
--------
-
-- Issue #22959: Remove the *check_hostname* parameter of
-  httplib.HTTPSConnection. The *context* parameter should be used instead.
-
-- Issue #16043: Add a default limit for the amount of data xmlrpclib.gzip_decode
-  will return. This resolves CVE-2013-1753.
-
-- Issue #16042: CVE-2013-1752: smtplib: Limit amount of data read by limiting
-  the call to readline().  Original patch by Christian Heimes.
-
-- Issue #16041: In poplib, limit maximum line length read from the server to
-  prevent CVE-2013-1752.
-
-- Issue #22960: Add a context argument to xmlrpclib.ServerProxy.
-
-Build
------
-
-- Issue #22935: Allow the ssl module to be compiled if openssl doesn't support
-  SSL 3.
-
-- Issue #17128: Use private version of OpenSSL for 2.7.9 OS X 10.5+ installer.
-
-
-What's New in Python 2.7.9 release candidate 1?
-===============================================
-
-*Release date: 2014-11-25*
-
-Core and Builtins
------------------
-
-- Issue #21963: backout issue #1856 patch (avoid crashes and lockups when
-  daemon threads run while the interpreter is shutting down; instead, these
-  threads are now killed when they try to take the GIL), as it seems to
-  break some existing code.
-
-- Issue #22604: Fix assertion error in debug mode when dividing a complex
-  number by (nan+0j).
-
-- Issue #22470: Fixed integer overflow issues in "backslashreplace" and
-  "xmlcharrefreplace" error handlers.
-
-- Issue #22526: Fix iterating through files with lines longer than 2^31 bytes.
-
-- Issue #22519: Fix overflow checking in PyString_Repr.
-
-- Issue #22518: Fix integer overflow issues in latin-1 encoding.
-
-- Issue #22379: Fix empty exception message in a TypeError raised in
-  ``str.join``.
-
-- Issue #22221: Now the source encoding declaration on the second line isn't
-  effective if the first line contains anything except a comment.
-
-- Issue #22023: Fix ``%S``, ``%R`` and ``%V`` formats of
-  :c:func:`PyUnicode_FromFormat`.
-
-- Issue #21591: Correctly handle qualified exec statements in tuple form by
-  moving compatibility layer from run-time to AST transformation.
-
-Library
--------
-
-- Issue #22417: Verify certificates by default in httplib (PEP 476).
-
-- Issue #22927: Allow urllib.urlopen to take a *context* parameter to control
-  SSL settings for HTTPS connections.
-
-- Issue #22921: Allow SSLContext to take the *hostname* parameter even if
-  OpenSSL doesn't support SNI.
-
-- Issue #9003 and #22366: httplib.HTTPSConnection, urllib2.HTTPSHandler and
-  urllib2.urlopen now take optional arguments to allow for server certificate
-  checking, as recommended in public uses of HTTPS. This backport is part of PEP
-  467.
-
-- Issue #12728: Different Unicode characters having the same uppercase but
-  different lowercase are now matched in case-insensitive regular expressions.
-
-- Issue #22821: Fixed fcntl() with integer argument on 64-bit big-endian
-  platforms.
-
-- Issue #17293: uuid.getnode() now determines MAC address on AIX using netstat.
-  Based on patch by Aivars Kalvāns.
-
-- Issue #22769: Fixed ttk.Treeview.tag_has() when called without arguments.
-
-- Issue #22787: Allow the keyfile argument of SSLContext.load_cert_chain to be
-  None.
-
-- Issue #22775: Fixed unpickling of Cookie.SimpleCookie with protocol 2.
-  Patch by Tim Graham.
-
-- Issue #22776: Brought excluded code into the scope of a try block in
-  SysLogHandler.emit().
-
-- Issue #17381: Fixed ranges handling in case-insensitive regular expressions.
-
-- Issue #19329: Optimized compiling charsets in regular expressions.
-
-- Issue #22410: Module level functions in the re module now cache compiled
-  locale-dependent regular expressions taking into account the locale.
-
-- Issue #8876: distutils now falls back to copying files when hard linking
-  doesn't work.  This allows use with special filesystems such as VirtualBox
-  shared folders.
-
-- Issue #9351: Defaults set with set_defaults on an argparse subparser
-  are no longer ignored when also set on the parent parser.
-
-- Issue #20421: Add a .version() method to SSL sockets exposing the actual
-  protocol version in use.
-
-- Issue #22435: Fix a file descriptor leak when SocketServer bind fails.
-
-- Issue #13664: GzipFile now supports non-ascii Unicode filenames.
-
-- Issue #13096: Fixed segfault in CTypes POINTER handling of large
-  values.
-
-- Issue #11694: Raise ConversionError in xdrlib as documented.  Patch
-  by Filip Gruszczyński and Claudiu Popa.
-
-- Issue #1686: Fix string.Template when overriding the pattern attribute.
-
-- Issue #11866: Eliminated race condition in the computation of names
-  for new threads.
-
-- Issue #22219: The zipfile module CLI now adds entries for directories
-  (including empty directories) in ZIP file.
-
-- Issue #22449: In the ssl.SSLContext.load_default_certs, consult the
-  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.
-
-- Issue #20076: Added non derived UTF-8 aliases to locale aliases table.
-
-- Issue #20079: Added locales supported in glibc 2.18 to locale alias table.
-
-- Issue #22530: Allow the ``group()`` method of regular expression match objects
-  to take a ``long`` as an index.
-
-- Issue #22517: When an io.BufferedRWPair object is deallocated, clear its
-  weakrefs.
-
-- Issue #10510: distutils register and upload methods now use HTML standards
-  compliant CRLF line endings.
-
-- Issue #9850: Fixed macpath.join() for empty first component.  Patch by
-  Oleg Oshmyan.
-
-- Issue #20912: Now directories added to ZIP file have correct Unix and MS-DOS
-  directory attributes.
-
-- Issue #21866: ZipFile.close() no longer writes ZIP64 central directory
-  records if allowZip64 is false.
-
-- Issue #22415: Fixed debugging output of the GROUPREF_EXISTS opcode in the re
-  module.
-
-- Issue #22423: Unhandled exception in thread no longer causes unhandled
-  AttributeError when sys.stderr is None.
-
-- Issue #22419: Limit the length of incoming HTTP request in wsgiref server to
-  65536 bytes and send a 414 error code for higher lengths. Patch contributed
-  by Devin Cook.
-
-- Lax cookie parsing in http.cookies could be a security issue when combined
-  with non-standard cookie handling in some Web browsers.  Reported by
-  Sergey Bobrov.
-
-- Issue #21147: sqlite3 now raises an exception if the request contains a null
-  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.
-
-- Issue #21951: Tkinter now most likely raises MemoryError instead of crash
-  if the memory allocation fails.
-
-- Issue #22226: First letter no longer is stripped from the "status" key in
-  the result of Treeview.heading().
-
-- Issue #22051: turtledemo no longer reloads examples to re-run them.
-  Initialization of variables and gui setup should be done in main(),
-  which is called each time a demo is run, but not on import.
-
-- Issue #21597: The separator between the turtledemo text pane and the drawing
-  canvas can now be grabbed and dragged with a mouse.  The code text pane can
-  be widened to easily view or copy the full width of the text.  The canvas
-  can be widened on small screens.  Original patches by Jan Kanis and Lita Cho.
-
-- Issue #18132: Turtledemo buttons no longer disappear when the window is
-  shrunk.  Original patches by Jan Kanis and Lita Cho.
-
-- Issue #22312: Fix ntpath.splitdrive IndexError.
-
-- Issue #22216: smtplib now resets its state more completely after a quit.  The
-  most obvious consequence of the previous behavior was a STARTTLS failure
-  during a connect/starttls/quit/connect/starttls sequence.
-
-- Issue #21305: os.urandom now caches a fd to /dev/urandom. This is a PEP 466
-  backport from Python 3.
-
-- Issue #21307: As part of PEP 466, backport hashlib.algorithms_guaranteed and
-  hashlib.algorithms_available.
-
-- Issue #22259: Fix segfault when attempting to fopen a file descriptor
-  corresponding to a directory.
-
-- Issue #22236: Fixed Tkinter images copying operations in NoDefaultRoot mode.
-
-- Issue #22191: Fixed warnings.__all__.
-
-- Issue #21308: Backport numerous features from Python's ssl module. This is
-  part of PEP 466.
-
-- Issue #15696: Add a __sizeof__ implementation for mmap objects on Windows.
-
-- Issue #8797: Raise HTTPError on failed Basic Authentication immediately.
-  Initial patch by Sam Bull.
-
-- Issue #22068: Avoided reference loops with Variables and Fonts in Tkinter.
-
-- Issue #21448: Changed FeedParser feed() to avoid O(N**2) behavior when
-  parsing long line.  Original patch by Raymond Hettinger.
-
-- Issue #17923: glob() patterns ending with a slash no longer match non-dirs on
-  AIX.  Based on patch by Delhallt.
-
-- Issue #21975: Fixed crash when using uninitialized sqlite3.Row (in particular
-  when unpickling pickled sqlite3.Row).  sqlite3.Row is now initialized in the
-  __new__() method.
-
-- Issue #16037: HTTPMessage.readheaders() raises an HTTPException when more
-  than 100 headers are read. Patch by Jyrki Pulliainen and Daniel Eriksson.
-
-- Issue #21580: Now Tkinter correctly handles binary "data" and "maskdata"
-  configure options of tkinter.PhotoImage.
-
-- Issue #19612: subprocess.communicate() now also ignores EINVAL when using at
-  least two pipes.
-
-- Fix repr(_socket.socket) on Windows 64-bit: don't fail with OverflowError
-  on closed socket.
-
-- Issue #16133: The asynchat.async_chat.handle_read() method now ignores
-  socket.error() exceptions with blocking I/O errors: EAGAIN, EALREADY,
-  EINPROGRESS, or EWOULDBLOCK.
-
-- Issue #21990: Clean-up unnecessary and slow inner class definition in
-  saxutils (Contributed by Alex Gaynor).
-
-- Issue #1730136: Fix the comparison between a tkFont.Font and an object of
-  another kind.
-
-- Issue #19884: readline: Disable the meta modifier key if stdout is not
-  a terminal to not write the ANSI sequence "\033[1034h" into stdout. This
-  sequence is used on some terminal (ex: TERM=xterm-256color") to enable
-  support of 8 bit characters.
-
-- Issue #22017: Correct reference counting errror in the initialization of the
-  _warnings module.
-
-- Issue #21868: Prevent turtle crash when undo buffer set to a value less
-  than one.
-
-- Issue #21151: Fixed a segfault in the _winreg module when ``None`` is passed
-  as a ``REG_BINARY`` value to SetValueEx.  Patch by John Ehresman.
-
-- Issue #21090: io.FileIO.readall() does not ignore I/O errors anymore. Before,
-  it ignored I/O errors if at least the first C call read() succeed.
-
-- Issue #19870: BaseCookie now parses 'secure' and 'httponly' flags.
-  Backport of issue #16611.
-
-- Issue #21923: Prevent AttributeError in distutils.sysconfig.customize_compiler
-  due to possible uninitialized _config_vars.
-
-- Issue #21323: Fix CGIHTTPServer to again handle scripts in CGI subdirectories,
-  broken by the fix for security issue #19435.  Patch by Zach Byrne.
-
-- Issue #22199: Make get_makefile_filename() available in Lib/sysconfig.py
-  for 2.7 to match other versions of sysconfig.
-
-IDLE
-----
-
-- Issue #3068: Add Idle extension configuration dialog to Options menu.
-  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 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
-  is entered and a module is opened, a corresponding browser is also opened.
-
-- Issue #4832: Save As to type Python files automatically adds .py to the
-  name you enter (even if your system does not display it).  Some systems
-  automatically add .txt when type is Text files.
-
-- Issue #21986: Code objects are not normally pickled by the pickle module.
-  To match this, they are no longer pickled when running under Idle.
-
-- Issue #22221: IDLE now ignores the source encoding declaration on the second
-  line if the first line contains anything except a comment.
-
-- Issue #17390: Adjust Editor window title; remove 'Python',
-  move version to end.
-
-- Issue #14105: Idle debugger breakpoints no longer disappear
-  when inserting or deleting lines.
-
-Extension Modules
------------------
-
-- Issue #22381: Update zlib to 1.2.8.
-
-- Issue #22176: Update the ctypes module's libffi to v3.1.  This release
-  adds support for the Linux AArch64 and POWERPC ELF ABIv2 little endian
-  architectures.
-
-Tools/Demos
------------
-
-- Issue #10712: 2to3 has a new "asserts" fixer that replaces deprecated names
-  of unittest methods (e.g. failUnlessEqual -> assertEqual).
-
-- Issue #22221: 2to3 and the findnocoding.py script now ignore the source
-  encoding declaration on the second line if the first line contains anything
-  except a comment.
-
-- Issue #22201: Command-line interface of the zipfile module now correctly
-  extracts ZIP files with directory entries.  Patch by Ryan Wilson.
-
-Tests
------
-
-- Issue #22236: Tkinter tests now don't reuse default root window.  New root
-  window is created for every test class.
-
-- Issue #18004: test_overflow in test_list by mistake consumed 40 GiB of memory
-  on 64-bit systems.
-
-- Issue #21976: Fix test_ssl to accept LibreSSL version strings.  Thanks
-  to William Orr.
-
-- Issue #22770: Prevent some Tk segfaults on OS X when running gui tests.
-
-Build
------
-
-- Issue #20221: Removed conflicting (or circular) hypot definition when
-  compiled with VS 2010 or above.  Initial patch by Tabrez Mohammed.
-
-- Issue #16537: Check whether self.extensions is empty in setup.py. Patch by
-  Jonathan Hosmer.
-
-- The documentation Makefile no longer automatically downloads Sphinx. Users are
-  now required to have Sphinx already installed to build the documentation.
-
-- Issue #21958: Define HAVE_ROUND when building with Visual Studio 2013 and
-  above.  Patch by Zachary Turner.
-
-- Issue #15759: "make suspicious", "make linkcheck" and "make doctest" in Doc/
-  now display special message when and only when there are failures.
-
-- Issue #21166: Prevent possible segfaults and other random failures of
-  python --generate-posix-vars in pybuilddir.txt build target.
-
-- Issue #18096: Fix library order returned by python-config.
-
-- Issue #17219: Add library build dir for Python extension cross-builds.
-
-- Issue #22877: PEP 477 - OS X installer now installs pip.
-
-- Issue #22878: PEP 477 - "make install" and "make altinstall" can now install
-  or upgrade pip, using the bundled pip provided by the backported ensurepip
-  module.  A configure option, --with-ensurepip[=upgrade|install|no], is
-  available to set the option for subsequent installs; the default for Python 2
-  in "no" (do not install or upgrade pip).  The option can also be set with
-  "make [alt]install ENSUREPIP=[upgrade|install|no]".
-
-Windows
--------
-
-- Issue #17896: The Windows build scripts now expect external library sources
-  to be in ``PCbuild\..\externals`` rather than ``PCbuild\..\..``.
-
-- Issue #17717: The Windows build scripts now use a copy of NASM pulled from
-  svn.python.org to build OpenSSL.
-
-- Issue #22644: The bundled version of OpenSSL has been updated to 1.0.1j.
-
-
-What's New in Python 2.7.8?
-===========================
-
-*Release date: 2014-06-29*
-
-Core and Builtins
------------------
-
-- Issue #4346: In PyObject_CallMethod and PyObject_CallMethodObjArgs, don't
-  overwrite the error set in PyObject_GetAttr.
-
-- Issue #21831: Avoid integer overflow when large sizes and offsets are given to
-  the buffer type. CVE-2014-7185.
-
-- Issue #19656: Running Python with the -3 option now also warns about
-  non-ascii bytes literals.
-
-- Issue #21642: If the conditional if-else expression, allow an integer written
-  with no space between itself and the ``else`` keyword (e.g. ``True if 42else
-  False``) to be valid syntax.
-
-- Issue #21523: Fix over-pessimistic computation of the stack effect of
-  some opcodes in the compiler.  This also fixes a quadratic compilation
-  time issue noticeable when compiling code with a large number of "and"
-  and "or" operators.
-
-Library
--------
-
-- Issue #21652: Prevent mimetypes.type_map from containing unicode keys on
-  Windows.
-
-- Issue #21729: Used the "with" statement in the dbm.dumb module to ensure
-  files closing.
-
-- Issue #21672: Fix the behavior of ntpath.join on UNC-style paths.
-
-- Issue #19145: The times argument for itertools.repeat now handles
-  negative values the same way for keyword arguments as it does for
-  positional arguments.
-
-- Issue #21832: Require named tuple inputs to be exact strings.
-
-- Issue #8343: Named group error messages in the re module did not show
-  the name of the erroneous group.
-
-- Issue #21491: SocketServer: Fix a race condition in child processes reaping.
-
-- Issue #21635: The difflib SequenceMatcher.get_matching_blocks() method
-  cache didn't match the actual result.  The former was a list of tuples
-  and the latter was a list of named tuples.
-
-- Issue #21722: The distutils "upload" command now exits with a non-zero
-  return code when uploading fails.  Patch by Martin Dengler.
-
-- Issue #21766: Prevent a security hole in CGIHTTPServer by URL unquoting paths
-  before checking for a CGI script at that path.
-
-- Issue #21310: Fixed possible resource leak in failed open().
-
-- Issue #21304: Backport the key derivation function hashlib.pbkdf2_hmac from
-  Python 3 per PEP 466.
-
-- Issue #11709: Fix the pydoc.help function to not fail when sys.stdin is not a
-  valid file.
-
-- Issue #13223: Fix pydoc.writedoc so that the HTML documentation for methods
-  that use 'self' in the example code is generated correctly.
-
-- Issue #21552: Fixed possible integer overflow of too long string lengths in
-  the tkinter module on 64-bit platforms.
-
-- Issue #14315: The zipfile module now ignores extra fields in the central
-  directory that are too short to be parsed instead of letting a struct.unpack
-  error bubble up as this "bad data" appears in many real world zip files in
-  the wild and is ignored by other zip tools.
-
-- Issue #21402: Tkinter.ttk now works when default root window is not set.
-
-- Issue #10203: sqlite3.Row now truly supports sequence protocol.  In particulr
-  it supports reverse() and negative indices.  Original patch by Claudiu Popa.
-
-- Issue #8743: Fix interoperability between set objects and the
-  collections.Set() abstract base class.
-
-- Issue #21481: Argparse equality and inequality tests now return
-  NotImplemented when comparing to an unknown type.
-
-IDLE
-----
-
-- Issue #21940: Add unittest for WidgetRedirector. Initial patch by Saimadhav
-  Heblikar.
-
-- Issue #18592: Add unittest for SearchDialogBase. Patch by Phil Webster.
-
-- Issue #21694: Add unittest for ParenMatch. Patch by Saimadhav Heblikar.
-
-- Issue #21686: add unittest for HyperParser. Original patch by Saimadhav
-  Heblikar.
-
-- Issue #12387: Add missing upper(lower)case versions of default Windows key
-  bindings for Idle so Caps Lock does not disable them. Patch by Roger Serwy.
-
-- Issue #21695: Closing a Find-in-files output window while the search is
-  still in progress no longer closes Idle.
-
-- Issue #18910: Add unittest for textView. Patch by Phil Webster.
-
-- Issue #18292: Add unittest for AutoExpand. Patch by Saihadhav Heblikar.
-
-- Issue #18409: Add unittest for AutoComplete. Patch by Phil Webster.
-
-Tests
------
-
-- Issue #20155: Changed HTTP method names in failing tests in test_httpservers
-  so that packet filtering software (specifically Windows Base Filtering Engine)
-  does not interfere with the transaction semantics expected by the tests.
-
-- Issue #19493: Refactored the ctypes test package to skip tests explicitly
-  rather than silently.
-
-- Issue #18492: All resources are now allowed when tests are not run by
-  regrtest.py.
-
-- Issue #21605: Added tests for Tkinter images.
-
-- Issue #21493: Added test for ntpath.expanduser().  Original patch by
-  Claudiu Popa.
-
-- Issue #19925: Added tests for the spwd module. Original patch by Vajrasky Kok.
-
-- Issue #13355: random.triangular() no longer fails with a ZeroDivisionError
-  when low equals high.
-
-- Issue #21522: Added Tkinter tests for Listbox.itemconfigure(),
-  PanedWindow.paneconfigure(), and Menu.entryconfigure().
-
-- Issue #20635: Added tests for Tk geometry managers.
-
-Build
------
-
-- Issue #21811: Anticipated fixes to support OS X versions > 10.9.
-
-Windows
--------
-
-- Issue #21671, CVE-2014-0224: The bundled version of OpenSSL has been
-  updated to 1.0.1h.
-
-
-What's New in Python 2.7.7
-==========================
-
-*Release date: 2014-05-31*
-
-Build
------
-
-- Issue #21462: Build the Windows installers with OpenSSL 1.0.1g.
-
-- Issue #19866: Include some test data in the Windows installers, so tests don't
-  fail.
-
-
-What's New in Python 2.7.7 release candidate 1?
-===============================================
-
-*Release date: 2014-05-17*
-
-Core and Builtins
------------------
-
-- Issue #21350: Fix file.writelines() to accept arbitrary buffer objects,
-  as advertised.  Patch by Brian Kearns.
-
-- Issue #20437: Fixed 43 potential bugs when deleting object references.
-
-- Issue #21134: Fix segfault when str is called on an uninitialized
-  UnicodeEncodeError, UnicodeDecodeError, or UnicodeTranslateError object.
-
-- Issue #20494: Ensure that free()d memory arenas are really released on POSIX
-  systems supporting anonymous memory mappings.  Patch by Charles-François
-  Natali.
-
-- Issue #17825: Cursor "^" is correctly positioned for SyntaxError and
-  IndentationError.
-
-- Raise a better error when non-unicode codecs are used for a file's coding
-  cookie.
-
-- Issue #17976: Fixed potential problem with file.write() not detecting IO error
-  by inspecting the return value of fwrite().  Based on patches by Jaakko Moisio
-  and Victor Stinner.
-
-- Issue #14432: Generator now clears the borrowed reference to the thread
-  state. Fix a crash when a generator is created in a C thread that is
-  destroyed while the generator is still used. The issue was that a generator
-  contains a frame, and the frame kept a reference to the Python state of the
-  destroyed C thread. The crash occurs when a trace function is setup.
-
-- Issue #19932: Fix typo in import.h, missing whitespaces in function prototypes.
-
-- Issue #19638: Fix possible crash / undefined behaviour from huge (more than 2
-  billion characters) input strings in _Py_dg_strtod.
-
-- Issue #12546: Allow \x00 to be used as a fill character when using str, int,
-  float, and complex __format__ methods.
-
-Library
--------
-
-- Issue #10744: Fix PEP 3118 format strings on ctypes objects with a nontrivial
-  shape.
-
-- Issue #7776: Backport Fix ``Host:'' header and reconnection when using
-  http.client.HTTPConnection.set_tunnel() from Python 3.  Patch by Nikolaus
-  Rath.
-
-- Issue #21306: Backport hmac.compare_digest from Python 3. This is part of PEP
-  466.
-
-- Issue #21470: Do a better job seeding the random number generator by
-  using enough bytes to span the full state space of the Mersenne Twister.
-
-- Issue #21469: Reduced the risk of false positives in robotparser by
-  checking to make sure that robots.txt has been read or does not exist
-  prior to returning True in can_fetch().
-
-- Issue #21321: itertools.islice() now releases the reference to the source
-  iterator when the slice is exhausted.  Patch by Anton Afanasyev.
-
-- Issue #9291: Do not attempt to re-encode mimetype data read from registry in
-  ANSI mode. Initial patches by Dmitry Jemerov & Vladimir Iofik.
-
-- Issue #21349: Passing a memoryview to _winreg.SetValueEx now correctly raises
-  a TypeError where it previously crashed the interpreter. Patch by Brian Kearns
-
-- Issue #21529 (CVE-2014-4616): Fix arbitrary memory access in
-  JSONDecoder.raw_decode with a negative second parameter. Bug reported by Guido
-  Vranken.
-
-- Issue #21172: isinstance check relaxed from dict to collections.Mapping.
-
-- Issue #21191: In os.fdopen, never close the file descriptor when an exception
-  happens.
-
-- Issue #21149: Improved thread-safety in logging cleanup during interpreter
-  shutdown. Thanks to Devin Jeanpierre for the patch.
-
-- Fix possible overflow bug in strop.expandtabs. You shouldn't be using this
-  module!
-
-- Issue #20145: `assertRaisesRegex` now raises a TypeError if the second
-  argument is not a string or compiled regex.
-
-- Issue #21058: Fix a leak of file descriptor in tempfile.NamedTemporaryFile(),
-  close the file descriptor if os.fdopen() fails
-
-- Issue #20283: RE pattern methods now accept the string keyword parameters
-  as documented.  The pattern and source keyword parameters are left as
-  deprecated aliases.
-
-- Issue #11599: When an external command (e.g. compiler) fails, distutils now
-  prints out the whole command line (instead of just the command name) if the
-  environment variable DISTUTILS_DEBUG is set.
-
-- Issue #4931: distutils should not produce unhelpful "error: None" messages
-  anymore.  distutils.util.grok_environment_error is kept but doc-deprecated.
-
-- Improve the random module's default seeding to use 256 bits of entropy
-  from os.urandom().  This was already done for Python 3, mildly improving
-  security with a bigger seed space.
-
-- Issue #15618: Make turtle.py compatible with 'from __future__ import
-  unicode_literals'.  Initial patch by Juancarlo Añez.
-
-- Issue #20501: fileinput module no longer reads whole file into memory when using
-  fileinput.hook_encoded.
-
-- Issue #6815: os.path.expandvars() now supports non-ASCII Unicode environment
-  variables names and values.
-
-- Issue #20635: Fixed grid_columnconfigure() and grid_rowconfigure() methods of
-  Tkinter widgets to work in wantobjects=True mode.
-
-- Issue #17671: Fixed a crash when use non-initialized io.BufferedRWPair.
-  Based on patch by Stephen Tu.
-
-- Issue #8478: Untokenizer.compat processes first token from iterator input.
-  Patch based on lines from Georg Brandl, Eric Snow, and Gareth Rees.
-
-- Issue #20594: Avoid name clash with the libc function posix_close.
-
-- Issue #19856: shutil.move() failed to move a directory to other directory
-  on Windows if source name ends with os.altsep.
-
-- Issue #14983: email.generator now always adds a line end after each MIME
-  boundary marker, instead of doing so only when there is an epilogue.  This
-  fixes an RFC compliance bug and solves an issue with signed MIME parts.
-
-- Issue #20013: Some imap servers disconnect if the current mailbox is
-  deleted, and imaplib did not handle that case gracefully.  Now it
-  handles the 'bye' correctly.
-
-- Issue #20426: When passing the re.DEBUG flag, re.compile() displays the
-  debug output every time it is called, regardless of the compilation cache.
-
-- Issue #20368: The null character now correctly passed from Tcl to Python (in
-  unicode strings only).  Improved error handling in variables-related commands.
-
-- Issue #20435: Fix _pyio.StringIO.getvalue() to take into account newline
-  translation settings.
-
-- Issue #20288: fix handling of invalid numeric charrefs in HTMLParser.
-
-- Issue #19456: ntpath.join() now joins relative paths correctly when a drive
-  is present.
-
-- Issue #8260: The read(), readline() and readlines() methods of
-  codecs.StreamReader returned incomplete data when were called after
-  readline() or read(size).  Based on patch by Amaury Forgeot d'Arc.
-
-- Issue #20374: Fix build with GNU readline >= 6.3.
-
-- Issue #14548: Make multiprocessing finalizers check pid before
-  running to cope with possibility of gc running just after fork.
-  (Backport from 3.x.)
-
-- Issue #20262: Warnings are raised now when duplicate names are added in the
-  ZIP file or too long ZIP file comment is truncated.
-
-- Issue #20270: urllib and urlparse now support empty ports.
-
-- Issue #20243: TarFile no longer raise ReadError when opened in write mode.
-
-- Issue #20245: The open functions in the tarfile module now correctly handle
-  empty mode.
-
-- Issue #20086: Restored the use of locale-independent mapping instead of
-  locale-dependent str.lower() in locale.normalize().
-
-- Issue #20246: Fix buffer overflow in socket.recvfrom_into.
-
-- Issue #19082: Working SimpleXMLRPCServer and xmlrpclib examples, both in
-  modules and documentation.
-
-- Issue #13107: argparse and optparse no longer raises an exception when output
-  a help on environment with too small COLUMNS.  Based on patch by
-  Elazar Gershuni.
-
-- Issue #20207: Always disable SSLv2 except when PROTOCOL_SSLv2 is explicitly
-  asked for.
-
-- Issue #20072: Fixed multiple errors in tkinter with wantobjects is False.
-
-- Issue #1065986: pydoc can now handle unicode strings.
-
-- Issue #16039: CVE-2013-1752: Change use of readline in imaplib module to
-  limit line length.  Patch by Emil Lind.
-
-- Issue #19422: Explicitly disallow non-SOCK_STREAM sockets in the ssl
-  module, rather than silently let them emit clear text data.
-
-- Issue #20027: Fixed locale aliases for devanagari locales.
-
-- Issue #20067: Tkinter variables now work when wantobjects is false.
-
-- Issue #19020: Tkinter now uses splitlist() instead of split() in configure
-  methods.
-
-- Issue #12226: HTTPS is now used by default when connecting to PyPI.
-
-- Issue #20048: Fixed ZipExtFile.peek() when it is called on the boundary of
-  the uncompress buffer and read() goes through more than one readbuffer.
-
-- Issue #20034: Updated alias mapping to most recent locale.alias file
-  from X.org distribution using makelocalealias.py.
-
-- Issue #5815: Fixed support for locales with modifiers.  Fixed support for
-  locale encodings with hyphens.
-
-- Issue #20026: Fix the sqlite module to handle correctly invalid isolation
-  level (wrong type).
-
-- Issue #18829: csv.Dialect() now checks type for delimiter, escapechar and
-  quotechar fields.  Original patch by Vajrasky Kok.
-
-- Issue #19855: uuid.getnode() on Unix now looks on the PATH for the
-  executables used to find the mac address, with /sbin and /usr/sbin as
-  fallbacks.
-
-- Issue #20007: HTTPResponse.read(0) no more prematurely closes connection.
-  Original patch by Simon Sapin.
-
-- Issue #19912: Fixed numerous bugs in ntpath.splitunc().
-
-- Issue #19623: Fixed writing to unseekable files in the aifc module.
-  Fixed writing 'ulaw' (lower case) compressed AIFC files.
-
-- Issue #17919: select.poll.register() again works with poll.POLLNVAL on AIX.
-  Fixed integer overflow in the eventmask parameter.
-
-- Issue #17200: telnetlib's read_until and expect timeout was broken by the
-  fix to Issue #14635 in Python 2.7.4 to be interpreted as milliseconds
-  instead of seconds when the platform supports select.poll (ie: everywhere).
-  It is now treated as seconds once again.
-
-- Issue #19099: The struct module now supports Unicode format strings.
-
-- Issue #19878: Fix segfault in bz2 module after calling __init__ twice with
-  non-existent filename. Initial patch by Vajrasky Kok.
-
-- Issue #16373: Prevent infinite recursion for ABC Set class comparisons.
-
-- Issue #19138: doctest's IGNORE_EXCEPTION_DETAIL now allows a match when
-  no exception detail exists (no colon following the exception's name, or
-  a colon does follow but no text follows the colon).
-
-- Issue #16231: Fixed pickle.Pickler to only fallback to its default pickling
-  behaviour when Pickler.persistent_id returns None, but not for any other
-  false values.  This allows false values other than None to be used as
-  persistent IDs.  This behaviour is consistent with cPickle.
-
-- Issue #11508: Fixed uuid.getnode() and uuid.uuid1() on environment with
-  virtual interface.  Original patch by Kent Frazier.
-
-- Issue #11489: JSON decoder now accepts lone surrogates.
-
-- Fix test.test_support.bind_port() to not cause an error when Python was
-  compiled on a system with SO_REUSEPORT defined in the headers but run on
-  a system with an OS kernel that does not support that new socket option.
-
-- Issue #19633: Fixed writing not compressed 16- and 32-bit wave files on
-  big-endian platforms.
-
-- Issue #19449: in csv's writerow, handle non-string keys when generating the
-  error message that certain keys are not in the 'fieldnames' list.
-
-- Issue #12853: Fix NameError in distutils.command.upload.
-
-- Issue #19523: Closed FileHandler leak which occurred when delay was set.
-
-- Issue #1575020: Fixed support of 24-bit wave files on big-endian platforms.
-
-- Issue #19480: HTMLParser now accepts all valid start-tag names as defined
-  by the HTML5 standard.
-
-- Issue #17827: Add the missing documentation for ``codecs.encode`` and
-  ``codecs.decode``.
-
-- Issue #6157: Fixed Tkinter.Text.debug().  Original patch by Guilherme Polo.
-
-- Issue #6160: The bbox() method of tkinter.Spinbox now returns a tuple of
-  integers instead of a string.  Based on patch by Guilherme Polo.
-
-- Issue #19286: Directories in ``package_data`` are no longer added to
-  the filelist, preventing failure outlined in the ticket.
-
-- Issue #6676: Ensure a meaningful exception is raised when attempting
-  to parse more than one XML document per pyexpat xmlparser instance.
-  (Original patches by Hirokazu Yamamoto and Amaury Forgeot d'Arc, with
-  suggested wording by David Gutteridge)
-
-- Issue #21311: Avoid exception in _osx_support with non-standard compiler
-  configurations.  Patch by John Szakmeister.
-
-Tools/Demos
------------
-
-- Issue #3561: The Windows installer now has an option, off by default, for
-  placing the Python installation into the system "Path" environment variable.
-  This was backported from Python 3.3.
-
-- Add support for ``yield from`` to 2to3.
-
-- Add support for the PEP 465 matrix multiplication operator to 2to3.
-
-- Issue #19936: Added executable bits or shebang lines to Python scripts which
-  requires them.  Disable executable bits and shebang lines in test and
-  benchmark files in order to prevent using a random system python, and in
-  source files of modules which don't provide command line interface.
-
-IDLE
-----
-
-- Issue #18104: Add idlelib/idle_test/htest.py with a few sample tests to begin
-  consolidating and improving human-validated tests of Idle. Change other files
-  as needed to work with htest.  Running the module as __main__ runs all tests.
-
-- Issue #21139: Change default paragraph width to 72, the PEP 8 recommendation.
-
-- Issue #21284: Paragraph reformat test passes after user changes reformat width.
-
-- Issue #20406: Use Python application icons for Idle window title bars.
-  Patch mostly by Serhiy Storchaka.
-
-- Issue #21029: Occurrences of "print" are now consistently colored as
-  being a keyword (the colorizer doesn't know if print functions are
-  enabled in the source).
-
-- Issue #17721: Remove non-functional configuration dialog help button until we
-  make it actually gives some help when clicked. Patch by Guilherme Simões.
-
-- Issue #17390: Add Python version to Idle editor window title bar.
-  Original patches by Edmond Burnett and Kent Johnson.
-
-- Issue #20058: sys.stdin.readline() in IDLE now always returns only one line.
-
-- Issue #19481: print() of unicode, str or bytearray subclass instance in IDLE
-  no more hangs.
-
-- Issue #18270: Prevent possible IDLE AttributeError on OS X when no initial
-  shell window is present.
-
-- Issue #17654: Ensure IDLE menus are customized properly on OS X for
-  non-framework builds and for all variants of Tk.
-
-Tests
------
-
-- Issue #17752: Fix distutils tests when run from the installed location.
-
-- Issue #18604: Consolidated checks for GUI availability.  All platforms now
-  at least check whether Tk can be instantiated when the GUI resource is
-  requested.
-
-- Issue #20946: Correct alignment assumptions of some ctypes tests.
-
-- Issue #20743: Fix a reference leak in test_tcl.
-
-- Issue #20510: Rewrote test_exit in test_sys to match existing comments,
-  use modern unittest features, and use helpers from test.script_helper
-  instead of using subprocess directly.  Initial patch by Gareth Rees.
-
-- Issue #20532: Tests which use _testcapi now are marked as CPython only.
-
-- Issue #19920: Added tests for TarFile.list().  Based on patch by Vajrasky Kok.
-
-- Issue #19990: Added tests for the imghdr module.  Based on patch by
-  Claudiu Popa.
-
-- Issue #19804: The test_find_mac test in test_uuid is now skipped if the
-  ifconfig executable is not available.
-
-- Issue #19886: Use better estimated memory requirements for bigmem tests.
-
-- Backported tests for Tkinter variables.
-
-- Issue #19320: test_tcl no longer fails when wantobjects is false.
-
-- Issue #19683: Removed empty tests from test_minidom.  Initial patch by
-  Ajitesh Gupta.
-
-- Issue #19928: Implemented a test for repr() of cell objects.
-
-- Issue #19595, #19987: Re-enabled a long-disabled test in test_winsound.
-
-- Issue #19588: Fixed tests in test_random that were silently skipped most
-  of the time.  Patch by Julian Gindi.
-
-- Issue #17883: Tweak test_tcl testLoadWithUNC to skip the test in the
-  event of a permission error on Windows and to properly report other
-  skip conditions.
-
-- Issue #17883: Backported _is_gui_available() in test.test_support to
-  avoid hanging Windows buildbots on test_ttk_guionly.
-
-- Issue #18702, #19572: All skipped tests now reported as skipped.
-
-- Issue #19085: Added basic tests for all tkinter widget options.
-
-- Issue #20605: Make test_socket getaddrinfo OS X segfault test more robust.
-
-- Issue #20939: Avoid various network test failures due to new
-  redirect of http://www.python.org/ to https://www.python.org:
-  use http://www.example.com instead.
-
-- Issue #21093: Prevent failures of ctypes test_macholib on OS X if a
-  copy of libz exists in $HOME/lib or /usr/local/lib.
-
-Build
------
-
-- Issue #21285: Refactor and fix curses configure check to always search
-  in a ncursesw directory.
-
-Documentation
--------------
-
-- Issue #20255: Update the about and bugs pages.
-
-- Issue #18840: Introduce the json module in the tutorial, and de-emphasize
-  the pickle module.
-
-- Issue #19795: Improved markup of True/False constants.
-
-Windows
--------
-
-- Issue #21303, #20565: Updated the version of Tcl/Tk included in the
-  installer from 8.5.2 to 8.5.15.
-
-Mac OS X
---------
-
-- As of 2.7.8, the 32-bit-only installer will support OS X 10.5
-  and later systems as is currently done for Python 3.x installers.
-  For 2.7.7 only, we will provide three installers:
-  the legacy deprecated 10.3+ 32-bit-only format;
-  the newer 10.5+ 32-bit-only format;
-  and the unchanged 10.6+ 64-/32-bit format.
-  Although binary installers will no longer be available from
-  python.org as of 2.7.8, it will still be possible to build from
-  source on 10.3.9 and 10.4 systems if necessary.
-  See Mac/BuildScript/README.txt for more information.
-
-
-Whats' New in Python 2.7.6?
-===========================
-
-*Release date: 2013-11-10*
-
-Library
--------
-
-- Issue #19435: Fix directory traversal attack on CGIHttpRequestHandler.
-
-IDLE
-----
-
-- Issue #19426: Fixed the opening of Python source file with specified encoding.
-
-Tests
------
-
-- Issue #19457: Fixed xmlcharrefreplace tests on wide build when tests are
-  loaded from .py[co] files.
-
-Build
------
-
-- Issue #15663: Revert OS X installer built-in Tcl/Tk support for 2.7.6.
-  Some third-party projects, such as Matplotlib and PIL/Pillow,
-  depended on being able to build with Tcl and Tk frameworks in
-  /Library/Frameworks.
-
-
-What's New in Python 2.7.6 release candidate 1?
-===============================================
-
-*Release date: 2013-10-26*
-
-Core and Builtins
------------------
-
-- Issue #18603: Ensure that PyOS_mystricmp and PyOS_mystrnicmp are in the
-  Python executable and not removed by the linker's optimizer.
-
-- Issue #19279: UTF-7 decoder no more produces illegal unicode strings.
-
-- Issue #18739: Fix an inconsistency between math.log(n) and math.log(long(n));
-  the results could be off from one another by a ulp or two.
-
-- Issue #13461: Fix a crash in the "replace" error handler on 64-bit platforms.
-  Patch by Yogesh Chaudhari.
-
-- Issue #15866: The xmlcharrefreplace error handler no more produces two XML
-  entities for a non-BMP character on narrow build.
-
-- Issue #18184: PyUnicode_FromFormat() and PyUnicode_FromFormatV() now raise
-  OverflowError when an argument of %c format is out of range.
-
-- Issue #18137: Detect integer overflow on precision in float.__format__()
-  and complex.__format__().
-
-- Issue #18038: SyntaxError raised during compilation sources with illegal
-  encoding now always contains an encoding name.
-
-- Issue #18019: Fix crash in the repr of dictionaries containing their own
-  views.
-
-- Issue #18427: str.replace could crash the interpreter with huge strings.
-
-Library
--------
-
-- Issue #19393: Fix symtable.symtable function to not be confused when there are
-  functions or classes named "top".
-
-- Issue #19327: Fixed the working of regular expressions with too big charset.
-
-- Issue #19350: Increasing the test coverage of macurl2path. Patch by Colin
-  Williams.
-
-- Issue #19352: Fix unittest discovery when a module can be reached
-  through several paths (e.g. under Debian/Ubuntu with virtualenv).
-
-- Issue #15207: Fix mimetypes to read from correct part of Windows registry
-  Original patch by Dave Chambers
-
-- Issue #8964: fix platform._sys_version to handle IronPython 2.6+.
-  Patch by Martin Matusiak.
-
-- Issue #16038: CVE-2013-1752: ftplib: Limit amount of data read by
-  limiting the call to readline().  Original patch by Michał
-  Jastrzębski and Giampaolo Rodola.
-
-- Issue #19276: Fixed the wave module on 64-bit big-endian platforms.
-
-- Issue #18458: Prevent crashes with newer versions of libedit.  Its readline
-  emulation has changed from 0-based indexing to 1-based like gnu readline.
-  Original patch by Ronald Oussoren.
-
-- Issue #18919: If the close() method of a writer in the sunau or wave module
-  failed, second invocation of close() and destructor no more raise an
-  exception.  Second invocation of close() on sunau writer now has no effects.
-  The aifc module now accepts lower case of names of the 'ulaw' and 'alaw'
-  codecs.
-
-- Issue #19131: The aifc module now correctly reads and writes sampwidth of
-  compressed streams.
-
-- Issue #19158: A rare race in BoundedSemaphore could allow .release() too
-  often.
-
-- Issue #18037: 2to3 now escapes '\u' and '\U' in native strings.
-
-- Issue #19137: The pprint module now correctly formats empty set and frozenset
-  and instances of set and frozenset subclasses.
-
-- Issue #16040: CVE-2013-1752: nntplib: Limit maximum line lengths to 2048 to
-  prevent readline() calls from consuming too much memory.  Patch by Jyrki
-  Pulliainen.
-
-- Issue #12641: Avoid passing "-mno-cygwin" to the mingw32 compiler, except
-  when necessary.  Patch by Oscar Benjamin.
-
-- Properly initialize all fields of a SSL object after allocation.
-
-- Issue #4366: Fix building extensions on all platforms when --enable-shared
-  is used.
-
-- Issue #18950: Fix miscellaneous bugs in the sunau module.
-  Au_read.readframes() now updates current file position and reads correct
-  number of frames from multichannel stream.  Au_write.writeframesraw() now
-  correctly updates current file position.  Au_read and Au_write now correctly
-  work with file object if start file position is not a zero.
-
-- Issue #18050: Fixed an incompatibility of the re module with Python 2.7.3
-  and older binaries.
-
-- Issue #19037: The mailbox module now makes all changes to maildir files
-  before moving them into place, to avoid race conditions with other programs
-  that may be accessing the maildir directory.
-
-- Issue #14984: On POSIX systems, when netrc is called without a filename
-  argument (and therefore is reading the user's $HOME/.netrc file), it now
-  enforces the same security rules as typical ftp clients: the .netrc file must
-  be owned by the user that owns the process and must not be readable by any
-  other user.
-
-- Issue #17324: Fix http.server's request handling case on trailing '/'. Patch
-  contributed by Vajrasky Kok.
-
-- Issue #19018: The heapq.merge() function no longer suppresses IndexError
-  in the underlying iterables.
-
-- Issue #18784: The uuid module no more attempts to load libc via ctypes.CDLL,
-  if all necessary functions are already found in libuuid.
-  Patch by Evgeny Sologubov.
-
-- Issue #14971: unittest test discovery no longer gets confused when a function
-  has a different __name__ than its name in the TestCase class dictionary.
-
-- Issue #18672: Fixed format specifiers for Py_ssize_t in debugging output in
-  the _sre module.
-
-- Issue #18830: inspect.getclasstree() no more produces duplicated entries even
-  when input list contains duplicates.
-
-- Issue #18909: Fix _tkinter.tkapp.interpaddr() on Windows 64-bit, don't cast
-  64-bit pointer to long (32 bits).
-
-- Issue #18876: The FileIO.mode attribute now better reflects the actual mode
-  under which the file was opened.  Patch by Erik Bray.
-
-- Issue #18851: Avoid a double close of subprocess pipes when the child
-  process fails starting.
-
-- Issue #18418: After fork(), reinit all threads states, not only active ones.
-  Patch by A. Jesse Jiryu Davis.
-
-- Issue #11973: Fix a problem in kevent. The flags and fflags fields are now
-  properly handled as unsigned.
-
-- Issue #16809: Fixed some tkinter incompabilities with Tcl/Tk 8.6.
-
-- Issue #16809: Tkinter's splitlist() and split() methods now accept Tcl_Obj
-  argument.
-
-- Issue #17119: Fixed integer overflows when processing large Unicode strings
-  and tuples in the tkinter module.
-
-- Issue #15233: Python now guarantees that callables registered with the atexit
-  module will be called in a deterministic order.
-
-- Issue #18747: Re-seed OpenSSL's pseudo-random number generator after fork.
-  A pthread_atfork() parent handler is used to seed the PRNG with pid, time
-  and some stack data.
-
-- Issue #8865: Concurrent invocation of select.poll.poll() now raises a
-  RuntimeError exception.  Patch by Christian Schubert.
-
-- Issue #13461: Fix a crash in the TextIOWrapper.tell method on 64-bit
-  platforms.  Patch by Yogesh Chaudhari.
-
-- Issue #18777: The ssl module now uses the new CRYPTO_THREADID API of
-  OpenSSL 1.0.0+ instead of the deprecated CRYPTO id callback function.
-
-- Issue #18768: Correct doc string of RAND_edg(). Patch by Vajrasky Kok.
-
-- Issue #18178: Fix ctypes on BSD. dlmalloc.c was compiled twice which broke
-  malloc weak symbols.
-
-- Issue #18709: Fix CVE-2013-4238. The SSL module now handles NULL bytes
-  inside subjectAltName correctly. Formerly the module has used OpenSSL's
-  GENERAL_NAME_print() function to get the string representation of ASN.1
-  strings for ``rfc822Name`` (email), ``dNSName`` (DNS) and
-  ``uniformResourceIdentifier`` (URI).
-
-- Issue #18756: Improve error reporting in os.urandom() when the failure
-  is due to something else than /dev/urandom not existing (for example,
-  exhausting the file descriptor limit).
-
-- Fix tkinter regression introduced by the security fix in issue #16248.
-
-- Issue #18676: Change 'positive' to 'non-negative' in queue.py put and get
-  docstrings and ValueError messages. Patch by Zhongyue Luo
-
-- Issue #17998: Fix an internal error in regular expression engine.
-
-- Issue #17557: Fix os.getgroups() to work with the modified behavior of
-  getgroups(2) on OS X 10.8.  Original patch by Mateusz Lenik.
-
-- Issue #18455: multiprocessing should not retry connect() with same socket.
-
-- Issue #18513: Fix behaviour of cmath.rect w.r.t. signed zeros on OS X 10.8 +
-  gcc.
-
-- Issue #18101: Tcl.split() now process Unicode strings nested in a tuple as it
-  do with byte strings.
-
-- Issue #18347: ElementTree's html serializer now preserves the case of
-  closing tags.
-
-- Issue #17261: Ensure multiprocessing's proxies use proper address.
-
-- Issue #17097: Make multiprocessing ignore EINTR.
-
-- Issue #18155: The csv module now correctly handles csv files that use
-  a delimiter character that has a special meaning in regexes, instead of
-  throwing an exception.
-
-- Issue #18135: ssl.SSLSocket.write() now raises an OverflowError if the input
-  string in longer than 2 gigabytes. The ssl module does not support partial
-  write.
-
-- Issue #18167: cgi.FieldStorage no longer fails to handle multipart/form-data
-  when \r\n appears at end of 65535 bytes without other newlines.
-
-- Issue #17403: urllib.parse.robotparser normalizes the urls before adding to
-  ruleline. This helps in handling certain types invalid urls in a conservative
-  manner. Patch contributed by Mher Movsisyan.
-
-- Implement inequality on weakref.WeakSet.
-
-- Issue #17981: Closed socket on error in SysLogHandler.
-
-- Issue #18015: Fix unpickling of 2.7.3 and 2.7.4 namedtuples.
-
-- Issue #17754: Make ctypes.util.find_library() independent of the locale.
-
-- Fix typos in the multiprocessing module.
-
-- Issue #17269: Workaround for socket.getaddrinfo crash on MacOS X
-  with port None or "0" and flags AI_NUMERICSERV.
-
-- Issue #18080: When building a C extension module on OS X, if the compiler
-  is overridden with the CC environment variable, use the new compiler as
-  the default for linking if LDSHARED is not also overridden.  This restores
-  Distutils behavior introduced in 2.7.3 and inadvertently dropped in 2.7.4.
-
-- Issue #18071: C extension module builds on OS X could fail with TypeError
-  if the Xcode command line tools were not installed.
-
-- Issue #18113: Fixed a refcount leak in the curses.panel module's
-  set_userptr() method.  Reported by Atsuo Ishimoto.
-
-- Issue #18849: Fixed a Windows-specific tempfile bug where collision with an
-  existing directory caused mkstemp and related APIs to fail instead of
-  retrying. Report and fix by Vlad Shcherbina.
-
-- Issue #19400: Prevent extension module build failures with Xcode 5 on OS X
-  10.8+ when using a universal Python that included a PPC architecture,
-  such as with a python.org 32-bit-only binary installer.
-
-Tools/Demos
------------
-
-- Issue #18873: 2to3 and the findnocoding.py script now detect Python source
-  code encoding only in comment lines.
-
-- Issue #18817: Fix a resource warning in Lib/aifc.py demo.
-
-- Issue #18439: Make patchcheck work on Windows for ACKS, NEWS.
-
-- Issue #18448: Fix a typo in Demo/newmetaclasses/Eiffel.py.
-
-- Issue #12990: The "Python Launcher" on OSX could not launch python scripts
-  that have paths that include wide characters.
-
-Build
------
-
-- Issue #16067: Add description into MSI file to replace installer's temporary name.
-
-- Issue #18256: Compilation fix for recent AIX releases.  Patch by
-  David Edelsohn.
-
-- Issue #18098: The deprecated OS X Build Applet.app fails to build on
-  OS X 10.8 systems because the Apple-deprecated QuickDraw headers have
-  been removed from Xcode 4.  Skip building it in this case.
-
-- Issue #1584: Provide options to override default search paths for
-  Tcl and Tk when building _tkinter.
-
-- Issue #15663: Tcl/Tk 8.5.15 is now included with the OS X 10.6+
-  64-bit/32-bit installer for 10.6+.  It is no longer necessary
-  to install a third-party version of Tcl/Tk 8.5 to work around the
-  problems in the Apple-supplied Tcl/Tk 8.5 shipped in OS X 10.6
-  and later releases.
-
-- Issue #19019: Change the OS X installer build script to use CFLAGS instead
-  of OPT for special build options.  By setting OPT, some compiler-specific
-  options like -fwrapv were overridden and thus not used, which could result
-  in broken interpreters when building with clang.
-
-IDLE
-----
-
-- Issue #18873: IDLE now detects Python source code encoding only in comment
-  lines.
-
-- Issue #18988: The "Tab" key now works when a word is already autocompleted.
-
-- Issue #18489: Add tests for SearchEngine. Original patch by Phil Webster.
-
-- Issue #18429: Format / Format Paragraph, now works when comment blocks
-  are selected. As with text blocks, this works best when the selection
-  only includes complete lines.
-
-- Issue #18226: Add docstrings and unittests for FormatParagraph.py.
-  Original patches by Todd Rovito and Phil Webster.
-
-- Issue #18279: Format - Strip trailing whitespace no longer marks a file as
-  changed when it has not been changed. This fix followed the addition of a
-  test file originally written by Phil Webster (the issue's main goal).
-
-- Issue #18539: Calltips now work for float default arguments.
-
-- Issue #7136: In the Idle File menu, "New Window" is renamed "New File".
-  Patch by Tal Einat, Roget Serwy, and Todd Rovito.
-
-- Issue #8515: Set __file__ when run file in IDLE.
-  Initial patch by Bruce Frederiksen.
-
-- Issue #5492: Avoid traceback when exiting IDLE caused by a race condition.
-
-- Issue #17511: Keep IDLE find dialog open after clicking "Find Next".
-  Original patch by Sarah K.
-
-- Issue #15392: Create a unittest framework for IDLE.
-  Preliminary patch by Rajagopalasarma Jayakrishnan
-  See Lib/idlelib/idle_test/README.txt for how to run Idle tests.
-
-- Issue #14146: Highlight source line while debugging on Windows.
-
-- Issue #17532: Always include Options menu for IDLE on OS X.
-  Patch by Guilherme Simões.
-
-Tests
------
-
-- Issue #18919: Added tests for the sunau module.  Unified and extended tests
-  for audio modules: aifc, sunau and wave.
-
-- Issue #18792: Use "127.0.0.1" or "::1" instead of "localhost" as much as
-  possible, since "localhost" goes through a DNS lookup under recent Windows
-  versions.
-
-- Issue #18357: add tests for dictview set difference.
-  Patch by Fraser Tweedale.
-
-- Issue #11185: Fix test_wait4 under AIX.  Patch by Sébastien Sablé.
-
-- Issue #18094: test_uuid no more reports skipped tests as passed.
-
-- Issue #11995: test_pydoc doesn't import all sys.path modules anymore.
-
-Documentation
--------------
-
-- Issue #18758: Fixed and improved cross-references.
-
-- Issue #18718: datetime documentation contradictory on leap second support.
-
-- Issue #17701: Improving strftime documentation.
-
-- Issue #17844: Refactor a documentation of Python specific encodings.
-  Add links to encoders and decoders for binary-to-binary codecs.
-
-
-What's New in Python 2.7.5?
-===========================
-
-*Release date: 2013-05-12*
-
-Core and Builtins
------------------
-
-- Issue #15535: Fixed regression in the pickling of named tuples by
-  removing the __dict__ property introduced in 2.7.4.
-
-- Issue #17857: Prevent build failures with pre-3.5.0 versions of sqlite3,
-  such as was shipped with Centos 5 and Mac OS X 10.4.
-
-- Issue #17703: Fix a regression where an illegal use of Py_DECREF() after
-  interpreter finalization can cause a crash.
-
-- Issue #16447: Fixed potential segmentation fault when setting __name__ on a
-  class.
-
-- Issue #17610: Don't rely on non-standard behavior of the C qsort() function.
-
-Library
--------
-
-- Issue #17979: Fixed the re module in build with --disable-unicode.
-
-- Issue #17606: Fixed support of encoded byte strings in the XMLGenerator
- .characters() and ignorableWhitespace() methods.  Original patch by Sebastian
-  Ortiz Vasquez.
-
-- Issue #16601: Restarting iteration over tarfile no more continues from where
-  it left off.  Patch by Michael Birtwell.
-
-- Issue #16584: in filecomp._cmp, catch IOError as well as os.error.
-  Patch by Till Maas.
-
-- Issue #17926: Fix dbm.__contains__ on 64-bit big-endian machines.
-
-- Issue #19267: Fix support of multibyte encoding (ex: UTF-16) in the logging
-  module.
-
-- Issue #17918: When using SSLSocket.accept(), if the SSL handshake failed
-  on the new socket, the socket would linger indefinitely.  Thanks to
-  Peter Saveliev for reporting.
-
-- Issue #17289: The readline module now plays nicer with external modules
-  or applications changing the rl_completer_word_break_characters global
-  variable.  Initial patch by Bradley Froehle.
-
-- Issue #12181: select module: Fix struct kevent definition on OpenBSD 64-bit
-  platforms. Patch by Federico Schwindt.
-
-- Issue #14173: Avoid crashing when reading a signal handler during
-  interpreter shutdown.
-
-- Issue #16316: mimetypes now recognizes the .xz and .txz (.tar.xz) extensions.
-
-- Issue #17192: Restore the patch for Issue #10309 which was ommitted
-  in 2.7.4 when updating the bundled version of libffi used by ctypes.
-
-- Issue #17843: Removed test data file that was triggering false-positive virus
-  warnings with certain antivirus software.
-
-- Issue #17353: Plistlib emitted empty data tags with deeply nested datastructures
-
-- Issue #11714: Use 'with' statements to assure a Semaphore releases a
-  condition variable.  Original patch by Thomas Rachel.
-
-- Issue #17795: Reverted backwards-incompatible change in SysLogHandler with
-  Unix domain sockets.
-
-- Issue #17555: Fix ForkAwareThreadLock so that size of after fork
-  registry does not grow exponentially with generation of process.
-
-- Issue #17710: Fix cPickle raising a SystemError on bogus input.
-
-- Issue #17341: Include the invalid name in the error messages from re about
-  invalid group names.
-
-- Issue #17016: Get rid of possible pointer wraparounds and integer overflows
-  in the re module.  Patch by Nickolai Zeldovich.
-
-- Issue #17536: Add to webbrowser's browser list: xdg-open, gvfs-open,
-  www-browser, x-www-browser, chromium browsers, iceweasel, iceape.
-
-- Issue #17656: Fix extraction of zip files with unicode member paths.
-
-- Issue #17666: Fix reading gzip files with an extra field.
-
-- Issue #13150, #17512: sysconfig no longer parses the Makefile and config.h
-  files when imported, instead doing it at build time.  This makes importing
-  sysconfig faster and reduces Python startup time by 20%.
-
-- Issue #13163: Rename operands in smtplib.SMTP._get_socket to correct names;
-  fixes otherwise misleading output in tracebacks and when when debug is on.
-
-- Issue #17526: fix an IndexError raised while passing code without filename to
-  inspect.findsource().  Initial patch by Tyler Doyle.
-
-Build
------
-
-- Issue #17547: In configure, explicitly pass -Wformat for the benefit for GCC
-  4.8.
-
-- Issue #17682: Add the _io module to Modules/Setup.dist (commented out).
-
-- Issue #17086: Search the include and library directories provided by the
-  compiler.
-
-Tests
------
-
-- Issue #17928: Fix test_structmembers on 64-bit big-endian machines.
-
-- Issue #17883: Fix buildbot testing of Tkinter on Windows.
-  Patch by Zachary Ware.
-
-- Issue #7855: Add tests for ctypes/winreg for issues found in IronPython.
-  Initial patch by Dino Viehland.
-
-- Issue #17712: Fix test_gdb failures on Ubuntu 13.04.
-
-- Issue #17065: Use process-unique key for winreg tests to avoid failures if
-  test is run multiple times in parallel (eg: on a buildbot host).
-
-IDLE
-----
-
-- Issue #17838: Allow sys.stdin to be reassigned.
-
-- Issue #14735: Update IDLE docs to omit "Control-z on Windows".
-
-- Issue #17585: Fixed IDLE regression. Now closes when using exit() or quit().
-
-- Issue #17657: Show full Tk version in IDLE's about dialog.
-  Patch by Todd Rovito.
-
-- Issue #17613: Prevent traceback when removing syntax colorizer in IDLE.
-
-- Issue #1207589: Backwards-compatibility patch for right-click menu in IDLE.
-
-- Issue #16887: IDLE now accepts Cancel in tabify/untabify dialog box.
-
-- Issue #14254: IDLE now handles readline correctly across shell restarts.
-
-- Issue #17614: IDLE no longer raises exception when quickly closing a file.
-
-- Issue #6698: IDLE now opens just an editor window when configured to do so.
-
-- Issue #8900: Using keyboard shortcuts in IDLE to open a file no longer
-  raises an exception.
-
-- Issue #6649: Fixed missing exit status in IDLE. Patch by Guilherme Polo.
-
-- Issue #17390: Display Python version on Idle title bar.
-  Initial patch by Edmond Burnett.
-
-Documentation
--------------
-
-- Issue #15940: Specify effect of locale on time functions.
-
-- Issue #6696: add documentation for the Profile objects, and improve
-  profile/cProfile docs.  Patch by Tom Pinckney.
-
-
-What's New in Python 2.7.4?
-===========================
-
-*Release date: 2013-04-06*
-
-Build
------
-
-- Issue #17550: Fix the --enable-profiling configure switch.
-
-Core and Builtins
------------------
-
-- Issue #15801 (again): With string % formatting, relax the type check for a
-  mapping such that any type with a __getitem__ can be used on the right hand
-  side.
-
-IDLE
-----
-
-- Issue #17625: In IDLE, close the replace dialog after it is used.
-
-Tests
------
-
-- Issue #17835: Fix test_io when the default OS pipe buffer size is larger
-  than one million bytes.
-
-- Issue #17531: Fix tests that thought group and user ids were always the int
-  type. Also, always allow -1 as a valid group and user id.
-
-- Issue #17533: Fix test_xpickle with older versions of Python 2.5.
-
-Documentation
--------------
-
-- Issue #17538: Document XML vulnerabilties
-
-
-What's New in Python 2.7.4 release candidate 1
-==============================================
-
-*Release date: 2013-03-23*
-
-Core and Builtins
------------------
-
-- Issue #10211: Buffer objects expose the new buffer interface internally
-
-- Issue #16445: Fixed potential segmentation fault when deleting an exception
-  message.
-
-- Issue #17275: Corrected class name in init error messages of the C version of
-  BufferedWriter and BufferedRandom.
-
-- Issue #7963: Fixed misleading error message that issued when object is
-  called without arguments.
-
-- Issue #5308: Raise ValueError when marshalling too large object (a sequence
-  with size >= 2**31), instead of producing illegal marshal data.
-
-- Issue #17043: The unicode-internal decoder no longer read past the end of
-  input buffer.
-
-- Issue #16979: Fix error handling bugs in the unicode-escape-decode decoder.
-
-- Issue #10156: In the interpreter's initialization phase, unicode globals
-  are now initialized dynamically as needed.
-
-- Issue #16975: Fix error handling bug in the escape-decode decoder.
-
-- Issue #14850: Now a charmap decoder treats U+FFFE as "undefined mapping"
-  in any mapping, not only in a Unicode string.
-
-- Issue #11461: Fix the incremental UTF-16 decoder. Original patch by
-  Amaury Forgeot d'Arc.
-
-- Issue #16367: Fix FileIO.readall() on Windows for files larger than 2 GB.
-
-- Issue #15516: Fix a bug in PyString_FromFormat where it failed to properly
-  ignore errors from a __int__() method.
-
-- Issue #16839: Fix a segfault when calling unicode() on a classic class early
-  in interpreter initialization.
-
-- Issue #16761: Calling ``int()`` and ``long()`` with *base* argument only
-  now raises TypeError.
-
-- Issue #16759: Support the full DWORD (unsigned long) range in Reg2Py
-  when retrieving a REG_DWORD value. This corrects functions like
-  winreg.QueryValueEx that may have been returning truncated values.
-
-- Issue #14420: Support the full DWORD (unsigned long) range in Py2Reg
-  when passed a REG_DWORD value. Fixes ValueError in winreg.SetValueEx when
-  given a long.
-
-- Issue #13863: Work around buggy 'fstat' implementation on Windows / NTFS that
-  lead to incorrect timestamps (off by one hour) being stored in .pyc files on
-  some systems.
-
-- Issue #16602: When a weakref's target was part of a long deallocation
-  chain, the object could remain reachable through its weakref even though
-  its refcount had dropped to zero.
-
-- Issue #9011: Fix hacky AST code that modified the CST when compiling
-  a negated numeric literal.
-
-- Issue #16306: Fix multiple error messages when unknown command line
-  parameters where passed to the interpreter.  Patch by Hieu Nguyen.
-
-- Issue #15379: Fix passing of non-BMP characters as integers for the charmap
-  decoder (already working as unicode strings).  Patch by Serhiy Storchaka.
-
-- Issue #16453: Fix equality testing of dead weakref objects.
-
-- Issue #9535: Fix pending signals that have been received but not yet
-  handled by Python to not persist after os.fork() in the child process.
-
-- Issue #15001: fix segfault on "del sys.modules['__main__']". Patch by Victor
-  Stinner.
-
-- Issue #5057: the peepholer no longer optimizes subscription on unicode
-  literals (e.g. u'foo'[0]) in order to produce compatible pyc files between
-  narrow and wide builds.
-
-- Issue #8401: assigning an int to a bytearray slice (e.g. b[3:4] = 5) now
-  raises an error.
-
-- Issue #14700: Fix buggy overflow checks for large width and precision
-  in string formatting operations.
-
-- Issue #16345: Fix an infinite loop when ``fromkeys`` on a dict subclass
-  received a nonempty dict from the constructor.
-
-- Issue #6074: Ensure cached bytecode files can always be updated by the
-  user that created them, even when the source file is read-only.
-
-- Issue #14783: Improve int() and long() docstrings and switch docstrings for
-  unicode(), slice(), range(), and xrange() to use multi-line signatures.
-
-- Issue #16030: Fix overflow bug in computing the `repr` of an xrange object
-  with large start, step or length.
-
-- Issue #16029: Fix overflow bug occurring when pickling xranges with large
-  start, step or length.
-
-- Issue #16037: Limit httplib's _read_status() function to work around broken
-  HTTP servers and reduce memory usage. It's actually a backport of a Python
-  3.2 fix. Thanks to Adrien Kunysz.
-
-- Issue #16588: Silence unused-but-set warnings in Python/thread_pthread
-
-- Issue #13992: The trashcan mechanism is now thread-safe.  This eliminates
-  sporadic crashes in multi-thread programs when several long deallocator
-  chains ran concurrently and involved subclasses of built-in container
-  types.
-
-- Issue #15801: Make sure mappings passed to '%' formatting are actually
-  subscriptable.
-
-- Issue #15604: Update uses of PyObject_IsTrue() to check for and handle
-  errors correctly.  Patch by Serhiy Storchaka.
-
-- Issue #14579: Fix error handling bug in the utf-16 decoder.  Patch by
-  Serhiy Storchaka.
-
-- Issue #15368: An issue that caused bytecode generation to be
-  non-deterministic when using randomized hashing (-R) has been fixed.
-
-- Issue #15897: zipimport.c doesn't check return value of fseek().
-  Patch by Felipe Cruz.
-
-- Issue #16369: Global PyTypeObjects not initialized with PyType_Ready(...).
-
-- Issue #15033: Fix the exit status bug when modules invoked using -m switch,
-  return the proper failure return value (1). Patch contributed by Jeff Knupp.
-
-- Issue #12268: File readline, readlines and read() methods no longer lose
-  data when an underlying read system call is interrupted.  IOError is no
-  longer raised due to a read system call returning EINTR from within these
-  methods.
-
-- Issue #13512: Create ~/.pypirc securely (CVE-2011-4944).  Initial patch by
-  Philip Jenvey, tested by Mageia and Debian.
-
-- Issue #7719: Make distutils ignore ``.nfs*`` files instead of choking later
-  on.  Initial patch by SilentGhost and Jeff Ramnani.
-
-- Issue #10053: Don't close FDs when FileIO.__init__ fails. Loosely based on
-  the work by Hirokazu Yamamoto.
-
-- Issue #14775: Fix a potential quadratic dict build-up due to the garbage
-  collector repeatedly trying to untrack dicts.
-
-- Issue #14494: Fix __future__.py and its documentation to note that
-  absolute imports are the default behavior in 3.0 instead of 2.7.
-  Patch by Sven Marnach.
-
-- Issue #14761: Fix potential leak on an error case in the import machinery.
-
-- Issue #14699: Fix calling the classmethod descriptor directly.
-
-- Issue #11603 (again): Setting __repr__ to __str__ now raises a RuntimeError
-  when repr() or str() is called on such an object.
-
-- Issue #14658: Fix binding a special method to a builtin implementation of a
-  special method with a different name.
-
-- Issue #14612: Fix jumping around with blocks by setting f_lineno.
-
-- Issue #13889: Check and (if necessary) set FPU control word before calling
-  any of the dtoa.c string <-> float conversion functions, on MSVC builds of
-  Python.  This fixes issues when embedding Python in a Delphi app.
-
-- Issue #14505: Fix file descriptor leak when deallocating file objects
-  created with PyFile_FromString().
-
-- Issue #14474: Save and restore exception state in thread.start_new_thread()
-  while writing error message if the thread leaves an unhandled exception.
-
-- Issue #13019: Fix potential reference leaks in bytearray.extend().  Patch
-  by Suman Saha.
-
-- Issue #14378: Fix compiling ast.ImportFrom nodes with a "__future__" string as
-  the module name that was not interned.
-
-- Issue #14331: Use significantly less stack space when importing modules by
-  allocating path buffers on the heap instead of the stack.
-
-- Issue #14334: Prevent in a segfault in type.__getattribute__ when it was not
-  passed strings. Also fix segfaults in the __getattribute__ and __setattr__
-  methods of old-style classes.
-
-- Issue #14161: fix the __repr__ of file objects to escape the file name.
-
-- Issue #1469629: Allow cycles through an object's __dict__ slot to be
-  collected. (For example if ``x.__dict__ is x``).
-
-- Issue #13521: dict.setdefault() now does only one lookup for the given key,
-  making it "atomic" for many purposes.  Patch by Filip Gruszczyński.
-
-- Issue #1602133: on Mac OS X a shared library build (``--enable-shared``)
-  now fills the ``os.environ`` variable correctly.
-
-- Issue #10538: When using the "s*" code with PyArg_ParseTuple() to fill a
-  Py_buffer structure with data from an object supporting only the old
-  PyBuffer interface, a reference to the source objects is now properly added
-  to the Py_buffer.obj member.
-
-Library
--------
-
-- Issue #12718: Fix interaction with winpdb overriding __import__ by setting
-  importer attribute on BaseConfigurator instance.
-
-- Issue #17521: Corrected non-enabling of logger following two calls to
-  fileConfig().
-
-- Issue #17508: Corrected MemoryHandler configuration in dictConfig() where
-  the target handler wasn't configured first.
-
-- Issue #10212: cStringIO and struct.unpack support new buffer objects.
-
-- Issue #12098: multiprocessing on Windows now starts child processes
-  using the same sys.flags as the current process.  Initial patch by
-  Sergey Mezentsev.
-
-- Issue #8862: Fixed curses cleanup when getkey is interrupted by a signal.
-
-- Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
-  retry the select() loop instead of bailing out.  This is because select()
-  can incorrectly report a socket as ready for reading (for example, if it
-  received some data with an invalid checksum).
-
-- Issue #1285086: Get rid of the refcounting hack and speed up urllib.unquote().
-
-- Issue #17368: Fix an off-by-one error in the Python JSON decoder that caused
-  a failure while decoding empty object literals when object_pairs_hook was
-  specified.
-
-- Issue #17278: Fix a crash in heapq.heappush() and heapq.heappop() when
-  the list is being resized concurrently.
-
-- Issue #17018: Make Process.join() retry if os.waitpid() fails with EINTR.
-
-- Issue #14720: sqlite3: Convert datetime microseconds correctly.
-  Patch by Lowe Thiderman.
-
-- Issue #17225: JSON decoder now counts columns in the first line starting
-  with 1, as in other lines.
-
-- Issue #7842: backported fix for py_compile.compile() syntax error handling.
-
-- Issue #13153: Tkinter functions now raise TclError instead of ValueError when
-  a unicode argument contains non-BMP character.
-
-- Issue #9669: Protect re against infinite loops on zero-width matching in
-  non-greedy repeat.  Patch by Matthew Barnett.
-
-- Issue #13169: The maximal repetition number in a regular expression has been
-  increased from 65534 to 2147483647 (on 32-bit platform) or 4294967294 (on
-  64-bit).
-
-- Issue #16743: Fix mmap overflow check on 32 bit Windows.
-
-- Issue #11311: StringIO.readline(0) now returns an empty string as all other
-  file-like objects.
-
-- Issue #16800: tempfile.gettempdir() no longer left temporary files when
-  the disk is full.  Original patch by Amir Szekely.
-
-- Issue #13555: cPickle now supports files larger than 2 GiB.
-
-- Issue #17052: unittest discovery should use self.testLoader.
-
-- Issue #4591: Uid and gid values larger than 2**31 are supported now.
-
-- Issue #17141: random.vonmisesvariate() no more hangs for large kappas.
-
-- Issue #17149: Fix random.vonmisesvariate to always return results in
-  the range [0, 2*math.pi].
-
-- Issue #1470548: XMLGenerator now works with UTF-16 and UTF-32 encodings.
-
-- Issue #6975: os.path.realpath() now correctly resolves multiple nested
-  symlinks on POSIX platforms.
-
-- Issue #7358: cStringIO.StringIO now supports writing to and reading from
-  a stream larger than 2 GiB on 64-bit systems.
-
-- Issue #10355: In SpooledTemporaryFile class mode and name properties and
-  xreadlines method now work for unrolled files.  encoding and newlines
-  properties now removed as they have no sense and always produced
-  AttributeError.
-
-- Issue #16686: Fixed a lot of bugs in audioop module.  Fixed crashes in
-  avgpp(), maxpp() and ratecv().  Fixed an integer overflow in add(), bias(),
-  and ratecv().  reverse(), lin2lin() and ratecv() no more lose precision for
-  32-bit samples.  max() and rms() no more returns a negative result and
-  various other functions now work correctly with 32-bit sample -0x80000000.
-
-- Issue #17073: Fix some integer overflows in sqlite3 module.
-
-- Issue #6083: Fix multiple segmentation faults occurred when PyArg_ParseTuple
-  parses nested mutating sequence.
-
-- Issue #5289: Fix ctypes.util.find_library on Solaris.
-
-- Issue #17106: Fix a segmentation fault in io.TextIOWrapper when an underlying
-  stream or a decoder produces data of an unexpected type (i.e. when
-  io.TextIOWrapper initialized with text stream or use bytes-to-bytes codec).
-
-- Issue #13994: Add compatibility alias in distutils.ccompiler for
-  distutils.sysconfig.customize_compiler.
-
-- Issue #15633: httplib.HTTPResponse is now mark closed when the server
-  sends less than the advertised Content-Length.
-
-- Issue #15881: Fixed atexit hook in multiprocessing.
-
-- Issue #14340: Upgrade the embedded expat library to version 2.1.0.
-
-- Issue #11159: SAX parser now supports unicode file names.
-
-- Issue #6972: The zipfile module no longer overwrites files outside of
-  its destination path when extracting malicious zip files.
-
-- Issue #17049: Localized calendar methods now return unicode if a locale
-  includes an encoding and the result string contains month or weekday (was
-  regression from Python 2.6).
-
-- Issue #4844: ZipFile now raises BadZipfile when opens a ZIP file with an
-  incomplete "End of Central Directory" record.  Original patch by Guilherme
-  Polo and Alan McIntyre.
-
-- Issue #15505: `unittest.installHandler` no longer assumes SIGINT handler is
-  set to a callable object.
-
-- Issue #17051: Fix a memory leak in os.path.isdir() on Windows. Patch by
-  Robert Xiao.
-
-- Issue #13454: Fix a crash when deleting an iterator created by itertools.tee()
-  if all other iterators were very advanced before.
-
-- Issue #16992: On Windows in signal.set_wakeup_fd, validate the file
-  descriptor argument.
-
-- Issue #15861: tkinter now correctly works with lists and tuples containing
-  strings with whitespaces, backslashes or unbalanced braces.
-
-- Issue #10527: Use poll() instead of select() for multiprocessing pipes.
-
-- Issue #9720: zipfile now writes correct local headers for files larger than
-  4 GiB.
-
-- Issue #13899: \A, \Z, and \B now correctly match the A, Z, and B literals
-  when used inside character classes (e.g. '[\A]').  Patch by Matthew Barnett.
-
-- Issue #16398: Optimize deque.rotate() so that it only moves pointers
-  and doesn't touch the underlying data with increfs and decrefs.
-
-- Issue #15109: Fix regression in sqlite3's iterdump method where it would
-  die with an encoding error if the database contained string values
-  containing non-ASCII.  (Regression was introduced by fix for 9750).
-
-- Issue #15545: Fix regression in sqlite3's iterdump method where it was
-  failing if the connection used a row factory (such as sqlite3.Row) that
-  produced unsortable objects. (Regression was introduced by fix for 9750).
-
-- Issue #16828: Fix error incorrectly raised by bz2.compress(''). Patch by
-  Martin Packman.
-
-- Issue #9586: Redefine SEM_FAILED on MacOSX to keep compiler happy.
-
-- Issue #10527: make multiprocessing use poll() instead of select() if available.
-
-- Issue #16485: Now file descriptors are closed if file header patching failed
-  on closing an aifc file.
-
-- Issue #12065: connect_ex() on an SSL socket now returns the original errno
-  when the socket's timeout expires (it used to return None).
-
-- Issue #16713: Fix the parsing of tel url with params using urlparse module.
-
-- Issue #16443: Add docstrings to regular expression match objects.
-  Patch by Anton Kasyanov.
-
-- Issue #8853: Allow port to be of type long for socket.getaddrinfo().
-
-- Issue #16597: In buffered and text IO, call close() on the underlying stream
-  if invoking flush() fails.
-
-- Issue #15701: Fix HTTPError info method call to return the headers information.
-
-- Issue #16646: ftplib.FTP.makeport() might lose socket error details.
-  (patch by Serhiy Storchaka)
-
-- Issue #16626: Fix infinite recursion in glob.glob() on Windows when the
-  pattern contains a wildcard in the drive or UNC path.  Patch by Serhiy
-  Storchaka.
-
-- Issue #16298: In HTTPResponse.read(), close the socket when there is no
-  Content-Length and the incoming stream is finished.  Patch by Eran
-  Rundstein.
-
-- Issue #16248: Disable code execution from the user's home directory by
-  tkinter when the -E flag is passed to Python.  Patch by Zachary Ware.
-
-- Issue #16628: Fix a memory leak in ctypes.resize().
-
-- Issue #13614: Fix setup.py register failure with invalid rst in description.
-  Patch by Julien Courteau and Pierre Paul Lefebvre.
-
-- Issue #10182: The re module doesn't truncate indices to 32 bits anymore.
-  Patch by Serhiy Storchaka.
-
-- Issue #16573: In 2to3, treat enumerate() like a consuming call, so superfluous
-  list() calls aren't added to filter(), map(), and zip() which are directly
-  passed enumerate().
-
-- Issue #1160: Fix compiling large regular expressions on UCS2 builds.
-  Patch by Serhiy Storchaka.
-
-- Issue #14313: zipfile now raises NotImplementedError when the compression
-  type is unknown.
-
-- Issue #16408: Fix file descriptors not being closed in error conditions
-  in the zipfile module.  Patch by Serhiy Storchaka.
-
-- Issue #16327: The subprocess module no longer leaks file descriptors
-  used for stdin/stdout/stderr pipes to the child when fork() fails.
-
-- Issue #14396: Handle the odd rare case of waitpid returning 0 when not
-  expected in subprocess.Popen.wait().
-
-- Issue #16411: Fix a bug where zlib.decompressobj().flush() might try to access
-  previously-freed memory. Patch by Serhiy Storchaka.
-
-- Issue #16350: zlib.decompressobj().decompress() now accumulates data from
-  successive calls after EOF in unused_data, instead of only saving the argument
-  to the last call. decompressobj().flush() now correctly sets unused_data and
-  unconsumed_tail. A bug in the handling of MemoryError when setting the
-  unconsumed_tail attribute has also been fixed. Patch by Serhiy Storchaka.
-
-- Issue #12759: sre_parse now raises a proper error when the name of the group
-  is missing.  Initial patch by Serhiy Storchaka.
-
-- Issue #16152: fix tokenize to ignore whitespace at the end of the code when
-  no newline is found.  Patch by Ned Batchelder.
-
-- Issue #16230: Fix a crash in select.select() when one of the lists changes
-  size while iterated on.  Patch by Serhiy Storchaka.
-
-- Issue #16228: Fix a crash in the json module where a list changes size
-  while it is being encoded.  Patch by Serhiy Storchaka.
-
-- Issue #14897: Enhance error messages of struct.pack and
-  struct.pack_into. Patch by Matti Mäki.
-
-- Issue #12890: cgitb no longer prints spurious <p> tags in text
-  mode when the logdir option is specified.
-
-- Issue #14398: Fix size truncation and overflow bugs in the bz2 module.
-
-- Issue #5148: Ignore 'U' in mode given to gzip.open() and gzip.GzipFile().
-
-- Issue #16220: wsgiref now always calls close() on an iterable response.
-  Patch by Brent Tubbs.
-
-- Issue #16461: Wave library should be able to deal with 4GB wav files,
-  and sample rate of 44100 Hz.
-
-- Issue #16176: Properly identify Windows 8 via platform.platform()
-
-- Issue #15756: subprocess.poll() now properly handles errno.ECHILD to
-  return a returncode of 0 when the child has already exited or cannot
-  be waited on.
-
-- Issue #12376: Pass on parameters in TextTestResult.__init__ super call
-
-- Issue #15222: Insert blank line after each message in mbox mailboxes
-
-- Issue #16013: Fix CSV Reader parsing issue with ending quote characters.
-  Patch by Serhiy Storchaka.
-
-- Issue #15421: fix an OverflowError in Calendar.itermonthdates() after
-  datetime.MAXYEAR.  Patch by Cédric Krier.
-
-- Issue #15970: xml.etree.ElementTree now serializes correctly the empty HTML
-  elements 'meta' and 'param'.
-
-- Issue #15676: Now "mmap" check for empty files before doing the
-  offset check.  Patch by Steven Willis.
-
-- Issue #15340: Fix importing the random module when /dev/urandom cannot
-  be opened.  This was a regression caused by the hash randomization patch.
-
-- Issue #15841: The readable(), writable() and seekable() methods of
-  io.BytesIO and io.StringIO objects now raise ValueError when the object has
-  been closed.  Patch by Alessandro Moura.
-
-- Issue #16112: platform.architecture does not correctly escape argument to
-  /usr/bin/file.  Patch by David Benjamin.
-
-- Issue #12776,#11839: call argparse type function (specified by add_argument)
-  only once. Before, the type function was called twice in the case where the
-  default was specified and the argument was given as well.  This was
-  especially problematic for the FileType type, as a default file would always
-  be opened, even if a file argument was specified on the command line.
-
-- Issue #15906: Fix a regression in argparse caused by the preceding change,
-  when action='append', type='str' and default=[].
-
-- Issue #13370: Ensure that ctypes works on Mac OS X when Python is
-  compiled using the clang compiler
-
-- Issue #15544: Fix Decimal.__float__ to work with payload-carrying NaNs.
-
-- Issue #15199: Fix JavaScript's default MIME type to application/javascript.
-  Patch by Bohuslav Kabrda.
-
-- Issue #15477: In cmath and math modules, add workaround for platforms whose
-  system-supplied log1p function doesn't respect signs of zeros.
-
-- Issue #11062: Fix adding a message from file to Babyl mailbox.
-
-- Issue #15646: Prevent equivalent of a fork bomb when using
-  multiprocessing on Windows without the "if __name__ == '__main__'"
-  idiom.
-
-- Issue #15567: Fix NameError when running threading._test
-
-- Issue #15424: Add a __sizeof__ implementation for array objects.
-  Patch by Ludwig Hähne.
-
-- Issue #15538: Fix compilation of the getnameinfo() / getaddrinfo()
-  emulation code.  Patch by Philipp Hagemeister.
-
-- Issue #12288: Consider '0' and '0.0' as valid initialvalue
-  for tkinter SimpleDialog.
-
-- Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
-  Patch by Serhiy Storchaka.
-
-- Issue #15469: Add a __sizeof__ implementation for deque objects.
-  Patch by Serhiy Storchaka.
-
-- Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
-  Patch by Serhiy Storchaka.
-
-- Issue #15512: Add a __sizeof__ implementation for parser.
-  Patch by Serhiy Storchaka.
-
-- Issue #15402: An issue in the struct module that caused sys.getsizeof to
-  return incorrect results for struct.Struct instances has been fixed.
-  Initial patch by Serhiy Storchaka.
-
-- Issue #15232: when mangle_from is True, email.Generator now correctly mangles
-  lines that start with 'From ' that occur in a MIME preamble or epilog.
-
-- Issue #13922: argparse no longer incorrectly strips '--'s that appear
-  after the first one.
-
-- Issue #12353: argparse now correctly handles null argument values.
-
-- Issue #6493: An issue in ctypes on Windows that caused structure bitfields
-  of type ctypes.c_uint32 and width 32 to incorrectly be set has been fixed.
-
-- Issue #14635: telnetlib will use poll() rather than select() when possible
-  to avoid failing due to the select() file descriptor limit.
-
-- Issue #15247: FileIO now raises an error when given a file descriptor
-  pointing to a directory.
-
-- Issue #14591: Fix bug in Random.jumpahead that could produce an invalid
-  Mersenne Twister state on 64-bit machines.
-
-- Issue #5346: Preserve permissions of mbox, MMDF and Babyl mailbox
-  files on flush().
-
-- Issue #15219: Fix a reference leak when hashlib.new() is called with
-  invalid parameters.
-
-- Issue #9559: If messages were only added, a new file is no longer
-  created and renamed over the old file when flush() is called on an
-  mbox, MMDF or Babyl mailbox.
-
-- Issue #14653: email.utils.mktime_tz() no longer relies on system
-  mktime() when timezone offest is supplied.
-
-- Issue #6056: Make multiprocessing use setblocking(True) on the
-  sockets it uses.  Original patch by J Derek Wilson.
-
-- Issue #15101: Make pool finalizer avoid joining current thread.
-
-- Issue #15054: A bug in tokenize.tokenize that caused string literals
-  with 'b' and 'br' prefixes to be incorrectly tokenized has been fixed.
-  Patch by Serhiy Storchaka.
-
-- Issue #15036: Mailbox no longer throws an error if a flush is done
-  between operations when removing or changing multiple items in mbox,
-  MMDF, or Babyl mailboxes.
-
-- Issue #10133: Make multiprocessing deallocate buffer if socket read
-  fails.  Patch by Hallvard B Furuseth.
-
-- Issue #13854: Make multiprocessing properly handle non-integer
-  non-string argument to SystemExit.
-
-- Issue #12157: Make pool.map() empty iterables correctly.  Initial
-  patch by mouad.
-
-- Issue #14036: Add an additional check to validate that port in urlparse does
-  not go in illegal range and returns None.
-
-- Issue #14888: Fix misbehaviour of the _md5 module when called on data
-  larger than 2**32 bytes.
-
-- Issue #15908: Fix misbehaviour of the sha1 module when called on data
-  larger than 2**32 bytes.
-
-- Issue #15910: Fix misbehaviour of _md5 and sha1 modules when "updating"
-  on data larger than 2**32 bytes.
-
-- Issue #14875: Use float('inf') instead of float('1e66666') in the json module.
-
-- Issue #14572: Prevent build failures with pre-3.5.0 versions of
-  sqlite3, such as was shipped with Centos 5 and Mac OS X 10.4.
-
-- Issue #14426: Correct the Date format in Expires attribute of Set-Cookie
-  Header in Cookie.py.
-
-- Issue #14721: Send proper header, Content-length: 0 when the body is an empty
-  string ''. Initial Patch contributed by Arve Knudsen.
-
-- Issue #14072: Fix parsing of 'tel' URIs in urlparse by making the check for
-  ports stricter.
-
-- Issue #9374: Generic parsing of query and fragment portions of url for any
-  scheme. Supported both by RFC3986 and RFC2396.
-
-- Issue #14798: Fix the functions in pyclbr to raise an ImportError
-  when the first part of a dotted name is not a package. Patch by
-  Xavier de Gaye.
-
-- Issue #14832: fixed the order of the argument references in the error
-  message produced by unittest's assertItemsEqual.
-
-- Issue #14829: Fix bisect issues under 64-bit Windows.
-
-- Issue #14777: tkinter may return undecoded UTF-8 bytes as a string when
-  accessing the Tk clipboard.  Modify clipboard_get() to first request type
-  UTF8_STRING when no specific type is requested in an X11 windowing
-  environment, falling back to the current default type STRING if that fails.
-  Original patch by Thomas Kluyver.
-
-- Issue #12541: Be lenient with quotes around Realm field with HTTP Basic
-  Authentation in urllib2.
-
-- Issue #14662: Prevent shutil failures on OS X when destination does not
-  support chflag operations.  Patch by Hynek Schlawack.
-
-- Issue #14157: Fix time.strptime failing without a year on February 29th.
-  Patch by Hynek Schlawack.
-
-- Issue #14768: os.path.expanduser('~/a') doesn't work correctly when HOME is '/'.
-
-- Issue #13183: Fix pdb skipping frames after hitting a breakpoint and running
-  step.  Patch by Xavier de Gaye.
-
-- Issue #14664: It is now possible to use @unittest.skip{If,Unless} on a
-  test class that doesn't inherit from TestCase (i.e. a mixin).
-
-- Issue #14160: TarFile.extractfile() failed to resolve symbolic links when
-  the links were not located in an archive subdirectory.
-
-- Issue #14638: pydoc now treats non-string __name__ values as if they
-  were missing, instead of raising an error.
-
-- Issue #13684: Fix httplib tunnel issue of infinite loops for certain sites
-  which send EOF without trailing \r\n.
-
-- Issue #14308: Fix an exception when a "dummy" thread is in the threading
-  module's active list after a fork().
-
-- Issue #14538: HTMLParser can now parse correctly start tags that contain
-  a bare '/'.
-
-- Issue #14452: SysLogHandler no longer inserts a UTF-8 BOM into the message.
-
-- Issue #13496: Fix potential overflow in bisect.bisect algorithm when applied
-  to a collection of size > sys.maxsize / 2.
-
-- Issue #14399: zipfile now recognizes that the archive has been modified even
-  if only the comment is changed.  As a consequence of this fix, ZipFile is now
-  a new style class.
-
-- Issue #7978: SocketServer now restarts the select() call when EINTR is
-  returned.  This avoids crashing the server loop when a signal is received.
-  Patch by Jerzy Kozera.
-
-- Issue #10340: asyncore - properly handle EINVAL in dispatcher constructor on
-  OSX; avoid to call handle_connect in case of a disconnected socket which
-  was not meant to connect.
-
-- Issue #12757: Fix the skipping of doctests when python is run with -OO so
-  that it works in unittest's verbose mode as well as non-verbose mode.
-
-- Issue #13694: asynchronous connect in asyncore.dispatcher does not set addr
-  attribute.
-
-- Issue #10484: Fix the CGIHTTPServer's PATH_INFO handling problem.
-
-- Issue #11199: Fix the with urllib which hangs on particular ftp urls.
-
-- Issue #14252: Fix subprocess.Popen.terminate() to not raise an error under
-  Windows when the child process has already exited.
-
-- Issue #14195: An issue that caused weakref.WeakSet instances to incorrectly
-  return True for a WeakSet instance 'a' in both 'a < a' and 'a > a' has been
-  fixed.
-
-- Issue #14159: Fix the len() of weak sets to return a better approximation
-  when some objects are dead or dying.  Moreover, the implementation is now
-  O(1) rather than O(n).
-
-- Issue #2945: Make the distutils upload command aware of bdist_rpm products.
-
-- Issue #6884: Fix long-standing bugs with MANIFEST.in parsing in distutils
-  on Windows.
-
-- Issue #16441: Avoid excessive memory usage working with large gzip
-  files using the gzip module.
-
-- Issue #15782: Prevent compile errors of OS X Carbon modules _Fm, _Qd, and
-  _Qdoffs when compiling with an SDK of 10.7 or later.  The OS X APIs they
-  wrap have long been deprecated and have now been removed with 10.7.
-  These modules were already empty for 64-bit builds and have been removed
-  in Python 3.
-
-Extension Modules
------------------
-
-- Issue #17477: Update the bsddb module to pybsddb 5.3.0, supporting
-  db-5.x, and dropping support for db-4.1 and db-4.2.
-
-- Issue #17192: Update the ctypes module's libffi to v3.0.13.  This
-  specifically addresses a stack misalignment issue on x86 and issues on
-  some more recent platforms.
-
-- Issue #12268: The io module file object write methods no longer abort early
-  when a write system calls is interrupted (EINTR).
-
-- Fix the leak of a dict in the time module when used in an embedded
-  interpreter that is repeatedly initialized and shutdown and reinitialized.
-
-- Issue #12268: File readline, readlines and read or readall methods
-  no longer lose data when an underlying read system call is interrupted
-  within an io module object.  IOError is no longer raised due to a read
-  system call returning EINTR from within these methods.
-
-- Issue #16012: Fix a regression in pyexpat. The parser's UseForeignDTD()
-  method doesn't require an argument again.
-
-- Issue #13590: OS X Xcode 4 - improve support for universal extension modules
-  In particular, fix extension module build failures when trying to use
-  32-bit-only installer Pythons on systems with Xcode 4 (currently
-  OS X 10.8, 10.7, and optionally 10.6).
-  * Backport 3.3.0 fixes to 2.7 branch (for release in 2.7.4)
-  * Since Xcode 4 removes ppc support, extension module builds now
-    check for ppc compiler support and by default remove ppc and
-    ppc64 archs when they are not available.
-  * Extension module builds now revert to using system installed
-    headers and libs (/usr and /System/Library) if the SDK used
-    to build the interpreter is not installed or has moved.
-  * Try to avoid building extension modules with deprecated
-    and problematic Apple llvm-gcc compiler.  If original compiler
-    is not available, use clang instead by default.
-
-IDLE
-----
-
-- IDLE was displaying spurious SystemExit tracebacks when running scripts
-  that terminated by raising SystemExit (i.e. unittest and turtledemo).
-
-- Issue #9290: In IDLE the sys.std* streams now implement io.TextIOBase
-  interface and support all mandatory methods and properties.
-
-- Issue #16829: IDLE printing no longer fails if there are spaces or other
-  special characters in the file path.
-
-- Issue #16819: IDLE method completion now correctly works for unicode literals.
-
-- Issue #16504: IDLE now catches SyntaxErrors raised by tokenizer. Patch by
-  Roger Serwy.
-
-- Issue #1207589: Add Cut/Copy/Paste items to IDLE right click Context Menu.
-  Patch by Todd Rovito.
-
-- Issue #13052: Fix IDLE crashing when replace string in Search/Replace dialog
-  ended with '\'. Patch by Roger Serwy.
-
-- Issue #9803: Don't close IDLE on saving if breakpoint is open.
-  Patch by Roger Serwy.
-
-- Issue #14958: Change IDLE systax highlighting to recognize all string and byte
-  literals currently supported in Python 2.7.
-
-- Issue #14962: Update text coloring in IDLE shell window after changing
-  options.  Patch by Roger Serwy.
-
-- Issue #10997: Prevent a duplicate entry in IDLE's "Recent Files" menu.
-
-- Issue #12510: Attempting to get invalid tooltip no longer closes IDLE.
-  Original patch by Roger Serwy.
-
-- Issue #10365: File open dialog now works instead of crashing
-  even when parent window is closed. Patch by Roger Serwy.
-
-- Issue #14876: Use user-selected font for highlight configuration.
-  Patch by Roger Serwy.
-
-- Issue #14409: IDLE now properly executes commands in the Shell window
-  when it cannot read the normal config files on startup and
-  has to use the built-in default key bindings.
-  There was previously a bug in one of the defaults.
-
-- Issue #3573: IDLE hangs when passing invalid command line args
-  (directory(ies) instead of file(s)) (Patch by Guilherme Polo)
-
-- Issue #5219: Prevent event handler cascade in IDLE.
-
-- Issue #15318: Prevent writing to sys.stdin.
-
-- Issue #13532, #15319: Check that arguments to sys.stdout.write are strings.
-
-- Issue #10365: File open dialog now works instead of crashing even when
-  parent window is closed while dialog is open.
-
-- Issue #14018: Update checks for unstable system Tcl/Tk versions on OS X
-  to include versions shipped with OS X 10.7 and 10.8 in addition to 10.6.
-
-- Issue #15853: Prevent IDLE crash on OS X when opening Preferences menu
-  with certain versions of Tk 8.5.  Initial patch by Kevin Walzer.
-
-Tests
------
-
-- Issue #16702: test_urllib2_localnet tests now correctly ignores proxies for
-  localhost tests.
-
-- Issue #13447: Add a test file to host regression tests for bugs in the
-  scripts found in the Tools directory.
-
-- Issue #11420: make test suite pass with -B/DONTWRITEBYTECODE set.
-  Initial patch by Thomas Wouters.
-
-- Issue #17299: Add test coverage for cPickle with file objects and general IO
-  objects.  Original patch by Aman Shah.
-
-- Issue #11963: remove human verification from test_parser and test_subprocess.
-
-- Issue #17249: convert a test in test_capi to use unittest and reap threads.
-
-- We now run both test_email.py and test_email_renamed.py when running the
-  test_email regression test.  test_email_renamed contains some tests that
-  test_email does not.
-
-- Issue #17041: Fix testing when Python is configured with the
-  --without-doc-strings option.
-
-- Issue #15539: Added regression tests for Tools/scripts/pindent.py.
-
-- Issue #15324: Fix regrtest parsing of --fromfile and --randomize options.
-
-- Issue #16618: Add more regression tests for glob.
-  Patch by Serhiy Storchaka.
-
-- Issue #16664: Add regression tests for glob's behaviour concerning entries
-  starting with a ".".  Patch by Sebastian Kreft.
-
-- Issue #15747: ZFS always returns EOPNOTSUPP when attempting to set the
-  UF_IMMUTABLE flag (via either chflags or lchflags); refactor affected
-  tests in test_posix.py to account for this.
-
-- Issue #16549: Add tests for json.tools.  Initial patch by Berker Peksag
-  and Serhiy Storchaka.
-
-- Issue #16559: Add more tests for the json module, including some from the
-  official test suite at json.org.  Patch by Serhiy Storchaka.
-
-- Issue #16274: Fix test_asyncore on Solaris.  Patch by Giampaolo Rodola'.
-
-- Issue #15040: Close files in mailbox tests for PyPy compatibility.
-  Original patch by Matti Picus.
-
-- Issue #15802: Fix test logic in TestMaildir.test_create_tmp. Patch
-  by Serhiy Storchaka.
-
-- Issue #15765: Extend a previous fix to Solaris and OpenBSD for quirky
-  getcwd() behaviour (issue #9185) to NetBSD as well.
-
-- Issue #15615: Add some tests for the json module's handling of invalid
-  input data.  Patch by Kushal Das.
-
-- Issue #15496: Add directory removal helpers for tests on Windows.
-  Patch by Jeremy Kloth.
-
-- Issue #15043: test_gdb is now skipped entirely if gdb security settings
-  block loading of the gdb hooks
-
-- Issue #14589: Update certificate chain for sha256.tbs-internet.com, fixing
-  a test failure in test_ssl.
-
-- Issue #16698: Skip posix test_getgroups when built with OS X
-  deployment target prior to 10.6.
-
-- Issue #17111: Prevent test_surrogates (test_fileio) failure on OS X 10.4.
-
-Build
------
-
-- Issue #17425: Build against openssl 0.9.8y on Windows.
-
-- Issue #16004: Add `make touch`.
-
-- Issue #5033: Fix building of the sqlite3 extension module when the
-  SQLite library version has "beta" in it. Patch by Andreas Pelme.
-
-- Issue #17228: Fix building without pymalloc.
-
-- Issue #17086: Backport the patches from the 3.3 branch to cross-build
-  the package.
-
-- Issue #3754: fix typo in pthread AC_CACHE_VAL.
-
-- Issue #17029: Let h2py search the multiarch system include directory.
-
-- Issue #16953: Fix socket module compilation on platforms with
-  HAVE_BROKEN_POLL. Patch by Jeffrey Armstrong.
-
-- Issue #16836: Enable IPv6 support even if IPv6 is disabled on the build host.
-
-- Issue #15923: fix a mistake in asdl_c.py that resulted in a TypeError after
-  2801bf875a24 (see #15801).
-
-- Issue #11715: Fix multiarch detection without having Debian development
-  tools (dpkg-dev) installed.
-
-- Issue #15819: Make sure we can build Python out-of-tree from a readonly
-  source directory.  (Somewhat related to Issue #9860.)
-
-- Issue #15822: Ensure 2to3 grammar pickles are properly installed.
-
-- Issue #15560: Fix building _sqlite3 extension on OS X with an SDK.
-
-- Issue #8847: Disable COMDAT folding in Windows PGO builds.
-
-- Issue #14018: Fix OS X Tcl/Tk framework checking when using OS X SDKs.
-
-- Issue #16256: OS X installer now sets correct permissions for doc directory.
-
-- Issue #8767: Restore building with --disable-unicode.
-  Patch by Stefano Taschini.
-
-- Build against bzip2 1.0.6 and openssl 0.9.8x on Windows.
-
-- Issue #14557: Fix extensions build on HP-UX. Patch by Adi Roiban.
-
-- Issue #14437: Fix building the _io module under Cygwin.
-
-- Issue #15587: Enable Tk high-resolution text rendering on Macs with
-  Retina displays.  Applies to Tkinter apps, such as IDLE, on OS X
-  framework builds linked with Cocoa Tk 8.5.
-
-- Issue #17161: make install now also installs a python2 and python man page.
-
-- Issue #16848: python-config now returns proper --ldflags values for OS X
-  framework builds.
-
-Tools/Demos
------------
-
-- Issue #17156: pygettext.py now correctly escapes non-ascii characters.
-
-- Issue #15539: Fix a number of bugs in Tools/scripts/pindent.py.  Now
-  pindent.py works with a "with" statement.  pindent.py no longer produces
-  improper indentation.  pindent.py now works with continued lines broken after
-  "class" or "def" keywords and with continuations at the start of line.
-
-- Issue #16476: Fix json.tool to avoid including trailing whitespace.
-
-- Issue #13301: use ast.literal_eval() instead of eval() in Tools/i18n/msgfmt.py.
-  Patch by Serhiy Storchaka.
-
-Documentation
--------------
-
-- Issue #15041: Update "see also" list in tkinter documentation.
-
-- Issue #17412: update 2.7 Doc/make.bat to also use sphinx-1.0.7.
-
-- Issue #17047: remove doubled words in docs and docstrings
-  reported by Serhiy Storchaka and Matthew Barnett.
-
-- Issue #16406: combine the pages for uploading and registering to PyPI.
-
-- Issue #16403: Document how distutils uses the maintainer field in
-  PKG-INFO. Patch by Jyrki Pulliainen.
-
-- Issue #16695: Document how glob handles filenames starting with a
-  dot. Initial patch by Jyrki Pulliainen.
-
-- Issue #8890: Stop advertising an insecure practice by replacing uses
-  of the /tmp directory with better alternatives in the documentation.
-  Patch by Geoff Wilson.
-
-- Issue #17203: add long option names to unittest discovery docs.
-
-- Issue #13094: add "Why do lambdas defined in a loop with different values
-  all return the same result?" programming FAQ.
-
-- Issue #14901: Update portions of the Windows FAQ.
-  Patch by Ashish Nitin Patil.
-
-- Issue #15990: Improve argument/parameter documentation.
-
-- Issue #16400: Update the description of which versions of a given package
-  PyPI displays.
-
-- Issue #15677: Document that zlib and gzip accept a compression level of 0 to
-  mean 'no compression'. Patch by Brian Brazil.
-
-- Issue #8040: added a version switcher to the documentation.  Patch by
-  Yury Selivanov.
-
-- Issue #16115: Improve subprocess.Popen() documentation around args, shell,
-  and executable arguments.
-
-- Issue #15979: Improve timeit documentation.
-
-- Issue #16036: Improve documentation of built-in int()'s signature and
-  arguments.
-
-- Issue #15935: Clarification of argparse docs, re: add_argument() type and
-  default arguments.  Patch contributed by Chris Jerdonek.
-
-- Issue #13769: Document the effect of ensure_ascii to the return type
-  of JSON decoding functions.
-
-- Issue #14880: Fix kwargs notation in csv.reader, .writer & .register_dialect.
-  Patch by Chris Rebert.
-
-- Issue #14674: Add a discussion of the json module's standard compliance.
-  Patch by Chris Rebert.
-
-- Issue #15630: Add an example for "continue" stmt in the tutorial. Patch by
-  Daniel Ellis.
-
-- Issue #13557: Clarify effect of giving two different namespaces to exec or
-  execfile().
-
-- Issue #14034: added the argparse tutorial.
-
-- Issue #15250: Document that filecmp.dircmp compares files shallowly. Patch
-  contributed by Chris Jerdonek.
-
-- Issue #15116: Remove references to appscript as it is no longer being
-  supported.
-
-
-What's New in Python 2.7.3 release candidate 2?
-===============================================
-
-*Release date: 2012-03-17*
-
-Library
--------
-
-- Issue #14234: CVE-2012-0876: Randomize hashes of xml attributes in the hash
-  table internal to the pyexpat module's copy of the expat library to avoid a
-  denial of service due to hash collisions.  Patch by David Malcolm with some
-  modifications by the expat project.
-
-
-What's New in Python 2.7.3 release candidate 1?
-===============================================
-
-*Release date: 2012-02-23*
-
-Core and Builtins
------------------
-
-- Issue #13020: Fix a reference leak when allocating a structsequence object
-  fails.  Patch by Suman Saha.
-
-- Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
-  environment variable, to provide an opt-in way to protect against denial of
-  service attacks due to hash collisions within the dict and set types.  Patch
-  by David Malcolm, based on work by Victor Stinner.
-
-- Issue #11235: Fix OverflowError when trying to import a source file whose
-  modification time doesn't fit in a 32-bit timestamp.
-
-- Issue #11638: Unicode strings in 'name' and 'version' no longer cause
-  UnicodeDecodeErrors.
-
-- Fix the fix for issue #12149: it was incorrect, although it had the side
-  effect of appearing to resolve the issue.  Thanks to Mark Shannon for
-  noticing.
-
-- Issue #13546: Fixed an overflow issue that could crash the intepreter when
-  calling sys.setrecursionlimit((1<<31)-1).
-
-- Issue #13333: The UTF-7 decoder now accepts lone surrogates (the encoder
-  already accepts them).
-
-- Issue #10519: Avoid unnecessary recursive function calls in
-  setobject.c.
-
-- Issue #13268: Fix the assert statement when a tuple is passed as the message.
-
-- Issue #13018: Fix reference leaks in error paths in dictobject.c.
-  Patch by Suman Saha.
-
-- Issue #12604: VTRACE macro expanded to no-op in _sre.c to avoid compiler
-  warnings. Patch by Josh Triplett and Petri Lehtinen.
-
-- Issue #7833: Extension modules built using distutils on Windows will no
-  longer include a "manifest" to prevent them failing at import time in some
-  embedded situations.
-
-- Issue #13186: Fix __delitem__ on old-style instances when invoked through
-  PySequence_DelItem.
-
-- Issue #13156: Revert the patch for issue #10517 (reset TLS upon fork()),
-  which was only relevant for the native pthread TLS implementation.
-
-- Issue #7732: Fix a crash on importing a module if a directory has the same
-  name than a Python module (e.g. "__init__.py"): don't close the file twice.
-
-- Issue #12973: Fix overflow checks that invoked undefined behaviour in
-  int.__pow__.  These overflow checks were causing int.__pow__ to produce
-  incorrect results with recent versions of Clang, as a result of the
-  compiler optimizing the check away.  Also fix similar overflow checks
-  in list_repeat (listobject.c) and islice_next (itertoolsmodule.c).  These
-  bugs caused test failures with recent versions of Clang.
-
-- Issue #12266: Fix str.capitalize() to correctly uppercase/lowercase
-  titlecased and cased non-letter characters.
-
-- Issues #12610 and #12609: Verify that user generated AST has correct string
-  and identifier types before compiling.
-
-- 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
-  cleared by the garbage collector.  This fixes a segfault when an instance
-  and its type get caught in a reference cycle, and the instance's
-  deallocator calls one of the methods on the type (e.g. when subclassing
-  IOBase).  Diagnosis and patch by Davide Rizzo.
-
-- Issue #12501: Remove Py3k warning for callable. callable() is supported
-  again in Python 3.2.
-
-- Issue #9611, #9015: FileIO.read(), FileIO.readinto(), FileIO.write() and
-  os.write() clamp the length to INT_MAX on Windows.
-
-- Issue #1195: my_fgets() now always clears errors before calling fgets(). Fix
-  the following case: sys.stdin.read() stopped with CTRL+d (end of file),
-  raw_input() interrupted by CTRL+c.
-
-- Issue #10860: httplib now correctly handles an empty port after port
-  delimiter in URLs.
-
-- dict_proxy objects now display their contents rather than just the class
-  name.
-
-Library
--------
-
-- Issue #8033: sqlite3: Fix 64-bit integer handling in user functions
-  on 32-bit architectures. Initial patch by Philippe Devalkeneer.
-
-- HTMLParser is now able to handle slashes in the start tag.
-
-- Issue #14001: CVE-2012-0845: xmlrpc: Fix an endless loop in
-  SimpleXMLRPCServer upon malformed POST request.
-
-- Issue #2489: pty.spawn could consume 100% cpu when it encountered an EOF.
-
-- Issue #13014: Fix a possible reference leak in SSLSocket.getpeercert().
-
-- Issue #13987: HTMLParser is now able to handle EOFs in the middle of a
-  construct and malformed start tags.
-
-- Issue #13015: Fix a possible reference leak in defaultdict.__repr__.
-  Patch by Suman Saha.
-
-- Issue #13979: A bug in ctypes.util.find_library that caused
-  the wrong library name to be returned has been fixed.
-
-- Issue #1326113: distutils' build_ext command --libraries option now
-  correctly parses multiple values separated by whitespace or commas.
-
-- Issue #13993: HTMLParser is now able to handle broken end tags.
-
-- Issue #13960: HTMLParser is now able to handle broken comments.
-
-- Issue #9750: Fix sqlite3.Connection.iterdump on tables and fields
-  with a name that is a keyword or contains quotes. Patch by Marko
-  Kohtala.
-
-- Issue #13994: Earlier partial revert of Distutils enhancements in 2.7
-  has left two versions of customize_compiler, the original in
-  distutils.sysconfig and another copy in distutils.ccompiler, with some
-  parts of distutils calling one and others using the other.
-  Complete the revert back to only having one in distutils.sysconfig as
-  is the case in 3.x.
-
-- Issue #13590: On OS X 10.7 and 10.6 with Xcode 4.2, building
-  Distutils-based packages with C extension modules may fail because
-  Apple has removed gcc-4.2, the version used to build python.org
-  64-bit/32-bit Pythons.  If the user does not explicitly override
-  the default C compiler by setting the CC environment variable,
-  Distutils will now attempt to compile extension modules with clang
-  if gcc-4.2 is required but not found. Also as a convenience, if
-  the user does explicitly set CC, substitute its value as the default
-  compiler in the Distutils LDSHARED configuration variable for OS X.
-  (Note, the python.org 32-bit-only Pythons use gcc-4.0 and the 10.4u
-  SDK, neither of which are available in Xcode 4.  This change does not
-  attempt to override settings to support their use with Xcode 4.)
-
-- Issue #9021: Add an introduction to the copy module documentation.
-
-- Issue #6005: Examples in the socket library documentation use sendall, where
-  relevant, instead send method.
-
-- Issue #10811: Fix recursive usage of cursors. Instead of crashing,
-  raise a ProgrammingError now.
-
-- Issue #13676: Handle strings with embedded zeros correctly in sqlite3.
-
-- Issue #13806: The size check in audioop decompression functions was too
-  strict and could reject valid compressed data.  Patch by Oleg Plakhotnyuk.
-
-- Issue #13885: CVE-2011-3389: the _ssl module would always disable the CBC
-  IV attack countermeasure.
-
-- Issue #6631: Disallow relative file paths in urllib urlopen methods.
-
-- Issue #13781: Prevent gzip.GzipFile from using the dummy filename provided by
-  file objects opened with os.fdopen().
-
-- Issue #13589: Fix some serialization primitives in the aifc module.
-  Patch by Oleg Plakhotnyuk.
-
-- Issue #13803: Under Solaris, distutils doesn't include bitness
-  in the directory name.
-
-- Issue #13642: Unquote before b64encoding user:password during Basic
-  Authentication. Patch contributed by Joonas Kuorilehto and Michele Orrù.
-
-- Issue #13636: Weak ciphers are now disabled by default in the ssl module
-  (except when SSLv2 is explicitly asked for).
-
-- Issue #12798: Updated the mimetypes documentation.
-
-- Issue #13639: Accept unicode filenames in tarfile.open(mode="w|gz").
-
-- Issue #1785: Fix inspect and pydoc with misbehaving descriptors.
-
-- Issue #7502: Fix equality comparison for DocTestCase instances.  Patch by
-  Cédric Krier.
-
-- Issue #11870: threading: Properly reinitialize threads internal locks and
-  condition variables to avoid deadlocks in child processes.
-
-- Issue #8035: urllib: Fix a bug where the client could remain stuck after a
-  redirection or an error.
-
-- tarfile.py: Correctly detect bzip2 compressed streams with blocksizes
-  other than 900k.
-
-- Issue #13573: The csv.writer now uses the repr() for floats rather than str().
-  This allows floats to round-trip without loss of precision.
-
-- Issue #13439: Fix many errors in turtle docstrings.
-
-- Issue #12856: Ensure child processes do not inherit the parent's random
-  seed for filename generation in the tempfile module.  Patch by Brian
-  Harring.
-
-- Issue #13458: Fix a memory leak in the ssl module when decoding a
-  certificate with a subjectAltName.  Patch by Robert Xiao.
-
-- Issue #13415: os.unsetenv() doesn't ignore errors anymore.
-
-- Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
-  raised when the wrapped raw file is non-blocking and the write would block.
-  Previous code assumed that the raw write() would raise BlockingIOError, but
-  RawIOBase.write() is defined to returned None when the call would block.
-  Patch by sbt.
-
-- Issue #13358: HTMLParser now calls handle_data only once for each CDATA.
-
-- Issue #4147: minidom's toprettyxml no longer adds whitespace around a text
-  node when it is the only child of an element.  Initial patch by Dan
-  Kenigsberg.
-
-- Issues #1745761, #755670, #13357, #12629, #1200313: HTMLParser now correctly
-  handles non-valid attributes, including adjacent and unquoted attributes.
-
-- Issue #13373: multiprocessing.Queue.get() could sometimes block indefinitely
-  when called with a timeout.  Patch by Arnaud Ysmal.
-
-- Issue #3067: Enhance the documentation and docstring of
-  locale.setlocale().
-
-- Issue #13254: Fix Maildir initialization so that maildir contents
-  are read correctly.
-
-- Issue #13140: Fix the daemon_threads attribute of ThreadingMixIn.
-
-- Issue #2892: preserve iterparse events in case of SyntaxError.
-
-- Issue #670664: Fix HTMLParser to correctly handle the content of
-  ``<script>...</script>`` and ``<style>...</style>``.
-
-- Issue #10817: Fix urlretrieve function to raise ContentTooShortError even
-  when reporthook is None. Patch by Jyrki Pulliainen.
-
-- Issue #7334: close source files on ElementTree.parse and iterparse.
-
-- Issue #13232: logging: Improved logging of exceptions in the presence of
-  multiple encodings.
-
-- Issue #10332: multiprocessing: fix a race condition when a Pool is closed
-  before all tasks have completed.
-
-- Issue #1548891: The cStringIO.StringIO() constructor now encodes unicode
-  arguments with the system default encoding just like the write() method
-  does, instead of converting it to a raw buffer.  This also fixes handling of
-  unicode input in the shlex module (#6988, #1170).
-
-- Issue #9168: now smtpd is able to bind privileged port.
-
-- Issue #12529: fix cgi.parse_header issue on strings with double-quotes and
-  semicolons together. Patch by Ben Darnell and Petri Lehtinen.
-
-- Issue #6090: zipfile raises a ValueError when a document with a timestamp
-  earlier than 1980 is provided. Patch contributed by Petri Lehtinen.
-
-- Issue #13194: zlib.compressobj().copy() and zlib.decompressobj().copy() are
-  now available on Windows.
-
-- Issue #13114: Fix the distutils commands check and register when the
-  long description is a Unicode string with non-ASCII characters.
-
-- Issue #7367: Fix pkgutil.walk_paths to skip directories whose
-  contents cannot be read.
-
-- Issue #7425: Prevent pydoc -k failures due to module import errors.
-  (Backport to 2.7 of existing 3.x fix)
-
-- Issue #13099: Fix sqlite3.Cursor.lastrowid under a Turkish locale.
-  Reported and diagnosed by Thomas Kluyver.
-
-- Issue #7689: Allow pickling of dynamically created classes when their
-  metaclass is registered with copy_reg.  Patch by Nicolas M. Thiéry and
-  Craig Citro.
-
-- Issue #13058: ossaudiodev: fix a file descriptor leak on error. Patch by
-  Thomas Jarosch.
-
-- Issue #12931: xmlrpclib now encodes Unicode URI to ISO-8859-1, instead of
-  failing with a UnicodeDecodeError.
-
-- Issue #8933: distutils' PKG-INFO files will now correctly report
-  Metadata-Version: 1.1 instead of 1.0 if a Classifier or Download-URL field is
-  present.
-
-- Issue #8286: The distutils command sdist will print a warning message instead
-  of crashing when an invalid path is given in the manifest template.
-
-- Issue #12841: tarfile unnecessarily checked the existence of numerical user
-  and group ids on extraction. If one of them did not exist the respective id
-  of the current user (i.e. root) was used for the file and ownership
-  information was lost.
-
-- Issue #10946: The distutils commands bdist_dumb, bdist_wininst and bdist_msi
-  now respect a --skip-build option given to bdist.
-
-- Issue #12287: Fix a stack corruption in ossaudiodev module when the FD is
-  greater than FD_SETSIZE.
-
-- Issue #12839: Fix crash in zlib module due to version mismatch.
-  Fix by Richard M. Tew.
-
-- Issue #12786: Set communication pipes used by subprocess.Popen CLOEXEC to
-  avoid them being inherited by other subprocesses.
-
-- Issue #4106: Fix occasional exceptions printed out by multiprocessing on
-  interpreter shutdown.
-
-- Issue #11657: Fix sending file descriptors over 255 over a multiprocessing
-  Pipe.
-
-- Issue #12213: Fix a buffering bug with interleaved reads and writes that
-  could appear on io.BufferedRandom streams.
-
-- Issue #12326: sys.platform is now always 'linux2' on Linux, even if Python
-  is compiled on Linux 3.
-
-- Issue #13007: whichdb should recognize gdbm 1.9 magic numbers.
-
-- Issue #9173: Let shutil._make_archive work if the logger argument is None.
-
-- Issue #12650: Fix a race condition where a subprocess.Popen could leak
-  resources (FD/zombie) when killed at the wrong time.
-
-- Issue #12752: Fix regression which prevented locale.normalize() from
-  accepting unicode strings.
-
-- Issue #12683: urlparse updated to include svn as schemes that uses relative
-  paths. (svn from 1.5 onwards support relative path).
-
-- Issue #11933: Fix incorrect mtime comparison in distutils.
-
-- Issues #11104, #8688: Fix the behavior of distutils' sdist command with
-  manually-maintained MANIFEST files.
-
-- Issue #8887: "pydoc somebuiltin.somemethod" (or help('somebuiltin.somemethod')
-  in Python code) now finds the doc of the method.
-
-- Issue #12603: Fix pydoc.synopsis() on files with non-negative st_mtime.
-
-- Issue #12514: Use try/finally to assure the timeit module restores garbage
-  collections when it is done.
-
-- Issue #12607: In subprocess, fix issue where if stdin, stdout or stderr is
-  given as a low fd, it gets overwritten.
-
-- Issue #12102: Document that buffered files must be flushed before being used
-  with mmap. Patch by Steffen Daode Nurpmeso.
-
-- Issue #12560: Build libpython.so on OpenBSD. Patch by Stefan Sperling.
-
-- Issue #1813: Fix codec lookup and setting/getting locales under Turkish
-  locales.
-
-- Issue #10883: Fix socket leaks in urllib when using FTP.
-
-- Issue #12592: Make Python build on OpenBSD 5 (and future major releases).
-
-- Issue #12372: POSIX semaphores are broken on AIX: don't use them.
-
-- Issue #12571: Add a plat-linux3 directory mirroring the plat-linux2
-  directory, so that "import DLFCN" and other similar imports work on
-  Linux 3.0.
-
-- Issue #7484: smtplib no longer puts <> around addresses in VRFY and EXPN
-  commands; they aren't required and in fact postfix doesn't support that form.
-
-- Issue #11603: Fix a crash when __str__ is rebound as __repr__.  Patch by
-  Andreas Stührk.
-
-- Issue #12502: asyncore: fix polling loop with AF_UNIX sockets.
-
-- 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
-  if the process has only one pipe.
-
-- Issue #12467: warnings: fix a race condition if a warning is emitted at
-  shutdown, if globals()['__file__'] is None.
-
-- Issue #12352: Fix a deadlock in multiprocessing.Heap when a block is freed by
-  the garbage collector while the Heap lock is held.
-
-- Issue #9516: On Mac OS X, change Distutils to no longer globally attempt to
-  check or set the MACOSX_DEPLOYMENT_TARGET environment variable for the
-  interpreter process.  This could cause failures in non-Distutils subprocesses
-  and was unreliable since tests or user programs could modify the interpreter
-  environment after Distutils set it.  Instead, have Distutils set the
-  deployment target only in the environment of each build subprocess.  It is
-  still possible to globally override the default by setting
-  MACOSX_DEPLOYMENT_TARGET before launching the interpreter; its value must be
-  greater or equal to the default value, the value with which the interpreter
-  was built.
-
-- Issue #11802: The cache in filecmp now has a maximum size of 100 so that
-  it won't grow without bound.
-
-- Issue #12404: Remove C89 incompatible code from mmap module. Patch by Akira
-  Kitada.
-
-- Issue #11700: mailbox proxy object close methods can now be called multiple
-  times without error, and _ProxyFile now closes the wrapped file.
-
-- Issue #12133: AbstractHTTPHandler.do_open() of urllib.request closes the HTTP
-  connection if its getresponse() method fails with a socket error. Patch
-  written by Ezio Melotti.
-
-- Issue #9284: Allow inspect.findsource() to find the source of doctest
-  functions.
-
-- Issue #10694: zipfile now ignores garbage at the end of a zipfile.
-
-- Issue #11583: Speed up os.path.isdir on Windows by using GetFileAttributes
-  instead of os.stat.
-
-- Issue #12080: Fix a performance issue in Decimal._power_exact that caused
-  some corner-case Decimal.__pow__ calls to take an unreasonably long time.
-
-- Named tuples now work correctly with vars().
-
-- sys.setcheckinterval() now updates the current ticker count as well as
-  updating the check interval, so if the user decreases the check interval,
-  the ticker doesn't have to wind down to zero from the old starting point
-  before the new interval takes effect.  And if the user increases the
-  interval, it makes sure the new limit takes effect right away rather have an
-  early task switch before recognizing the new interval.
-
-- Issue #12085: Fix an attribute error in subprocess.Popen destructor if the
-  constructor has failed, e.g. because of an undeclared keyword argument. Patch
-  written by Oleg Oshmyan.
-
-Extension Modules
------------------
-
-- Issue #9041: An issue in ctypes.c_longdouble, ctypes.c_double, and
-  ctypes.c_float that caused an incorrect exception to be returned in the
-  case of overflow has been fixed.
-
-- bsddb module: Erratic behaviour of "DBEnv->rep_elect()" because a typo.
-  Possible crash.
-
-- Issue #13774: json: Fix a SystemError when a bogus encoding is passed to
-  json.loads().
-
-- Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
-  Vilmos Nebehaj.
-
-- Issue #13159: FileIO, BZ2File, and the built-in file class now use a
-  linear-time buffer growth strategy instead of a quadratic one.
-
-- Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
-  would be finalized after the reference to its underlying BufferedRWPair's
-  writer got cleared by the GC.
-
-- Issue #12881: ctypes: Fix segfault with large structure field names.
-
-- Issue #13013: ctypes: Fix a reference leak in PyCArrayType_from_ctype.
-  Thanks to Suman Saha for finding the bug and providing a patch.
-
-- Issue #13022: Fix: _multiprocessing.recvfd() doesn't check that
-  file descriptor was actually received.
-
-- Issue #12483: ctypes: Fix a crash when the destruction of a callback
-  object triggers the garbage collector.
-
-- Issue #12950: Fix passing file descriptors in multiprocessing, under
-  OpenIndiana/Illumos.
-
-- Issue #12764: Fix a crash in ctypes when the name of a Structure field is not
-  a string.
-
-- Issue #9651: Fix a crash when ctypes.create_string_buffer(0) was passed to
-  some functions like file.write().
-
-- Issue #10309: Define _GNU_SOURCE so that mremap() gets the proper
-  signature.  Without this, architectures where sizeof void* != sizeof int are
-  broken.  Patch given by Hallvard B Furuseth.
-
-IDLE
-----
-
-- Issue #964437: Make IDLE help window non-modal.
-  Patch by Guilherme Polo and Roger Serwy.
-
-- Issue #13933: IDLE auto-complete did not work with some imported
-  module, like hashlib.  (Patch by Roger Serwy)
-
-- Issue #13506: Add '' to path for IDLE Shell when started and restarted with Restart Shell.
-  Original patches by Marco Scataglini and Roger Serwy.
-
-- Issue #4625: If IDLE cannot write to its recent file or breakpoint
-  files, display a message popup and continue rather than crash.
-  (original patch by Roger Serwy)
-
-- Issue #8793: Prevent IDLE crash when given strings with invalid hex escape
-  sequences.
-
-- Issue #13296: Fix IDLE to clear compile __future__ flags on shell restart.
-  (Patch by Roger Serwy)
-
-- Issue #14409: IDLE now properly executes commands in the Shell window
-  when it cannot read the normal config files on startup and
-  has to use the built-in default key bindings.
-  There was previously a bug in one of the defaults.
-
-- Issue #3573: IDLE hangs when passing invalid command line args
-  (directory(ies) instead of file(s)).
-
-Build
------
-
-- Issue #6807: Run msisupport.mak earlier.
-
-- Issue #10580: Minor grammar change in Windows installer.
-
-- Issue #12627: Implement PEP 394 for Python 2.7 ("python2").
-
-- Issue #8746: Correct faulty configure checks so that os.chflags() and
-  os.lchflags() are once again built on systems that support these
-  functions (*BSD and OS X).  Also add new stat file flags for OS X
-  (UF_HIDDEN and UF_COMPRESSED).
-
-Tools/Demos
------------
-
-- Issue #14053: patchcheck.py ("make patchcheck") now works with MQ patches.
-  Patch by Francisco Martín Brugué.
-
-- Issue #13930: 2to3 is now able to write its converted output files to another
-  directory tree as well as copying unchanged files and altering the file
-  suffix.  See its new -o, -W and --add-suffix options.  This makes it more
-  useful in many automated code translation workflows.
-
-- Issue #10639: reindent.py no longer converts newlines and will raise
-  an error if attempting to convert a file with mixed newlines.
-
-- Issue #13628: python-gdb.py is now able to retrieve more frames in the Python
-  traceback if Python is optimized.
-
-Tests
------
-
-- Issue #15467: Move helpers for __sizeof__ tests into test_support.
-  Patch by Serhiy Storchaka.
-
-- Issue #11689: Fix a variable scoping error in an sqlite3 test.
-  Initial patch by Torsten Landschoff.
-
-- Issue #10881: Fix test_site failures with OS X framework builds.
-
-- Issue #13901: Prevent test_distutils failures on OS X with --enable-shared.
-
-- Issue #13304: Skip test case if user site-packages disabled (-s or
-  PYTHONNOUSERSITE).  (Patch by Carl Meyer)
-
-- Issue #13218: Fix test_ssl failures on Debian/Ubuntu.
-
-- Issue #12821: Fix test_fcntl failures on OpenBSD 5.
-
-- Issue #12331: The test suite for lib2to3 can now run from an installed
-  Python.
-
-- Issue #12549: Correct test_platform to not fail when OS X returns 'x86_64'
-  as the processor type on some Mac systems.
-
-- Skip network tests when getaddrinfo() returns EAI_AGAIN, meaning a temporary
-  failure in name resolution.
-
-- Issue #11812: Solve transient socket failure to connect to 'localhost'
-  in test_telnetlib.py.
-
-- Solved a potential deadlock in test_telnetlib.py. Related to issue #11812.
-
-- Avoid failing in test_robotparser when mueblesmoraleda.com is flaky and
-  an overzealous DNS service (e.g. OpenDNS) redirects to a placeholder
-  Web site.
-
-- Avoid failing in test_urllibnet.test_bad_address when some overzealous
-  DNS service (e.g. OpenDNS) resolves a non-existent domain name.  The test
-  is now skipped instead.
-
-- Issue #8716: Avoid crashes caused by Aqua Tk on OSX when attempting to run
-  test_tk or test_ttk_guionly under a username that is not currently logged
-  in to the console windowserver (as may be the case under buildbot or ssh).
-
-- Issue #12141: Install a copy of template C module file so that
-  test_build_ext of test_distutils is no longer silently skipped when
-  run outside of a build directory.
-
-- Issue #8746: Add additional tests for os.chflags() and os.lchflags().
-  Patch by Garrett Cooper.
-
-- Issue #10736: Fix test_ttk test_widgets failures with Cocoa Tk 8.5.9
-  on Mac OS X.  (Patch by Ronald Oussoren)
-
-- Issue #12057: Add tests for ISO 2022 codecs (iso2022_jp, iso2022_jp_2,
-  iso2022_kr).
-
-Documentation
--------------
-
-- Issues #13491 and #13995: Fix many errors in sqlite3 documentation.
-  Initial patch for #13491 by Johannes Vogel.
-
-- Issue #13402: Document absoluteness of sys.executable.
-
-- Issue #13883: PYTHONCASEOK also works on OS X, OS/2, and RiscOS.
-
-- Issue #2134: The tokenize documentation has been clarified to explain why
-  all operator and delimiter tokens are treated as token.OP tokens.
-
-- Issue #13513: Fix io.IOBase documentation to correctly link to the
-  io.IOBase.readline method instead of the readline module.
-
-- Issue #13237: Reorganise subprocess documentation to emphasise convenience
-  functions and the most commonly needed arguments to Popen.
-
-- Issue #13141: Demonstrate recommended style for SocketServer examples.
-
-
-What's New in Python 2.7.2?
-===========================
-
-*Release date: 2011-06-11*
-
-Library
--------
-
-- Issue #12009: Fixed regression in netrc file comment handling.
-
-Extension Modules
------------------
-
-- Issue #1221: Make pyexpat.__version__ equal to the Python version.
-
-
-What's New in Python 2.7.2 release candidate 1?
-===============================================
-
-*Release date: 2011-05-29*
-
-Core and Builtins
------------------
-
-- Issue #9670: Increase the default stack size for secondary threads on
-  Mac OS X and FreeBSD to reduce the chances of a crash instead of a
-  "maximum recursion depth" RuntimeError exception.
-  (patch by Ronald Oussoren)
-
-- Correct lookup of __dir__ on objects. This allows old-style classes to have
-  __dir__. It also causes errors besides AttributeError found on lookup to be
-  propagated.
-
-- Issue #1195: Fix input() if it is interrupted by CTRL+d and then CTRL+c,
-  clear the end-of-file indicator after CTRL+d.
-
-- Issue #8651: PyArg_Parse*() functions raise an OverflowError if the file
-  doesn't have PY_SSIZE_T_CLEAN define and the size doesn't fit in an int
-  (length bigger than 2^31-1 bytes).
-
-- Issue #8651: Fix "z#" format of PyArg_Parse*() function: the size was not
-  written if PY_SSIZE_T_CLEAN is defined.
-
-- Issue #9756: When calling a method descriptor or a slot wrapper descriptor,
-  the check of the object type doesn't read the __class__ attribute anymore.
-  Fix a crash if a class override its __class__ attribute (e.g. a proxy of the
-  str type). Patch written by Andreas Stührk.
-
-- Issue #10517: After fork(), reinitialize the TLS used by the PyGILState_*
-  APIs, to avoid a crash with the pthread implementation in RHEL 5.  Patch
-  by Charles-François Natali.
-
-- Issue #6780: fix starts/endswith error message to mention that tuples are
-  accepted too.
-
-- Issue #5057: fix a bug in the peepholer that led to non-portable pyc files
-  between narrow and wide builds while optimizing BINARY_SUBSCR on non-BMP
-  chars (e.g. u"\U00012345"[0]).
-
-- Issue #11650: PyOS_StdioReadline() retries fgets() if it was interrupted
-  (EINTR), for example if the program is stopped with CTRL+z on Mac OS X. Patch
-  written by Charles-Francois Natali.
-
-- Issue #11144: Ensure that int(a_float) returns an int whenever possible.
-  Previously, there were some corner cases where a long was returned even
-  though the result was within the range of an int.
-
-- Issue #11450: Don't truncate hg version info in Py_GetBuildInfo() when
-  there are many tags (e.g. when using mq).  Patch by Nadeem Vawda.
-
-- Issue #10451: memoryview objects could allow mutating a readable buffer.
-  Initial patch by Ross Lagerwall.
-
-- Issue #10892: Don't segfault when trying to delete __abstractmethods__ from a
-  class.
-
-- Issue #8020: Avoid a crash where the small objects allocator would read
-  non-Python managed memory while it is being modified by another thread.
-  Patch by Matt Bandy.
-
-- Issue #11004: Repaired edge case in deque.count().
-
-- Issue #8278: On Windows and with a NTFS filesystem, os.stat() and os.utime()
-  can now handle dates after 2038.
-
-- Issue #4236: Py_InitModule4 now checks the import machinery directly
-  rather than the Py_IsInitialized flag, avoiding a Fatal Python
-  error in certain circumstances when an import is done in __del__.
-
-- Issue #11828: startswith and endswith don't accept None as slice index.
-  Patch by Torsten Becker.
-
-- Issue #10674: Remove unused 'dictmaker' rule from grammar.
-
-- Issue #10596: Fix float.__mod__ to have the same behaviour as
-  float.__divmod__ with respect to signed zeros.  -4.0 % 4.0 should be
-  0.0, not -0.0.
-
-- Issue #11386: bytearray.pop() now throws IndexError when the bytearray is
-  empty, instead of OverflowError.
-
-Library
--------
-
-- Issue #12161: Cause StringIO.getvalue() to raise a ValueError when used on a
-  closed StringIO instance.
-
-- Issue #12182: Fix pydoc.HTMLDoc.multicolumn() if Python uses the new (true)
-  division (python -Qnew). Patch written by Ralf W. Grosse-Kunstleve.
-
-- Issue #12175: RawIOBase.readall() now returns None if read() returns None.
-
-- Issue #12175: FileIO.readall() now raises a ValueError instead of an IOError
-  if the file is closed.
-
-- Issue #1441530: In imaplib, use makefile() to wrap the SSL socket to avoid
-  heap fragmentation and MemoryError with some malloc implementations.
-
-- Issue #12100: Don't reset incremental encoders of CJK codecs at each call to
-  their encode() method anymore, but continue to call the reset() method if the
-  final argument is True.
-
-- Issue #12124: zipimport doesn't keep a reference to zlib.decompress() anymore
-  to be able to unload the module.
-
-- Issue #10154, #10090: change the normalization of UTF-8 to "UTF-8" instead
-  of "UTF8" in the locale module as the latter is not supported MacOSX and OpenBSD.
-
-- Issue #9516: avoid errors in sysconfig when MACOSX_DEPLOYMENT_TARGET is
-  set in shell.
-
-- Issue #12050: zlib.decompressobj().decompress() now clears the unconsumed_tail
-  attribute when called without a max_length argument.
-
-- Issue #12062: In the `io` module, fix a flushing bug when doing a certain
-  type of I/O sequence on a file opened in read+write mode (namely: reading,
-  seeking a bit forward, writing, then seeking before the previous write but
-  still within buffered data, and writing again).
-
-- Issue #8498: In socket.accept(), allow specifying 0 as a backlog value in
-  order to accept exactly one connection.  Patch by Daniel Evers.
-
-- Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional.
-
-- Issue #11927: SMTP_SSL now uses port 465 by default as documented.  Patch
-  by Kasun Herath.
-
-- Issue #11999: fixed sporadic sync failure mailbox.Maildir due to its trying to
-  detect mtime changes by comparing to the system clock instead of to the
-  previous value of the mtime.
-
-- Issue #10684: shutil.move used to delete a folder on case insensitive
-  filesystems when the source and destination name where the same except
-  for the case.
-
-- Issue #11982: fix json.loads('""') to return u'' rather than ''.
-
-- Issue #11277: mmap.mmap() calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get
-  around a mmap bug with sparse files. Patch written by Steffen Daode Nurpmeso.
-
-- Issue #10761: Fix tarfile.extractall failure when symlinked files are
-  present. Initial patch by Scott Leerssen.
-
-- Issue #11763: don't use difflib in TestCase.assertMultiLineEqual if the
-  strings are too long.
-
-- Issue #11236: getpass.getpass responds to ctrl-c or ctrl-z on terminal.
-
-- Issue #11768: The signal handler of the signal module only calls
-  Py_AddPendingCall() for the first signal to fix a deadlock on reentrant or
-  parallel calls. PyErr_SetInterrupt() writes also into the wake up file.
-
-- Issue #11875: collections.OrderedDict's __reduce__ was temporarily
-  mutating the object instead of just working on a copy.
-
-- Issue #11442: Add a charset parameter to the Content-type in SimpleHTTPServer
-  to avoid XSS attacks.
-
-- Issue #11467: Fix urlparse behavior when handling urls which contains scheme
-  specific part only digits. Patch by Santoso Wijaya.
-
-- collections.Counter().copy() now works correctly for subclasses.
-
-- Issue #11474: Fix the bug with url2pathname() handling of '/C|/' on Windows.
-  Patch by Santoso Wijaya.
-
-- Issue #9233: Fix json.loads('{}') to return a dict (instead of a list), when
-  _json is not available.
-
-- Issue #11703: urllib2.geturl() does not return correct url when the original
-  url contains #fragment.
-
-- Issue #10019: Fixed regression in json module where an indent of 0 stopped
-  adding newlines and acted instead like 'None'.
-
-- Issue #5162: Treat services like frozen executables to allow child spawning
-  from multiprocessing.forking on Windows.
-
-- Issue #4877: Fix a segfault in xml.parsers.expat while attempting to parse
-  a closed file.
-
-- Issue #11830: Remove unnecessary introspection code in the decimal module.
-  It was causing a failed import in the Turkish locale where the locale
-  sensitive str.upper() method caused a name mismatch.
-
-- Issue #8428: Fix a race condition in multiprocessing.Pool when terminating
-  worker processes: new processes would be spawned while the pool is being
-  shut down.  Patch by Charles-François Natali.
-
-- Issue #7311: Fix HTMLParser to accept non-ASCII attribute values.
-
-- Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
-
-- Issue #11662: Make urllib and urllib2 ignore redirections if the
-  scheme is not HTTP, HTTPS or FTP (CVE-2011-1521).
-
-- Issue #11256: Fix inspect.getcallargs on functions that take only keyword
-  arguments.
-
-- Issue #11696: Fix ID generation in msilib.
-
-- Issue #9696: Fix exception incorrectly raised by xdrlib.Packer.pack_int when
-  trying to pack a negative (in-range) integer.
-
-- Issue #11675: multiprocessing.[Raw]Array objects created from an integer size
-  are now zeroed on creation.  This matches the behaviour specified by the
-  documentation.
-
-- Issue #7639: Fix short file name generation in bdist_msi.
-
-- Issue #11666: let help() display named tuple attributes and methods
-  that start with a leading underscore.
-
-- Issue #11673: Fix multiprocessing Array and RawArray constructors to accept a
-  size of type 'long', rather than only accepting 'int'.
-
-- Issue #10042: Fixed the total_ordering decorator to handle cross-type
-  comparisons that could lead to infinite recursion.
-
-- Issue #10979: unittest stdout buffering now works with class and module
-  setup and teardown.
-
-- Issue #11569: use absolute path to the sysctl command in multiprocessing to
-  ensure that it will be found regardless of the shell PATH. This ensures
-  that multiprocessing.cpu_count works on default installs of MacOSX.
-
-- Issue #11500: Fixed a bug in the os x proxy bypass code for fully qualified
-  IP addresses in the proxy exception list.
-
-- Issue #11131: Fix sign of zero in plus and minus operations when
-  the context rounding mode is ROUND_FLOOR.
-
-- Issue #5622: Fix curses.wrapper to raise correct exception if curses
-  initialization fails.
-
-- Issue #11391: Writing to a mmap object created with
-  ``mmap.PROT_READ|mmap.PROT_EXEC`` would segfault instead of raising a
-  TypeError.  Patch by Charles-François Natali.
-
-- Issue #11306: mailbox in certain cases adapts to an inability to open
-  certain files in read-write mode.  Previously it detected this by
-  checking for EACCES, now it also checks for EROFS.
-
-- Issue #11265: asyncore now correctly handles EPIPE, EBADF and EAGAIN errors
-  on accept(), send() and recv().
-
-- Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
-  and make it work for non-blocking connects.
-
-- Issue #10956: Buffered I/O classes retry reading or writing after a signal
-  has arrived and the handler returned successfully.
-
-- Issue #10680: Fix mutually exclusive arguments for argument groups in
-  argparse.
-
-- Issue #4681: Allow mmap() to work on file sizes and offsets larger than
-  4GB, even on 32-bit builds.  Initial patch by Ross Lagerwall, adapted for
-  32-bit Windows.
-
-- Issue #10360: In WeakSet, do not raise TypeErrors when testing for
-  membership of non-weakrefable objects.
-
-- Issue #10549: Fix pydoc traceback when text-documenting certain classes.
-
-- Issue #940286: pydoc.Helper.help() ignores input/output init parameters.
-
-- Issue #11171: Fix detection of config/Makefile when --prefix !=
-  --exec-prefix, which caused Python to not start.
-
-- Issue #11116: any error during addition of a message to a mailbox now causes
-  a rollback, instead of leaving the mailbox partially modified.
-
-- Issue #8275: Fix passing of callback arguments with ctypes under Win64.
-  Patch by Stan Mihai.
-
-- Issue #10949: Improved robustness of rotating file handlers.
-
-- Issue #10955: Fix a potential crash when trying to mmap() a file past its
-  length.  Initial patch by Ross Lagerwall.
-
-- Issue #10898: Allow compiling the posix module when the C library defines
-  a symbol named FSTAT.
-
-- Issue #10916: mmap should not segfault when a file is mapped using 0 as
-  length and a non-zero offset, and an attempt to read past the end of file
-  is made (IndexError is raised instead).  Patch by Ross Lagerwall.
-
-- Issue #10875: Update Regular Expression HOWTO; patch by 'SilentGhost'.
-
-- Issue #10827: Changed the rules for 2-digit years.  The time.asctime
-  function will now format any year when ``time.accept2dyear`` is
-  false and will accept years >= 1000 otherwise.  The year range
-  accepted by ``time.mktime`` and ``time.strftime`` is still system
-  dependent, but ``time.mktime`` will now accept full range supported
-  by the OS.  Conversion of 2-digit years to 4-digit is deprecated.
-
-- Issue #10869: Fixed bug where ast.increment_lineno modified the root
-  node twice.
-
-- Issue #7858: Raise an error properly when os.utime() fails under Windows
-  on an existing file.
-
-- Issue #3839: wsgiref should not override a Content-Length header set by
-  the application.  Initial patch by Clovis Fabricio.
-
-- Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
-  file descriptors (0, 1, 2) are closed in the parent process.  Initial
-  patch by Ross Lagerwall.
-
-- Issue #4662: os.tempnam(), os.tmpfile() and os.tmpnam() now raise a py3k
-  DeprecationWarning.
-
-- Subclasses of collections.OrderedDict now work correctly with __missing__.
-
-- Issue #10753: Characters ';', '=' and ',' in the PATH_INFO environment
-  variable won't be quoted when the URI is constructed by the wsgiref.util 's
-  request_uri method. According to RFC 3986, these characters can be a part of
-  params in PATH component of URI and need not be quoted.
-
-- Issue #10738: Fix webbrowser.Opera.raise_opts
-
-- Issue #9824: SimpleCookie now encodes , and ; in values to cater to how
-  browsers actually parse cookies.
-
-- Issue #1379416: eliminated a source of accidental unicode promotion in
-  email.header.Header.encode.
-
-- Issue #5258/#10642: if site.py encounters a .pth file that generates an error,
-  it now prints the filename, line number, and traceback to stderr and skips
-  the rest of that individual file, instead of stopping processing entirely.
-
-- Issue #10750: The ``raw`` attribute of buffered IO objects is now read-only.
-
-- Issue #10242: unittest.TestCase.assertItemsEqual makes too many assumptions
-  about input.
-
-- Issue #10611: SystemExit should not cause a unittest test run to exit.
-
-- Issue #6791: Limit header line length (to 65535 bytes) in http.client,
-  to avoid denial of services from the other party.
-
-- Issue #9907: Fix tab handling on OSX when using editline by calling
-  rl_initialize first, then setting our custom defaults, then reading .editrc.
-
-- Issue #4188: Avoid creating dummy thread objects when logging operations
-  from the threading module (with the internal verbose flag activated).
-
-- Issue #9721: Fix the behavior of urljoin when the relative url starts with a
-  ';' character. Patch by Wes Chow.
-
-- Issue #10714: Limit length of incoming request in http.server to 65536 bytes
-  for security reasons.  Initial patch by Ross Lagerwall.
-
-- Issue #9558: Fix distutils.command.build_ext with VS 8.0.
-
-- Issue #10695: passing the port as a string value to telnetlib no longer
-  causes debug mode to fail.
-
-- Issue #10478: Reentrant calls inside buffered IO objects (for example by
-  way of a signal handler) now raise a RuntimeError instead of freezing the
-  current process.
-
-- Issue #10497: Fix incorrect use of gettext in argparse.
-
-- Issue #10464: netrc now correctly handles lines with embedded '#' characters.
-
-- Issue #1731717: Fixed the problem where subprocess.wait() could cause an
-  OSError exception when The OS had been told to ignore SIGCLD in our process
-  or otherwise not wait for exiting child processes.
-
-- Issue #9509: argparse now properly handles IOErrors raised by
-  argparse.FileType.
-
-- Issue #9348: Raise an early error if argparse nargs and metavar don't match.
-
-- Issue #8982: Improve the documentation for the argparse Namespace object.
-
-- Issue #9343: Document that argparse parent parsers must be configured before
-  their children.
-
-- Issue #9026: Fix order of argparse sub-commands in help messages.
-
-- Issue #9347: Fix formatting for tuples in argparse type= error messages.
-
-Extension Modules
------------------
-
-- Stop using the old interface for providing methods and attributes in the _sre
-  module. Among other things, this gives these classes ``__class__``
-  attributes. (See #12099)
-
-- Issue #10169: Fix argument parsing in socket.sendto() to avoid error masking.
-
-- Issue #12051: Fix segfault in json.dumps() while encoding highly-nested
-  objects using the C accelerations.
-
-- Issue #12017: Fix segfault in json.loads() while decoding highly-nested
-  objects using the C accelerations.
-
-- Issue #1838: Prevent segfault in ctypes, when _as_parameter_ on a class is set
-  to an instance of the class.
-
-- Issue #678250: Make mmap flush a noop on ACCESS_READ and ACCESS_COPY.
-
-IDLE
-----
-
-- Issue #11718: IDLE's open module dialog couldn't find the __init__.py
-  file in a package.
-
-- Issue #12590: IDLE editor window now always displays the first line
-  when opening a long file.  With Tk 8.5, the first line was hidden.
-
-- Issue #11088: don't crash when using F5 to run a script in IDLE on MacOSX
-  with Tk 8.5.
-
-- Issue #10940: Workaround an IDLE hang on Mac OS X 10.6 when using the
-  menu accelerators for Open Module, Go to Line, and New Indent Width.
-  The accelerators still work but no longer appear in the menu items.
-
-- Issue #10907: Warn OS X 10.6 IDLE users to use ActiveState Tcl/Tk 8.5, rather
-  than the currently problematic Apple-supplied one, when running with the
-  64-/32-bit installer variant.
-
-- Issue #11052: Correct IDLE menu accelerators on Mac OS X for Save
-  commands.
-
-- Issue #6075: IDLE on Mac OS X now works with both Carbon AquaTk and
-  Cocoa AquaTk.
-
-- Issue #10404: Use ctl-button-1 on OSX for the context menu in Idle.
-
-- Issue #10107: Warn about unsaved files in IDLE on OSX.
-
-- Issue #10406: Enable Rstrip IDLE extension on OSX (just like on other
-  platforms).
-
-- Issue #6378: Further adjust idle.bat to start associated Python
-
-- Issue #11896: Save on Close failed despite selecting "Yes" in dialog.
-
-- Issue #4676: <Home> toggle failing on Tk 8.5, causing IDLE exits and
-  strange selection behavior.  Improve selection extension behaviour.
-
-- Issue #3851: <Home> toggle non-functional when NumLock set on Windows.
-
-Build
------
-
-- Issue #11217: For 64-bit/32-bit Mac OS X universal framework builds,
-  ensure "make install" creates symlinks in --prefix bin for the "-32"
-  files in the framework bin directory like the installer does.
-
-- Issue #11411: Fix 'make DESTDIR=' with a relative destination.
-
-- Issue #10709: Add updated AIX notes in Misc/README.AIX.
-
-- Issue #11184: Fix large-file support on AIX.
-
-- Issue #941346: Fix broken shared library build on AIX.
-
-- Issue #11268: Prevent Mac OS X Installer failure if Documentation
-  package had previously been installed.
-
-- Issue #11079: The /Applications/Python x.x folder created by the Mac
-  OS X installers now includes a link to the installed documentation.
-
-- Issue #11054: Allow Mac OS X installer builds to again work on 10.5 with
-  the system-provided Python.
-
-- Issue #10843: Update third-party library versions used in OS X
-  32-bit installer builds: bzip2 1.0.6, readline 6.1.2, SQLite 3.7.4
-  (with FTS3/FTS4 and RTREE enabled), and ncursesw 5.5 (wide-char
-  support enabled).
-
-- Don't run pgen twice when using make -j.
-
-- Issue #7716: Under Solaris, don't assume existence of /usr/xpg4/bin/grep in
-  the configure script but use $GREP instead.  Patch by Fabian Groffen.
-
-- Issue #10475: Don't hardcode compilers for LDSHARED/LDCXXSHARED on NetBSD
-  and DragonFly BSD.  Patch by Nicolas Joly.
-
-- Issue #10655: Fix the build on PowerPC on Linux with GCC when building with
-  timestamp profiling (--with-tsc): the preprocessor test for the PowerPC
-  support now looks for "__powerpc__" as well as "__ppc__": the latter seems to
-  only be present on OS X; the former is the correct one for Linux with GCC.
-
-- Issue #1099: Fix the build on MacOSX when building a framework with pydebug
-  using GCC 4.0.
-
-Tests
------
-
-- Issue #11164: Remove obsolete allnodes test from minidom test.
-
-- Issue #12205: Fix test_subprocess failure due to uninstalled test data.
-
-- Issue #5723: Improve json tests to be executed with and without accelerations.
-
-- Issue #11910: Fix test_heapq to skip the C tests when _heapq is missing.
-
-- Fix test_startfile to wait for child process to terminate before finishing.
-
-- Issue #11719: Fix message about unexpected test_msilib skip on non-Windows
-  platforms. Patch by Nadeem Vawda.
-
-- Issue #7108: Fix test_commands to not fail when special attributes ('@'
-  or '.') appear in 'ls -l' output.
-
-- Issue #11490: test_subprocess:test_leaking_fds_on_error no longer gives a
-  false positive if the last directory in the path is inaccessible.
-
-- Issue #10822: Fix test_posix:test_getgroups failure under Solaris.  Patch
-  by Ross Lagerwall.
-
-- Issue #6293: Have regrtest.py echo back sys.flags.  This is done by default
-  in whole runs and enabled selectively using ``--header`` when running an
-  explicit list of tests.  Original patch by Collin Winter.
-
-- Issue #775964: test_grp now skips YP/NIS entries instead of failing when
-  encountering them.
-
-- Issue #7110: regrtest now sends test failure reports and single-failure
-  tracebacks to stderr rather than stdout.
-
-
-What's New in Python 2.7.1?
-===========================
-
-*Release date: 2010-11-27*
-
-Library
--------
-
-- Issue #2236: distutils' mkpath ignored the mode parameter.
-
-- Fix typo in one sdist option (medata-check).
-
-- Issue #10323: itertools.islice() now consumes the minimum number of
-  inputs before stopping.  Formerly, the final state of the underlying
-  iterator was undefined.
-
-- Issue #10565: The collections.Iterator ABC now checks for both
-  ``__iter__`` and ``next``.
-
-- Issue #10092: Properly reset locale in calendar.Locale*Calendar classes.
-
-- Issue #10459: Update CJK character names to Unicode 5.2.
-
-- Issue #6098: Don't claim DOM level 3 conformance in minidom.
-
-- Issue #10561: In pdb, clear the breakpoints by the breakpoint number.
-
-- Issue #5762: Fix AttributeError raised by ``xml.dom.minidom`` when an empty
-  XML namespace attribute is encountered.
-
-- Issue #1710703: Write structures for an empty ZIP archive when a ZipFile is
-  created in modes 'a' or 'w' and then closed without adding any files. Raise
-  BadZipfile (rather than IOError) when opening small non-ZIP files.
-
-- Issue #4493: urllib2 adds '/' in front of path components which does not
-  start with '/. Common behavior exhibited by browsers and other clients.
-
-- Issue #10407: Fix one NameError in distutils.
-
-- Issue #10198: fix duplicate header written to wave files when writeframes()
-  is called without data.
-
-- Issue #10467: Fix BytesIO.readinto() after seeking into a position after the
-  end of the file.
-
-- Issue #5111: IPv6 Host in the Header is wrapped inside [ ]. Patch by Chandru.
-
-IDLE
-----
-
-- Issue #6378: idle.bat now runs with the appropriate Python version rather than
-  the system default. Patch by Sridhar Ratnakumar.
-
-Build
------
-
-- Backport r83399 to allow test_distutils to pass on installed versions.
-
-- Issue #1303434: Generate ZIP file containing all PDBs.
-
-Tests
------
-
-- Issue #9424: Replace deprecated assert* methods in the Python test suite.
-
-Documentation
--------------
-
-- Issue #10299: List the built-in functions in a table in functions.rst.
-
-
-What's New in Python 2.7.1 release candidate 1?
-===============================================
-
-*Release date: 2010-11-13*
-
-Core and Builtins
------------------
-
-- Issue #10221: dict.pop(k) now has a key error message that includes the
-  missing key (same message d[k] returns for missing keys).
-
-- Issue #10125: Don't segfault when the iterator passed to
-  ``file.writelines()`` closes the file.
-
-- Issue #10186: Fix the SyntaxError caret when the offset is equal to the
-  length of the offending line.
-
-- Issue #9997: Don't let the name "top" have special significance in scope
-  resolution.
-
-- Issue #9862: Compensate for broken PIPE_BUF in AIX by hard coding
-  its value as the default 512 when compiling on AIX.
-
-- Issue #9675: CObject use is marked as a Py3k warning, not a deprecation
-  warning.
-
-- Issue #10068: Global objects which have reference cycles with their module's
-  dict are now cleared again. This causes issue #7140 to appear again.
-
-- Issue #9869: Make long() and PyNumber_Long return something of type
-  long for a class whose __long__ method returns a plain int.  This
-  fixes an interpreter crash when initializing an instance of a long
-  subclass from an object whose __long__ method returns a plain int.
-
-- Issue #10006: type.__abstractmethods__ now raises an AttributeError.
-
-- Issue #9797: pystate.c wrongly assumed that zero couldn't be a valid
-  thread-local storage key.
-
-- Issue #4947: The write() method of sys.stdout and sys.stderr uses their
-  encoding and errors attributes instead of using utf-8 in strict mode, to get
-  the same behaviour than the print statement.
-
-- Issue #9737: Fix a crash when trying to delete a slice or an item from
-  a memoryview object.
-
-- Restore GIL in nis_cat in case of error.
-
-- Issue #9688: __basicsize__ and __itemsize__ must be accessed as Py_ssize_t.
-
-- Issue #8530: Prevent stringlib fastsearch from reading beyond the front
-  of an array.
-
-- Issue #83755: Implicit set-to-frozenset conversion was not thread-safe.
-
-- Issue #9416: Fix some issues with complex formatting where the
-  output with no type specifier failed to match the str output:
-
-    - format(complex(-0.0, 2.0), '-') omitted the real part from the output,
-    - format(complex(0.0, 2.0), '-') included a sign and parentheses.
-
-- Issue #7616: Fix copying of overlapping memoryview slices with the Intel
-  compiler.
-
-Library
--------
-
-- Issue #9926: Wrapped TestSuite subclass does not get __call__ executed
-
-- Issue #4471: Properly shutdown socket in IMAP.shutdown().  Patch by
-  Lorenzo M. Catucci.
-
-- Issue #10126: Fix distutils' test_build when Python was built with
-  --enable-shared.
-
-- Fix typo in one sdist option (medata-check).
-
-- Issue #9199: Fix incorrect use of distutils.cmd.Command.announce.
-
-- Issue #1718574: Fix options that were supposed to accept arguments but did
-  not in build_clib.
-
-- Issue #9281: Prevent race condition with mkdir in distutils.  Patch by
-  Arfrever.
-
-- Issue #10229: Fix caching error in gettext.
-
-- Issue #10252: Close file objects in a timely manner in distutils code and
-  tests.  Patch by Brian Brazil, completed by Éric Araujo.
-
-- Issue #10311: The signal module now restores errno before returning from
-  its low-level signal handler.  Patch by Hallvard B Furuseth.
-
-- Issue #10038: json.loads() on str should always return unicode (regression
-  from Python 2.6).  Patch by Walter Dörwald.
-
-- Issue #120176: Wrapped TestSuite subclass does not get __call__ executed.
-
-- Issue #6706: asyncore accept() method no longer raises
-  EWOULDBLOCK/ECONNABORTED on incomplete connection attempt but returns None
-  instead.
-
-- Issue #10266: uu.decode didn't close in_file explicitly when it was given
-  as a filename.  Patch by Brian Brazil.
-
-- Issue #10246: uu.encode didn't close file objects explicitly when filenames
-  were given to it.  Patch by Brian Brazil.
-
-- Issue #10253: FileIO leaks a file descriptor when trying to open a file
-  for append that isn't seekable.  Patch by Brian Brazil.
-
-- Issue #6105: json.dumps now respects OrderedDict's iteration order.
-
-- Issue #9295: Fix a crash under Windows when calling close() on a file
-  object with custom buffering from two threads at once.
-
-- Issue #5027: The standard ``xml`` namespace is now understood by
-  xml.sax.saxutils.XMLGenerator as being bound to
-  http://www.w3.org/XML/1998/namespace.  Patch by Troy J. Farrell.
-
-- Issue #10163: Skip unreadable registry keys during mimetypes
-  initialization.
-
-- Issue #5117: Fixed root directory related issue on posixpath.relpath() and
-  ntpath.relpath().
-
-- Issue #9409: Fix the regex to match all kind of filenames, for interactive
-  debugging in doctests.
-
-- Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
-  current directory was deleted. Patch written by W. Trevor King.
-
-- Issue #10045: Improved performance when writing after seeking past the
-  end of the "file" in cStringIO.
-
-- Issue #9948: Fixed problem of losing filename case information.
-
-- Issue #9437: Fix building C extensions with non-default LDFLAGS.
-
-- Issue #9759: GzipFile now raises ValueError when an operation is attempted
-  after the file is closed.  Patch by Jeffrey Finkelstein.
-
-- Issue #9042: Fix interaction of custom translation classes and caching in
-  gettext.
-
-- Issue #9065: tarfile no longer uses "root" as the default for the uname and
-  gname field.
-
-- Issue #1050268: parseaddr now correctly quotes double quote and backslash
-  characters that appear inside quoted strings in email addresses.
-
-- Issue #10004: quoprimime no longer generates a traceback when confronted
-  with invalid characters after '=' in a Q-encoded word.
-
-- Issue #9950: Fix socket.sendall() crash or misbehaviour when a signal is
-  received.  Now sendall() properly calls signal handlers if necessary,
-  and retries sending if these returned successfully, including on sockets
-  with a timeout.
-
-- Issue #9947: logging: Fixed locking bug in stopListening.
-
-- Issue #9945: logging: Fixed locking bugs in addHandler/removeHandler.
-
-- Issue #9936: Fixed executable lines' search in the trace module.
-
-- Issue #9928: Properly initialize the types exported by the bz2 module.
-
-- Issue #9854: The default read() implementation in io.RawIOBase now
-  handles non-blocking readinto() returning None correctly.
-
-- Issue #9729: Fix the signature of SSLSocket.recvfrom() and
-  SSLSocket.sendto() to match the corresponding socket methods.  Also,
-  fix various SSLSocket methods to raise socket.error rather than an
-  unhelpful TypeError when called on an unconnected socket.  Original patch
-  by Andrew Bennetts.
-
-- Issue #9826: OrderedDict.__repr__ can now handle self-referential
-  values:   d['x'] = d.
-
-- Issue #767645: Set os.path.supports_unicode_filenames to True on Mac OS X.
-
-- Issue #9837: The read() method of ZipExtFile objects (as returned by
-  ZipFile.open()) could return more bytes than requested.
-
-- Issue #9825: removed __del__ from the definition of collections.OrderedDict.
-  This prevents user-created self-referencing ordered dictionaries from
-  becoming permanently uncollectable GC garbage.  The downside is that
-  removing __del__ means that the internal doubly-linked list has to wait for
-  GC collection rather than freeing memory immediately when the refcnt drops
-  to zero.
-
-- Issue #9816: random.Random.jumpahead(n) did not produce a sufficiently
-  different internal state for small values of n.  Fixed by salting the
-  value.
-
-- Issue #9792: In case of connection failure, socket.create_connection()
-  would swallow the exception and raise a new one, making it impossible
-  to fetch the original errno, or to filter timeout errors.  Now the
-  original error is re-raised.
-
-- Issue #9758: When fcntl.ioctl() was called with mutable_flag set to True,
-  and the passed buffer was exactly 1024 bytes long, the buffer wouldn't
-  be updated back after the system call.  Original patch by Brian Brazil.
-
-- Issue #1100562: Fix deep-copying of objects derived from the list and
-  dict types.  Patch by Michele Orrù and Björn Lindqvist.
-
-- Issue #7005: Fixed output of None values for RawConfigParser.write and
-  ConfigParser.write.
-
-- Issue #808164: Fixed socket.close to avoid references to globals, to
-  avoid issues when socket.close is called from a __del__ method.
-
-- Issue #2986: difflib.SequenceMatcher gets a new parameter, autojunk, which
-  can be set to False to turn off the previously undocumented 'popularity'
-  heuristic. Patch by Terry Reedy and Eli Bendersky
-
-- Issue #8797: urllib2 does a retry for Basic Authentication failure instead of
-  falling into recursion.
-
-- Issue #1194222: email.utils.parsedate now returns RFC2822 compliant four
-  character years even if the message contains RFC822 two character years.
-
-- Issue #8750: Fixed MutableSet's methods to correctly handle
-  reflexive operations, namely x -= x and x ^= x.
-
-- Issue #9129: smtpd.py is vulnerable to DoS attacks deriving from missing
-  error handling when accepting a new connection.
-
-- Issue #658749: asyncore's connect() method now correctly interprets winsock
-  errors.
-
-- Issue #9501: Fixed logging regressions in cleanup code.
-
-- Issue #9214: Set operations on KeysView or ItemsView in the collections
-  module now correctly return a set.  (Patch by Eli Bendersky.)
-
-- Issue #9617: Signals received during a low-level write operation aren't
-  ignored by the buffered IO layer anymore.
-
-- Issue #2521: Use weakrefs on for caching in the abc module, so that classes
-  are not held onto after they are deleted elsewhere.
-
-- Issue #9626: the view methods for collections.OrderedDict() were returning
-  the unordered versions inherited from dict.  Those methods are now
-  overridden to provide ordered views.
-
-- Issue #8688: MANIFEST files created by distutils now include a magic
-  comment indicating they are generated.  Manually maintained MANIFESTs
-  without this marker will not be overwritten or removed.
-
-- Issue #7467: when reading a file from a ZIP archive, its CRC is checked
-  and a BadZipfile error is raised if it doesn't match (as used to be the
-  case in Python 2.5 and earlier).
-
-- Issue #9550: a BufferedReader could issue an additional read when the
-  original read request had been satisfied, which could block indefinitely
-  when the underlying raw IO channel was e.g. a socket.  Report and original
-  patch by Jason V. Miller.
-
-- Issue #9551: Don't raise TypeError when setting the value to None for
-  SafeConfigParser instances constructed with allow_no_value == True.
-
-- Issue #6915: Under Windows, os.listdir() didn't release the Global
-  Interpreter Lock around all system calls.  Original patch by Ryan Kelly.
-
-- Issue #3757: thread-local objects now support cyclic garbage collection.
-  Thread-local objects involved in reference cycles will be deallocated
-  timely by the cyclic GC, even if the underlying thread is still running.
-
-- Issue #6231: Fix xml.etree.ElementInclude to include the tail of the
-  current node.
-
-- Issue #6869: Fix a refcount problem in the _ctypes extension.
-
-- Issue #5504: ctypes should now work with systems where mmap can't be
-  PROT_WRITE and PROT_EXEC.
-
-- Issue #8280: urllib2's Request method will remove fragements in the url.
-  This is how it is supposed to work, wget and curl do the same.  Previous
-  behavior was wrong.
-
-- Issue #2944: asyncore doesn't handle connection refused correctly.
-
-- Issue #3196: email header decoding is now forgiving if an RFC2047
-  encoded word encoded in base64 is lacking padding.
-
-- Issue #9444: Argparse now uses the first element of prefix_chars as
-  the option character for the added 'h/help' option if prefix_chars
-  does not contain a '-', instead of raising an error.
-
-- Issue #9354: Provide getsockopt() in asyncore's file_wrapper.
-
-- Issue #9428: Fix running scripts with the profile/cProfile modules from
-  the command line.
-
-- Issue #7781: Fix restricting stats by entry counts in the pstats
-  interactive browser.
-
-- Issue #9209: Do not crash in the pstats interactive browser on invalid
-  regular expressions.
-
-- Issue #7372: Fix pstats regression when stripping paths from profile
-  data generated with the profile module.
-
-- Issue #4108: In urllib.robotparser, if there are multiple 'User-agent: *'
-  entries, consider the first one.
-
-- Issue #8397: Raise an error when attempting to mix iteration and regular
-  reads on a BZ2File object, rather than returning incorrect results.
-
-- Issue #5294: Fix the behavior of pdb's "continue" command when called
-  in the top-level debugged frame.
-
-- Issue #5727: Restore the ability to use readline when calling into pdb
-  in doctests.
-
-- Issue #6719: In pdb, do not stop somewhere in the encodings machinery
-  if the source file to be debugged is in a non-builtin encoding.
-
-- Issue #8048: Prevent doctests from failing when sys.displayhook has
-  been reassigned.
-
-- Issue #8015: In pdb, do not crash when an empty line is entered as
-  a breakpoint command.
-
-- Issue #9448: Fix a leak of OS resources (mutexes or semaphores) when
-  re-initializing a buffered IO object by calling its ``__init__`` method.
-
-- Issue #7909: Do not touch paths with the special prefixes ``\\.\``
-  or ``\\?\`` in ntpath.normpath().
-
-- Issue #5146: Handle UID THREAD command correctly in imaplib.
-
-- Issue #5147: Fix the header generated for cookie files written by
-  http.cookiejar.MozillaCookieJar.
-
-- Issue #8198: In pydoc, output all help text to the correct stream
-  when sys.stdout is reassigned.
-
-- Issue #7395: Fix tracebacks in pstats interactive browser.
-
-- Issue #8230: Fix Lib/test/sortperf.py.
-
-- Issue #1713: Fix os.path.ismount(), which returned true for symbolic links
-  across devices.
-
-- Issue #8826: Properly load old-style "expires" attribute in http.cookies.
-
-- Issue #1690103: Fix initial namespace for code run with trace.main().
-
-- Issue #8471: In doctest, properly reset the output stream to an empty
-  string when Unicode was previously output.
-
-- Issue #8620: when a Cmd is fed input that reaches EOF without a final
-  newline, it no longer truncates the last character of the last command line.
-
-- Issue #6213: Implement getstate() and setstate() methods of utf-8-sig and
-  utf-16 incremental encoders.
-
-- Issue #7113: Speed up loading in ConfigParser. Patch by Łukasz Langa.
-
-- Issue #3704: cookielib was not properly handling URLs with a / in the
-  parameters.
-
-- Issue #9032: XML-RPC client retries the request on EPIPE error. The EPIPE
-  error occurs when the server closes the socket and the client sends a big
-  XML-RPC request.
-
-- Issue #5542: Remove special logic that closes HTTPConnection socket on EPIPE.
-
-- Issue #4629: getopt raises an error if an argument ends with = whereas getopt
-  doesn't except a value (eg. --help= is rejected if getopt uses ['help='] long
-  options).
-
-- Issue #7895: platform.mac_ver() no longer crashes after calling os.fork()
-
-- Issue #5395: array.fromfile() would raise a spurious EOFError when an
-  I/O error occurred.  Now an IOError is raised instead.  Patch by chuck
-  (Jan Hosang).
-
-- Issue #7646: The fnmatch pattern cache no longer grows without bound.
-
-- Issue #9136: Fix 'dictionary changed size during iteration'
-  RuntimeError produced when profiling the decimal module.  This was
-  due to a dangerous iteration over 'locals()' in Context.__init__.
-
-- Fix extreme speed issue in Decimal.pow when the base is an exact
-  power of 10 and the exponent is tiny (for example,
-  Decimal(10) ** Decimal('1e-999999999')).
-
-- Issue #9161: Fix regression in optparse's acceptance of unicode
-  strings in add_option calls.
-
-- Issue #9130: Fix validation of relative imports in parser module.
-
-- Issue #9128: Fix validation of class decorators in parser module.
-
-- Issue #9164: Ensure sysconfig handles dupblice archs while building on OSX
-
-- Issue #9315: Fix for the trace module to record correct class name
-  for tracing methods.
-
-Extension Modules
------------------
-
-- Issue #9054: Fix a crash occurring when using the pyexpat module
-  with expat version 2.0.1.
-
-- Issue #10003: Allow handling of SIGBREAK on Windows. Fixes a regression
-  introduced by issue #9324.
-
-- Issue #8734: Avoid crash in msvcrt.get_osfhandle() when an invalid file
-  descriptor is provided.  Patch by Pascal Chambon.
-
-- Issue #7736: Release the GIL around calls to opendir() and closedir()
-  in the posix module.  Patch by Marcin Bachry.
-
-- As a result of issue #2521, the _weakref module is now compiled into the
-  interpreter by default.
-
-- Issue #9324: Add parameter validation to signal.signal on Windows in order
-  to prevent crashes.
-
-- Issue #9526: Remove some outdated (int) casts that were preventing
-  the array module from working correctly with arrays of more than
-  2**31 elements.
-
-- Fix memory leak in ssl._ssl._test_decode_cert.
-
-- Issue #8065: Fix memory leak in readline module (from failure to
-  free the result of history_get_history_state()).
-
-- Issue #9450: Fix memory leak in readline.replace_history_item and
-  readline.remove_history_item for readline version >= 5.0.
-
-- Issue #8105: Validate file descriptor passed to mmap.mmap on Windows.
-
-- Issue #1019882: Fix IndexError when loading certain hotshot stats.
-
-- Issue #9422: Fix memory leak when re-initializing a struct.Struct object.
-
-- Issue #7900: The getgroups(2) system call on MacOSX behaves rather oddly
-  compared to other unix systems. In particular, os.getgroups() does
-  not reflect any changes made using os.setgroups() but basically always
-  returns the same information as the id command.
-
-  os.getgroups() can now return more than 16 groups on MacOSX.
-
-- Issue #9277: Fix bug in struct.pack for bools in standard mode
-  (e.g., struct.pack('>?')): if conversion to bool raised an exception
-  then that exception wasn't properly propagated on machines where
-  char is unsigned.
-
-- Issue #7567: Don't call `setupterm' twice.
-
-Tools/Demos
------------
-
-- Issue #7287: Demo/imputil/knee.py was removed.
-
-- Issue #9188: The gdb extension now handles correctly narrow (UCS2) as well
-  as wide (UCS4) unicode builds for both the host interpreter (embedded
-  inside gdb) and the interpreter under test.
-
-Build
------
-
-- Issue #8852: Allow the socket module to build on OpenSolaris.
-
-- Issue #10054: Some platforms provide uintptr_t in inttypes.h.  Patch by
-  Akira Kitada.
-
-- Issue #10055: Make json C89-compliant in UCS4 mode.
-
-- Issue #1633863: Don't ignore $CC under AIX.
-
-- Issue #9810: Compile bzip2 source files in python's project file
-  directly. It used to be built with bzip2's makefile.
-
-- Issue #941346: Improve the build process under AIX and allow Python to
-  be built as a shared library.  Patch by Sébastien Sablé.
-
-- Issue #4026: Make the fcntl extension build under AIX.  Patch by Sébastien
-  Sablé.
-
-- Issue #3101: Helper functions _add_one_to_index_C() and
-  _add_one_to_index_F() become _Py_add_one_to_index_C() and
-  _Py_add_one_to_index_F(), respectively.
-
-- Issue #9700: define HAVE_BROKEN_POSIX_SEMAPHORES under AIX 6.x.  Patch by
-  Sébastien Sablé.
-
-- Issue #9280: Make sharedinstall depend on sharedmods.
-
-- Issue #9275: The OSX installer once again installs links to binaries in
-  ``/usr/local/bin``.
-
-- Issue #9392: A framework build on OSX will once again use a versioned name
-  of the ``2to3`` tool, that is you can use ``2to3-2.7`` to select the Python
-  2.7 edition of 2to3.
-
-- Issue #9701: The MacOSX installer can patch the shell profile to ensure that
-  the "bin" directory inside the framework is on the shell's search path. This
-  feature now also supports the ZSH shell.
-
-- Issue #7473: avoid link errors when building a framework with a different
-  set of architectures than the one that is currently installed.
-
-Tests
------
-
-- Issue #9978: Wait until subprocess completes initialization. (Win32KillTests
-  in test_os)
-
-- Issue #9894: Do not hardcode ENOENT in test_subprocess.
-
-- Issue #9323: Make test.regrtest.__file__ absolute, this was not always the
-  case when running profile or trace, for example.
-
-- Issue #9315: Added tests for the trace module.  Patch by Eli Bendersky.
-
-- Strengthen test_unicode with explicit type checking for assertEqual tests.
-
-- Issue #8857: Provide a test case for socket.getaddrinfo.
-
-- Issue #7564: Skip test_ioctl if another process is attached to /dev/tty.
-
-- Issue #8433: Fix test_curses failure with newer versions of ncurses.
-
-- Issue #9496: Provide a test suite for the rlcompleter module.  Patch by
-  Michele Orrù.
-
-- Issue #8605: Skip test_gdb if Python is compiled with optimizations.
-
-- Issue #9568: Fix test_urllib2_localnet on OS X 10.3.
-
-Documentation
--------------
-
-- Issue #9817: Add expat COPYING file; add expat, libffi and expat licenses
-  to Doc/license.rst.
-
-- Issue #9524: Document that two CTRL* signals are meant for use only
-  with os.kill.
-
-- Issue #9255: Document that the 'test' package is for internal Python use
-  only.
-
-- Issue #7829: Document in dis that bytecode is an implementation detail.
-
-
-What's New in Python 2.7?
-=========================
-
-*Release date: 2010-07-03*
-
-Core and Builtins
------------------
-
-- Prevent assignment to set literals.
-
-Library
--------
-
-- Issue #1868: Eliminate subtle timing issues in thread-local objects by
-  getting rid of the cached copy of thread-local attribute dictionary.
-
-- Issue #9125: Add recognition of 'except ... as ...' syntax to parser module.
-
-Extension Modules
------------------
-
-- Issue #7673: Fix security vulnerability (CVE-2010-2089) in the audioop module,
-  ensure that the input string length is a multiple of the frame size.
-
-- Issue #9075: In the ssl module, remove the setting of a ``debug`` flag
-  on an OpenSSL structure.
-
-
-What's New in Python 2.7 release candidate 2?
-=============================================
-
-*Release date: 2010-06-20*
-
-Core and Builtins
------------------
-
-- Issue #9058: Remove assertions about INT_MAX in UnicodeDecodeError.
-
-- Issue #8202: Previous change to ``sys.argv[0]`` handling for -m command line
-  option reverted due to unintended side effects on handling of ``sys.path``.
-  See tracker issue for details.
-
-- Issue #8941: decoding big endian UTF-32 data in UCS-2 builds could crash
-  the interpreter with characters outside the Basic Multilingual Plane
-  (higher than 0x10000).
-
-- In the unicode/str.format(), raise a ValueError when indexes to arguments are
-  too large.
-
-Build
------
-
-- Issue #8854: Fix finding Visual Studio 2008 on Windows x64.
-
-Library
--------
-
-- Issue #6589: cleanup asyncore.socket_map in case smtpd.SMTPServer constructor
-  raises an exception.
-
-- Issue #8959: fix regression caused by using unmodified libffi
-  library on Windows.  ctypes does now again check the stack before
-  and after calling foreign functions.
-
-- Issue #8720: fix regression caused by fix for #4050 by making getsourcefile
-  smart enough to find source files in the linecache.
-
-- Issue #8986: math.erfc was incorrectly raising OverflowError for
-  values between -27.3 and -30.0 on some platforms.
-
-- Issue #8924: logging: Improved error handling for Unicode in exception text.
-
-- Issue #8948: cleanup functions and class / module setups and teardowns are
-  now honored in unittest debug methods.
-
-Documentation
--------------
-
-- Issue #8909: Added the size of the bitmap used in the installer created by
-  distutils' bdist_wininst. Patch by Anatoly Techtonik.
-
-Misc
-----
-
-- Issue #8362: Add maintainers.rst: list of module maintainers
-
-
-What's New in Python 2.7 Release Candidate 1?
-=============================================
-
-*Release date: 2010-06-05*
-
-Core and Builtins
------------------
-
-- Issue #8271: during the decoding of an invalid UTF-8 byte sequence, only the
-  start byte and the continuation byte(s) are now considered invalid, instead
-  of the number of bytes specified by the start byte.
-  E.g.: '\xf1\x80AB'.decode('utf-8', 'replace') now returns u'\ufffdAB' and
-  replaces with U+FFFD only the start byte ('\xf1') and the continuation byte
-  ('\x80') even if '\xf1' is the start byte of a 4-bytes sequence.
-  Previous versions returned a single u'\ufffd'.
-
-- Issue #8627: Remove bogus "Overriding __cmp__ blocks inheritance of
-  __hash__ in 3.x" warning.  Also fix "XXX undetected error" that
-  arises from the "Overriding __eq__ blocks inheritance ..." warning
-  when turned into an exception: in this case the exception simply
-  gets ignored.
-
-- Issue #8748: Fix two issues with comparisons between complex and integer
-  objects.  (1) The comparison could incorrectly return True in some cases
-  (2**53+1 == complex(2**53) == 2**53), breaking transivity of equality.
-  (2) The comparison raised an OverflowError for large integers, leading
-  to unpredictable exceptions when combining integers and complex objects
-  in sets or dicts.
-
-- Issue #5211: Implicit coercion for the complex type is now completely
-  removed.  (Coercion for arithmetic operations was already removed in 2.7
-  alpha 4, but coercion for rich comparisons was accidentally left in.)
-
-- Issue #3798: Write sys.exit() message to sys.stderr to use stderr encoding
-  and error handler, instead of writing to the C stderr file in utf-8
-
-- Issue #7902: When using explicit relative import syntax, don't try implicit
-  relative import semantics.
-
-- Issue #7079: Fix a possible crash when closing a file object while using it
-  from another thread.  Patch by Daniel Stutzbach.
-
-- Issue #8868: Fix that ensures that python scripts have access to the
-  Window Server again in a framework build on MacOSX 10.5 or earlier.
-
-C-API
------
-
-- Issue #5753: A new C API function, :cfunc:`PySys_SetArgvEx`, allows embedders
-  of the interpreter to set sys.argv without also modifying sys.path.  This
-  helps fix `CVE-2008-5983
-  <http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-5983>`_.
-
-Library
--------
-
-- Issue #8302: SkipTest in unittest.TestCase.setUpClass or setUpModule is now
-  reported as a skip rather than an error.
-
-- Issue #8351: Excessively large diffs due to
-  unittest.TestCase.assertSequenceEqual are no longer included in failure
-  reports.
-
-- Issue #8899: time.struct_time now has class and attribute docstrings.
-
-- Issue #4487: email now accepts as charset aliases all codec aliases
-  accepted by the codecs module.
-
-- Issue #6470: Drop UNC prefix in FixTk.
-
-- Issue #5610: feedparser no longer eats extra characters at the end of
-  a body part if the body part ends with a \r\n.
-
-- Issue #8833: tarfile created hard link entries with a size field != 0 by
-  mistake.
-
-- Issue #1368247: set_charset (and therefore MIMEText) now automatically
-  encodes a unicode _payload to the output_charset.
-
-- Issue #7150: Raise OverflowError if the result of adding or subtracting
-  timedelta from date or datetime falls outside of the MINYEAR:MAXYEAR range.
-
-- Issue #6662: Fix parsing of malformatted charref (&#bad;), patch written by
-  Fredrik Håård
-
-- Issue #8016: Add the CP858 codec.
-
-- Issue #3924: Ignore cookies with invalid "version" field in cookielib.
-
-- Issue #6268: Fix seek() method of codecs.open(), don't read or write the BOM
-  twice after seek(0). Fix also reset() method of codecs, UTF-16, UTF-32 and
-  StreamWriter classes.
-
-- Issue #5640: Fix Shift-JIS incremental encoder for error handlers different
-  than 'strict'.
-
-- Issue #8782: Add a trailing newline in linecache.updatecache to the last line
-  of files without one.
-
-- Issue #8729: Return NotImplemented from ``collections.Mapping.__eq__()`` when
-  comparing to a non-mapping.
-
-- Issue #8759: Fix user paths in sysconfig for posix and os2 schemes.
-
-- Issue #1285086: Speed up ``urllib.quote()`` and urllib.unquote for simple
-  cases.
-
-- Issue #8688: Distutils now recalculates MANIFEST every time.
-
-- Issue #5099: The ``__del__()`` method of ``subprocess.Popen`` (and the methods
-  it calls) referenced global objects, causing errors to pop up during
-  interpreter shutdown.
-
-Extension Modules
------------------
-
-- Issue #7384: If the system readline library is linked against ncurses,
-  the curses module must be linked against ncurses as well. Otherwise it
-  is not safe to load both the readline and curses modules in an application.
-
-- Issue #2810: Fix cases where the Windows registry API returns
-  ERROR_MORE_DATA, requiring a re-try in order to get the complete result.
-
-- Issue #8674: Fixed a number of incorrect or undefined-behaviour-inducing
-  overflow checks in the ``audioop`` module.
-
-Tests
------
-
-- Issue #8889: test_support.transient_internet rewritten so that the new
-  checks also work on FreeBSD, which lacks EAI_NODATA.
-
-- Issue #8835: test_support.transient_internet() catches gaierror(EAI_NONAME)
-  and gaierror(EAI_NODATA)
-
-- Issue #7449: Skip test_socketserver if threading support is disabled
-
-- On darwin, ``test_site`` assumed that a framework build was being used,
-  leading to a failure where four directories were expected for site-packages
-  instead of two in a non-framework build.
-
-Build
------
-
-- Display installer warning that Windows 2000 won't be supported in future
-  releases.
-
-- Issues #1759169, #8864: Drop _XOPEN_SOURCE on Solaris, define it for
-  multiprocessing only.
-
-Tools/Demos
------------
-
-- Issue #5464: Implement plural forms in msgfmt.py.
-
-
-What's New in Python 2.7 beta 2?
-================================
-
-*Release date: 2010-05-08*
-
-Core and Builtins
------------------
-
-- Run Clang 2.7's static analyzer for ``Objects/`` and ``Python/``.
-
-- Issue #1533: Fix inconsistency in range function argument processing: any
-  non-float non-integer argument is now converted to an integer (if possible)
-  using its __int__ method.  Previously, only small arguments were treated this
-  way; larger arguments (those whose __int__ was outside the range of a C long)
-  would produce a TypeError.
-
-- Issue #8202: ``sys.argv[0]`` is now set to '-m' instead of '-c' when searching
-  for the module file to be executed with the -m command line option.
-
-- Issue #7319: When -Q is used, do not silence DeprecationWarning.
-
-- Issue #7332: Remove the 16KB stack-based buffer in
-  ``PyMarshal_ReadLastObjectFromFile``, which doesn't bring any noticeable
-  benefit compared to the dynamic memory allocation fallback.  Patch by
-  Charles-François Natali.
-
-- Issue #8417: Raise an OverflowError when an integer larger than sys.maxsize is
-  passed to bytearray.
-
-- Issue #7072: ``isspace(0xa0)`` is true on Mac OS X.
-
-- Issue #8404: Fix set operations on dictionary views.
-
-- Issue #8084: PEP 370 now conforms to system conventions for framework builds
-  on MacOS X. That is, ``python setup.py install --user`` will install into
-  ``~/Library/Python/2.7`` instead of ``~/.local``.
-
-Library
--------
-
-- Issue #8681: Make the zlib module's error messages more informative when the
-  zlib itself doesn't give any detailed explanation.
-
-- Issue #8571: Fix an internal error when compressing or decompressing a chunk
-  larger than 1GB with the zlib module's compressor and decompressor objects.
-
-- Issue #8573: asyncore ``_strerror()`` function might throw ValueError.
-
-- Issue #8483: asyncore.dispatcher's __getattr__ method produced confusing error
-  messages when accessing undefined class attributes because of the cheap
-  inheritance with the underlying socket object.  The cheap inheritance has been
-  deprecated.
-
-- Issue #4265: ``shutil.copyfile()`` was leaking file descriptors when disk
-  fills.  Patch by Tres Seaver.
-
-- Issue #7755: Use an unencumbered audio file for tests.
-
-- Issue #8621: ``uuid.uuid4()`` returned the same sequence of values in the
-  parent and any children created using ``os.fork`` on Mac OS X 10.6.
-
-- Issue #8313: ``traceback.format_exception_only()`` encodes unicode message to
-  ASCII with backslashreplace error handler if ``str(value)`` failed.
-
-- Issue #8567: Fix precedence of signals in Decimal module: when a Decimal
-  operation raises multiple signals and more than one of those signals is
-  trapped, the specification determines the order in which the signals should be
-  handled.  In many cases this order wasn't being followed, leading to the wrong
-  Python exception being raised.
-
-- Issue #7865: The close() method of :mod:`io` objects should not swallow
-  exceptions raised by the implicit flush().  Also ensure that calling close()
-  several times is supported.  Patch by Pascal Chambon.
-
-- Issue #8576: logging updated to remove usage of find_unused_port().
-
-- Issue #4687: Fix accuracy of garbage collection runtimes displayed with
-  gc.DEBUG_STATS.
-
-- Issue #8354: The siginterrupt setting is now preserved for all signals, not
-  just SIGCHLD.
-
-- Issue #7192: ``webbrowser.get("firefox")`` now works on Mac OS X, as does
-  ``webbrowser.get("safari")``.
-
-- Issue #8577: ``distutils.sysconfig.get_python_inc()`` now makes a difference
-  between the build dir and the source dir when looking for "python.h" or
-  "Include".
-
-- Issue #8464: tarfile no longer creates files with execute permissions set when
-  mode="w|" is used.
-
-- Issue #7834: Fix connect() of Bluetooth L2CAP sockets with recent versions of
-  the Linux kernel.  Patch by Yaniv Aknin.
-
-- Issue #6312: Fix http HEAD request when the transfer encoding is chunked.  It
-  should correctly return an empty response now.
-
-- Issue #7490: To facilitate sharing of doctests between 2.x and 3.x test
-  suites, the ``IGNORE_EXCEPTION_DETAIL`` directive now also ignores the module
-  location of the raised exception.  Based on initial patch by Lennart Regebro.
-
-- Issue #8086: In :func:`ssl.DER_cert_to_PEM_cert()`, fix missing newline before
-  the certificate footer.  Patch by Kyle VanderBeek.
-
-- Issue #8546: Reject None given as the buffering argument to ``_pyio.open()``.
-
-- Issue #8549: Fix compiling the _ssl extension under AIX.  Patch by Sridhar
-  Ratnakumar.
-
-- Issue #6656: Fix locale.format_string to handle escaped percents and mappings.
-
-- Issue #2302: Fix a race condition in SocketServer.BaseServer.shutdown, where
-  the method could block indefinitely if called just before the event loop
-  started running.  This also fixes the occasional freezes witnessed in
-  test_httpservers.
-
-- Issue #5103: SSL handshake would ignore the socket timeout and block
-  indefinitely if the other end didn't respond.
-
-- The do_handshake() method of SSL objects now adjusts the blocking mode of the
-  SSL structure if necessary (as other methods already do).
-
-- Issue #7507: Quote "!" in pipes.quote(); it is special to some shells.
-
-- Issue #5238: Calling makefile() on an SSL object would prevent the underlying
-  socket from being closed until all objects get truely destroyed.
-
-- Issue #7943: Fix circular reference created when instantiating an SSL socket.
-  Initial patch by Péter Szabó.
-
-- Issue #8451: Syslog module now uses basename(sys.argv[0]) instead of the
-  string "python" as the *ident*.  openlog() arguments are all optional and
-  keywords.
-
-- Issue #8108: Fix the unwrap() method of SSL objects when the socket has a
-  non-infinite timeout.  Also make that method friendlier with applications
-  wanting to continue using the socket in clear-text mode, by disabling
-  OpenSSL's internal readahead.  Thanks to Darryl Miles for guidance.
-
-- Issue #8484: Load all ciphers and digest algorithms when initializing the _ssl
-  extension, such that verification of some SSL certificates doesn't fail
-  because of an "unknown algorithm".
-
-- Issue #8437: Fix test_gdb failures, patch written by Dave Malcolm
-
-- Issue #4814: The timeout parameter is now applied also for connections
-  resulting from PORT/EPRT commands.
-
-- Issue #8463: Add missing reference to bztar in shutil's documentation.
-
-- Issue #8438: Remove reference to the missing "surrogateescape" encoding error
-  handler from the new IO library.
-
-- Issue #3817: ftplib.FTP.abort() method now considers 225 a valid response code
-  as stated in RFC-959 at chapter 5.4.
-
-- Issue #8279: Fix test_gdb failures.
-
-- Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
-  available cipher list.  Helps fix test_ssl with OpenSSL 1.0.0.
-
-- Issue #2987: RFC 2732 support for urlparse (IPv6 addresses).  Patch by Tony
-  Locke and Hans Ulrich Niedermann.
-
-- Issue #7585: difflib context and unified diffs now place a tab between
-  filename and date, conforming to the 'standards' they were originally designed
-  to follow.  This improves compatibility with patch tools.
-
-- Issue #7472: Fixed typo in email.encoders module; messages using ISO-2022
-  character sets will now consistently use a Content-Transfer-Encoding of 7bit
-  rather than sometimes being marked as 8bit.
-
-- Issue #8330: Fix expected output in test_gdb.
-
-- Issue #8374: Update the internal alias table in the :mod:`locale` module to
-  cover recent locale changes and additions.
-
-Extension Modules
------------------
-
-- Issue #8644: Improved accuracy of ``timedelta.total_seconds()``.
-
-- Use Clang 2.7's static analyzer to find places to clean up some code.
-
-- Build the ossaudio extension on GNU/kFreeBSD.
-
-- On Windows, ctypes no longer checks the stack before and after calling a
-  foreign function.  This allows using the unmodified libffi library.
-
-Tests
------
-
-- Issue #8672: Add a zlib test ensuring that an incomplete stream can be handled
-  by a decompressor object without errors (it returns incomplete uncompressed
-  data).
-
-- Issue #8490: asyncore now has a more solid test suite which actually tests its
-  API.
-
-- Issue #8576: Remove use of find_unused_port() in test_smtplib and
-  test_multiprocessing.  Patch by Paul Moore.
-
-- Issue #7449: Fix many tests to support Python compiled without thread support.
-  Patches written by Jerry Seutter.
-
-- Issue #8108: test_ftplib's non-blocking SSL server now has proper handling of
-  SSL shutdowns.
-
-Build
------
-
-- Issue #8625: Turn off optimization in ``--with-pydebug`` builds with gcc.
-  (Optimization was unintentionally turned on in gcc --with-pydebug builds in
-  2.7 beta1 as a result of the issue #1628484 fix, combined with autoconf's
-  strange choice of default CFLAGS produced by AC_PROG_CC for gcc.)
-
-- Issue #8509: Fix quoting in help strings and code snippets in configure.in.
-
-- Issue #3646: It is now easily possible to install a Python framework into your
-  home directory on Mac OS X, see Mac/README for more information.
-
-- Issue #8510: Update to autoconf 2.65.
-
-Misc
-----
-
-- Update the Vim syntax highlight file.
-
-
-What's New in Python 2.7 beta 1?
-================================
-
-*Release date: 2010-04-10*
-
-Core and Builtins
------------------
-
-- Issue #7301: Add environment variable $PYTHONWARNINGS.
-
-- Issue #8329: Don't return the same lists from select.select when no fds are
-  changed.
-
-- Issue #8259: ``1L << (2**31)`` no longer produces an 'outrageous shift error'
-  on 64-bit machines.  The shift count for either left or right shift is
-  permitted to be up to sys.maxsize.
-
-- Ensure that tokenization of identifiers is not affected by locale.
-
-- Issue #1222585: Added LDCXXSHARED for C++ support.  Patch by Arfrever.
-
-- Raise a TypeError when trying to delete a T_STRING_INPLACE struct member.
-
-- Issue #7994: Issue a PendingDeprecationWarning if object.__format__ is called
-  with a non-empty format string. This is an effort to future-proof user
-  code. If a derived class does not currently implement __format__ but later
-  adds its own __format__, it would most likely break user code that had
-  supplied a format string. This will be changed to a DeprecationWarning in
-  Python 3.3 and it will be an error in Python 3.4.
-
-- Issue #8268: Old-style classes (not just instances) now support weak
-  references.
-
-- Issue #8211: Save/restore CFLAGS around AC_PROG_CC in configure.in, in case it
-  is set.
-
-- Issue #1583863: A unicode subclass can now override the __unicode__ method
-
-- Issue #6474: Make error message from passing an inadequate number of keyword
-  arguments to a function correct.
-
-- Issue #8164: Don't allow lambda functions to have a docstring.
-
-- Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt
-  (SIGINT).  If an error occurs while importing the site module, the error is
-  printed and Python exits.  Initialize the GIL before importing the site
-  module.
-
-- Code objects now support weak references.
-
-Library
--------
-
-- Issue #5277: Fix quote counting when parsing RFC 2231 encoded parameters.
-
-- Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
-  using the new attributes `ssl.OPENSSL_VERSION`, `ssl.OPENSSL_VERSION_INFO` and
-  `ssl.OPENSSL_VERSION_NUMBER`.
-
-- Issue #8310: Allow dis to examine new style classes.
-
-- Issue #8257: The Decimal construct now accepts a float instance directly,
-  converting that float to a Decimal of equal value:
-
-     >>> Decimal(1.1)
-     Decimal('1.100000000000000088817841970012523233890533447265625')
-
-- collections.Counter() now supports a subtract() method.
-
-- The functools module now has a total_ordering() class decorator to simplify
-  the specification of rich comparisons.
-
-- The functools module also adds cmp_to_key() as a tool to transition old-style
-  comparison functions to new-style key-functions.
-
-- Issue #8294: The Fraction constructor now accepts Decimal and float instances
-  directly.
-
-- Issue #7279: Comparisons involving a Decimal signaling NaN now signal
-  InvalidOperation instead of returning False.  (Comparisons involving a quiet
-  NaN are unchanged.)  Also, Decimal quiet NaNs are now hashable; Decimal
-  signaling NaNs remain unhashable.
-
-- Issue #2531: Comparison operations between floats and Decimal instances now
-  return a result based on the numeric values of the operands; previously they
-  returned an arbitrary result based on the relative ordering of id(float) and
-  id(Decimal).
-
-- Issue #8233: When run as a script, py_compile.py optionally takes a single
-  argument `-` which tells it to read files to compile from stdin.  Each line is
-  read on demand and the named file is compiled immediately.  (Original patch by
-  Piotr Ożarowski).
-
-- Issue #3135: Add ``inspect.getcallargs()``, which binds arguments to a
-  function like a normal call.
-
-- Backwards incompatible change: Unicode codepoints line tabulation (0x0B) and
-  form feed (0x0C) are now considered linebreaks, as specified in Unicode
-  Standard Annex #14.  See issue #7643.  http://www.unicode.org/reports/tr14/
-
-- Comparisons using one of <, <=, >, >= between a complex instance and a
-  Fractions instance now raise TypeError instead of returning True/False.  This
-  makes Fraction <=> complex comparisons consistent with int <=> complex, float
-  <=> complex, and complex <=> complex comparisons.
-
-- Addition of ``WeakSet`` to the ``weakref`` module.
-
-- logging: Added LOG_FTP to SysLogHandler and updated documentation.
-
-- Issue #8205: Remove the "Modules" directory from sys.path when Python is
-  running from the build directory (POSIX only).
-
-- Issue #7667: Fix doctest failures with non-ASCII paths.
-
-- Issue #7512: shutil.copystat() could raise an OSError when the filesystem
-  didn't support chflags() (for example ZFS under FreeBSD).  The error is now
-  silenced.
-
-- Issue #7703: ctypes supports both buffer() and memoryview().  The former is
-  deprecated.
-
-- Issue #7860: platform.uname now reports the correct 'machine' type when Python
-  is running in WOW64 mode on 64 bit Windows.
-
-- logging: Added getChild utility method to Logger and added isEnabledFor method
-  to LoggerAdapter.
-
-- Issue #8201: logging: Handle situation of non-ASCII and Unicode logger names
-  existing at the same time, causing a Unicode error when configuration code
-  attempted to sort the existing loggers.
-
-- Issue #8200: logging: Handle errors when multiprocessing is not fully loaded
-  when logging occurs.
-
-- Issue #3890, #8222: Fix recv() and recv_into() on non-blocking SSL sockets.
-  Also, enable the SSL_MODE_AUTO_RETRY flag on SSL sockets, so that blocking
-  reads and writes are always retried by OpenSSL itself.
-
-- Issue #8179: Fix macpath.realpath() on a non-existing path.
-
-- Issue #8024: Update the Unicode database to 5.2.
-
-- Issue #8104: socket.recv_into() and socket.recvfrom_into() now support writing
-  into objects supporting the new buffer API, for example bytearrays or
-  memoryviews.
-
-- Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox
-  with Tcl/Tk-8.5.
-
-- Issue #8140: Extend compileall to compile single files.  Add -i option.
-
-- Issue #7774: Set sys.executable to an empty string if ``argv[0]`` has been set
-  to a non existent program name and Python is unable to retrieve the real
-  program name.
-
-- Issue #8117: logging: Improved algorithm for computing initial rollover time
-  for ``TimedRotatingFileHandler`` by using the modification time of an existing
-  log file to compute the next rollover time.  If the log file does not exist,
-  the current time is used as the basis for the computation.
-
-- Issue #6472: The ``xml.etree`` package is updated to ElementTree 1.3.  The
-  cElementTree module is updated too.
-
-- Issue #7880: Fix sysconfig when the python executable is a symbolic link.
-
-- Issue #7624: Fix ``isinstance(foo(), collections.Callable)`` for old-style
-  classes.
-
-- Issue #7143: email: ``get_payload()`` used to strip any trailing newline from
-  a base64 transfer-encoded payload *after* decoding it; it no longer does.
-  This is a behavior change, so email's minor version number is now bumped, to
-  version 4.0.2, for the 2.7 release.
-
-- Issue #8235: _socket: Add the constant ``SO_SETFIB``.  SO_SETFIB is
-  a socket option available on FreeBSD 7.1 and newer.
-
-- Issue #8038: unittest.TestCase.assertNotRegexpMatches
-
-- Addition of -b command line option to unittest for buffering stdout / stderr
-  during test runs.
-
-- Issue #1220212: Added os.kill support for Windows, including support for
-  sending CTRL+C and CTRL+BREAK events to console subprocesses.
-
-Extension Modules
------------------
-
-- Issue #8314: Fix unsigned long long bug in libffi on Sparc v8.
-
-- Issue #1039, #8154: Fix os.execlp() crash with missing 2nd argument.
-
-- Issue #8156: bsddb module updated to version 4.8.4.
-  http://www.jcea.es/programacion/pybsddb.htm#bsddb3-4.8.4.  This update drops
-  support for Berkeley DB 4.0, and adds support for 4.8.
-
-- Issue #3928: os.mknod() now available in Solaris, also.
-
-- Issue #8142: Update libffi to the 3.0.9 release.
-
-- Issue #8300: When passing a non-integer argument to struct.pack with any
-  integer format code, struct.pack first attempts to convert the non-integer
-  using its __index__ method.  If that method is non-existent or raises
-  TypeError it goes on to try the __int__ method, as described below.
-
-- Issue #1530559: When passing a non-integer argument to struct.pack with *any*
-  integer format code (one of 'bBhHiIlLqQ'), struct.pack attempts to use the
-  argument's __int__ method to convert to an integer before packing.  It also
-  produces a DeprecationWarning in this case.  (In Python 2.6, the behaviour was
-  inconsistent: __int__ was used for some integer codes but not for others, and
-  the set of integer codes for which it was used differed between native packing
-  and standard packing.)
-
-- Issue #7347: _winreg: Add CreateKeyEx and DeleteKeyEx, as well as fix a bug in
-  the return value of QueryReflectionKey.
-
-Tools/Demos
------------
-
-- Issue #7993: Add a test of IO packet processing bandwidth to ccbench.  It
-  measures the number of UDP packets processed per second depending on the
-  number of background CPU-bound Python threads.
-
-- python-config now supports multiple options on the same command line.
-
-Build
------
-
-- Issue #8032: For gdb7, a python-gdb.py file is added to the build, allowing to
-  use advanced gdb features when debugging Python.
-
-- Issue #1628484: The Makefile doesn't ignore the CFLAGS environment variable
-  anymore.  It also forwards the LDFLAGS settings to the linker when building a
-  shared library.
-
-- Issue #6716: Quote -x arguments of compileall in MSI installer.
-
-- Issue #7705: Fix linking on FreeBSD.
-
-- Make sure that the FreeBSD build of the included libffi uses the proper
-  assembly file.
-
-C-API
------
-
-- Issue #8276: PyEval_CallObject() is now only available in macro form.  The
-  function declaration, which was kept for backwards compatibility reasons, is
-  now removed (the macro was introduced in 1997!).
-
-- Issue #7992: A replacement PyCObject API, PyCapsule, has been backported from
-  Python 3.1.  All existing Python CObjects in the main distribution have been
-  converted to capsules.  To address backwards-compatibility concerns,
-  PyCObject_AsVoidPtr() was changed to understand capsules.
-
-Tests
------
-
-- Issue #3864: Skip three test_signal tests on freebsd6 because they fail if any
-  thread was previously started, most likely due to a platform bug.
-
-- Issue #8348: Fix test ftp url in test_urllib2net.
-
-- Issue #8204: Fix test_ttk notebook test by forcing focus.
-
-- Issue #8344: Fix test_ttk bug on FreeBSD.
-
-- Issue #8193: Fix test_zlib failure with zlib 1.2.4.
-
-- Issue #8248: Add some tests for the bool type.  Patch by Gregory Nofi.
-
-- Issue #8263: Now regrtest.py will report a failure if it receives a
-  KeyboardInterrupt (SIGINT).
-
-- Issue #8180 and #8207: Fix test_pep277 on OS X and add more tests for special
-  Unicode normalization cases.
-
-- Issue #7783: test.test_support.open_urlresource invalidates the outdated files
-  from the local cache.
-
-
-What's New in Python 2.7 alpha 4?
-=================================
-
-*Release date: 2010-03-06*
-
-Core and Builtins
------------------
-
-- Issue #7544: Preallocate thread memory before creating the thread to avoid a
-  fatal error in low memory condition.
-
-- Issue #7820: The parser tokenizer restores all bytes in the right if the BOM
-  check fails.
-
-- Issue #7309: Fix unchecked attribute access when converting
-  UnicodeEncodeError, UnicodeDecodeError, and UnicodeTranslateError to strings.
-
-- Issue #7649: "u'%c' % char" now behaves like "u'%s' % char" and raises a
-  UnicodeDecodeError if 'char' is a byte string that can't be decoded using the
-  default encoding.
-
-- Issue #6902: Fix problem with built-in types format incorrectly with 0
-  padding.
-
-- Issue #2560: Remove an unnecessary 'for' loop from ``my_fgets()`` in
-  Parser/myreadline.c.
-
-- Issue #7988: Fix default alignment to be right aligned for
-  ``complex.__format__``.  Now it matches other numeric types.
-
-- Issue #5211: The complex type no longer uses implicit coercion in mixed-type
-  binary arithmetic operations.
-
-Library
--------
-
-- Issue #7904: Changes to urllib.parse.urlsplit to handle schemes as defined by
-  RFC3986. Anything before :// is considered a scheme and is followed by an
-  authority (or netloc) and by '/' led path, which is optional.
-
-- Issue #1555570: email no longer inserts extra blank lines when a \r\n
-  combo crosses an 8192 byte boundary.
-
-- Issue #6906: Tk should not set Unicode environment variables on Windows.
-
-- Issue #1054943: Fix ``unicodedata.normalize('NFC', text)`` for the Public
-  Review Issue #29 (http://unicode.org/review/pr-29.html).
-
-- Issue #7494: Fix a crash in ``_lsprof`` (cProfile) after clearing the profiler,
-  reset also the pointer to the current pointer context.
-
-- Issue #7232: Add support for the context management protocol to the
-  ``tarfile.TarFile`` class.
-
-- Issue #7250: Fix info leak of os.environ across multi-run uses of
-  ``wsgiref.handlers.CGIHandler``.
-
-- Issue #1729305: Fix doctest to handle encode error with "backslashreplace".
-
-- Issue #691291: ``codecs.open()`` should not convert end of lines on reading
-  and writing.
-
-- Issue #7975: Correct regression in dict methods supported by bsddb.dbshelve.
-
-- Issue #7959: ctypes callback functions are now registered correctly with the
-  cycle garbage collector.
-
-- Issue #7970: ``email.Generator.flatten`` now correctly flattens
-  message/rfc822 messages parsed by ``email.Parser.HeaderParser``.
-
-- Issue #3426: ``os.path.abspath`` now returns unicode when its arg is unicode.
-
-- Issue #7633: In the decimal module, ``Context`` class methods (with the
-  exception of canonical and is_canonical) now accept instances of int and long
-  wherever a Decimal instance is accepted, and implicitly convert that argument
-  to Decimal.  Previously only some arguments were converted.
-
-- Issue #6003: Add an argument to ``zipfile.Zipfile.writestr`` to specify the
-  compression type.
-
-- Issue #7893: ``unittest.TextTestResult`` is made public and a ``resultclass``
-  argument added to the TextTestRunner constructor allowing a different result
-  class to be used without having to subclass.
-
-- Issue #7588: ``unittest.TextTestResult.getDescription`` now includes the test
-  name in failure reports even if the test has a docstring.
-
-- Issue #5801: Remove spurious empty lines in wsgiref.
-
-- Issue #1537721: Add a ``writeheader()`` method to ``csv.DictWriter``.
-
-- Issue #7427: Improve the representation of httplib.BadStatusLine exceptions.
-
-- Issue #7481: When a ``threading.Thread`` failed to start it would leave the
-  instance stuck in initial state and present in ``threading.enumerate()``.
-
-- Issue #1068268: The subprocess module now handles EINTR in internal
-  ``os.waitpid()`` and ``os.read()`` system calls where appropriate.
-
-- Issue #6729: Add ``ctypes.c_ssize_t`` to represent ssize_t.
-
-- Issue #6247: The argparse module has been added to the standard library.
-
-Extension Modules
------------------
-
-- The sqlite3 module was updated to pysqlite 2.6.0.  This fixes several obscure
-  bugs and allows loading SQLite extensions from shared libraries.
-
-- Issue #7808: Fix reference leaks in _bsddb and related tests.
-
-- Issue #6544: Fix a reference leak in the kqueue implementation's error
-  handling.
-
-- Stop providing crtassem.h symbols when compiling with Visual Studio 2010, as
-  msvcr100.dll is not a platform assembly anymore.
-
-- Issue #7242: On Solaris 9 and earlier calling ``os.fork()`` from within a
-  thread could raise an incorrect RuntimeError about not holding the import
-  lock.  The import lock is now reinitialized after fork.
-
-- Issue #7999: ``os.setreuid()`` and ``os.setregid()`` would refuse to accept a
-  -1 parameter on some platforms such as OS X.
-
-Tests
------
-
-- Issue #7849: The utility ``test.test_support.check_warnings()`` verifies if
-  warnings are effectively raised.  A new utility ``check_py3k_warnings()`` is
-  available.
-
-- The four path modules (genericpath, macpath, ntpath, posixpath) share a
-  common TestCase for some tests: test_genericpath.CommonTest.
-
-- Print platform information when running the whole test suite, or using the
-  ``--verbose`` flag.
-
-- Issue #767675: Enable test_pep277 on POSIX platforms with Unicode-friendly
-  filesystem encoding.
-
-- Issue #6292: For the moment at least, the test suite runs cleanly if python
-  is run with the -OO flag.  Tests requiring docstrings are skipped.
-
-- Issue #7712: test_support gained a new ``temp_cwd`` context manager which is
-  now also used by regrtest to run all the tests in a temporary directory.  The
-  original CWD is saved in ``test.test_support.SAVEDCWD``.  Thanks to Florent
-  Xicluna who helped with the patch.
-
-Build
------
-
-- Issue #3920, #7903: Define _BSD_SOURCE on OpenBSD 4.4 through 4.9.
-
-
-What's New in Python 2.7 alpha 3?
-=================================
-
-*Release date: 2010-02-06*
-
-Core and Builtins
------------------
-
-- Issue #5677: Explicitly forbid write operations on read-only file objects,
-  and read operations on write-only file objects.  On Windows, the system C
-  library would return a bogus result; on Solaris, it was possible to crash the
-  interpreter.  Patch by Stefan Krah.
-
-- Issue #7853: Normalize exceptions before they are passed to a context
-  manager's ``__exit__()`` method.
-
-- Issue #7385: Fix a crash in ``PyMemoryView_FromObject()`` when
-  ``PyObject_GetBuffer()`` fails.  Patch by Florent Xicluna.
-
-- Issue #7819: Check ``sys.call_tracing()`` arguments types.
-
-- Issue #7788: Fix an interpreter crash produced by deleting a list slice with
-  very large step value.
-
-- Issue #7766: Change ``sys.getwindowsversion()`` return value to a named tuple
-  and add the additional members returned in an OSVERSIONINFOEX structure.  The
-  new members are service_pack_major, service_pack_minor, suite_mask, and
-  product_type.
-
-- Issue #7561: Operations on empty bytearrays (such as ``int(bytearray())``)
-  could crash in many places because of the ``PyByteArray_AS_STRING()`` macro
-  returning NULL.  The macro now returns a statically allocated empty string
-  instead.
-
-- Issue #7622: Improve the split(), rsplit(), splitlines() and replace()
-  methods of bytes, bytearray and unicode objects by using a common
-  implementation based on stringlib's fast search.  Patch by Florent Xicluna.
-
-- Issue #7632: Fix various str -> float conversion bugs present in 2.7 alpha 2,
-  including:
-
-  (1) a serious 'wrong output' bug that could occur for long (> 40 digit) input
-      strings,
-  (2) a crash in dtoa.c that occurred in debug builds when parsing certain long
-      numeric strings corresponding to subnormal values,
-  (3) a memory leak for some values large enough to cause overflow, and
-  (4) a number of flaws that could lead to incorrectly rounded results.
-
-- Issue #7319, #7770: Silence ``DeprecationWarning`` by default when the -3
-  option is not used.
-
-- Issue #2335: Backport set literals syntax from Python 3.x.
-
-- Issue #2333: Backport set and dict comprehensions syntax from Python 3.x.
-
-- Issue #1967: Backport dictionary views from Python 3.x.
-
-Library
--------
-
-- Issue #9137: Fix issue in MutableMapping.update, which incorrectly
-  treated keyword arguments called 'self' or 'other' specially.
-
-- Issue #7835: shelve should no longer produce mysterious warnings during
-  interpreter shutdown.
-
-- Issue #2746: Don't escape ampersands and angle brackets ("&", "<", ">") in
-  XML processing instructions and comments.  These raw characters are allowed
-  by the XML specification, and are necessary when outputting e.g.  PHP code in
-  a processing instruction.  Patch by Neil Muller.
-
-- Issue #7869: logging: Improved diagnostic for format-time errors.
-
-- Issue #7868: logging: Added loggerClass attribute to Manager.
-
-- Issue #7851: logging: Clarification on logging configuration files.
-
-- Issue #4772: Raise a ValueError when an unknown Bluetooth protocol is
-  specified, rather than fall through to AF_PACKET (in the ``socket`` module).
-  Also, raise ValueError rather than TypeError when an unknown TIPC address
-  type is specified.  Patch by Brian Curtin.
-
-- logging: Implemented PEP 391.
-
-- Issue #6939: Fix file I/O objects in the `io` module to keep the original
-  file position when calling `truncate()`.  It would previously change the file
-  position to the given argument, which goes against the tradition of
-  ftruncate() and other truncation APIs.  Patch by Pascal Chambon.
-
-- 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 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.
-
-- Issue #7792: Registering non-classes to ABCs raised an obscure error.
-
-- Removed the deprecated functions ``verify()`` and ``vereq()`` from
-  Lib/test/test_support.py.
-
-- Issue #7773: Fix an UnboundLocalError in ``platform.linux_distribution()``
-  when the release file is empty.
-
-- Issue #7748: Since unicode values are supported for some metadata options in
-  Distutils, the DistributionMetadata get_* methods will now return a utf-8
-  encoded string for them.  This ensures that the upload and register commands
-  send the correct values to PyPI without any error.
-
-- Issue #1670765: Prevent ``email.generator.Generator`` from re-wrapping
-  headers in multipart/signed MIME parts, which fixes one of the sources of
-  invalid modifications to such parts by Generator.
-
-- Issue #7701: Fix crash in ``binascii.b2a_uu()`` in debug mode when given a
-  1-byte argument.  Patch by Victor Stinner.
-
-- Issue #3299: Fix possible crash in the _sre module when given bad argument
-  values in debug mode.  Patch by Victor Stinner.
-
-- Issue #7703: Add support for the new buffer API to functions of the binascii
-  module.  Backported from py3k by Florent Xicluna, with some additional tests.
-
-- Issue #2846: Add support for gzip.GzipFile reading zero-padded files.  Patch
-  by Brian Curtin.
-
-- Issue #5827: Make sure that normpath preserves unicode.  Initial patch by
-  Matt Giuca.
-
-- Issue #5372: Drop the reuse of .o files in Distutils' ccompiler (since
-  Extension extra options may change the output without changing the .c file).
-  Initial patch by Collin Winter.
-
-Extension Modules
------------------
-
-- Expat: Fix DoS via XML document with malformed UTF-8 sequences
-  (CVE_2009_3560).
-
-Build
------
-
-- Issue #7632: When Py_USING_MEMORY_DEBUGGER is defined, disable the private
-  memory allocation scheme in dtoa.c and use PyMem_Malloc and PyMem_Free
-  instead.  Also disable caching of powers of 5.
-
-- Issue #7658: Ensure that the new pythonw executable works on OSX 10.4
-
-- Issue #7714: Use ``gcc -dumpversion`` to detect the version of GCC on
-  MacOSX.
-
-- Issue #7661: Allow ctypes to be built from a non-ASCII directory path.
-  Patch by Florent Xicluna.
-
-Tools/Demos
------------
-
-- iobench (a file I/O benchmark) and ccbench (a concurrency benchmark) were
-  added to the ``Tools`` directory.  They were previously living in the
-  sandbox.
-
-Tests
------
-
-- Issue #7728: test_timeout was changed to use ``test_support.bind_port()``
-  instead of a hard coded port.
-
-Documentation
--------------
-
-- Updated "Using Python" documentation to include description of CPython's -J,
-  -U and -X options.
-
-- Updated Python manual page (options -B, -O0, -s, environment variables
-  PYTHONDONTWRITEBYTECODE, PYTHONNOUSERSITE).
-
-
-What's New in Python 2.7 alpha 2?
-=================================
-
-*Release date: 2010-01-09*
-
-Core and Builtins
------------------
-
-- The ``__complex__()`` method is now looked up on the class of instances to
-  make it consistent with other special methods.
-
-- Issue #7462: Implement the stringlib fast search algorithm for the `rfind`,
-  `rindex`, `rsplit` and `rpartition` methods.  Patch by Florent Xicluna.
-
-- Issue #5080: A number of functions and methods previously produced a
-  DeprecationWarning when passed a float argument where an integer was expected.
-  These functions and methods now raise TypeError instead.  The majority of the
-  effects of this change are in the extension modules, but some core functions
-  and methods are affected: notably the 'chr', 'range' and 'xrange' builtins,
-  and many unicode/str methods.
-
-- Issue #7604: Deleting an unset slotted attribute did not raise an
-  AttributeError.
-
-- Issue #7534: Fix handling of IEEE specials (infinities, nans, negative zero)
-  in ** operator.  The behaviour now conforms to that described in C99 Annex F.
-
-- Issue #7579: The msvcrt module now has docstrings for all its functions.
-
-- Issue #7413: Passing '\0' as the separator to datetime.datetime.isoformat()
-  used to drop the time part of the result.
-
-- Issue #1811: Improve accuracy and cross-platform consistency for true division
-  of integers: the result of a/b is now correctly rounded for ints a and b (at
-  least on IEEE 754 platforms), and in particular does not depend on the
-  internal representation of a long.
-
-- Issue #6108: ``unicode(exception)`` and ``str(exception)`` should return the
-  same message when only ``__str__()`` (and not ``__unicode__()``) is overridden
-  in the subclass.
-
-- Issue #6834: Replace the implementation for the 'python' and 'pythonw'
-  executables on OSX.
-
-  These executables now work properly with the arch(1) command: ``arch -ppc
-  python`` will start a universal binary version of python in PPC mode (unlike
-  previous releases).
-
-- Issue #1680159: Unicode coercion during an 'in' operation no longer masks the
-  underlying error when the coercion fails for the left hand operand.
-
-- Issue #7491: Metaclass's __cmp__ method was ignored.
-
-- Issue #7466: Segmentation fault when the garbage collector is called in the
-  middle of populating a tuple.  Patch by Florent Xicluna.
-
-Library
--------
-
-- Issue #6963: Added "maxtasksperchild" argument to ``multiprocessing.Pool``,
-  allowing for a maximum number of tasks within the pool to be completed by the
-  worker before that worker is terminated, and a new one created to replace it.
-
-- Issue #7617: Make sure distutils.unixccompiler.UnixCCompiler recognizes gcc
-  when it has a fully qualified configuration prefix.  Initial patch by
-  Arfrever.
-
-- Issue #7092: Remove py3k warning when importing cPickle.  2to3 handles
-  renaming of `cPickle` to `pickle`.  The warning was annoying since there's no
-  alternative to cPickle if you care about performance.  Patch by Florent
-  Xicluna.
-
-- Issue #7455: Fix possible crash in cPickle on invalid input.  Patch by Victor
-  Stinner.
-
-- Issue #7092: Fix the DeprecationWarnings emitted by the standard library when
-  using the -3 flag.  Patch by Florent Xicluna.
-
-- Issue #7471: Improve the performance of GzipFile's buffering mechanism, and
-  make it implement the ``io.BufferedIOBase`` ABC to allow for further speedups
-  by wrapping it in an ``io.BufferedReader``.  Patch by Nir Aides.
-
-- Issue #3972: ``httplib.HTTPConnection`` now accepts an optional source_address
-  parameter to allow specifying where your connections come from.
-
-- ``socket.create_connection()`` now accepts an optional source_address
-  parameter.
-
-- Issue #5511: ``zipfile.ZipFile`` can now be used as a context manager.
-  Initial patch by Brian Curtin.
-
-- Distutils now correctly identifies the build architecture as "x86_64" when
-  building on OSX 10.6 without "-arch" flags.
-
-- Issue #7556: Distutils' msvc9compiler now opens the MSVC Manifest file in text
-  mode.
-
-- Issue #7552: Removed line feed in the base64 Authorization header in the
-  Distutils upload command to avoid an error when PyPI reads it.  This occurs on
-  long passwords.  Initial patch by JP St. Pierre.
-
-- Issue #7231: urllib2 cannot handle https with proxy requiring auth.  Patch by
-  Tatsuhiro Tsujikawa.
-
-- Issue #7349: Make methods of file objects in the io module accept None as an
-  argument where file-like objects (ie StringIO and BytesIO) accept them to mean
-  the same as passing no argument.
-
-- Issue #7348: ``StringIO.StringIO.readline(-1)`` now acts as if it got no
-  argument like other file objects.
-
-- Issue #7357: tarfile no longer suppresses fatal extraction errors by default.
-
-- Issue #7470: logging: Fix bug in Unicode encoding fallback.
-
-- Issue #5949: Fixed IMAP4_SSL hang when the IMAP server response is missing
-  proper end-of-line termination.
-
-- Issue #7457: Added a read_pkg_file method to
-  ``distutils.dist.DistributionMetadata``.
-
-- Issue #3745: Undo the 2.7a1 change to have hashlib to reject unicode and non
-  buffer API supporting objects as input.  That behavior is for 3.x only.
-
-C-API
------
-
-- Issue #7767: New function ``PyLong_AsLongLongAndOverflow()`` added, analogous
-  to ``PyLong_AsLongAndOverflow()``.
-
-- Issue #5080: The argument parsing functions ``PyArg_ParseTuple()``,
-  ``PyArg_ParseTupleAndKeywords()``, ``PyArg_VaParse()``,
-  ``PyArg_VaParseTupleAndKeywords()`` and ``PyArg_Parse()`` no longer accept
-  float arguments for integer format codes (other than 'L'): previously an
-  attempt to pass a float resulted in a DeprecationWarning; now it gives a
-  TypeError.  For the 'L' format code (which previously had no warning) there is
-  now a DeprecationWarning.
-
-- Issue #7033: Function ``PyErr_NewExceptionWithDoc()`` added.
-
-Build
------
-
-- Issue #6491: Allow --with-dbmliborder to specify that no dbms will be built.
-
-- Issue #6943: Use pkg-config to find the libffi headers when the
-  ``--with-system-ffi`` flag is used.
-
-- Issue #7609: Add a ``--with-system-expat`` option that causes the system's
-  expat library to be used for the pyexpat module instead of the one included
-  with Python.
-
-- Issue #7589: Only build the nis module when the correct header files are
-  found.
-
-- Switch to OpenSSL 0.9.8l and sqlite 3.6.21 on Windows.
-
-- Issue #7541: when using ``python-config`` with a framework install the
-  compiler might use the wrong library.
-
-Tests
------
-
-- Issue #7376: Instead of running a self-test (which was failing) when called
-  with no arguments, doctest.py now gives a usage message.
-
-- Issue #7396: Fix regrtest -s, which was broken by the -j enhancement.
-
-- Issue #7498: test_multiprocessing now uses test_support.find_unused_port
-  instead of a hardcoded port number in test_rapid_restart.
-
-
-What's New in Python 2.7 alpha 1
-================================
-
-*Release date: 2009-12-05*
-
-Core and Builtins
------------------
-
-- Issue #7419: ``locale.setlocale()`` could crash the interpreter on Windows
-  when called with invalid values.
-
-- Issue #3382: 'F' formatting for float and complex now convert the result to
-  upper case.  This only affects 'inf' and 'nan', since 'f' no longer converts
-  to 'g' for large values.
-
-- Remove switch from "%f" formatting to "%g" formatting for floats larger than
-  1e50 in absolute value.
-
-- Remove restrictions on precision when formatting floats.  E.g., "%.120g" %
-  1e-100 used to raise OverflowError, but now gives the requested 120
-  significant digits instead.
-
-- Add Py3k warnings for parameter names in parentheses.
-
-- Issue #7362: Give a proper error message for ``def f((x)=3): pass``.
-
-- Issue #7085: Fix crash when importing some extensions in a thread on MacOSX
-  10.6.
-
-- Issue #7117: ``repr(x)`` for a float x returns a result based on the shortest
-  decimal string that's guaranteed to round back to x under correct rounding
-  (with round-half-to-even rounding mode).  Previously it gave a string based on
-  rounding x to 17 decimal digits.  repr(x) for a complex number behaves
-  similarly.  On platforms where the correctly-rounded strtod and dtoa code is
-  not supported (see below), repr is unchanged.
-
-- Issue #7117: On almost all platforms: float-to-string and string-to-float
-  conversions within Python are now correctly rounded.  Places these conversions
-  occur include: str for floats and complex numbers; the float and complex
-  constructors; old-style and new-style numeric formatting; serialization and
-  deserialization of floats and complex numbers using marshal, pickle and json;
-  parsing of float and imaginary literals in Python code; Decimal-to-float
-  conversion.
-
-  The conversions use a Python-adapted version of David Gay's well-known dtoa.c,
-  providing correctly-rounded strtod and dtoa C functions.  This code is
-  supported on Windows, and on Unix-like platforms using gcc, icc or suncc as
-  the C compiler.  There may be a small number of platforms on which correct
-  operation of this code cannot be guaranteed, so the code is not used: notably,
-  this applies to platforms where the C double format is not IEEE 754 binary64,
-  and to platforms on x86 hardware where the x87 FPU is set to 64-bit precision
-  and Python's configure script is unable to determine how to change the FPU
-  precision.  On these platforms conversions use the platform strtod and dtoa,
-  as before.
-
-- Issue #7117: Backport round implementation from Python 3.x.  ``round()`` now
-  uses the correctly-rounded string <-> float conversions described above (when
-  available), and so produces correctly rounded results that will display nicely
-  under the float repr.  There are two related small changes: (1) round now
-  accepts any class with an ``__index__()`` method for its second argument (but
-  no longer accepts floats for the second argument), and (2) an excessively
-  large second integer argument (e.g., ``round(1.234, 10**100)``) no longer
-  raises an exception.
-
-- Issue #1757126: Fix the cyrillic-asian alias for the ptcp154 encoding.
-
-- Fix several issues with ``compile()``.  The input can now contain Windows and
-  Mac newlines and is no longer required to end in a newline.
-
-- Remove length limitation when constructing a complex number from a unicode
-  string.
-
-- Issue #7244: ``itertools.izip_longest()`` no longer ignores exceptions raised
-  during the formation of an output tuple.
-
-- Issue #1087418: Boost performance of bitwise operations for longs.
-
-- Issue #1722344: ``threading._shutdown()`` is now called in ``Py_Finalize()``,
-  which fixes the problem of some exceptions being thrown at shutdown when the
-  interpreter is killed.  Patch by Adam Olsen.
-
-- Issue #7168: Document ``PyFloat_AsString()`` and ``PyFloat_AsReprString()``,
-  and note that they are unsafe and deprecated.
-
-- Issue #7120: logging: Remove import of multiprocessing which is causing crash
-  in GAE.
-
-- Issue #7140: The ``__dict__`` of a module should not be cleared unless the
-  module is the only object holding a reference to it.
-
-- Issue #1754094: Improve the stack depth calculation in the compiler.  There
-  should be no other effect than a small decrease in memory use.  Patch by
-  Christopher Tur Lesniewski-Laas.
-
-- Issue #7084: Fix a (very unlikely) crash when printing a list from one thread,
-  and mutating it from another one.  Patch by Scott Dial.
-
-- Issue #1571184: The Unicode database contains properties for more characters.
-  The tables for code points representing numeric values, white spaces or line
-  breaks are now generated from the official Unicode Character Database files,
-  and include information from the Unihan.txt file.
-
-- Issue #7050: Fix a SystemError when trying to use unpacking and augmented
-  assignment.
-
-- Issue #5329: Fix ``os.popen*`` regression from 2.5 with commands as a sequence
-  running through the shell.  Patch by Jean-Paul Calderone and Jani Hakala.
-
-- Issue #7019: Raise ValueError when unmarshalling bad long data, instead of
-  producing internally inconsistent Python longs.
-
-- Issue #6990: Fix ``threading.local`` subclasses leaving old state around after
-  a reference cycle GC which could be recycled by new locals.
-
-- Issue #6300: unicode.encode, unicode.decode, str.decode, and str.encode now
-  take keyword arguments.
-
-- Issue #6922: Fix an infinite loop when trying to decode an invalid UTF-32
-  stream with a non-raising error handler like "replace" or "ignore".
-
-- Issue #6713: Improve performance of base 10 int -> string and long -> string
-  conversions.
-
-- Issue #1590864: Fix potential deadlock when mixing threads and fork().
-
-- Issue #6844: Do not emit DeprecationWarnings when accessing a "message"
-  attribute on exceptions that was set explicitly.
-
-- Issue #6846: Fix bug where bytearray.pop() returns negative integers.
-
-- ``classmethod()`` no longer checks if its argument is callable.
-
-- Issue #6750: A text file opened with ``io.open()`` could duplicate its output
-  when writing from multiple threads at the same time.
-
-- Issue #6704: Improve the col_offset in AST for "for" statements with a target
-  of tuple unpacking.
-
-- Issue #6707: ``dir()`` on an uninitialized module caused a crash.
-
-- Issue #6540: Fixed crash for ``bytearray.translate()`` with invalid parameters.
-
-- Issue #6573: ``set.union()`` stopped processing inputs if an instance of self
-  occurred in the argument chain.
-
-- Issue #1616979: Added the cp720 (Arabic DOS) encoding.
-
-- Issue #6070: On posix platforms import no longer copies the execute bit from
-  the .py file to the .pyc file if it is set.  Patch by Marco N.
-
-- Issue #4618: When unicode arguments are passed to ``print()``, the default
-  separator and end should be unicode also.
-
-- Issue #6119: Fixed an incorrect Py3k warning about order comparisons of
-  built-in functions and methods.
-
-- Issue #6347: Include inttypes.h as well as stdint.h in pyport.h.  This fixes a
-  build failure on HP-UX: int32_t and uint32_t are defined in inttypes.h instead
-  of stdint.h on that platform.
-
-- Issue #4856: Remove checks for win NT.
-
-- Issue #2016: Fixed a crash in a corner case where the dictionary of keyword
-  arguments could be modified during the function call setup.
-
-- Removed the ipaddr module.
-
-- Issue #6329: Fixed iteration for memoryview objects (it was being blocked
-  because it wasn't recognized as a sequence).
-
-- Issue #6289: Encoding errors from ``compile()`` were being masked.
-
-- When no module is given in a relative import, the module field of the
-  ImportFrom AST node is now None instead of an empty string.
-
-- Assignment to None using import statements now raises a SyntaxError.
-
-- Issue #4547: When debugging a very large function, it was not always possible
-  to update the lineno attribute of the current frame.
-
-- Issue #5330: C functions called with keyword arguments were not reported by
-  the various profiling modules (profile, cProfile).  Patch by Hagen Fürstenau.
-
-- Issue #5982: staticmethod and classmethod now expose the wrapped function with
-  ``__func__``.
-
-- Added support for multiple context managers in the same with-statement.
-  Deprecated ``contextlib.nested()`` which is no longer needed.
-
-- Issue #6101: A new opcode, SETUP_WITH, has been added to speed up the with
-  statement and correctly lookup the __enter__ and __exit__ special methods.
-
-- Issue #5829: complex("1e500") no longer raises OverflowError.  This makes it
-  consistent with float("1e500") and interpretation of real and imaginary
-  literals.
-
-- Issue #3527: Removed Py_WIN_WIDE_FILENAMES which is not used any more.
-
-- ``__instancecheck__()`` and ``__subclasscheck__()`` are now completely ignored
-  on classic classes and instances.
-
-- Issue #5994: The marshal module now has docstrings.
-
-- Issue #5981: Fix three minor inf/nan issues in float.fromhex:
-
-  (1) inf and nan strings with trailing whitespace were incorrectly rejected;
-  (2) parsing of strings representing infinities and nans was locale aware; and
-  (3) the interpretation of fromhex('-nan') didn't match that of float('-nan').
-
-- Issue #5920: For ``float.__format__()``, change the behavior with the empty
-  presentation type (that is, not one of 'e', 'f', 'g', or 'n') to be like 'g'
-  but with at least one decimal point and with a default precision
-  of 12. Previously, the behavior the same but with a default precision of 6.
-  This more closely matches ``str()``, and reduces surprises when adding
-  alignment flags to the empty presentation type. This also affects the new
-  complex.__format__ in the same way.
-
-- Issue #5890: In subclasses of 'property' the __doc__ attribute was shadowed by
-  classtype's, even if it was None.  property now inserts the __doc__ into the
-  subclass instance __dict__.
-
-- Issue #4426: The UTF-7 decoder was too strict and didn't accept some legal
-  sequences.  Patch by Nick Barnes and Victor Stinner.
-
-- Issue #1588: Add complex.__format__. For example, ``format(complex(1, 2./3),
-  '.5')`` now produces a sensible result.
-
-- Issue #5864: Fix empty format code formatting for floats so that it never
-  gives more than the requested number of significant digits.
-
-- Issue #5793: Rationalize isdigit / isalpha / tolower, etc. Includes new
-  Py_ISDIGIT / Py_ISALPHA / Py_TOLOWER, etc. in pctypes.h.
-
-- Issue #4971: Fix titlecase for characters that are their own titlecase, but
-  not their own uppercase.
-
-- Issue #5835: Deprecate PyOS_ascii_formatd and replace it with
-  _PyOS_double_to_string or PyOS_double_to_string.
-
-- Issue #5283: Setting __class__ in __del__ caused a segfault.
-
-- Issue #5816: ``complex(repr(z))`` now recovers z exactly, even when z involves
-  nans, infs or negative zeros.
-
-- Implement PEP 378, Format Specifier for Thousands Separator, for floats, ints,
-  and longs.
-
-- Issue #5515: 'n' formatting for ints, longs, and floats handles leading zero
-  formatting poorly.
-
-- Issue #5772: For float.__format__, don't add a trailing ".0" if we're using no
-  type code and we have an exponent.
-
-- Issue #3166: Make long -> float (and int -> float) conversions correctly
-  rounded.
-
-- Issue #5787: ``object.__getattribute__(some_type, "__bases__")`` segfaulted on
-  some built-in types.
-
-- Issue #1869: Fix a couple of minor round() issues.  ``round(5e15+1)`` was
-  giving 5e15+2; ``round(-0.0)`` was losing the sign of the zero.
-
-- Issue #5759: float() didn't call __float__ on str subclasses.
-
-- Issue #5704: The "-3" command-line option now implies "-t".
-
-- Issue #2170: Refactored ``xml.dom.minidom.normalize``, increasing both its
-  clarity and its speed.
-
-- Issue #2396: The memoryview object was backported from Python 3.1.
-
-- Fix a problem in PyErr_NormalizeException that leads to "undetected errors"
-  when hitting the recursion limit under certain circumstances.
-
-- Issue #1665206: Remove the last eager import in _warnings.c and make it lazy.
-
-- Issue #4865: On MacOSX /Library/Python/2.7/site-packages is added to the end
-  sys.path, for compatibility with the system install of Python.
-
-- Issue #4688: Add a heuristic so that tuples and dicts containing only
-  untrackable objects are not tracked by the garbage collector. This can reduce
-  the size of collections and therefore the garbage collection overhead on
-  long-running programs, depending on their particular use of datatypes.
-
-- Issue #5512: Rewrite PyLong long division algorithm (x_divrem) to improve its
-  performance.  Long divisions and remainder operations are now between 50% and
-  150% faster.
-
-- Issue #4258: Make it possible to use base 2**30 instead of base 2**15 for the
-  internal representation of integers, for performance reasons.  Base 2**30 is
-  enabled by default on 64-bit machines.  Add --enable-big-digits option to
-  configure, which overrides the default.  Add sys.long_info structseq to
-  provide information about the internal format.
-
-- Issue #4034: Fix weird attribute error messages of the traceback object. (As a
-  result traceback.__members__ no longer exists.)
-
-- Issue #4474: PyUnicode_FromWideChar now converts characters outside the BMP to
-  surrogate pairs, on systems with sizeof(wchar_t) == 4 and sizeof(Py_UNICODE)
-  == 2.
-
-- Issue #5237: Allow auto-numbered fields in str.format(). For example: ``'{}
-  {}'.format(1, 2) == '1 2'``.
-
-- Issue #3652: Make the 'line' argument for ``warnings.showwarning()`` a
-  requirement.  Means the DeprecationWarning from Python 2.6 can go away.
-
-- Issue #5247: Improve error message when unknown format codes are used when
-  using ``str.format()`` with str, unicode, long, int, and float arguments.
-
-- Running Python with the -3 option now also warns about classic division for
-  ints and longs.
-
-- Issue #5260: Long integers now consume less memory: average saving is 2 bytes
-  per long on a 32-bit system and 6 bytes per long on a 64-bit system.
-
-- Issue #5186: Reduce hash collisions for objects with no __hash__ method by
-  rotating the object pointer by 4 bits to the right.
-
-- Issue #4575: Fix Py_IS_INFINITY macro to work correctly on x87 FPUs: it now
-  forces its argument to double before testing for infinity.
-
-- Issue #4978: Passing keyword arguments as unicode strings is now allowed.
-
-- Issue #1242657: the __len__() and __length_hint__() calls in several tools
-  were suppressing all exceptions.  These include list(), filter(), map(),
-  zip(), and bytearray().
-
-- os.ftruncate raises OSErrors instead of IOErrors for consistency with other os
-  functions.
-
-- Issue #4991: Passing invalid file descriptors to io.FileIO now raises an
-  OSError.
-
-- Issue #4807: Port the _winreg module to Windows CE.
-
-- Issue #4935: The overflow checking code in the expandtabs() method common to
-  str, bytes and bytearray could be optimized away by the compiler, letting the
-  interpreter segfault instead of raising an error.
-
-- Issue #3720: Fix a crash when an iterator modifies its class and removes its
-  __next__ method.
-
-- Issue #4893: Use NT threading on CE.
-
-- Issue #4915: Port sysmodule to Windows CE.
-
-- Issue #4074: Change the criteria for doing a full garbage collection (i.e.
-  collecting the oldest generation) so that allocating lots of objects without
-  destroying them does not show quadratic performance. Based on a proposal by
-  Martin von Löwis at
-  http://mail.python.org/pipermail/python-dev/2008-June/080579.html.
-
-- Issue #4850: Change COUNT_ALLOCS variables to Py_ssize_t.
-
-- Issue #1180193: When importing a module from a .pyc (or .pyo) file with an
-  existing .py counterpart, override the co_filename attributes of all code
-  objects if the original filename is obsolete (which can happen if the file has
-  been renamed, moved, or if it is accessed through different paths).  Patch by
-  Ziga Seilnacht and Jean-Paul Calderone.
-
-- Issue #4075: Use ``OutputDebugStringW()`` in Py_FatalError.
-
-- Issue #4797: IOError.filename was not set when _fileio.FileIO failed to open
-  file with `str' filename on Windows.
-
-- Issue #3680: Reference cycles created through a dict, set or deque iterator
-  did not get collected.
-
-- Issue #4701: PyObject_Hash now implicitly calls PyType_Ready on types where
-  the tp_hash and tp_dict slots are both NULL.
-
-- Issue #4764: With io.open, IOError.filename is set when trying to open a
-  directory on POSIX systems.
-
-- Issue #4764: IOError.filename is set when trying to open a directory on POSIX
-  systems.
-
-- Issue #4759: None is now allowed as the first argument of
-  ``bytearray.translate()``.  It was always allowed for ``bytes.translate()``.
-
-- Added test case to ensure attempts to read from a file opened for writing
-  fail.
-
-- Issue #2467: gc.DEBUG_STATS reported invalid elapsed times. Also, always print
-  elapsed times, not only when some objects are uncollectable/unreachable.
-  Original patch by Neil Schemenauer.
-
-- Issue #3439: Add a bit_length method to int and long.
-
-- Issue #2183: Simplify and optimize bytecode for list comprehensions.  Original
-  patch by Neal Norwitz.
-
-- Issue #4597: Fixed exception handling when the __exit__ function of a context
-  manager returns a value that cannot be converted to a bool.
-
-- Issue #4597: Fixed several opcodes that weren't always propagating exceptions.
-
-- Issue #4445: Replace ``sizeof(PyStringObject)`` with
-  ``offsetof(PyStringObject, ob_sval) + 1`` when allocating memory for str
-  instances.  On a typical machine this saves 3 bytes of memory (on average) per
-  string allocation.
-
-- Issue #3996: On Windows, the PyOS_CheckStack function would cause the
-  interpreter to abort ("Fatal Python error: Could not reset the stack!")
-  instead of throwing a MemoryError.
-
-- Issue #3689: The list reversed iterator now supports __length_hint__ instead
-  of __len__.  Behavior now matches other reversed iterators.
-
-- Issue #4367: Python would segfault during compiling when the unicodedata
-  module couldn't be imported and \N escapes were present.
-
-- Issue #4233: Changed semantic of ``_fileio.FileIO``'s ``close()`` method on
-  file objects with closefd=False. The file descriptor is still kept open but
-  the file object behaves like a closed file. The ``FileIO`` object also got a
-  new readonly attribute ``closefd``.
-
-- Issue #4348: Some bytearray methods returned that didn't cause any change to
-  the bytearray, returned the same bytearray instead of a copy.
-
-- Issue #4317: Fixed a crash in the ``imageop.rgb2rgb8()`` function.
-
-- Issue #4230: If ``__getattr__`` is a descriptor, it now functions correctly.
-
-- Issue #4048: The parser module now correctly validates relative imports.
-
-- Issue #4225: ``from __future__ import unicode_literals`` didn't work in an
-  exec statement.
-
-- Issue #4176: Fixed a crash when pickling an object which ``__reduce__`` method
-  does not return iterators for the 4th and 5th items.
-
-- Issue #4209: Enabling unicode_literals and the print_function in the same
-  __future__ import didn't work.
-
-- Using ``nonlocal`` as a variable name will now raise a Py3k SyntaxWarning
-  because it is a reserved word in 3.x.
-
-- On windows, ``os.chdir()`` given unicode was not working if
-  GetCurrentDirectoryW returned a path longer than MAX_PATH. (But It's doubtful
-  this code path is really executed because I cannot move to such directory on
-  win2k)
-
-- Issue #4069: When ``set.remove(element)`` is used with a set element, the
-  element is temporarily replaced with an equivalent frozenset.  But the
-  eventual KeyError would always report the empty ``frozenset()`` as the missing
-  key.  Now it correctly refers to the initial element.
-
-- Issue #4509: Various issues surrounding resize of bytearray objects to which
-  there are buffer exports.
-
-- Issue #4748: Lambda generators no longer return a value.
-
-- Issue #3582: Use native TLS functions on Windows
-
-- The re.sub(), re.subn() and re.split() functions now accept a flags parameter.
-
-- Issue #3845: In PyRun_SimpleFileExFlags avoid invalid memory access with short
-  file names.
-
-- Issue #1113244: Py_XINCREF, Py_DECREF, Py_XDECREF: Add `do { ... } while (0)'
-  to avoid compiler warnings.
-
-- Issue #5705: os.setuid() would not accept values > 2**31-1 but pwd.getpwnam()
-  returned them on 64bit platforms.
-
-- Issue #5108: Handle %s like %S and %R in PyUnicode_FromFormatV(): Call
-  PyUnicode_DecodeUTF8() once, remember the result and output it in a second
-  step. This avoids problems with counting UTF-8 bytes that ignores the effect
-  of using the replace error handler in PyUnicode_DecodeUTF8().
-
-- Issue #3739: The unicode-internal encoder now reports the number of characters
-  consumed like any other encoder (instead of the number of bytes).
-
-- Issue #2422: When compiled with the ``--with-valgrind`` option, the pymalloc
-  allocator will be automatically disabled when running under Valgrind.  This
-  gives improved memory leak detection when running under Valgrind, while taking
-  advantage of pymalloc at other times.
-
-Library
--------
-
-- Add count() and reverse() methods to collections.deque().
-
-- Fix variations of extending deques:  d.extend(d)  d.extendleft(d)  d+=d
-
-- Issue #6986: Fix crash in the JSON C accelerator when called with the wrong
-  parameter types.  Patch by Victor Stinner.
-
-- logging: Added optional "secure" parameter to SMTPHandler, to enable use of
-  TLS with authentication credentials.
-
-- Issue #1923: Fixed the removal of meaningful spaces when PKG-INFO is generated
-  in Distutils. Patch by Stephen Emslie.
-
-- Issue #4120: Drop reference to CRT from manifest when building extensions with
-  msvc9compiler.
-
-- Issue #7333: The ``posix`` module gains an ``initgroups()`` function providing
-  access to the initgroups(3) C library call on Unix systems which implement it.
-  Patch by Jean-Paul Calderone.
-
-- Issue #7408: Fixed distutils.tests.sdist so it doesn't check for group
-  ownership when the group is not forced, because the group may be different
-  from the user's group and inherit from its container when the test is run.
-
-- Issue #1515: Enable use of deepcopy() with instance methods.  Patch by Robert
-  Collins.
-
-- Issue #7403: logging: Fixed possible race condition in lock creation.
-
-- Issue #6845: Add restart support for binary upload in ftplib.  The
-  ``storbinary()`` method of FTP and FTP_TLS objects gains an optional "rest"
-  argument.  Patch by Pablo Mouzo.
-
-- Issue #5788: ``datetime.timedelta`` objects get a new ``total_seconds()``
-  method returning the total number of seconds in the duration.  Patch by Brian
-  Quinlan.
-
-- Issue #6615: logging: Used weakrefs in internal handler list.
-
-- Issue #1488943: ``difflib.Differ`` doesn't always add hints for tab
-  characters.
-
-- Issue #6123: tarfile now opens empty archives correctly and consistently
-  raises ReadError on empty files.
-
-- Issue #7354: distutils.tests.test_msvc9compiler - dragfullwindows can be 2.
-
-- Issue #5037: Proxy the __unicode__ special method to __unicode__ instead of
-  __str__.
-
-- Issue #7341: Close the internal file object in the TarFile constructor in case
-  of an error.
-
-- Issue #7293: ``distutils.test_msvc9compiler`` is fixed to work on any fresh
-  Windows box.  Help provided by David Bolen.
-
-- Issue #7328: pydoc no longer corrupts sys.path when run with the '-m' switch.
-
-- Issue #2054: ftplib now provides an FTP_TLS class to do secure FTP using TLS
-  or SSL.  Patch by Giampaolo Rodola'.
-
-- Issue #4969: The mimetypes module now reads the MIME database from the
-  registry under Windows.  Patch by Gabriel Genellina.
-
-- Issue #6816: runpy now provides a run_path function that allows Python code to
-  execute file paths that refer to source or compiled Python files as well as
-  zipfiles, directories and other valid sys.path entries that contain a
-  __main__.py file. This allows applications that run other Python scripts to
-  support the same flexibility as the CPython command line itself.
-
-- Issue #7318: multiprocessing now uses a timeout when it fails to establish a
-  connection with another process, rather than looping endlessly. The default
-  timeout is 20 seconds, which should be amply sufficient for local connections.
-
-- Issue #7197: Allow unittest.TextTestRunner objects to be pickled and
-  unpickled.  This fixes crashes under Windows when trying to run
-  test_multiprocessing in verbose mode.
-
-- Issue #7282: Fix a memory leak when an RLock was used in a thread other than
-  those started through ``threading.Thread`` (for example, using
-  ``thread.start_new_thread()``.
-
-- Issue #7264: Fix a possible deadlock when deallocating thread-local objects
-  which are part of a reference cycle.
-
-- Issue #7211: Allow 64-bit values for the ``ident`` and ``data`` fields of
-  kevent objects on 64-bit systems.  Patch by Michael Broghton.
-
-- Issue #6896: ``mailbox.Maildir`` now invalidates its internal cache each time
-  a modification is done through it.  This fixes inconsistencies and test
-  failures on systems with slightly bogus mtime behaviour.
-
-- Issue #7246 & Issue #7208: getpass now properly flushes input before reading
-  from stdin so that existing input does not confuse it and lead to incorrect
-  entry or an IOError.  It also properly flushes it afterwards to avoid the
-  terminal echoing the input afterwards on OSes such as Solaris.
-
-- Issue #7233: Fix a number of two-argument Decimal methods to make sure that
-  they accept an int or long as the second argument.  Also fix buggy handling of
-  large arguments (those with coefficient longer than the current precision) in
-  shift and rotate.
-
-- Issue #4750: Store the basename of the original filename in the gzip FNAME
-  header as required by RFC 1952.
-
-- Issue #1180: Added a new global option to ignore ~/.pydistutils.cfg in
-  Distutils.
-
-- Issue #7218: Fix test_site for win32, the directory comparison was done with
-  an uppercase.
-
-- Issue #7205: Fix a possible deadlock when using a BZ2File object from several
-  threads at once.
-
-- Issue #7071: byte-compilation in Distutils is now done with respect to
-  sys.dont_write_bytecode.
-
-- Issue #7066: archive_util.make_archive now restores the cwd if an error is
-  raised. Initial patch by Ezio Melotti.
-
-- Issue #6218: io.StringIO and io.BytesIO instances are now picklable with
-  protocol 2.
-
-- Issue #7077: logging: SysLogHandler now treats Unicode as per RFC 5424.
-
-- Issue #7099: Decimal.is_normal now returns True for numbers with exponent
-  larger than emax.
-
-- Issue #5833: Fix extra space character in readline completion with the GNU
-  readline library version 6.0.
-
-- Issue #7133: SSL objects now support the new buffer API.
-
-- Issue #7149: urllib fails on OSX in the proxy detection code.
-
-- Issue #7069: Make inspect.isabstract() return a boolean.
-
-- Add support to the ``ihooks`` module for relative imports.
-
-- Issue #6894: Fixed the issue urllib2 doesn't respect "no_proxy" environment.
-
-- Issue #7086: Added TCP support to SysLogHandler, and tidied up some
-  anachronisms in the code which were a relic of 1.5.2 compatibility.
-
-- Issue #7082: When falling back to the MIME 'name' parameter, the correct place
-  to look for it is the Content-Type header.
-
-- Issue #7048: Force Decimal.logb to round its result when that result is too
-  large to fit in the current precision.
-
-- Issue #6516: Added owner/group support when creating tar archives in
-  Distutils.
-
-- Issue #7031: Add ``TestCase.assert(Not)IsInstance()`` methods.
-
-- Issue #6790: Make it possible again to pass an ``array.array`` to
-  ``httplib.HTTPConnection.send``.  Patch by Kirk McDonald.
-
-- Issue #6236, #6348: Fix various failures in the `io` module under AIX and
-  other platforms, when using a non-gcc compiler.  Patch by egreen.
-
-- Issue #6954: Fixed crash when using DISTUTILS_DEBUG flag in Distutils.
-
-- Issue #6851: Fix urllib.urlopen crash on secondairy threads on OSX 10.6
-
-- Issue #4606: Passing 'None' if ctypes argtype is set to POINTER(...) does now
-  always result in NULL.
-
-- Issue #5042: ctypes Structure sub-subclass does now initialize correctly with
-  base class positional arguments.
-
-- Issue #6938: Fix a TypeError in string formatting of a multiprocessing debug
-  message.
-
-- Issue #6635: Fix profiler printing usage message.
-
-- Issue #6856: Add a filter keyword argument to TarFile.add().
-
-- Issue #6163: Fixed HP-UX runtime library dir options in
-  distutils.unixcompiler.  Initial patch by Sridhar Ratnakumar and Michael
-  Haubenwallner.
-
-- Issue #6857: Default format() alignment should be '>' for Decimal instances.
-
-- Issue #6795: int(Decimal('nan')) now raises ValueError instead of returning
-  NaN or raising InvalidContext.  Also, fix infinite recursion in
-  long(Decimal('nan')).
-
-- Issue #6850: Fix bug in Decimal._parse_format_specifier for formats with no
-  type specifier.
-
-- Issue #4937: plat-mac/bundlebuilder refers to non-existing version.plist.
-
-- Issue #6838: Use a list to accumulate the value instead of repeatedly
-  concatenating strings in httplib's HTTPResponse._read_chunked providing a
-  significant speed increase when downloading large files servend with a
-  Transfer-Encoding of 'chunked'.
-
-- Issue #5275: In Cookie's Cookie.load(), properly handle non-string arguments
-  as documented.
-
-- Issue #2666: Handle BROWSER environment variable properly for unknown browser
-  names in the webbrowser module.
-
-- Issue #6054: Do not normalize stored pathnames in tarfile.
-
-- Issue #6794: Fix Decimal.compare_total and Decimal.compare_total_mag: NaN
-  payloads are now ordered by integer value rather than lexicographically.
-
-- Issue #6693: New functions in site.py to get user/global site packages paths.
-
-- The thread.lock type now supports weak references.
-
-- Issue #1356969: Add missing info methods in Tix.HList.
-
-- Issue #1522587: New constants and methods for the Tix.Grid widget.
-
-- Issue #1250469: Fix the return value of Tix.PanedWindow.panes.
-
-- Issue #1119673: Do not override Tkinter.Text methods when creating a
-  ScrolledText.
-
-- Issue #6665: Fix fnmatch to properly match filenames with newlines in them.
-
-- Issue #1135: Add the XView and YView mix-ins to avoid duplicating the xview*
-  and yview* methods.
-
-- Issue #6629: Fix a data corruption issue in the new `io` package, which could
-  occur when writing to a BufferedRandom object (e.g. a file opened in "rb+" or
-  "wb+" mode) after having buffered a certain amount of data for reading. This
-  bug was not present in the pure Python implementation.
-
-- Issue #4660: If a multiprocessing.JoinableQueue.put() was preempted, it was
-  possible to get a spurious 'task_done() called too many times' error.
-
-- Issue #1628205: Socket file objects returned by socket.socket.makefile() now
-  properly handles EINTR within the read, readline, write & flush methods.  The
-  socket.sendall() method now properly handles interrupted system calls.
-
-- Issue #6595: The Decimal constructor now allows arbitrary Unicode decimal
-  digits in input, as recommended by the standard.  Previously it was restricted
-  to accepting [0-9].
-
-- Issue #6511: ZipFile now raises BadZipfile (instead of an IOError) when
-  opening an empty or very small file.
-
-- Issue #6553: Fixed a crash in cPickle.load(), when given a file-like object
-  containing incomplete data.
-
-- Issue #6545: Removed assert statements in distutils.Extension, so the behavior
-  is similar when used with -O.
-
-- unittest has been split up into a package.  All old names should still work.
-
-- Issue #6431: Make Fraction type return NotImplemented when it doesn't know how
-  to handle a comparison without loss of precision.  Also add correct handling
-  of infinities and nans for comparisons with float.
-
-- Issue #6415: Fixed warnings.warn segfault on bad formatted string.
-
-- Issue #6466: Now distutils.cygwinccompiler and distutils.emxccompiler uses the
-  same refactored function to get gcc/ld/dllwrap versions numbers.  It's
-  ``distutils.util.get_compiler_versions()``.  Added deprecation warnings for
-  the obsolete get_versions() functions.
-
-- Issue #6433: Fixed issues with multiprocessing.pool.map hanging on empty list.
-
-- Issue #6314: logging: Extra checks on the "level" argument in more places.
-
-- Issue #2622: Fixed an ImportError when importing email.messsage from a
-  standalone application built with py2exe or py2app.
-
-- Issue #6455: Fixed test_build_ext under win32.
-
-- Issue #6377: Enabled the compiler option, and deprecate its usage as an
-  attribute.
-
-- Issue #6413: Fixed the log level in distutils.dist for announce.
-
-- Issue #3392: The subprocess communicate() method no longer fails in select()
-  when file descriptors are large; communicate() now uses poll() when possible.
-
-- Issue #6403: Fixed package path usage in build_ext.
-
-- Issues #5155, #5313, #5331: multiprocessing.Process._bootstrap was
-  unconditionally calling "os.close(sys.stdin.fileno())" resulting in file
-  descriptor errors.
-
-- Issue #6365: Distutils build_ext inplace mode was copying the compiled
-  extension in a subdirectory if the extension name had dots.
-
-- Issue #6344: Fixed a crash of mmap.read() when passed a negative argument.
-
-- Issue #5230: pydoc would report no documentation found if a module generated a
-  'not found' import error when loaded; it now reports the import errors.
-  Thanks to Lucas Prado Melo for initial fix and collaboration on the tests.
-
-- Issue #6314: ``logging.basicConfig()`` performs extra checks on the "level"
-  argument.
-
-- Issue #6164: Added an AIX specific linker argument in Distutils unixcompiler.
-  Original patch by Sridhar Ratnakumar.
-
-- Issue #6274: Fixed possible file descriptors leak in subprocess.py.
-
-- Issue #6189: Restored compatibility of subprocess.py with Python 2.2.
-
-- Issue #6287: Added the license field in Distutils documentation.
-
-- Issue #6286: Now Distutils upload command is based on urllib2 instead of
-  httplib, allowing the usage of http_proxy.
-
-- Issue #6271: mmap tried to close invalid file handle (-1) for anonymous maps
-  on Unix.
-
-- Issue #6215: All bug fixes and enhancements from the Python 3.1 io library
-  (including the fast C implementation) have been backported to the standard
-  ``io`` module.
-
-- Issue #6258: Support AMD64 in bdist_msi.
-
-- Issue #6252: Fixed bug in next rollover time computation in
-  TimedRotatingFileHandler.
-
-- Issue #6263: Fixed syntax error in distutils.cygwincompiler.
-
-- Issue #5201: distutils.sysconfig.parse_makefile() now understands ``$$`` in
-  Makefiles.  This prevents compile errors when using syntax like:
-  ``LDFLAGS='-rpath=\$$LIB:/some/other/path'``.  Patch by Floris Bruynooghe.
-
-- Issue #5767: Removed sgmlop support from xmlrpclib.
-
-- Issue #6131: test_modulefinder leaked when run after test_distutils.  Patch by
-  Hirokazu Yamamoto.
-
-- Issue #6048: Now Distutils uses the tarfile module in archive_util.
-
-- Issue #6121: pydoc now ignores leading and trailing spaces in the argument to
-  the 'help' function.
-
-- In unittest, using a skipping decorator on a class is now equivalent to
-  skipping every test on the class.  The ClassTestSuite class has been removed.
-
-- Issue #6050: Don't fail extracting a directory from a zipfile if the directory
-  already exists.
-
-- Issue #5311: bdist_msi can now build packages that do not depend on a specific
-  Python version.
-
-- Issue #1309352: fcntl now converts its third arguments to a C `long` rather
-  than an int, which makes some operations possible under 64-bit Linux (e.g.
-  DN_MULTISHOT with F_NOTIFY).
-
-- Issue #1424152: Fix for httplib, urllib2 to support SSL while working through
-  proxy. Original patch by Christopher Li, changes made by Senthil Kumaran.
-
-- Issue #1983: Fix functions taking or returning a process identifier to use the
-  dedicated C type ``pid_t`` instead of a C ``int``.  Some platforms have a
-  process identifier type wider than the standard C integer type.
-
-- Issue #4066: smtplib.SMTP_SSL._get_socket now correctly returns the socket.
-  Patch by Farhan Ahmad, test by Marcin Bachry.
-
-- Issue #6062: In distutils, fixed the package option of build_ext.  Feedback
-  and tests on pywin32 by Tim Golden.
-
-- Issue #6053: Fixed distutils tests on win32.  Patch by Hirokazu Yamamoto.
-
-- Issue #6046: Fixed the library extension when distutils build_ext is used in
-  place.  Initial patch by Roumen Petrov.
-
-- Issue #6041: Now distutils `sdist` and `register` commands use `check` as a
-  subcommand.
-
-- Issue #2116: Weak references and weak dictionaries now support copy()ing and
-  deepcopy()ing.
-
-- Issue #1655: Make imaplib IPv6-capable.  Patch by Derek Morr.
-
-- Issue #5918: Fix a crash in the parser module.
-
-- Issue #1664: Make nntplib IPv6-capable.  Patch by Derek Morr.
-
-- Issue #6022: A test file was created in the current working directory by
-  test_get_outputs in Distutils.
-
-- Issue #4050: inspect.findsource/getsource now raise an IOError if the 'source'
-  file is a binary.  Patch by Brodie Rao, tests by Daniel Diniz.
-
-- Issue #5977: distutils build_ext.get_outputs was not taking into account the
-  inplace option.  Initial patch by kxroberto.
-
-- Issue #5984: distutils.command.build_ext.check_extensions_list checks were
-  broken for old-style extensions.
-
-- Issue #5971: StreamHandler.handleError now swallows IOErrors which occur when
-  trying to print a traceback.
-
-- Issue #5976: Fixed Distutils test_check_environ.
-
-- Issue #5900: Ensure RUNPATH is added to extension modules with RPATH if GNU ld
-  is used.  Original patch by Floris Bruynooghe.
-
-- Issue #5941: Distutils build_clib command was not working anymore because of
-  an incomplete customization of the archiver command.  Added ARFLAGS in the
-  Makefile besides AR and make Distutils use it.  Original patch by David
-  Cournapeau.
-
-- Issue #5955: aifc's close method did not close the file it wrapped, now it
-  does.  This also means getfp method now returns the real fp.
-
-- Issue #4875: On win32, ctypes.util.find_library does no longer return
-  directories.
-
-- Issue #5142: Add the ability to skip modules while stepping to pdb.
-
-- Issue #1309567: Fix linecache behavior of stripping subdirectories when
-  looking for files given by a relative filename.
-
-- Issue #5692: In ``zipfile.Zipfile``, fix wrong path calculation when
-  extracting a file to the root directory.
-
-- Issue #5913: ``os.listdir()`` should fail for empty path on windows.
-
-- Issue #5084: Unpickling now interns the attribute names of pickled objects,
-  saving memory and avoiding growth in size of subsequent pickles.  Proposal and
-  original patch by Jake McGuire.
-
-- Issue #3002: ``shutil.copyfile()`` and ``shutil.copytree()`` now raise an
-  error when a named pipe is encountered, rather than blocking infinitely.
-
-- Issue #3959: The ipaddr module has been added to the standard library.
-  Contributed by Google.
-
-- Issue #2245: aifc now skips chunk types it doesn't recognize, per spec.
-
-- Issue #5874: distutils.tests.test_config_cmd is not locale-sensitive anymore.
-
-- Issue #4305: ctypes should now build again on mipsel-linux-gnu
-
-- Issue #1734234: Massively speedup ``unicodedata.normalize()`` when the string
-  is already in normalized form, by performing a quick check beforehand.
-  Original patch by Rauli Ruohonen.
-
-- Issue #5853: Calling a function of the mimetypes module from several threads
-  at once could hit the recursion limit if the mimetypes database hadn't been
-  initialized before.
-
-- Issue #5854: Updated __all__ to include some missing names and remove some
-  names which should not be exported.
-
-- Issue #5810: Fixed Distutils test_build_scripts so it uses
-  ``sysconfig.get_config_vars()``.
-
-- Issue #4951: Fixed failure in test_httpservers.
-
-- Issue #3102: All global symbols that the _ctypes extension defines are now
-  prefixed with 'Py' or '_ctypes'.
-
-- Issue #5041: ctypes does now allow pickling wide character.
-
-- Issue #5812: For the two-argument form of the Fraction constructor,
-  ``Fraction(m, n)``, m and n are permitted to be arbitrary Rational instances.
-
-- Issue #5812: Fraction('1e6') is valid: more generally, any string that's valid
-  for float() is now valid for Fraction(), with the exception of strings
-  representing NaNs and infinities.
-
-- Issue #5795: Fixed test_distutils failure on Debian ppc.
-
-- Issue #5768: Fixed bug in Unicode output logic and test case for same.
-
-- Issue #1161031: Fix readwrite select flag handling: POLLPRI now results in a
-  handle_expt_event call, not handle_read_event, and POLLERR and POLLNVAL now
-  call handle_close, not handle_expt_event.  Also, dispatcher now has an
-  'ignore_log_types' attribute for suppressing log messages, which is set to
-  'warning' by default.
-
-- Issue #5607: Fixed Distutils test_get_platform for Mac OS X fat binaries.
-
-- Issue #5741: Don't disallow "%%" (which is an escape for "%") when setting a
-  value in SafeConfigParser.
-
-- Issue #5732: Added a new command in Distutils: check.
-
-- Issue #5731: Distutils bdist_wininst no longer worked on non-Windows
-  platforms.  Initial patch by Paul Moore.
-
-- Issue #2254: Fix CGIHTTPServer information disclosure.  Relative paths are now
-  collapsed within the url properly before looking in cgi_directories.
-
-- Issue #5095: Added bdist_msi to the list of bdist supported formats.  Initial
-  fix by Steven Bethard.
-
-- Issue #1491431: Fixed distutils.filelist.glob_to_re for edge cases.  Initial
-  fix by Wayne Davison.
-
-- Issue #5693: TestSuite.__iter__ can now be consistently overridden in
-  subclasses.
-
-- Issue #5694: Removed spurious test output in Distutils (test_clean).
-
-- Issue #5471: Fix os.path.expanduser() for $HOME set to '/'.
-
-- Issue #1326077: Fix the formatting of SyntaxErrors by the traceback module.
-
-- Issue #1726172: Fix IndexError in the case of and empty response in ftplib.
-
-- Issue #2625: Added missing iteritems() call to the for loop in
-  mailbox.MH.get_message().
-
-- Issue #5585: Add the ability to call an initializer to
-  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
-  docs to note the limitation.
-
-- unittest.assertNotEqual() now uses the inequality operator (!=) instead of the
-  equality operator.
-
-- Issue #6001: Test discovery for unittest. Implemented in
-  unittest.TestLoader.discover and from the command line.
-
-- Issue #5679: The methods unittest.TestCase.addCleanup and doCleanups were
-  added.  addCleanup allows you to add cleanup functions that will be called
-  unconditionally (after setUp if setUp fails, otherwise after tearDown). This
-  allows for much simpler resource allocation and deallocation during tests.
-
-- Issue #3379: unittest.main now takes an optional exit argument. If False main
-  doesn't call sys.exit allowing it to be used from the interactive interpreter.
-
-- Issue #5995: unittest.main now takes an optional verbosity argument allowing
-  test modules to be run with a higher than default verbosity.
-
-- Issue #5995: A fix to allow you to run "python -m unittest test_module" or
-  "python -m unittest test_module.TestClass" from the command line.
-
-- Issue #5728: unittest.TestResult has new startTestRun and stopTestRun methods;
-  called immediately before and after a test run.
-
-- Issue #5663: Better failure messages for unittest asserts. Default assertTrue
-  and assertFalse messages are now useful. TestCase has a longMessage attribute.
-  This defaults to False, but if set to True useful error messages are shown in
-  addition to explicit messages passed to assert methods.
-
-- Issue #3110: Add additional protect around SEM_VALUE_MAX for multiprocessing.
-
-- In Pdb, prevent the reassignment of __builtin__._ by sys.displayhook on
-  printing out values.
-
-- Issue #4572: Added SEEK_* symbolic constants to io module.
-
-- Issue #1665206 (partially): Move imports in cgitb to the top of the module
-  instead of performing them in functions. Helps prevent import deadlocking in
-  threads.
-
-- Issue #5647: MutableSet.__iand__() no longer mutates self during iteration.
-
-- Actually make the SimpleXMLRPCServer CGI handler work.
-
-- Issue #2522: locale.format() now checks its first argument to ensure it has
-  been passed only one pattern, avoiding mysterious errors where it appeared
-  that it was failing to do localization.
-
-- Issue #5583: Added optional extensions in Distutils.  Initial patch by Georg
-  Brandl.
-
-- Issue #5619: Multiprocessing children disobey the debug flag and causes popups
-  on windows buildbots.  Patch applied to work around this issue.
-
-- Issue #5632: Thread.ident was None for the main thread and threads not created
-  with the threading module.
-
-- Issue #5400: Added patch for multiprocessing on netbsd compilation/support.
-
-- Issue #5387: Fixed mmap.move crash by integer overflow.
-
-- Issue #5261: Patch multiprocessing's semaphore.c to support context manager
-  use: "with multiprocessing.Lock()" works now.
-
-- Issue #5177: Multiprocessing's SocketListener class now uses
-  socket.SO_REUSEADDR on all connections so that the user no longer needs to
-  wait 120 seconds for the socket to expire.
-
-- Adjusted _tkinter to compile without warnings when WITH_THREAD is not defined
-  (part of issue #5035).
-
-- Issue #5561: Removed the sys.version_info shortcuts from platform's
-  python_version() and python_version_tuple() since they produced different
-  output compared to previous Python versions.
-
-- Issue #1034053: unittest now supports skipping tests and expected failures.
-
-- The unittest.TestCase.assertRaises() method now returns a context manager when
-  not given a callable so that code to be tested can be written inline using a
-  with statement.
-
-- Issue #2578: The unittest.TestCase.assertEqual() now displays the differences
-  in lists, tuples, dicts and sets on failure.  Many new handy type and
-  comparison specific assert* methods have been added that fail with error
-  messages actually useful for debugging.  Contributed in part by Google.
-
-- Issue #5068: Fixed the tarfile._BZ2Proxy.read() method that would loop forever
-  on incomplete input.  That caused tarfile.open() to hang when used with mode
-  'r' or 'r:bz2' and a fileobj argument that contained no data or partial bzip2
-  compressed data.
-
-- Issue #5536: urllib.urlretrieve makes sure to close the file it's writing to
-  even if an exception occurs.
-
-- Issue #5381: Added object_pairs_hook to the json module.  This allows
-  OrderedDicts to be built by the decoder.
-
-- Issue #2110: Add support for thousands separator and 'n' type specifier to
-  ``Decimal.__format__()``.
-
-- Fix Decimal.__format__ bug that swapped the meanings of the '<' and '>'
-  alignment characters.
-
-- Issue #1222: ``locale.format()`` bug when the thousands separator is a space
-  character.
-
-- Issue #5472: Fixed distutils.test_util tear down. Original patch by Tim
-  Golden.
-
-- collections.deque objects now have a read-only attribute called maxlen.
-
-- Issue #2638: Show a window constructed with tkSimpleDialog.Dialog only after
-  it is has been populated and properly configured in order to prevent window
-  flashing.
-
-- Issue #4792: Prevent a segfault in _tkinter by using the guaranteed to be safe
-  interp argument given to the PythonCmd in place of the Tcl interpreter taken
-  from a PythonCmd_ClientData.
-
-- Issue #5193: Guarantee that Tkinter.Text.search returns a string.
-
-- Issue #5394: Removed > 2.3 syntax from distutils.msvc9compiler.
-  Original patch by Akira Kitada.
-
-- Issue #5385: Fixed mmap crash after resize failure on windows.
-
-- Issue #5179: Fixed subprocess handle leak on failure on windows.
-
-- PEP 372: Added collections.OrderedDict().
-
-- The _asdict() for method for namedtuples now returns an OrderedDict().
-
-- The configparser module now defaults to using an ordered dictionary.
-
-- Issue #4308: httplib.IncompleteRead's repr doesn't include all of the data all
-  ready received.
-
-- Issue #5401: Fixed a performance problem in mimetypes when ``from mimetypes
-  import guess_extension`` was used.
-
-- Issue #1733986: Fixed mmap crash on Windows in accessing elements of second
-  map object with same tagname but larger size than first map.
-
-- Issue #5386: mmap.write_byte didn't check map size, so it could cause buffer
-  overrun.
-
-- Issue #1533164: Installed but not listed *.pyo was breaking Distutils
-  bdist_rpm command.
-
-- Issue #5378: Added --quiet option to Distutils bdist_rpm command.
-
-- Issue #5052: Make Distutils compatible with 2.3 again.
-
-- Deprecated methods of symtable.Symbol have been removed: is_keywordarg(),
-  is_vararg(), and is_in_tuple().
-
-- Issue #5316: Fixed buildbot failures introduced by multiple inheritance in
-  Distutils tests.
-
-- Issue #5287: Add exception handling around findCaller() call to help out
-  IronPython.
-
-- Issue #5282: Fixed mmap resize on 32bit Windows and Unix.  When ``offset >
-  0``, the file was resized to wrong size.
-
-- Issue #5292: Fixed mmap crash on its boundary access m[len(m)].
-
-- Issue #2279: distutils.sdist.add_defaults now add files from the package_data
-  and the data_files metadata.
-
-- Issue #5257: Refactored all tests in distutils, so they use
-  support.TempdirManager, to avoid writing in the tests directory.
-
-- Issue #4524: distutils build_script command failed with --with-suffix=3.
-  Initial patch by Amaury Forgeot d'Arc.
-
-- Issue #2461: Added tests for distutils.util.
-
-- Issue #1008086: Fixed socket.inet_aton() to always return 4 bytes even on LP64
-  platforms (most 64-bit Linux, bsd, unix systems).
-
-- Issue #5203: Fixed ctypes segfaults when passing a unicode string to a
-  function without argtypes (only occurs if HAVE_USABLE_WCHAR_T is false).
-
-- Issue #3386: distutils.sysconfig.get_python_lib prefix argument was ignored
-  under NT and OS2. Patch by Philip Jenvey.
-
-- Issue #5128: Make compileall properly inspect bytecode to determine if needs
-  to be recreated.  This avoids a timing hole thanks to the old reliance on the
-  ctime of the files involved.
-
-- Issue #5122: Synchronize tk load failure check to prevent a potential
-  deadlock.
-
-- Issue #1818: collections.namedtuple() now supports a keyword argument 'rename'
-  which lets invalid fieldnames be automatically converted to positional names
-  in the form, _1, _2, ...
-
-- Issue #4890: Handle empty text search pattern in Tkinter.Text.search.
-
-- Issue #5170: Fixed Unicode output bug in logging and added test case.  This is
-  a regression which did not occur in 2.5.
-
-- Issue #4512 (part 2): Promote ``ZipImporter._get_filename()`` to be a public
-  documented method ``ZipImporter.get_filename()``.
-
-- Issue #4195: The ``runpy`` module (and the ``-m`` switch) now support the
-  execution of packages by looking for and executing a ``__main__`` submodule
-  when a package name is supplied. Initial patch by Andi Vajda.
-
-- Issue #1731706: Call Tcl_ConditionFinalize for Tcl_Conditions that will not be
-  used again (this requires Tcl/Tk 8.3.1), also fix a memory leak in Tkapp_Call
-  when calling from a thread different than the one that created the Tcl
-  interpreter.  Patch by Robert Hancock.
-
-- Issue #1520877: Now distutils.sysconfig reads $AR from the
-  environment/Makefile. Patch by Douglas Greiman.
-
-- Issue #4285: Change sys.version_info to be a named tuple.  Patch by Ross
-  Light.
-
-- Issue #1276768: The verbose option was not used in the code of
-  distutils.file_util and distutils.dir_util.
-
-- Issue #5132: Fixed trouble building extensions under Solaris with
-  --enabled-shared activated. Initial patch by Dave Peterson.
-
-- Issue #1581476: Always use the Tcl global namespace when calling into Tcl.
-
-- Issue #2047: shutil.move() could believe that its destination path was inside
-  its source path if it began with the same letters (e.g. "src" vs.  "src.new").
-
-- Issue #4920: Fixed .next() vs .__next__() issues in the ABCs for Iterator and
-  MutableSet.
-
-- Added the ttk module. See issue #2983: Ttk support for Tkinter.
-
-- Issue #5021: doctest.testfile() did not create __name__ and
-  collections.namedtuple() relied on __name__ being defined.
-
-- Backport importlib from Python 3.1. Only the import_module() function has been
-  backported to help facilitate transitions from 2.7 to 3.1.
-
-- Issue #1885: distutils: When running sdist with --formats=tar,gztar the tar
-  file was overridden by the gztar one.
-
-- Issue #4863: distutils.mwerkscompiler has been removed.
-
-- Added new itertools functions: combinations_with_replacement() and compress().
-
-- Issue #5032: Added a step argument to itertools.count() and allowed
-  non-integer arguments.
-
-- Fix and properly document the multiprocessing module's logging support, expose
-  the internal levels and provide proper usage examples.
-
-- Issue #1672332: Fix unpickling of subnormal floats, which was
-  producing a ValueError on some platforms.
-
-- Issue #3881: Help Tcl to load even when started through the unreadable local
-  symlink to "Program Files" on Vista.
-
-- Issue #4710: Extract directories properly in the zipfile module; allow adding
-  directories to a zipfile.
-
-- Issue #3807: _multiprocessing build fails when configure is passed
-  --without-threads argument. When this occurs, _multiprocessing will be
-  disabled, and not compiled.
-
-- Issue #5008: When a file is opened in append mode with the new IO library, do
-  an explicit seek to the end of file (so that e.g. tell() returns the file size
-  rather than 0). This is consistent with the behaviour of the traditional 2.x
-  file object.
-
-- Issue #5013: Fixed a bug in FileHandler which occurred when the delay
-  parameter was set.
-
-- Issue #4998: The memory saving effect of __slots__ had been lost on Fractions
-  which inherited from numbers.py which did not have __slots__ defined.  The
-  numbers hierarchy now has its own __slots__ declarations.
-
-- Issue #3321: _multiprocessing.Connection() doesn't check handle; added checks
-  for *nix machines for negative handles and large int handles.  Without this
-  check it is possible to segfault the interpreter.
-
-- Issue #4449: AssertionError in mp_benchmarks.py, caused by an underlying issue
-  in sharedctypes.py.
-
-- Issue #1225107: inspect.isclass() returned True for instances with a custom
-  __getattr__.
-
-- Issue #3997: Zipfiles generated with more than 65536 files could not be opened
-  with other applications.
-
-- Issue #1162154: ``inspect.getmembers()`` now skips attributes that raise
-  AttributeError, e.g. a __slots__ attribute which has not been set.
-
-- Issue #1696199: Add collections.Counter() for rapid and convenient counting.
-
-- Issue #3860: GzipFile and BZ2File now support the context management protocol.
-
-- Issue #4272: Add an optional argument to the GzipFile constructor to override
-  the timestamp in the gzip stream.  The default value remains the current time.
-  The information can be used by e.g. gunzip when decompressing.  Patch by
-  Jacques Frechet.
-
-- Restore Python 2.3 compatibility for decimal.py.
-
-- Issue #1702551: distutils sdist was not excluding VCS directories under
-  Windows. Initial solution by Guy Dalberto.
-
-- The _tkinter module functions "createfilehandler", "deletefilehandler",
-  "createtimerhandler", "mainloop", "dooneevent" and "quit" have been deprecated
-  for removal in 3.x
-
-- Issue #4796: Added Decimal.from_float() and
-  Context.create_decimal_from_float() to the decimal module.
-
-- Issue #4812: Add missing underscore prefix to some internal-use-only constants
-  in the decimal module.  (Dec_0 becomes _Dec_0, etc.)
-
-- Issue #4795: inspect.isgeneratorfunction() returns False instead of None when
-  the function is not a generator.
-
-- Issue #4702: Throwing a DistutilsPlatformError instead of IOError in case no
-  MSVC compiler is found under Windows.  Original patch by Philip Jenvey.
-
-- Issue #4646: distutils was choking on empty options arg in the setup function.
-  Original patch by Thomas Heller.
-
-- Fractions.from_float() no longer loses precision for integers too big to cast
-  as floats.
-
-- Issue #4790: The nsmallest() and nlargest() functions in the heapq module did
-  unnecessary work in the common case where no key function was specified.
-
-- Issue #3767: Convert Tk object to string in tkColorChooser.
-
-- Issue #3248: Allow placing ScrolledText in a PanedWindow.
-
-- Issue #4444: Allow assertRaises() to be used as a context handler, so that the
-  code under test can be written inline if more practical.
-
-- Issue #4739: Add pydoc help topics for symbols, so that e.g. help('@') works
-  as expected in the interactive environment.
-
-- Issue #4756: zipfile.is_zipfile() now supports file-like objects. Patch by
-  Gabriel Genellina.
-
-- Issue #4400: .pypirc default generated file was broken in distutils.
-
-- Issue #4736: io.BufferedRWPair's closed property now functions properly.
-
-- Issue #3954: Fix a potential SystemError in _hotshot.logreader error handling.
-
-- Issue #4574: Fix a crash in io.IncrementalNewlineDecoder when a carriage
-  return encodes to more than one byte in the source encoding (e.g. UTF-16) and
-  gets split on a chunk boundary.
-
-- Issue #4223: inspect.getsource() will now correctly display source code for
-  packages loaded via zipimport (or any other conformant PEP 302
-  loader). Original patch by Alexander Belopolsky.
-
-- Issue #4201: pdb can now access and display source code loaded via zipimport
-  (or any other conformant PEP 302 loader).  Original patch by Alexander
-  Belopolsky.
-
-- Issue #4197: Doctests in modules loaded via zipimport (or any other PEP 302
-  conformant loader) will now work correctly in most cases (they are still
-  subject to the constraints that exist for all code running from inside a
-  module loaded via a PEP 302 loader and attempting to perform IO operations
-  based on __file__).  Original patch by Alexander Belopolsky.
-
-- Issues #4082 and #4512: Add runpy support to zipimport in a manner that allows
-  backporting to maintenance branches.  Original patch by Alexander Belopolsky.
-
-- Issue #4163: Use unicode-friendly word splitting in the textwrap functions
-  when given a Unicode string.
-
-- Issue #4616: TarFile.utime(): Restore directory times on Windows.
-
-- Issue #4084: Fix max, min, max_mag and min_mag Decimal methods to give correct
-  results in the case where one argument is a quiet NaN and the other is a
-  finite number that requires rounding.
-
-- Issue #1030250: Distutils created directories even when run with the --dry-run
-  option.
-
-- Issue #4483: _dbm module now builds on systems with gdbm & gdbm_compat libs.
-
-- Issue #4529: Fix the parser module's validation of try-except-finally
-  statements.
-
-- Issue #4458: getopt.gnu_getopt() now recognizes a single "-" as an argument,
-  not a malformed option.
-
-- Added the subprocess.check_output() convenience function to get output from a
-  subprocess on success or raise an exception on error.
-
-- Issue #1055234: cgi.parse_header(): Fixed parsing of header parameters to
-  support unusual filenames (such as those containing semi-colons) in
-  Content-Disposition headers.
-
-- Issue #4384: Added logging integration with warnings module using
-  captureWarnings().  This change includes a NullHandler which does nothing; it
-  will be of use to library developers who want to avoid the "No handlers could
-  be found for logger XXX" message which can appear if the library user doesn't
-  configure logging.
-
-- Issue #3741: DISTUTILS_USE_SDK set causes msvc9compiler.py to raise an
-  exception.
-
-- Issue #4363: The uuid.uuid1() and uuid.uuid4() functions now work even if the
-  ctypes module is not present.
-
-- FileIO's mode attribute now always includes ``"b"``.
-
-- Issue #4116: Resolve member name conflict in ScrolledCanvas.__init__.
-
-- httplib.HTTPConnection.putheader() now accepts an arbitrary number of values
-  for any header, matching what the documentation has claimed for a while.
-
-- Issue #3774: Fixed an error when create a Tkinter menu item without command
-  and then remove it.
-
-- Fixed a modulefinder crash on certain relative imports.
-
-- Issue #4150: Pdb's "up" command now works for generator frames in post-mortem
-  debugging.
-
-- Issue #4092: Return ArgInfo as promised in the documentation from
-  inspect.getargvalues.
-
-- Issue #3935: Properly support list subclasses in bisect's C implementation.
-
-- Issue #4014: Don't claim that Python has an Alpha release status, in addition
-  to claiming it is Mature.
-
-- Issue #4730: Fixed the cPickle module to handle correctly astral characters
-  when protocol 0 is used.
-
-- Issue #1594: MacOS.GetCreatorAndType now always returns a big-endian result,
-  to be consistent with Apple tools.
-
-- Issue #900949: plat-mac/videoreader.py no longer relies on a non-existing
-  module.
-
-- Issue #16278952: plat-mac/videoreader.py now correctly imports MediaDescr
-
-- Issue #1737832: plat-mac/EasyDialog.py no longer uses the broken aepack
-  module.
-
-- Issue #1149804: macostools.mkdirs now even works when another process creates
-  one of the needed subdirectories.
-
-- Issue #900506: added --no-zipimport flag to the bundlebuilder script.
-
-- Issue #841800: bundlebuilder now works with 'python -O'.
-
-- Issue #4861: ctypes.util.find_library(): Robustify. Fix library detection on
-  biarch systems.  Try to rely on ldconfig only, without using objdump and gcc.
-
-- Issue #5104: The socket module now raises OverflowError when 16-bit port and
-  protocol numbers are supplied outside the allowed 0-65536 range on bind() and
-  getservbyport().
-
-- Issue #999042: The Python compiler now handles explict global statements
-  correctly (should be assigned using STORE_GLOBAL opcode).
-
-- Issue #2703: SimpleXMLRPCDispatcher.__init__: Provide default values for new
-  arguments introduced in 2.5.
-
-- Issue #5828 (Invalid behavior of unicode.lower): Fixed bogus logic in
-  makeunicodedata.py and regenerated the Unicode database (This fixes
-  u'\u1d79'.lower() == '\x00').
-
-- Windows locale mapping updated to Vista.
-
-IDLE
-----
-
-- Issue #5150: IDLE's format menu now has an option to strip trailing
-  whitespace.
-
-- Issue #5847: Remove -n switch on "Edit with IDLE" menu item.
-
-- idle.py modified and simplified to better support developing experimental
-  versions of IDLE which are not installed in the standard location.
-
-- Issue #5559: OutputWindow/PyShell right click menu "Go to file/line"
-  wasn't working with file paths containing spaces.
-
-- Issue #5783: Windows: Version string for the .chm help file changed,
-  file not being accessed.  Patch by Guilherme Polo/
-
-- Issue #1529142: Allow multiple IDLE GUI/subprocess pairs to exist
-  simultaneously. Thanks to David Scherer for suggesting the use of an
-  ephemeral port for the GUI.  Patch by Weeble.
-
-- Remove port spec from run.py and fix bug where subprocess fails to
-  extract port from command line when warnings are present.
-
-- Issue #5129: Tk 8.5 Text widget requires 'wordprocessor' tabstyle attr
-  to handle mixed space/tab properly. Patch by Guilherme Polo.
-
-- Issue #3549: On MacOS the preferences menu was not present
-
-Tools/Demos
------------
-
-- Ttk demos added in Demo/tkinter/ttk/.
-
-- Issue #4677: Add two list comprehension tests to pybench.
-
-Build
------
-
-- Issue #6603: Change READ_TIMESTAMP macro in ceval.c so that it compiles
-  correctly under gcc on x86-64.  This fixes a reported problem with the
-  --with-tsc build on x86-64.
-
-- Add 2 new options to ``--with-universal-archs`` on MacOSX: ``intel`` builds a
-  distribution with ``i386`` and ``x86_64`` architectures, while ``3-way``
-  builds a distribution with the ``ppc``, ``i386`` and ``x86_64`` architectures.
-
-- Issue #6802: Fix build issues on MacOSX 10.6.
-
-- Issue #6244: Allow detect_tkinter to look for Tcl/Tk 8.6.
-
-- Issue #5390: Add uninstall icon independent of whether file extensions are
-  installed.
-
-- Issue #5809: Specifying both --enable-framework and --enable-shared is an
-  error. Configure now explicitly tells you about this.
-
-- Issue #3585: Add pkg-config support.  It creates a python-2.7.pc file and a
-  python.pc symlink in the $(LIBDIR)/pkgconfig directory.  Patch by Clinton Roy.
-
-- Issue #6094: Build correctly with Subversion 1.7.
-
-- Issue #5726: Make Modules/ld_so_aix return the actual exit code of the linker,
-  rather than always exit successfully.  Patch by Floris Bruynooghe.
-
-- Issue #4587: Add configure option --with-dbmliborder=db1:db2:... to specify
-  the order that backends for the dbm extension are checked.
-
-- Link the shared python library with $(MODLIBS).
-
-- Issue #5134: Silence compiler warnings when compiling sqlite with VC++.
-
-- Issue #4494: Fix build with Py_NO_ENABLE_SHARED on Windows.
-
-- Issue #4895: Use _strdup on Windows CE.
-
-- Issue #4472: ``configure --enable-shared`` now works on OSX.
-
-- Issues #4728 and #4060: WORDS_BIGEDIAN is now correct in Universal builds.
-
-- Issue #4389: Add icon to the uninstall entry in "add-and-remove-programs".
-
-- Issue #4289: Remove Cancel button from AdvancedDlg.
-
-- Issue #1656675: Register a drop handler for .py* files on Windows.
-
-- Issue #4120: Exclude manifest from extension modules in VS2008.
-
-- Issue #4091: Install pythonxy.dll in system32 again.
-
-- Issue #4018: Disable "for me" installations on Vista.
-
-- Issue #3758: Add ``patchcheck`` build target to ``.PHONY``.
-
-- Issue #4204: Fixed module build errors on FreeBSD 4.
-
-Documentation
--------------
-
-- Issue #6556: Fixed the Distutils configuration files location explanation for
-  Windows.
-
-- Issue #6801: symmetric_difference_update also accepts ``|``.  Thanks to Carl
-  Chenet.
-
-C-API
------
-
-- Issue #7528: Add PyLong_AsLongAndOverflow (backported from py3k).
-
-- Issue #7228: Add '%lld' and '%llu' support to PyString_FromFormat(V) and
-  PyErr_Format, on machines with HAVE_LONG_LONG defined.
-
-- Add new C-API function PyOS_string_to_double, and deprecated PyOS_ascii_atof
-  and PyOS_ascii_strtod.
-
-- Removed _PyOS_double_to_string. Use PyOS_double_to_string instead.  This is in
-  preparation for (but not strictly related to) issue #7117, short float repr.
-
-- Issue #6624: PyArg_ParseTuple with "s" format when parsing argument with NULL:
-  Bogus TypeError detail string.
-
-- Issue #5954: Add a PyFrame_GetLineNumber() function to replace most uses of
-  PyCode_Addr2Line().
-
-- Issue #5959: Add a PyCode_NewEmpty() function to create a new empty code
-  object at a specified file, function, and line number.
-
-- Issue #1419652: Change the first argument to PyImport_AppendInittab() to
-  ``const char *`` as the string is stored beyond the call.
-
-- Some PyBytes_* aliases have been removed because they don't exist in 3.x.
-
-- Issue #5175: PyLong_AsUnsignedLongLong now raises OverflowError for negative
-  arguments.  Previously, it raised TypeError.
-
-- Issue #4720: The format for PyArg_ParseTupleAndKeywords can begin with '|'.
-
-- Issue #3632: From the gdb debugger, the 'pyo' macro can now be called when the
-  GIL is released, or owned by another thread.
-
-- Issue #4122: On Windows, fix a compilation error when using the
-  Py_UNICODE_ISSPACE macro in an extension module.
-
-- Issue #4293: Py_AddPendingCall() is now thread safe and can be used for
-  asynchronous notifications to python from any thread.  Documentation added.
-
-Extension Modules
------------------
-
-- Issue #6508: Add posix.{getresuid,getresgid,setresuid,setresgid}.
-
-- Issue #7078: Set struct.__doc__ from _struct.__doc__.
-
-- Issue #3366: Add erf, erfc, expm1, gamma, lgamma functions to math module.
-
-- Issue #6823: Allow time.strftime() to accept a tuple with a isdst field
-  outside of the range of [-1, 1] by normalizing the value to within that range.
-
-- Issue #6877: Make it possible to link the readline extension to libedit on
-  OSX.
-
-- Issue #6944: Fix a SystemError when socket.getnameinfo() was called with
-  something other than a tuple as first argument.
-
-- Issue #6865: Fix reference counting issue in the initialization of the pwd
-  module.
-
-- Issue #6848: Fix curses module build failure on OS X 10.6.
-
-- Fix a segfault in expat when given a specially crafted input lead to the
-  tokenizer not stopping. CVE-2009-3720.
-
-- Issue #6561: '\d' in a regex now matches only characters with Unicode category
-  'Nd' (Number, Decimal Digit).  Previously it also matched characters with
-  category 'No'.
-
-- Issue #1523: Remove deprecated overflow wrapping for struct.pack with an
-  integer format code ('bBhHiIlLqQ').  Packing an out-of-range integer now
-  consistently raises struct.error.
-
-- Issues #1530559, #1741130: Fix various struct.pack inconsistencies for the
-  integer formats ('bBhHiIlLqQ').  In the following, '*' represents any of '=',
-  '<', '>'.
-
-    - Packing a float now always gives a Deprecation Warning.  Previously it
-      only warned for 'I', 'L', '*B', '*H', '*I', '*L'.
-
-    - If x is not an int, long or float, then packing x will always result in
-      struct.error.  Previously an x with an __int__ method could be packed by
-      'b', 'B', 'h', 'H', 'i', 'l', '*b', '*h' ,'*i', '*l', and an x with a
-      __long__ method could be packed by 'q', 'Q', '*q', '*Q'; for x with
-      neither __int__ nor __long__, TypeError used to be raised (with a
-      confusing error message) for 'I', 'L', '*B', '*H', '*I', '*L', and
-      struct.error in other cases.
-
-  Note: as of Python 2.7 beta 1, the above is out of date.  In 2.7 beta 1, any
-  argument with an __int__ method can be packed, but use of this feature
-  triggers a DeprecationWarning.
-
-- Issue #4873: Fix resource leaks in error cases of pwd and grp.
-
-- Issue #4751: For hashlib algorithms provided by OpenSSL, the Python GIL is now
-  released during computation on data lengths >= 2048 bytes.
-
-- Issue #3745: Fix hashlib to always reject unicode and non buffer-api
-  supporting objects as input no matter how it was compiled (built in
-  implementations or external openssl library).  NOTE: Undone in 2.7a2.
-
-- Issue #4397: Fix occasional test_socket failure on OS X.
-
-- Issue #4279: Fix build of parsermodule under Cygwin.
-
-- Issue #4051: Prevent conflict of UNICODE macros in cPickle.
-
-- Issue #4228: Pack negative values the same way as 2.4 in struct's L format.
-
-- Issue #1040026: Fix os.times result on systems where HZ is incorrect.
-
-- Issues #3167, #3682: Fix test_math failures for log, log10 on Solaris,
-  OpenBSD.
-
-- Issue #4365: Add crtassem.h constants to the msvcrt module.
-
-- Issue #4396: The parser module now correctly validates the with statement.
-
-- Issue #5228: Make functools.partial objects can now be pickled.
-
-Tests
------
-
-- Issue #7431: Use TESTFN in test_linecache instead of trying to create a file
-  in the Lib/test directory, which might be read-only for the user running the
-  tests.
-
-- Issue #7324: Add a sanity check to regrtest argument parsing to catch the case
-  of an option with no handler.
-
-- Issue #7312: Add a -F flag to run the selected tests in a loop until a test
-  fails.  Can be combined with -j.
-
-- Issue #7295: Do not use a hardcoded file name in test_tarfile.
-
-- Issue #7270: Add some dedicated unit tests for multi-thread synchronization
-  primitives such as Lock, RLock, Condition, Event and Semaphore.
-
-- Issue #7222: Make thread "reaping" more reliable so that reference
-  leak-chasing test runs give sensible results.  The previous method of reaping
-  threads could return successfully while some Thread objects were still
-  referenced.  This also introduces a new private function: ``thread._count()``.
-
-- Issue #7151: Fixed regrtest -j so that output to stderr from a test no longer
-  runs the risk of causing the worker thread to fail.
-
-- Issue #7055: test___all__ now greedily detects all modules which have an
-  __all__ attribute, rather than using a hardcoded and incomplete list.
-
-- Issue #7058: Added save/restore for things like sys.argv and cwd to
-  runtest_inner in regrtest, with warnings if the called test modifies them,
-  and a new section in the summary report at the end.
-
-- Issue #7042: Fix test_signal (test_itimer_virtual) failure on OS X 10.6.
-
-- Issue #6806: test_platform failed under OS X 10.6.0 because ``sw_ver`` leaves
-  off the trailing 0 in the version number.
-
-- Issue #5450: Moved tests involving loading tk from Lib/test/test_tcl to
-  Lib/lib-tk/test/test_tkinter/test_loadtk. With this, these tests demonstrate
-  the same behaviour as test_ttkguionly (and now also test_tk) which is to skip
-  the tests if DISPLAY is defined but can't be used.
-
-- Issue #6152: New option '-j'/'--multiprocess' for regrtest allows running
-  regression tests in parallel, shortening the total runtime.
-
-- Issue #5354: New test support function import_fresh_module() makes it easy to
-  import both normal and optimised versions of modules.  test_heapq and
-  test_warnings have been adjusted to use it, tests for other modules with both
-  C and Python implementations in the stdlib can be adjusted to use it over
-  time.
-
-- Fix test_warnings to no longer reset the warnings filter.
-
-- Fix test_logging to no longer reset the warnings filter.
-
-- Issue #5635: Fix running test_sys with tracing enabled.
-
-- regrtest no longer treats ImportError as equivalent to SkipTest.  Imports that
-  should cause a test to be skipped are now done using import_module from test
-  support, which does the conversion.
-
-- Issue #5083: New 'gui' resource for regrtest.
-
-- Issue #5837: Certain sequences of calls to set() and unset() for
-  support.EnvironmentVarGuard objects restored the environment variables
-  incorrectly on __exit__.
-
-- Issue #2389: Array objects are now pickled in a portable manner.
-
-Misc
-----
-
-- Issue #5611: Auto-detect whether a C file uses tabs or spaces in Vim.
-
-
-What's New in Python 2.6 final
-==============================
-
-*Release date: 01-Oct-2008*
-
-Core and Builtins
------------------
-
-- Issue #3967: Fixed a crash in the count() and find() methods of string-like
-  objects, when the "start" parameter is a huge value.
-
-- Issue #3965: Fixed a crash on Windows when open() is given an invalid
-  filename or mode, and the filename is a unicode string.
-
-- Bug #3951: Py_USING_MEMORY_DEBUGGER should not be enabled by default.
-
-Library
--------
-
-- Issue #3965: Allow repeated calls to turtle.Screen, by making it a
-  true singleton object.
-
-- Issue #3895: It was possible to crash the interpreter when an external timer
-  was used with cProfile that returned an object that could not be converted
-  into a float.
-
-- Issue #3950: Made turtle respect scale factors.
-
-- Issue #3547: Fixed ctypes structures bitfields of varying integer
-  sizes.
-
-- Issue #3879: A regression in urllib.getproxies_environment was fixed.
-
-- Issue #3863: Disabled a unit test of fork being called from a thread
-  when running on platforms known to exhibit OS bugs when attempting that.
-
-Build
------
-
-- Bug #3989: Package the 2to3 script (as 2to3.py) in the Windows
-  installer.
-
-- Bug #3887: Package x64 version of CRT for AMD64 Windows binaries.
-
-
-What's New in Python 2.6 release candidate 2?
-=============================================
-
-*Release date: 17-Sep-2008*
-
-Core and Builtins
------------------
-
-Extension Modules
------------------
-
-- Security Issue #2: imageop did not validate arguments correctly and could
-  segfault as a result.
-
-- Issue #3886: Possible integer overflows in the _hashopenssl module were
-  closed.
-
-Tools/Demos
------------
-
-- Issue #3850: recursion tests in Tools/scripts/find_recursion_limit.py can raise
-  AttributeError instead of RuntimeError, depending in which C API call
-  exactly the recursion limit is exceeded. Consequently, both exception types
-  are caught and silenced.
-
-Build
------
-
-- Issue #3617: Include a licensing statement regarding the Microsoft
-  C runtime in the Windows installer.
-
-
-What's New in Python 2.6 release candidate 1?
-=============================================
-
-*Release date: 12-Sep-2008*
-
-Core and Builtins
------------------
-
-- Issue #3642: Suppress warning in obmalloc when size_t is larger than uint.
-
-- Issue #3743: In a few places, PY_FORMAT_SIZE_T was incorrectly used with
-  PyString_FromFormat or PyErr_Format to display size_t values. The macro
-  PY_FORMAT_SIZE_T is designed to select the correct format for the OS
-  ``printf`` function, whereas PyString_FromFormat has an independent
-  implementation and uses "%zd" on all platforms for size_t values.
-  This makes a difference on win64, where ``printf`` needs "%Id" to display
-  64bit values.
-
-- Issue #3634: _weakref.ref(Exception).__init__() gave invalid return value on
-  error.
-
-- Issue #3777: long() applied to a float object now always return a long
-  object; previously an int would be returned for small values. the __long__
-  method is allowed to return either an int or a long, but the behaviour of
-  float objects should not change to respect backward compatibility.
-
-- Issue #3751: str.rpartition would perform a left-partition when called with
-  a unicode argument.
-
-- Issue #3683: Fix compilation when --without-threads is given.
-
-- Issue #3668: Fix a memory leak with the "s*" argument parser in
-  PyArg_ParseTuple and friends, which occurred when the argument for "s*"
-  was correctly parsed but parsing of subsequent arguments failed.
-
-- Issue #2534: speed up isinstance() and issubclass() by 50-70%, so as to
-  match Python 2.5 speed despite the __instancecheck__ / __subclasscheck__
-  mechanism. In the process, fix a bug where isinstance() and issubclass(),
-  when given a tuple of classes as second argument, were looking up
-  __instancecheck__ / __subclasscheck__ on the tuple rather than on each
-  type object.
-
-- Fix crashes on memory allocation failure found with failmalloc.
-
-- Fix memory leaks found with valgrind and update suppressions file.
-
-- Fix compiler warnings in opt mode which would lead to invalid memory reads.
-
-- Fix problem using wrong name in decimal module reported by pychecker.
-
-- Silenced another compiler warning about a used but not defined
-  function 'stringlib_contains_obj'.
-
-- Added warnings on the use of ``__getslice__``, ``__setslice__``, or
-  ``__delslice__``.
-
-- Issue #3678: Correctly pass LDFLAGS and LDLAST to the linker on shared
-  library targets in the Makefile.
-
-- Issue #1204: The configure script now tests for additional libraries
-  that may be required when linking against readline.  This fixes issues
-  with x86_64 builds on some platforms (a few Linux flavors and OpenBSD).
-
-C-API
------
-
-- Aliased PyObject_Bytes to PyObject_Str.
-
-Library
--------
-
-- Issue #3640: Pickling a list or a dict uses less local variables, to reduce
-  stack usage in the case of deeply nested objects.
-
-- Issue #3629: Fix sre "bytecode" validator for an end case.
-
-- Issue #3811: The Unicode database was updated to 5.1.
-
-- Issue #3781: Further warnings.catch_warnings() cleanup to prevent
-  silent misbehaviour when a single instance is nested in multiple
-  with statements, or when the methods are invoked in the wrong order.
-
-- Issue #3809: Fixed spurious 'test.blah' file left behind by test_logging.
-
-- Issue #3781: Clean up the API for warnings.catch_warnings() by having it
-  return a list or None rather than a custom object.
-
-- Issue #1638033: Cookie.Morsel gained the httponly attribute.
-
-- Issue #3535: zipfile couldn't read some zip files larger than 2GB.
-
-- Issue #3776: Deprecate the bsddb package for removal in 3.0.
-
-- Issue #3762: platform.architecture() fails if python is lanched via
-  its symbolic link.
-
-- Issue #3772: Fixed regression problem in StreamHandler.emit().
-
-- Issue #600362: Relocated parse_qs() and parse_qsl(), from the cgi module
-  to the urlparse one.  Added a PendingDeprecationWarning in the old
-  module, it will be deprecated in the future.
-
-- Issue #2562: Fix distutils PKG-INFO writing logic to allow having
-  non-ascii characters and Unicode in setup.py meta-data.
-
-- Issue #3726: Allow spaces in separators in logging configuration files.
-
-- Issue #3719: platform.architecture() fails if there are spaces in the
-  path to the Python binary.
-
-- Issue #3602: Moved test.test_support.catch_warning() to
-  warnings.catch_warnings() along with some API cleanup. Expanding the tests
-  for catch_warnings() also led to an improvement in the raising of a
-  DeprecationWarning related to warnings.warn_explicit().
-
-- The deprecation warnings for the old camelCase threading API were removed.
-
-- logging: fixed lack of use of encoding attribute specified on a stream.
-
-- Silenced a trivial compiler warning in the sqlite module.
-
-- Fixed two format strings in the _collections module.
-
-- Issue #3703: _fileio.FileIO gave unhelpful error message when trying to open a
-  directory.
-
-- Issue #3708: os.urandom no longer goes into an infinite loop when passed a
-  non-integer floating point number.
-
-- Issue #3110: multiprocessing fails to compiel on solaris 10 due to missing
-  SEM_VALUE_MAX.
-
-Extension Modules
------------------
-
-- Issue #4301: Patch the logging module to add processName support, remove
-  _check_logger_class from multiprocessing.
-
-- Issue #2975: When compiling several extension modules with Visual Studio 2008
-  from the same python interpreter, some environment variables would grow
-  without limit.
-
-- Issue #3643: Added a few more checks to _testcapi to prevent segfaults by
-  exploitation of poor argument checking.
-
-- sqlite3: Changed docstring of iterdump() to mark method as "Non-standard".
-
-- Issue #3103: Reduced globals symbols used by sqlite3 module and made sure all
-  remaining ones have "pysqlite_" prefix.
-
-- Issue #3846: Release the GIL during sqlite3_prepare calls. This improves
-  concurrent access to the same SQLite database from multiple
-  threads/processes.
-
-Tests
------
-
-- Issue #3781: Add test.test_support.check_warnings() as a convenience
-  wrapper for warnings.catch_warnings() that makes it easier to check
-  that expected warning messages are being reported.
-
-- Issue #3796: Some tests functions were not enabled in test_float.
-
-- Issue #3768: Move test_py3kwarn over to the new API for catch_warnings().
-
-Build
------
-
-- Issue #3833: Use a different upgrade code for Win64 installers.
-
-- Issue #2271: Set SecureCustomProperties so that installation will properly
-  use the TARGETDIR even for unprivileged users.
-
-- Allow passing the MSI file name to merge.py.
-
-- Issue #3758: Rename the 'check' target to 'patchcheck' so as to not clash
-  with GNU build target guidelines.
-
-
-What's New in Python 2.6 beta 3?
-================================
-
-*Release date: 20-Aug-2008*
-
-Core and Builtins
------------------
-
-- Issue #1878: Remove Py_TPFLAGS_HAVE_VERSION_TAG from
-  Py_TPFLAGS_DEFAULT when not building the core.  This means 3rd party
-  extensions do not automatically benefit from the class attribute
-  cache; they will have to explicitly add Py_TPFLAGS_HAVE_VERSION_TAG
-  to their tp_flags field if they care.  This is a backwards
-  compatibility feature; in 3.0, all types will use the cache by
-  default.
-
-- Keyword arguments can now follow starred arguments. (``f(a, *args,
-  keyword=23)`` is now valid syntax.)
-
-- ctypes function pointers that are COM methods have a boolean True
-  value again.
-
-- Issue #3139: Make buffer-interface thread-safe wrt. PyArg_ParseTuple,
-  by denying s# to parse objects that have a releasebuffer procedure,
-  and introducing s*.
-
-- Issue #3537: Fix an assertion failure when an empty but presized dict
-  object was stored in the freelist.
-
-- Issue #1481296: Make long(float('nan')) and int(float('nan')) raise
-  ValueError consistently across platforms.
-
-- Issue #3479: On platforms where sizeof(int) is smaller than sizeof(long)
-  (64bit Unix, for example), unichr() would truncate its argument and return
-  u'\x00' for unichr(2**32). Now it properly raises an OverflowError.
-
-- Apply security patches from Apple.
-
-- Issue #2542: Now that issubclass() may call arbitrary code, ensure that
-  PyErr_ExceptionMatches returns 0 when an exception occurs there.
-
-- Issue #1819: function calls with several named parameters are now on
-  average 35% faster (as measured by pybench).
-
-- Issue #2378: An unexpected UnboundLocalError or NameError could appear when
-  the python debugger steps into a class statement: the free variables (local
-  variables defined in an outer scope) would be deleted from the outer scope.
-
-- Issue #2620: Overflow checking when allocating or reallocating memory
-  was not always being done properly in some python types and extension
-  modules.  PyMem_MALLOC, PyMem_REALLOC, PyMem_NEW and PyMem_RESIZE have
-  all been updated to perform better checks and places in the code that
-  would previously leak memory on the error path when such an allocation
-  failed have been fixed.
-
-Library
--------
-
-- Issue #3612: Added some missing basic types in ctypes.wintypes.
-
-- The methods ``is_in_tuple()``, ``is_vararg()``, and ``is_keywordarg()`` of
-  symtable.Symbol have been deprecated for removal in 3.0 and the next release.
-
-- Issue #2234: distutils failed for some versions of the cygwin compiler. The
-  version reported by these tools does not necessarily follow the python
-  version numbering scheme, so the module is less strict when parsing it.
-
-- Issue #2235: Added Py3k warnings for types which will become unhashable
-  under the stricter __hash__ inheritance rules in 3.0. Several types
-  which did not meet the rules for hash invariants and were already
-  unhashable in 3.0 have now been explicitly flagged as unhashable in
-  2.6 as well (collections.Mapping, collections.Set, unittest.TestSuite,
-  xml.dom.minidom.NamedNodeMap, numbers.Number, UserList.UserList)
-
-- Update __all__ for cookielib, csv, os, urllib2, and weakref to include things
-  imported into the module but exposed as part of the module's API.
-
-- Remove an unneeded import of abc.ABCMeta from 'inspect'.
-
-- Remove unneeded imports of 'sys' and 'warnings' from 'io'.
-
-- Remove unneeded imports of 'warnings' from shelve, filecmp, and dummy_thread.
-
-- Issue #3575: Incremental decoder's decode function now takes bytearray
-  by using 's*' instead of 't#'.
-
-- Issue #2222: Fixed reference leak when occurred os.rename()
-  fails unicode conversion on 2nd parameter. (windows only)
-
-- Issue #2464: urllib2 now supports a malformation in the URL received
-  in a redirect.
-
-- Silence the DeprecationWarning raised when importing mimetools in
-  BaseHTTPServer, cgi (and rfc822), httplib.
-
-- Issue #2776: fixed small issue when handling a URL with double slash
-  after a 302 response in the case of not going through a proxy.
-
-- Issue #2676: in the email package, content-type parsing was hanging on
-  pathological input because of quadratic or exponential behaviour of a
-  regular expression.
-
-- Issue #3476: binary buffered reading through the new "io" library is now
-  thread-safe.
-
-- Silence the DeprecationWarning of rfc822 when it is imported by mimetools
-  since mimetools itself is deprecated. Because modules are cached, all
-  subsequent imports of rfc822 will not raise a visible DeprecationWarning.
-
-- Issue #3134: shutil referenced undefined WindowsError symbol.
-
-- Issue #1342811: Fix leak in Tkinter.Menu.delete. Commands associated to
-  menu entries were not deleted.
-
-- Copied the implementation of reduce() to _functools.reduce() to have a
-  version that did not raise a DeprecationWarning under -3.
-
-- Issue #3205: When iterating over a BZ2File fails allocating memory, raise
-  a MemoryError rather than silently stop the iteration.
-
-- Issue #3487: sre "bytecode" validator.  Passing invalid "re-bytecode"
-  to _sre.compile() will now be rejected.  This should not affect anybody
-  since the re.compile() function never generates invalid re-bytecode.
-
-- Issue #3436: Make csv.DictReader's fieldnames attribute a property so that
-  upon first access it can be automatically initialized from the csv file if
-  it wasn't initialized during instantiation.
-
-- Issue #2338: Create imp.reload() to help with transitioning to Python 3.0 as
-  the reload() built-in has been removed.
-
-- Changed code in the following modules/packages to remove warnings raised
-  while running under the ``-3`` flag: aifc, asynchat, asyncore, bdb, bsddb,
-  ConfigParser, cookielib, csv, difflib, distutils, DocXMLRPCServer, email,
-  filecmp, fileinput, inspect, logging, modulefinder, pdb, pickle, profile,
-  pstats, pydoc, re, rlcompleter, SimpleXMLRPCServer, shelve, socket,
-  subprocess, sqlite3, tarfile, Tkinter, test.test_support, textwrap,
-  threading, tokenize, traceback, urlparse, wsgiref, xml, xmlrpclib.
-
-- Issue #3039: Fix tarfile.TarFileCompat.writestr() which always
-  raised an AttributeError.
-
-- Issue #2523: Fix quadratic behaviour when read()ing a binary file without
-  asking for a specific length. This problem only affected files opened
-  using the new "io" module, not the built-in open() function.
-
-- Issue #3449: Update decimal module to use most recent specification
-  (v. 1.68) and tests (v. 2.58) from IBM.
-
-- Issue #3437: Bug fix in robotparser parsing of Allow: lines.
-
-- Issue #1592: Improve error reporting when operations are attempted
-  on a closed shelf.
-
-- Deprecate the "ast" parser function aliases.
-
-- Issue #3120: On 64-bit Windows the subprocess module was truncating handles.
-
-- Issue #3303: Fix a crash in locale.strcoll() when calling it with
-  invalid arguments.
-
-- Issue #3302: Fix several crashes when calling locale's gettext functions
-  with None arguments.
-
-- Issue #3389: Allow resolving dotted names for handlers in logging
-  configuration files.
-
-- Deprecate the sunaudio module for removal in Python 3.0.
-
-- Issue #3394: zipfile.writestr sets external attributes when passed a
-  file name rather than a ZipInfo instance, so files are extracted with
-  mode 0600 rather than 000 under Unix.
-
-- Issue #1857: subprocess.Popen.poll gained an additional _deadstate keyword
-  argument in python 2.5, this broke code that subclassed Popen to include its
-  own poll method.  Fixed my moving _deadstate to an _internal_poll method.
-
-Build
------
-
-- Generate the PatternGrammar pickle during "make install".
-
-Documentation
--------------
-
-- Issue #2235: the C API function PyObject_HashNotImplemented and its
-  interaction with the tp_hash slot (added in 2.6b2) are now documented
-
-- Issue #643841: The language reference now provides more detailed
-  coverage of the lookup process for special methods. The disclaimers
-  regarding lack of coverage of new-style classes have also been
-  removed, since the coverage is now fairly reasonable.
-
-
-What's New in Python 2.6 beta 2?
-================================
-
-*Release date: 17-Jul-2008*
-
-Core and Builtins
------------------
-
-- Issue #3156: Fix inconsistent behavior of the bytearray type: all
-  its methods now allow for items objects that can be converted to
-  an integer using operator.index().
-
-- Issue #3360: Fix incorrect parsing of '020000000000.0', which
-  produced a ValueError instead of giving the correct float.
-
-- Issue #3083: Add alternate (#) formatting for bin, oct, hex output
-  for str.format().  This adds the prefix 0b, 0o, or 0x, respectively.
-
-- Issue #3008: the float type has a new instance method 'float.hex'
-  and a new class method 'float.fromhex' to convert floating-point
-  numbers to and from hexadecimal strings, respectively.
-
-- Issue #2235: __hash__ is once again inherited by default. To allow
-  collections.Hashable to remain meaningful in the presence of the
-  default hash implementation (object.__hash__), it is now possible
-  to explicit block inheritance of hash by setting __hash__=None at
-  the Python level, or tp_hash=PyObject_HashNotImplemented at the C
-  level.
-
-- Issue #3221: Issue a RuntimeWarning instead of raising SystemError if
-  the parent module cannot be found while performing an absolute import.
-  This means that an incorrectly defined __package__ attribute will
-  now only prevent relative imports in that module rather than causing
-  all imports from that module to fail.
-
-- Issue #2517: Allow unicode messages in Exceptions again by correctly
-  bypassing the instance dictionary when looking up __unicode__ on
-  new-style classes.
-
-- Issue #3242: Fix a crash inside the print statement, if sys.stdout is
-  set to a custom object whose write() method happens to install
-  another file in sys.stdout.
-
-- Issue #3088: Corrected a race condition in classes derived from
-  threading.local: the first member set by a thread could be saved in
-  another thread's dictionary.
-
-- Issue #3004: Minor change to slice.indices(): the start and stop
-  arguments are now treated identically, making the behaviour easier
-  to describe and understand.  For example, slice(None, -10,
-  1).indices(9) now returns (0, 0, 1) instead of (0, -1, 1), and
-  slice(None, 10, -1).indices(10) returns (9, 9, -1) instead of (9,
-  10, -1).
-
-- Issue #3219: Calling a function with repeated keyword arguments,
-  f(a=2, a=23), would not cause a syntax error.  This was a regression
-  from 2.4 caused by the switch to the new compiler.
-
-- Issue #2862: Make int and float freelist management consistent with
-  other freelists.  Changes their CompactFreeList apis into
-  ClearFreeList apis and calls them via gc.collect().
-
-Library
--------
-
-- Issue #3554: ctypes.string_at and ctypes.wstring_at did call Python
-  api functions without holding the GIL, which could lead to a fatal
-  error when they failed.
-
-- Issue #799428: Fix Tkinter.Misc._nametowidget to unwrap Tcl command objects.
-
-- Issue #3395: fix reference in test_multiprocessing to old debugInfo method
-
-- Issue #3312: Fix two crashes in sqlite3.
-
-- Issue #1608818: Fix misbehavior in os.listdir() if readdir() fails.
-
-- Issue #3125: Remove copy_reg in multiprocessing and replace it with
-  ForkingPickler.register() to resolve conflict with ctypes.
-
-- Issue #3090: Fixed ARCHFLAGS parsing on OS/X
-
-- Issue #3313: Fixed a crash when a failed dlopen() call does not set
-  a valid dlerror() message.
-
-- Issue #3258: Fixed a crash when a ctypes POINTER type to an
-  incomplete structure was created.
-
-- Issue #3339: dummy_thread.acquire() should not return None.
-
-- Issue #3285: Fractions from_float() and from_decimal() accept Integral arguments.
-
-- Issue #3301: Bisect module behaved badly when lo was negative.
-
-- Issue #839496: SimpleHTTPServer used to open text files in text mode. This is
-  both unnecessary (HTTP allows text content to be sent in several forms) and
-  wrong because the actual transmitted size could differ from the
-  content-length.  The problem had been corrected in the 2.4 branch, but never
-  merged into trunk.
-
-- Issue #2663: add filtering capability to shutil.copytree().
-
-- Issue #1622: Correct interpretation of various ZIP header fields.
-
-- Issue #1526: Allow more than 64k files to be added to Zip64 file.
-
-- Issue #1746: Correct handling of zipfile archive comments (previously
-  archives with comments over 4k were flagged as invalid). Allow writing
-  Zip files with archives by setting the 'comment' attribute of a ZipFile.
-
-- Issue #449227: The rlcompleter module now adds "(" to callable objects
-  when completed.
-
-- Issue #3190: Pydoc now hides the automatic module attribute __package__ (the
-  handling is now the same as that of other special attributes like __name__).
-
-- Issue #2885 (partial): The urllib.urlopen() function has been deprecated for
-  removal in Python 3.0 in favor of urllib2.urlopen().
-
-- Issue #2113: Fix error in subprocess.Popen if the select system call is
-  interrupted by a signal.
-
-- Issue #3309: Fix bz2.BZFile iterator to release its internal lock
-  properly when raising an exception due to the bz2file being closed.
-  Prevents a deadlock.
-
-- Issue #3094: httplib.HTTPSConnection Host: headers no longer include the
-  redundant ":443" port number designation when the connection is using the
-  default https port (443).
-
-- Issue #874900: after an os.fork() call the threading module state is cleaned
-  up in the child process to prevent deadlock and report proper thread counts
-  if the new process uses the threading module.
-
-Tests
------
-
-- test.test_support.catch_warning now keeps track of all warnings it sees
-  and is now better documented. Explicit unit tests for this context manager
-  have been added to test_warnings.
-
-Build
------
-
-- Issue #3215: Build sqlite3 as sqlite3.dll, not sqlite3.pyd.
-
-Documentation
--------------
-
-- Document that robotparser has been renamed to urllib.robotparser in
-  Python 3.0.
-
-- Document that urlparse has been renamed to urllib.parse in Python 3.0.
-
-- Document that urllib2 is split across multiple modules and renamed in
-  Python 3.0.
-
-- Document that urllib is split across multiple modules and renamed in
-  Python 3.0.
-
-
-What's New in Python 2.6 beta 1?
-================================
-
-*Release date: 18-June-2008*
-
-Core and Builtins
------------------
-
-- Issue #3211: warnings.warn_explicit() did not guard against its 'registry'
-  argument being anything other than a dict or None. Also fixed a bug in error
-  handling when 'message' and 'category' were both set to None, triggering a
-  bus error.
-
-- Issue #3100: Corrected a crash on deallocation of a subclassed weakref which
-  holds the last (strong) reference to its referent.
-
-- Add future_builtins.ascii().
-
-- Several set methods now accept multiple arguments: update(), union(),
-  intersection(), intersection_update(), difference(), and difference_update().
-
-- Issue #2898: Added sys.getsizeof() to retrieve size of objects in bytes.
-
-- New environment variable PYTHONIOENCODING.
-
-- Patch #2488: Add sys.maxsize.
-
-- Issue #2353: file.xreadlines() now emits a Py3k warning.
-
-- Issue #2863: generators now have a ``gen.__name__`` attribute that
-  equals ``gen.gi_code.co_name``, like ``func.__name___`` that equals
-  ``func.func_code.co_name``.  The repr() of a generator now also
-  contains this name.
-
-- Issue #2831: enumerate() now has a ``start`` argument.
-
-- Issue #2801: fix bug in the float.is_integer method where a
-  ValueError was sometimes incorrectly raised.
-
-- Issue #2790: sys.flags was not properly exposing its bytes_warning
-  attribute.
-
-- Issue #2196: hasattr() now lets exceptions which do not inherit
-  Exception (KeyboardInterrupt, and SystemExit) propagate instead of
-  ignoring them.
-
-- Added checks for integer overflows, contributed by Google. Some are
-  only available if asserts are left in the code, in cases where they
-  can't be triggered from Python code.
-
-Extension Modules
------------------
-- Issue #1179: [CVE-2007-4965] Integer overflow in imageop module.
-
-- Issue #3116: marshal.dumps() had quadratic behavior for strings > 32Mb.
-
-- Issue #2138: Add factorial() to the math module.
-
-- The heapq module does comparisons using LT instead of LE.  This
-  makes its implementation match that used by list.sort().
-
-- Issue #2819: add full-precision summation function to math module,
-  based on Hettinger's ASPN Python Cookbook recipe.
-
-- Issue #2592: delegate nb_index and the floor/truediv slots in
-  weakref.proxy.
-
-- Support os.O_ASYNC and fcntl.FASYNC if the constants exist on the
-  platform.
-
-- Support for Windows 9x has been removed from the winsound module.
-
-- bsddb module updated to version 4.7.3.
-  http://www.jcea.es/programacion/pybsddb.htm#bsddb3-4.7.3. This
-  code should be compatible with Python 3.0.
-
-- Issue #2858: Fix potential memory corruption when
-  bsddb.db.DBEnv.lock_get and other bsddb.db object constructors
-  raised an exception.
-
-- Issue #2669: bsddb/__init__.py iteration no longer silently fails when
-  the database has changed size during iteration.  It now raises a
-  RuntimeError in the same manner as a dictionary.
-
-- Issue #2870: cmathmodule.c compile error.
-
-- Added a threading.Thread.ident property.
-
-Library
--------
-
-- logging.config: Removed out-of-date comment in _install_handlers and
-  used issubclass in place of equality comparison of classes.
-
-- Issue #2722: Now the os.getcwd() supports very long path names.
-
-- Issue #2888: Fixed the behaviour of pprint when working with nested
-  structures, to match the behaviour of 2.5 and 3.0 (now follows the common
-  sense).
-
-- Issue #1817: cgi now correctly handles the querystring on POST requests
-
-- Issue #3136: fileConfig()'s disabling of old loggers is now conditional via
-  an optional disable_existing_loggers parameter, but the default value is
-  such that the old behaviour is preserved. Thanks to Leandro Lucarella for
-  the patch.
-
-- Issue #3126: StreamHandler and FileHandler check before calling "flush" and
-  "close" that the stream object has these, using hasattr (thanks to bobf for
-  the patch).
-
-- Issue #2912: platform.uname now tries to determine unknown information even if
-  os.uname exists.
-
-- The rfc822 module has been deprecated for removal in 3.0.
-
-- The mimetools module has been deprecated for removal in 3.0.
-
-- The ctypes.byref function now takes an optional second parameter
-  which specifies an offset in bytes for the constructed pointer-like object.
-
-- Added the ast module.
-
-- Added the multiprocessing module, PEP 371.
-
-- Factored out the indentation cleaning from inspect.getdoc() into
-  inspect.cleandoc() to ease standalone use.
-
-- Issue #1798: Add ctypes calling convention that allows safe access
-  to errno.
-
-- Issue #2404: ctypes objects support the new pep3118 buffer interface.
-
-- Patch #2125: Add GetInteger and GetString methods for
-  msilib.Record objects.
-
-- Issue #2782: The datetime module's strftime methods now accept
-  unicode format strings just as time.strftime always has.
-
-- The sgmllib and htmllib modules have been deprecated for removal
-  in Python 3.0.
-
-- Issue #3011: locale module alias table was updated to the latest
-  version from the X.org locale.alias file.
-
-- Issue #1797 (partial fix): ctypes NULL function pointers have a
-  False boolean value now.
-
-- Issue #2985: Allow 64-bit integer responses (``<i8>``) in XMLRPC
-  transfers.
-
-- Issue #2877: The UserString.MutableString class has been removed in
-  Python 3.0.
-
-- Do not close external file objects passed to tarfile.open(mode='w:bz2')
-  when the TarFile is closed.
-
-- Issue #2959: For consistency with other file-like objects, gzip's
-  GzipFile.close() can now be called multiple times without raising
-  an exception.
-
-- Issue #1390: Raise ValueError in toxml when an invalid comment would
-  otherwise be produced.
-
-- Issue #2914: TimedRotatingFileHandler now takes an optional keyword
-  argument "utc" to use UTC time rather than local time.
-
-- Issue #2929: TimedRotatingFileHandler was using the wrong path when
-  deleting old log files (filename only instead of full path).
-
-- Issue #1775025: You can now specify zipfile members to open(),
-  read() or extract() via a ZipInfo instance.  This allows handling
-  duplicate filenames in zipfiles.
-
-- Issue #961805: Fix Text.edit_modified() in Tkinter.
-
-- Issue #1793: Function ctypes.util.find_msvcrt() added that returns
-  the name of the C runtime library that Python uses.
-  ctypes.util.find_library(name) now call this function when name is
-  'm' or 'c'.
-
-- The statvfs module has been deprecated for removal in Python 3.0.
-
-- The sunaudiodev and SUNAUDIODEV modules have been deprecated for
-  removal in Python 3.0.
-
-- The WAIT module from IRIX has been deprecated for removal in Python
-  3.0.
-
-- The torgb module from IRIX has been deprecated for removal in Python
-  3.0.
-
-- The SV module from IRIX has been deprecated for removal in Python
-  3.0.
-
-- The readcd module from IRIX has been deprecated for removal in
-  Python 3.0.
-
-- The panelparser module from IRIX has been deprecated for removal in
-  Python 3.0.
-
-- The panel module from IRIX has been deprecated for removal in Python
-  3.0.
-
-- The jpeg module from IRIX has been deprecated for removal in Python
-  3.0.
-
-- The IOCTL module from IRIX has been deprecated for removal in Python
-  3.0.
-
-- The IN module from IRIX has been deprecated for removal in Python
-  3.0.
-
-- The imgfile module from IRIX has been deprecated for removal in
-  Python 3.0.
-
-- The GLWS module from IRIX has been deprecated for removal in Python
-  3.0.
-
-- The GET module from IRIX has been deprecated for removal in Python
-  3.0.
-
-- The fm module from IRIX has been deprecated for removal in Python
-  3.0.
-
-- The FL, flp, and fl modules from IRIX have been deprecated for
-  removal in Python 3.0.
-
-- The FILE module on IRIX has been deprecated for removal in Python
-  3.0.
-
-- The ERRNO module on IRIX has been deprecated for removal in Python
-  3.0.
-
-- The DEVICE, GL, gl, and cgen modules (which indirectly includes
-  cgensupport) have been deprecated for removal in Python 3.0.
-
-- The CL, CL_old, and cl modules for IRIX have been deprecated for
-  removal in Python 3.0.
-
-- The cdplayer module for IRIX has been deprecated for removal in
-  Python 3.0.
-
-- The cddb module for IRIX has been deprecated for removal in Python
-  3.0.
-
-- The cd and CD modules for IRIX have been deprecated for removal in
-  Python 3.0.
-
-- The al and AL modules for IRIX have been deprecated for removal in
-  Python 3.0.
-
-- Issue #1713041: fix pprint's handling of maximum depth.
-
-- The timing module has been deprecated for removal in Python 3.0.
-
-- The sv module has been deprecated for removal in Python 3.0.
-
-- The multifile module has been deprecated as per PEP 4.
-
-- The imageop module has been deprecated for removal in Python 3.0.
-
-- Issue #2250: Exceptions raised during evaluation of names in
-  rlcompleter's ``Completer.complete()`` method are now caught and
-  ignored.
-
-- Issue #2659: Added ``break_on_hyphens`` option to textwrap
-  TextWrapper class.
-
-- The mhlib module has been deprecated for removal in Python 3.0.
-
-- The linuxaudiodev module has been deprecated for removal in Python
-  3.0.
-
-- The ihooks module has been deprecated for removal in Python 3.0.
-
-- The fpformat module has been deprecated for removal in Python 3.0.
-
-- The dl module has been deprecated for removal in Python 3.0.
-
-- The Canvas module has been deprecated for removal in Python 3.0.
-
-- The compiler package has been deprecated for removal in Python 3.0.
-
-- The Bastion and rexec modules have been deprecated for removal in
-  Python 3.0.
-
-- The bsddb185 module has been deprecated for removal in Python 3.0.
-
-- The pure module has been deprecated for removal in Python 3.0.
-
-- Issue #2487: change the semantics of math.ldexp(x, n) when n is too
-  large to fit in a C long.  ldexp(x, n) now returns a zero (with
-  suitable sign) if n is large and negative; previously, it raised
-  OverflowError.
-
-- The toaiff module has been deprecated for removal in Python 3.0.
-
-- The test.testall module has been deprecated for removal in Python
-  3.0.
-
-- The new module has been deprecated for removal in Python 3.0.
-
-- The user module has been deprecated for removal in Python 3.0.
-
-- The stringold module has been deprecated for removal in Python 3.0.
-
-- The mutex module has been deprecated for removal in Python 3.0.
-
-- The imputil module has been deprecated for removal in Python 3.0.
-
-- test.test_support.catch_warning() gained a 'record' argument.
-
-- os.path.walk is deprecated in favor of os.walk.
-
-- pdb gained the "until" command.
-
-- The Mac Modules (including Carbon) have been deprecated for removal
-  in Python 3.0.
-
-- Library: on MacOS X you can now set ``ARCHFLAGS`` in the shell
-  environment to control the '-arch' flags that are used to build
-  an extension. This was added for compatibility with Apple's build
-  of Python.
-
-- The bundled OSX-specific copy of libbffi is now in sync with the version
-  shipped with PyObjC 2.0 and includes support for x86_64 and ppc64 platforms.
-
-- The threading module gained aliases for names that will be removed in the
-  3.x series.
-
-Build
------
-
-- The Windows installer now includes Tk 8.5, bzip2 1.0.5, and SQLite 3.5.9.
-
-- Patch #1722225: Support QNX 6.
-
-- ``Lib/lib-old`` is now added to sys.path.
-
-- On MacOS X it is now possible to install the framework in 64-bit
-  mode or even as a 4-way universal binary (that is, PPC, i386,
-  PPC64 and x86_64 support in one binary).
-
-  This is controlled by the configure argument ``--with-universal-archs``:
-
-  - ``--with-universal-archs=all``: install 4-way universal
-
-  - ``--with-universal-archs=32-bit``: install 2-way universal, 32-bit (the default)
-
-  - ``--with-universal-archs=64-bit``: install 2-way universal, 64-bit
-
-  This option should be used in combination with ``--enable-universalsdk=``.
-
-  NOTE: 64-bit and 4-way builds are only suppported on Mac OS X 10.5 (or later).
-
-C API
------
-
-- Add ``PyType_Modified()`` as a public API to clear the type cache.
-
-- The PyBytes functions have been renamed to PyByteArray.
-
-- The PyString functions have been renamed to PyBytes. A batch of
-  defines were added so that the linker still sees the original
-  PyString names.
-
-
-What's New in Python 2.6 alpha 3?
-=================================
-
-*Release date: 08-May-2008*
-
-Core and builtins
------------------
-
-- Issue #2719: backported the ``next()`` builtin from Python 3.
-
-- Issue #2681: The octal literal ``0o8`` was incorrecly acctepted. Now
-  it properly raises a SyntaxError.
-
-- Issue #2617: Reserved -J and -X arguments for Jython, IronPython and
-  other implementations of Python.
-
-- Implemented PEP 370: Per user site-packages directory.
-
-Extension Modules
------------------
-
-- Issue #2670: Fix a failure in urllib2.build_opener(), when passed
-  two handlers that derive the same default base class.
-
-- Added kill, terminate and send_signal(sig) to subprocess.Popen.
-
-- Added phase(z) -> phi, polar(z) -> r, phi and rect(r, phi) -> z to
-  the cmath module.
-
-- Four new methods were added to the math and cmath modules: acosh,
-  asinh, atanh and log1p.
-
-- zlib.decompressobj().flush(value) no longer crashes the interpreter
-  when passed a value less than or equal to zero.
-
-- Issue #1631171: Re-implement the 'warnings' module in C (the
-  original Python code has been kept as backup). This will allow for
-  using the 'warning's machinery in such places as the parser where
-  use of pure Python code is not possible.  Both the ``showarning()``
-  and ``formatwarning()`` gain an optional 'line' argument which is
-  not called by default for backwards-compatibility reasons. Setting
-  ``warnings.showwarning()`` to an implementation that lacks support
-  for the ``line`` argument will raise a DeprecationWarning.
-
-Library
--------
-
-- The audiodev module has been deprecated for removal in Python 3.0.
-
-- Issue #2750: Add the 'json' package. Based on simplejson 1.9 and
-  contributed by Bob Ippolito.
-
-- Issue #1734346: Support Unicode file names for zipfiles.
-
-- Issue #2581: distutils: Vista UAC/elevation support for
-  bdist_wininst.
-
-- Issue #2635: Fix bug in 'fix_sentence_endings' textwrap.fill option,
-  where an extra space was added after a word containing (but not
-  ending in) '.', '!' or '?'.
-
-- Add from_buffer() and from_buffer_copy() class methods to ctypes
-  data types.
-
-- Issue #2682: ctypes callback functions no longer contain a cyclic
-  reference to themselves.
-
-- The getpass module has been improved on Unix.  It now uses /dev/tty
-  by default and uses stderr instead of stdout.  A GetPassWarning is
-  issued when input echo cannot be controlled.
-
-- Issue #2014: Allow XML-RPC datetime objects to have dates before
-  1900-01-01.
-
-- Issue #2439: Added new function pkgutil.get_data(), which is a
-  convenience wrapper for the PEP 302 get_data() API.
-
-- Issue #2616: The ctypes.pointer() and ctypes.POINTER() functions are
-  now implemented in C for better performance.
-
-- Issue #2408: The ``_types`` module, which was used as in
-  implementation detail of the public ``types`` module, has been
-  removed and replaced by pure python code.
-
-- Issue #2513: distutils on Windows is now capable of cross-compiling
-  extension modules between 32 and 64 bit platforms.  See the distutls
-  build documentation for more information.
-
-- Issue #815646: Individual file objects may now be used from multiple
-  threads at once without fear of crashing the Python interpreter.  If
-  file.close() is called while an object is in use by another thread
-  an IOError exception will be raised and the file will not be closed.
-
-- The bundled libffi copy is now in sync with the recently released
-  libffi3.0.5 version, apart from some small changes to
-  Modules/_ctypes/libffi/configure.ac.
-
-- Issue #2385: distutils.core.run_script() makes __file__ available,
-  so the controlled environment will more closely mirror the typical
-  script environment.  This supports setup.py scripts that refer to
-  data files.
-
-Tests
------
-
-- Issue #2550: The approach used by client/server code for obtaining
-  ports to listen on in network-oriented tests has been refined in an
-  effort to facilitate running multiple instances of the entire
-  regression test suite in parallel without issue.
-  test_support.bind_port() has been fixed such that it will always
-  return a unique port -- which wasn't always the case with the
-  previous implementation, especially if socket options had been set
-  that affected address reuse (i.e. SO_REUSEADDR, SO_REUSEPORT).  The
-  new implementation of bind_port() will actually raise an exception
-  if it is passed an AF_INET/SOCK_STREAM socket with either the
-  SO_REUSEADDR or SO_REUSEPORT socket option set.  Furthermore, if
-  available, bind_port() will set the SO_EXCLUSIVEADDRUSE option on
-  the socket it's been passed.  This currently only applies to
-  Windows.  This option prevents any other sockets from binding to the
-  host/port we've bound to, thus removing the possibility of the
-  'non-deterministic' behaviour, as Microsoft puts it, that occurs
-  when a second SOCK_STREAM socket binds and accepts to a host/port
-  that's already been bound by another socket.  The optional preferred
-  port parameter to bind_port() has been removed.  Under no
-  circumstances should tests be hard coding ports!
-
-  test_support.find_unused_port() has also been introduced, which will
-  pass a temporary socket object to bind_port() in order to obtain an
-  unused port.  The temporary socket object is then closed and
-  deleted, and the port is returned.  This method should only be used
-  for obtaining an unused port in order to pass to an external program
-  (i.e. the -accept [port] argument to openssl's s_server mode) or as
-  a parameter to a server-oriented class that doesn't give you direct
-  access to the underlying socket used.
-
-  Finally, test_support.HOST has been introduced, which should be used
-  for the host argument of any relevant socket calls (i.e. bind and
-  connect).
-
-  The following tests were updated to following the new conventions:
-    test_socket, test_smtplib, test_asyncore, test_ssl, test_httplib,
-    test_poplib, test_ftplib, test_telnetlib, test_socketserver,
-    test_asynchat and test_socket_ssl.
-
-  It is now possible for multiple instances of the regression test
-  suite to run in parallel without issue.
-
-Build
------
-
-- Issue #1496032: On alpha, use -mieee when gcc is the compiler.
-
-- Issue #2544: On HP-UX systems, use 'gcc -shared' for linking when
-  gcc is used as compiler.
-
-- Issue #2573: On MacOS X it is now possible to install the framework
-  with a different name using --with-framework-name=NAME.
-
-C API
------
-
-- Added implementation of copysign, acosh, asinh, atanh and log1p to
-  the new files Include/pymath.h and Python/pymath.h for platforms
-  which provide the functions through their libm. The files also
-  contains several helpers and constants for math.
-
-- Added a new convenience macro, PyErr_WarnPy3k, for issuing Py3k warnings.
-
-
-What's New in Python 2.6 alpha 2?
-=================================
-
-*Release date: 02-Apr-2008*
-
-Core and builtins
------------------
-
-- Issue #1733757: The interpreter would hang on shutdown if the
-  tracing function set by sys.settrace is still active and happens to
-  call threading.currentThread().
-
-- Patch #1442: properly report exceptions when the PYTHONSTARTUP file
-  cannot be executed.
-
-- The compilation of a class nested in another class used to leak one
-  reference on the outer class name.
-
-- Patch #1810: compile() can now compile _ast trees as returned by
-  ``compile(..., PyCF_ONLY_AST)``.
-
-- Patch #2426: Added sqlite3.Connection.iterdump method to allow easy
-  dumping of databases.  Contributed by Paul Kippes at PyCon 2008.
-
-- Patch #2477: Added from __future__ import unicode_literals.
-
-- Added backport of bytearray type.
-
-- Issue #2355: add Py3k warning for buffer().
-
-- Issue #1477: With narrow Unicode builds, the unicode escape sequence
-  \Uxxxxxxxx did not accept values outside the Basic Multilingual
-  Plane.  This affected raw unicode literals and the
-  'raw-unicode-escape' codec.  Now UTF-16 surrogates are generated in
-  this case, like normal unicode literals and the 'unicode-escape'
-  codec.
-
-- Issue #2348: add Py3k warning for file.softspace.
-
-- Issue #2346/#2347: add Py3k warnings for __methods__ and
-  __members__.
-
-- Issue #2358: Add a Py3k warning on sys.exc_clear() usage.
-
-- Issue #2400: Allow relative imports to "import *".
-
-- Issue #1745: Backport print function with ``from __future__ import
-  print_function``.
-
-- Issue #2332: add new attribute names for instance method objects.
-  The two changes are: im_self -> __self__ and im_func -> __func__
-
-- Issue #2379: Raise a Py3K warning for __getitem__ or __getslice__ on
-  exception instances.
-
-- Issue #2371: Add a Py3k warning when catching an exception that
-  doesn't derive from BaseException.
-
-- Issue #2341: Add a Py3k warning when raising an exception that
-  doesn't derive from BaseException.
-
-- Issue #2321: use pymalloc for unicode object string data to reduce
-  memory usage in some circumstances.
-
-- PEP 3127: octal literals now start with "0o". Old-style octal
-  literals are still valid. There are binary literals with a prefix of
-  "0b".  This also affects int(x, 0).
-
-- Issue #2359: Adding deprecation warnings for array.{read,write}.
-
-- Issue #1779871: GNU gcc can now build Python on OS X because the
-  flags -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd are no
-  longer passed.
-
-- Add a warning when asserting a non-empty tuple which is always true.
-
-- Issue #2179: speed up with statement execution by storing the exit
-  method on the stack instead of in a temporary variable (patch by
-  Jeffrey Yaskin)
-
-- Issue #2238: Some syntax errors in *args and **kwargs expressions
-  could give bogus error messages.
-
-- Issue #2143: Fix embedded readline() hang on SSL socket EOF.
-
-Extension Modules
------------------
-
-- Patch #2240: Implement signal.setitimer and signal.getitimer.
-
-Library
--------
-
-- Issue #2315: logging.handlers: TimedRotatingFileHandler now accounts
-  for daylight savings time in calculating the next rollover.
-
-- Issue #2316: logging.handlers: TimedRotatingFileHandler now
-  calculates rollovers correctly even when nothing is logged for a
-  while.
-
-- Issue #2317: logging.handlers: TimedRotatingFileHandler now uses
-  improved logic for removing old files.
-
-- Issue #2495: tokenize.untokenize now inserts a space between two
-  consecutive string literals; previously, ["" ""] was rendered as
-  [""""], which is incorrect python code.
-
-- Issue #2248: return the result of the QUIT command. from
-  SMTP.quit().
-
-- Backport of Python 3.0's io module.
-
-- Issue #2482: Make sure that the coefficient of a Decimal is always
-  stored as a str instance, not as a unicode instance.  This ensures
-  that str(Decimal) is always an instance of str.
-
-- Issue #2478: fix failure of decimal.Decimal(0).sqrt()
-
-- Issue #2432: give DictReader the dialect and line_num attributes
-  advertised in the docs.
-
-- Issue #2460: Make Ellipsis object copyable.
-
-- Issue #1681432: Add triangular distribution to the random module
-
-- Issue #2136: urllib2's auth handler now allows single-quoted realms
-  in the WWW-Authenticate header.
-
-- Issue #2434: Enhanced platform.win32_ver() to also work on Python
-  installation which do not have the win32all package installed.
-
-- Added support to platform.uname() to also report the machine and
-  processor information on Windows XP and later. As a result,
-  platform.machine() and platform.processor() will report this
-  information as well.
-
-- The library implementing the 2to3 conversion, lib2to3, was added to
-  the standard distribution.
-
-- Issue #1747858: Fix chown to work with large uid's and gid's on
-  64-bit platforms.
-
-- Issue #1202: zlib.crc32 and zlib.adler32 no longer return different
-  values on 32-bit vs. 64-bit python interpreters.  Both were correct,
-  but they now both return a signed integer object for consistency.
-
-- Issue #1158: add %f format (fractions of a second represented as
-  microseconds) to datetime objects.  Understood by both strptime and
-  strftime.
-
-- Issue #705836: struct.pack(">f", x) now raises OverflowError on all
-  platforms when x is too large to fit into an IEEE 754 float;
-  previously it only raised OverflowError on non IEEE 754 platforms.
-
-- Issues #2166, #1741 and #1531505: now distutils deals with HOME
-  correctly under win32
-
-- Patch #1858: distutils: added multiple server support in .pypirc
-
-- Issue #1106316: pdb.post_mortem()'s parameter, "traceback", is now
-  optional: it defaults to the traceback of the exception that is
-  currently being handled (is mandatory to be in the middle of an
-  exception, otherwise it raises ValueError).
-
-- Issue #1193577: A .shutdown() method has been added to SocketServers
-  which terminates the .serve_forever() loop.
-
-- Issue #2220: handle rlcompleter attribute match failure more
-  gracefully.
-
-- Issue #2225: py_compile, when executed as a script, now returns a
-  non- zero status code if not all files could be compiled
-  successfully.
-
-- Bug #1725737: In distutils' sdist, exclude RCS, CVS etc. also in the
-  root directory, and also exclude .hg, .git, .bzr, and _darcs.
-
-- Issue #1872: The struct module typecode for _Bool has been changed
-  from 't' to '?'.
-
-- The bundled libffi copy is now in sync with the recently released
-  libffi3.0.4 version, apart from some small changes to
-  Modules/_ctypes/libffi/configure.ac.  On OS X, preconfigured libffi
-  files are used.  On all linux systems the --with-system-ffi
-  configure option defaults to "yes".
-
-- Issue #1577: shutil.move() now calls os.rename() if the destination
-  is a directory instead of copying-then-remove-source.
-
-Tests
------
-
-- test_nis no longer fails when test.test_support.verbose is true and
-  NIS is not set up on the testing machine.
-
-- Output comparison tests are no longer supported.
-
-- Rewrite test_errno to use unittest and no longer be a no-op.
-
-- GHOP 234: Convert test_extcall to doctest.
-
-- GHOP 290: Convert test_dbm and test_dummy_threading to unittest.
-
-- GHOP 293: Convert test_strftime, test_getargs, and test_pep247 to
-  unittest.
-
-- Issue #2055: Convert test_fcntl to unittest.
-
-- Issue #1960: Convert test_gdbm to unittest.
-
-- GHOP 294: Convert test_contains, test_crypt, and test_select to
-  unittest.
-
-- GHOP 238: Convert test_tokenize to use doctest.
-
-- GHOP 237: Rewrite test_thread using unittest.
-
-- Patch #2232: os.tmpfile might fail on Windows if the user has no
-  permission to create files in the root directory.
-
-Build
------
-
-- A new script 2to3 is now installed, to run the 2.x to 3.x converter.
-
-- Python/memmove.c and Python/strerror.c have been removed; both
-  functions are in the C89 standard library.
-
-- Patch #2284: Add -x64 option to rt.bat.
-
-C API
------
-
-- Patch #2477: Added PyParser_ParseFileFlagsEx() and
-  PyParser_ParseStringFlagsFilenameEx().
-
-
-What's New in Python 2.6 alpha 1?
-=================================
-
-*Release date: 29-Feb-2008*
-
-Core and builtins
------------------
-
-- Issue #2051: pyc and pyo files are no longer created with permission
-  644. The mode is now inherited from the py file.
-
-- Issue #2067: file.__exit__() now calls subclasses' close() method.
-
-- Patch #1759: Backport of PEP 3129 class decorators.
-
-- Issue #1881: An internal parser limit has been increased. Also see
-  issue #215555 for a discussion.
-
-- Added the future_builtins module, which contains hex() and oct().
-  These are the PEP 3127 version of these functions, designed to be
-  compatible with the hex() and oct() builtins from Python 3.0.  They
-  differ slightly in their output formats from the existing, unchanged
-  Python 2.6 builtins.  The expected usage of the future_builtins
-  module is:
-    from future_builtins import hex, oct
-
-- 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,
-  so that any alterations it does to the resulting string will be
-  available in stringlib/formatter.h (for float.__format__).
-
-- Implemented PEP 3101, Advanced String Formatting.  This adds a new
-  builtin format(); a format() method for str and unicode; a
-  __format__() method to object, str, unicode, int, long, float, and
-  datetime; the class string.Formatter; and the C API
-  PyObject_Format().
-
-- Fixed several potential crashes, all caused by specially crafted
-  __del__ methods exploiting objects in temporarily inconsistent
-  state.
-
-- Issue #2115: Important speedup in setting __slot__ attributes.  Also
-  prevent a possible crash: an Abstract Base Class would try to access
-  a slot on a registered virtual subclass.
-
-- Fixed repr() and str() of complex numbers with infinity or nan as
-  real or imaginary part.
-
-- Clear all free lists during a gc.collect() of the highest generation
-  in order to allow pymalloc to free more arenas. Python may give back
-  memory to the OS earlier.
-
-- Issue #2045: Fix an infinite recursion triggered when printing a
-  subclass of collections.defaultdict, if its default_factory is set
-  to a bound method.
-
-- Fixed a minor memory leak in dictobject.c. The content of the free
-  list was not freed on interpreter shutdown.
-
-- Limit free list of method and built-in function objects to 256
-  entries each.
-
-- Patch #1953: Added ``sys._compact_freelists()`` and the C API
-  functions ``PyInt_CompactFreeList`` and ``PyFloat_CompactFreeList``
-  to compact the internal free lists of pre-allocted ints and floats.
-
-- Issue #1983: Fixed return type of fork(), fork1() and forkpty()
-  calls.  Python expected the return type int but the fork familie
-  returns pi_t.
-
-- Issue #1678380: Fix a bug that identifies 0j and -0j when they
-  appear in the same code unit.
-
-- Issue #2025: Add tuple.count() and tuple.index() methods to comply
-  with the collections.Sequence API.
-
-- Patch #1970 by Antoine Pitrou: Speedup unicode whitespace and
-  linebreak detection
-
-- Added ``PyType_ClearCache()`` and ``sys._clear_type_cache`` to clear
-  the internal lookup cache for ref leak tests.
-
-- Patch #1473257: generator objects gain a gi_code attribute. This is
-  the same object as the func_code attribute of the function that
-  produced the generator.
-
-- Issue #1920: "while 0" statements were completely removed by the
-  compiler, even in the presence of an "else" clause, which is
-  supposed to be run when the condition is false. Now the compiler
-  correctly emits bytecode for the "else" suite.
-
-- A few crashers fixed: weakref_in_del.py (issue #1377858);
-  loosing_dict_ref.py (issue #1303614, test67.py);
-  borrowed_ref_[34].py (not in tracker).
-
-- Issue #1069410: The "can't load dll" message box on Windows is
-  suppressed while an extension is loaded by calling SetErrorMode in
-  dynload_win.c. The error is still reported properly.
-
-- Issue #1915: Python compiles with --enable-unicode=no again. However
-  several extension methods and modules do not work without unicode
-  support.
-
-- Issue #1882: when compiling code from a string, encoding cookies in the
-  second line of code were not always recognized correctly.
-
-- Issue #1679: "0x" was taken as a valid integer literal.
-
-- Issue #1865: ``bytes`` as an alias for ``str`` and b"" as an alias "" were
-  added.
-
-- sys.float_info / PyFloat_GetInfo: The floating point information
-  object was converted from a dict to a specialized structseq object.
-
-- Patch #1816: Added sys.flags structseq. It exposes the status of
-  most command line arguments and PYTHON* environment variables.
-
-- Objects/structseq.c: Implemented new structseq representation. The
-  patch makes structseqs (e.g. the return value of os.stat) more
-  readable.
-
-- Patch #1700288: added a type attribute cache that caches method
-  accesses, resulting in speedups in heavily object-oriented code.
-
-- Bug #1776: __import__() no longer accepts filenames on any platform.
-  The first parameter to __import__() must be a valid module name.
-
-- Patch #1668: renamed THREADDEBUG envvar to PYTHONTHREADDEBUG.
-
-- Patch #602345: Add -B command line option, PYTHONDONTWRITEBYTECODE
-  envvar and sys.dont_write_bytecode attribute. All these can be set
-  to forbid Python to attempt to write compiled bytecode files.
-
-- Improve some exception messages when Windows fails to load an
-  extension module. Now we get for example '%1 is not a valid Win32
-  application' instead of 'error code 193'.
-
-- Bug #1481296: Fixed long(float('nan')) != 0L.
-
-- Issue #1640: Added math.isinf(x), math.isnan(x) and math.copysign(x,
-  y) functions.
-
-- Issue #1635: Platform independent creation and representation of NaN
-  and INF. float("nan"), float("inf") and float("-inf") now work on
-  every platform with IEEE 754 semantics.
-
-- Compiler now generates simpler and faster code for dictionary
-  literals.  The oparg for BUILD_MAP now indicates an estimated
-  dictionary size.  There is a new opcode, STORE_MAP, for adding
-  entries to the dictionary.
-
-- Issue #1638: %zd configure test fails on Linux.
-
-- Issue #1620: New property decorator syntax was modifying the
-  decorator in place instead of creating a new decorator object.
-
-- Issue #1538: Avoid copying string in split/rsplit if the split char
-  is not found.
-
-- Issue #1553: An erroneous __length_hint__ can make list() raise a
-  SystemError.
-
-- PEP 366: Allow explicit relative imports when executing modules
-  inside packages with the -m switch via a new module level
-  __package__ attribute.
-
-- Issue #1402: Fix a crash on exit, when another thread is still
-  running, and if the deallocation of its frames somehow calls the
-  PyGILState_Ensure() / PyGILState_Release() functions.
-
-- Expose the Py_Py3kWarningFlag as sys.py3kwarning.
-
-- Issue #1445: Fix a SystemError when accessing the ``cell_contents``
-  attribute of an empty cell object.
-
-- Issue #1460: The utf-7 incremental decoder did not accept truncated
-  input.  It now correctly saves its state between chunks of data.
-
-- Patch #1739468: Directories and zipfiles containing a __main__.py
-  file can now be directly executed by passing their name to the
-  interpreter. The directory/zipfile is automatically inserted as the
-  first entry in sys.path.
-
-- Issue #1265: Fix a problem with sys.settrace, if the tracing
-  function uses a generator expression when at the same time the
-  executed code is closing a paused generator.
-
-- sets and frozensets now have an isdisjoint() method.
-
-- optimize the performance of builtin.sum().
-
-- Fix warnings found by the new version of the Coverity checker.
-
-- The enumerate() built-in function is no longer bounded to sequences
-  smaller than LONG_MAX.  Formerly, it raised an OverflowError.  Now,
-  automatically shifts from ints to longs.
-
-- Issue #1686386: Tuple's tp_repr did not take into account the
-  possibility of having a self-referential tuple, which is possible
-  from C code.  Nor did object's tp_str consider that a type's tp_str
-  could do something that could lead to an inifinite recursion.
-  Py_ReprEnter() and Py_EnterRecursiveCall(), respectively, fixed the
-  issues.
-
-- Issue #1164: It was possible to trigger deadlock when using the
-  'print' statement to write to a file since the GIL was not released
-  as needed.  Now PyObject_Print() does the right thing along with
-  various tp_print implementations of the built-in types and those in
-  the collections module.
-
-- Issue #1147: Exceptions were directly allowing string exceptions in
-  their throw() method even though string exceptions no longer
-  allowed.
-
-- Issue #1096: Prevent a segfault from getting the repr of a very
-  deeply nested list by using the recursion counter.
-
-- Issue #1202533: Fix infinite recursion calls triggered by calls to
-  PyObject_Call() never calling back out to Python code to trigger
-  recursion depth updates/checks.  Required the creation of a static
-  RuntimeError instance in case normalizing an exception put the
-  recursion check value past its limit.  Fixes crashers
-  infinite_rec_(1|2|4|5).py.
-
-- Patch #1031213: Decode source line in SyntaxErrors back to its
-  original source encoding.
-
-- Patch #1673759: add a missing overflow check when formatting floats
-  with %G.
-
-- Prevent expandtabs() on string and unicode objects from causing a
-  segfault when a large width is passed on 32-bit platforms.
-
-- Issue #1733488: Fix compilation of bufferobject.c on AIX.
-
-- Issue #1722485: remove docstrings again when running with -OO.
-
-- Add new attribute names for function objects.  All the func_* become
-  __*__ attributes.  (Some already existed, e.g., __doc__ and
-  __name__.)
-
-- Add -3 option to the interpreter to warn about features that are
-  deprecated and will be changed/removed in Python 3.0.
-
-- Patch #1686487: you can now pass any mapping after '**' in function
-  calls.
-
-- except clauses may now be spelled either "except E, target:" or
-  "except E as target:". This is to provide forwards compatibility
-  with Python 3.0.
-
-- Deprecate BaseException.message as per PEP 352.
-
-- Issue #1303614: don't expose object's __dict__ when the dict is
-  inherited from a built-in base.
-
-- When __slots__ are set to a unicode string, make it work the same as
-  setting a plain string, ie don't expand to single letter identifiers.
-
-- Request #1191699: Slices can now be pickled.
-
-- Request #1193128: str.translate() now allows a None argument for
-  translations that only remove characters without re-mapping the
-  remaining characters.
-
-- Patch #1682205: a TypeError while unpacking an iterable is no longer
-  masked by a generic one with the message "unpack non-sequence".
-
-- Remove unused file Python/fmod.c.
-
-- Bug #1683368: The object.__init__() and object.__new__() methods are
-  now stricter in rejecting excess arguments.  The only time when
-  either allows excess arguments is when it is not overridden and the
-  other one is.  For backwards compatibility, when both are
-  overridden, it is a deprecation warning (for now; maybe a Py3k
-  warning later).  Also, type.__init__() insists on the same signature
-  as supported by type.__new__().
-
-- Patch #1675423: PyComplex_AsCComplex() now tries to convert an
-  object to complex using its __complex__() method before falling back
-  to the __float__() method. Therefore, the functions in the cmath
-  module now can operate on objects that define a __complex__()
-  method.
-
-- Patch #1623563: allow __class__ assignment for classes with
-  __slots__.  The old and the new class are still required to have the
-  same slot names.
-
-- Patch #1642547: Fix an error/crash when encountering syntax errors
-  in complex if statements.
-
-- Patch #1462488: Python no longer segfaults when
-  ``object.__reduce_ex__()`` is called with an object that is faking
-  its type.
-
-- Patch #1680015: Don't modify __slots__ tuple if it contains a
-  unicode name.
-
-- Patch #1444529: the builtin compile() now accepts keyword arguments.
-
-- Bug #1678647: write a newline after printing an exception in any
-  case, even when converting the value to a string failed.
-
-- The dir() function has been extended to call the __dir__() method on
-  its argument, if it exists. If not, it will work like before. This
-  allows customizing the output of dir() in the presence of a
-  __getattr__().
-
-- Patch #922167: Python no longer segfaults when faced with infinitely
-  self-recursive reload() calls (as reported by bug #742342).
-
-- Patch #1675981: remove unreachable code from ``type.__new__()``
-  method.
-
-- Patch #1491866: change the complex() constructor to allow
-  parthensized forms. This means complex(repr(x)) now works instead of
-  raising a ValueError.
-
-- Patch #703779: unset __file__ in __main__ after running a file. This
-  makes the filenames the warning module prints much more sensible
-  when a PYTHONSTARTUP file is used.
-
-- Variant of patch #697613: don't exit the interpreter on a SystemExit
-  exception if the -i command line option or PYTHONINSPECT environment
-  variable is given, but break into the interactive interpreter just
-  like on other exceptions or normal program exit.
-
-- Patch #1638879: don't accept strings with embedded NUL bytes in
-  long().
-
-- Bug #1674503: close the file opened by execfile() in an error
-  condition.
-
-- Patch #1674228: when assigning a slice (old-style), check for the
-  sq_ass_slice instead of the sq_slice slot.
-
-- When printing an unraisable error, don't print exceptions. before
-  the name.  This duplicates the behavior whening normally printing
-  exceptions.
-
-- Bug #1653736: Properly discard third argument to
-  slot_nb_inplace_power.
-
-- PEP 352: Raising a string exception now triggers a TypeError.
-  Attempting to catch a string exception raises DeprecationWarning.
-
-- Bug #1377858: Fix the segfaulting of the interpreter when an object
-  created a weakref on itself during a __del__ call for new-style
-  classes (classic classes still have the bug).
-
-- Bug #1579370: Make PyTraceBack_Here use the current thread, not the
-  frame's thread state.
-
-- patch #1630975: Fix crash when replacing sys.stdout in
-  sitecustomize.py.
-
-- Prevent seg fault on shutdown which could occur if an object raised
-  a warning.
-
-- Bug #1566280: Explicitly invoke threading._shutdown from Py_Main, to
-  avoid relying on atexit.
-
-- Bug #1590891: random.randrange don't return correct value for big
-  number.
-
-- Patch #1586791: Better exception messages for some operations on
-  strings, tuples and lists.
-
-- Bug #1067760: Deprecate passing floats to file.seek.
-
-- Bug #1591996: Correctly forward exception in instance_contains().
-
-- Bug #1588287: fix invalid assertion for `1,2` in debug builds.
-
-- Bug #1576657: when setting a KeyError for a tuple key, make sure
-  that the tuple isn't used as the "exception arguments tuple".
-
-- Bug #1565514: SystemError not raised on too many nested blocks.
-
-- Bug #1576174: WindowsError now displays the windows error code
-  again, no longer the posix error code.
-
-- Patch #1549049: Support long values in structmember, issue warnings
-  if the assigned value for structmember fields gets truncated.
-
-- Update the peephole optimizer to remove more dead code (jumps after
-  returns) and inline unconditional jumps to returns.
-
-- Bug #1545497: when given an explicit base, int() did ignore NULs
-  embedded in the string to convert.
-
-- Bug #1569998: break inside a try statement (outside a loop) is now
-  recognized and rejected.
-
-- list.pop(x) accepts any object x following the __index__ protocol.
-
-- A number of places, including integer negation and absolute value,
-  were fixed to not rely on undefined behaviour of the C compiler
-  anymore.
-
-- Bug #1566800: make sure that EnvironmentError can be called with any
-  number of arguments, as was the case in Python 2.4.
-
-- Patch #1567691: super() and new.instancemethod() now don't accept
-  keyword arguments any more (previously they accepted them, but
-  didn't use them).
-
-- Fix a bug in the parser's future statement handling that led to
-  "with" not being recognized as a keyword after, e.g., this
-  statement: from __future__ import division, with_statement
-
-- Bug #1557232: fix seg fault with def f((((x)))) and def f(((x),)).
-
-- Fix %zd string formatting on Mac OS X so it prints negative numbers.
-
-- Allow exception instances to be directly sliced again.
-
-- Bug #1551432: Exceptions do not define an explicit __unicode__
-  method.  This allows calling unicode() on exceptions classes
-  directly to succeed.
-
-- Bug #1542051: Exceptions now correctly call PyObject_GC_UnTrack.
-  Also make sure that every exception class has __module__ set to
-  'exceptions'.
-
-- Bug #1550983: emit better error messages for erroneous relative
-  imports (if not in package and if beyond toplevel package).
-
-- Overflow checking code in integer division ran afoul of new gcc
-  optimizations.  Changed to be more standard-conforming.
-
-- Patch #1542451: disallow continue anywhere under a finally.
-
-- Patch #1546288: fix seg fault in dict_equal due to ref counting bug.
-
-- The return tuple from str.rpartition(sep) is (tail, sep, head) where
-  head is the original string if sep was not found.
-
-- Bug #1520864: unpacking singleton tuples in list comprehensions and
-  generator expressions (x for x, in ... ) works again.  Fixing this
-  problem required changing the .pyc magic number.  This means that
-  .pyc files generated before 2.5c2 will be regenerated.
-
-- ``with`` and ``as`` are now keywords.
-
-- Bug #1664966: Fix crash in exec if Unicode filename can't be
-  decoded.
-
-- Issue #1537: Changed GeneratorExit's base class from Exception to
-  BaseException.
-
-- Issue #1703448: A joined thread could show up in the
-  threading.enumerate() list after the join() for a brief period until
-  it actually exited.
-
-Library
--------
-
-- Patch #2274: Add heapq.heappushpop().
-
-- Add inspect.isabstract(object) to fix bug #2223
-
-- Add a __format__ method to Decimal, to support PEP 3101.
-
-- Add a timing parameter when using trace.Trace to print out
-  timestamps.
-
-- Issue #1627: httplib now ignores negative Content-Length headers.
-
-- Issue #900744: If an invalid chunked-encoding header is sent by a
-  server, httplib will now raise IncompleteRead and close the
-  connection instead of raising ValueError.
-
-- Issue #1492: The content type of BaseHTTPServer error messages can
-  now be overridden.
-
-- Issue #1781: ConfigParser now does not let you add the "default" section
-  (ignore-case)
-
-- Removed uses of dict.has_key() from distutils, and uses of
-  callable() from copy_reg.py, so the interpreter now starts up
-  without warnings when '-3' is given.  More work like this needs to
-  be done in the rest of the stdlib.
-
-- Issue #1916: added isgenerator() and isgeneratorfunction() to
-  inspect.py.
-
-- Issue #1224: Fixed bad url parsing when path begins with double
-  slash.
-
-- ctypes instances that are not or do not contain pointers can now be
-  pickled.
-
-- Patch #1966: Break infinite loop in httplib when the servers
-  implements the chunked encoding incorrectly.
-
-- Rename rational.py to fractions.py and the rational.Rational class
-  to fractions.Fraction, to avoid the name clash with the abstract
-  base class numbers.Rational.  See discussion in issue #1682.
-
-- The pickletools module now provides an optimize() function that
-  eliminates unused PUT opcodes from a pickle string.
-
-- Patch #2021: Allow tempfile.NamedTemporaryFile and
-  SpooledTemporaryFile to be used in with statements by correctly
-  supporting the context management protocol.
-
-- Patch #1979: Add rich comparisons to Decimal, and make Decimal
-  comparisons involving a NaN follow the IEEE 754 standard.
-
-- Issue #2004: tarfile.py: Use mode 0700 for temporary directories and
-  default permissions for missing directories.
-
-- Issue #175006: The debugger used to skip the condition of a "while"
-  statement after the first iteration. Now it correctly steps on the
-  expression, and breakpoints on the "while" statement are honored on
-  each loop.
-
-- Issue #1765140: add an optional delay argument to FileHandler and
-  its subclasses. Defaults to false (existing behaviour), but if true,
-  defers opening the file until the first call to emit().
-
-- The pprint module now supports sets and frozensets.
-
-- Issue #1221598: add optional callbacks to ftplib.FTP's storbinary()
-  and storlines() methods.  (Contributed by Phil Schwartz)
-
-- Issue #1715: include sub-extension modules in pydoc's text output.
-
-- Issue #1836: fix an off-by-one bug in TimedRotatingHandler's
-  rollover time calculation.
-
-- Issue #1021: fix a bug to allow basicConfig to accept NOTSET as a
-  level.
-
-- Issue #932563: add LoggerAdapter convenience class to make it easier
-  to add contextual information in logging output.
-
-- Issue #1760556: fix a bug to avoid FileHandler throwing an exception
-  in flush().
-
-- Bug #1530959: distutils' build command now uses different build
-  directory when building extension modules against versions of Python
-  compiled with ``--with-pydebug``.
-
-- Issue #1555501: move plistlib from plat-mac directory to general
-  library.
-
-- Issue #1269: fix a bug in pstats.add_callers() and add a unit test
-  file for pstats.
-
-- Issue #1669: don't allow shutil.rmtree() to be called on a symlink
-  to a directory.
-
-- Issue #1664522: in urllib, don't read non-existing directories in
-  ftp mode, returning a 0-byte file -- raise an IOError instead.
-
-- Issue #856047: respect the ``no_proxy`` environment variable when
-  using the ``http_proxy`` etc. environment variables in urllib.
-
-- Issue #1178141: add a getcode() method to the addinfourls that
-  urllib.open() returns so that you can retrieve the HTTP status code.
-
-- Issue #1003: Fix zipfile decryption check, it would fail zip files
-  with extended local headers.
-
-- Issue #1189216: Fix the zipfile module to work on archives with
-  headers past the 2**31 byte boundary.
-
-- Issue #1336: fix a race condition in subprocess.Popen if the garbage
-  collector kicked in at the wrong time that would cause the process
-  to hang when the child wrote to stderr.
-
-- Issue #1146: fix how textwrap breaks a long word that would start in
-  the last column of a line.
-
-- Issue #1693149: trace.py --ignore-module - accept multiple
-  comma-separated modules to be given.
-
-- Issue #1822: MIMEMultipart.is_multipart() behaves correctly for a
-  just-created (and empty) instance. Thanks Jonathan Share.
-
-- Issue #1861: Added an attribute to the sched module which returns an
-  ordered list of upcoming events (displayed as named tuples).
-
-- Issue #1837: The queue module now also supports a LIFO queue and a
-  priority queue.
-
-- Patch #1048820: Add insert-mode editing to curses.textpad.Textbox
-  (patch by Stefan Wehr).  Also, fix an off-by-one bug in
-  Textbox.gather().
-
-- Issue #1831: ctypes now raises a TypeError if conflicting positional
-  and named arguments are passed to a Structure or Union initializer.
-  When too many positional arguments are passed, also a TypeError is
-  raised instead of a ValueError.
-
-- Convert the internal ctypes array type cache to a WeakValueDict so
-  that array types do not live longer than needed.
-
-- Issue #1786: pdb should use its own stdin/stdout around an exec call
-  and when creating a recursive instance.
-
-- Issue #1698398: ZipFile.printdir() crashed because the format string
-  expected a tuple type of length six instead of time.struct_time
-  object.
-
-- Issue #1780: The Decimal constructor now accepts arbitrary leading
-  and trailing whitespace when constructing from a string.
-  Context.create_decimal no longer accepts trailing newlines.
-
-- Decimal.as_tuple(), difflib.find_longest_match() and inspect
-  functions that returned a tuple now return a named tuple.
-
-- Doctest now returns results as a named tuple for readability:
-      (0, 7) --> TestResults(failed=0, attempted=7)
-
-- Issue #846388: re.match is interruptible now, which is particularly
-  good for long regular expression matches.
-
-- Patch #1137: allow setting buffer_size attribute on pyexpat Parser
-  objects to set the character data buffer size.
-
-- Issue #1757: The hash of a Decimal instance is no longer affected by
-  the current context.
-
-- Patch #467924: add ZipFile.extract() and ZipFile.extractall() in the
-  zipfile module.
-
-- Issue #1646: Make socket support the TIPC protocol.
-
-- Bug #1742: return os.curdir from os.path.relpath() if both arguments
-  are equal instead of raising an exception.
-
-- Patch #1637: fix urlparse for URLs like 'http://x.com?arg=/foo'.
-
-- Patch #1698: allow '@' in username parsed by urlparse.py.
-
-- Issue #1735: TarFile.extractall() now correctly sets directory
-  permissions and times.
-
-- Bug #1713: posixpath.ismount() claims symlink to a mountpoint is a mountpoint.
-
-- Bug #1687: Fxed plistlib.py restricts <integer> to Python int when
-  writing
-
-- Issue #1700: Regular expression inline flags incorrectly handle
-  certain unicode characters.
-
-- Issue #1689: PEP 3141, numeric abstract base classes.
-
-- Tk issue #1851526: Return results from Python callbacks to Tcl as
-  Tcl objects.
-
-- Issue #1642: Fix segfault in ctypes when trying to delete attributes.
-
-- Issue #1727780: Support loading pickles of random.Random objects
-  created on 32-bit systems on 64-bit systems, and vice versa. As a
-  consequence of the change, Random pickles created by Python 2.6
-  cannot be loaded in Python 2.5.
-
-- Issue #1455: The distutils package now supports VS 2005 and VS 2008
-  for both the msvccompiler and cygwincompiler.
-
-- Issue #1531: tarfile.py: Read fileobj from the current offset, do
-  not seek to the start.
-
-- Issue #1534: Added a dictionary sys.float_info with information
-  about the internal floating point type to the sys module.
-
-- Issue #1429818: patch for trace and doctest modules so they play
-  nicely together.
-
-- doctest made a bad assumption that a package's __loader__.get_data()
-  method used universal newlines.
-
-- Issue #1705170: contextlib.contextmanager was still swallowing
-  StopIteration in some cases. This should no longer happen.
-
-- Issue #1292: On alpha, arm, ppc, and s390 linux systems the
-  --with-system-ffi configure option defaults to "yes".
-
-- IN module for FreeBSD 8 is added and preexisting FreeBSD 6 and 7
-  files are updated.
-
-- Issues #1181, #1287: unsetenv() is now called when the
-  os.environ.pop() and os.environ.clear() methods are used.
-
-- ctypes will now work correctly on 32-bit systems when Python is
-  configured with --with-system-ffi.
-
-- Patch #1203: ctypes now does work on OS X when Python is built with
-  --disable-toolbox-glue.
-
-- collections.deque() now supports a "maxlen" argument.
-
-- itertools.count() is no longer bounded to LONG_MAX.  Formerly, it
-  raised an OverflowError.  Now, automatically shifts from ints to
-  longs.
-
-- Added itertools.product() which forms the Cartesian product of the
-  input iterables.
-
-- Added itertools.combinations() and itertools.permutations().
-
-- Patch #1541463: optimize performance of cgi.FieldStorage operations.
-
-- Decimal is fully updated to the latest Decimal Specification
-  (v1.66).
-
-- Bug #1153: repr.repr() now doesn't require set and dictionary items
-  to be orderable to properly represent them.
-
-- A 'c_longdouble' type was added to the ctypes module.
-
-- Bug #1709599: Run test_1565150 only if the file system is NTFS.
-
-- When encountering a password-protected robots.txt file the
-  RobotFileParser no longer prompts interactively for a username and
-  password (bug 813986).
-
-- TarFile.__init__() no longer fails if no name argument is passed and
-  the fileobj argument has no usable name attribute (e.g. StringIO).
-
-- The functools module now provides 'reduce', for forward
-  compatibility with Python 3000.
-
-- Server-side SSL support and cert verification added, by Bill
-  Janssen.
-
-- socket.ssl deprecated; use new ssl module instead.
-
-- uuid creation is now threadsafe.
-
-- EUC-KR codec now handles the cheot-ga-keut composed make-up hangul
-  syllables.
-
-- GB18030 codec now can encode additional two-byte characters that are
-  missing in GBK.
-
-- Add new codecs for UTF-32, UTF-32-LE and UTF-32-BE.
-
-- Bug #1704793: Return UTF-16 pair if unicodedata.lookup cannot
-  represent the result in a single character.
-
-- Bug #978833: Close https sockets by releasing the _ssl object.
-
-- Change location of the package index to pypi.python.org/pypi
-
-- Bug #1701409: Fix a segfault in printing ctypes.c_char_p and
-  ctypes.c_wchar_p when they point to an invalid location.  As a
-  sideeffect the representation of these instances has changed.
-
-- tarfile.py: Added "exclude" keyword argument to TarFile.add().
-
-- Bug #1734723: Fix repr.Repr() so it doesn't ignore the maxtuple
-  attribute.
-
-- The urlopen function of urllib2 now has an optional timeout
-  parameter (note that it actually works with HTTP, HTTPS, FTP and
-  FTPS connections).
-
-- In ftplib, the FTP.ntransfercmd method, when in passive mode, now
-  uses the socket.create_connection function, using the timeout
-  specified at connection time.
-
-- Bug #1728403: Fix a bug that CJKCodecs StreamReader hangs when it
-  reads a file that ends with incomplete sequence and sizehint
-  argument for .read() is specified.
-
-- Bug #1730389: Change time.strptime() to use ``\s+`` instead of
-  ``\s*`` when matching spaces in the specified format argument.
-
-- Bugs #1668596/#1720897: distutils now copies data files even if
-  package_dir is empty.
-
-- sha now raises a DeprecationWarning upon import.
-
-- md5 now raises a DeprecationWarning upon import.
-
-- Issue #1385: The hmac module now computes the correct hmac when
-  using hashes with a block size other than 64 bytes (such as sha384
-  and sha512).
-
-- mimify now raises a DeprecationWarning upon import.
-
-- MimeWriter now raises a DeprecationWarning upon import.
-
-- tarfile.py: Improved unicode support. Unicode input names are now
-  officially supported. Added "errors" argument to the TarFile class.
-
-- urllib.ftpwrapper class now accepts an optional timeout.
-
-- shlex.split() now has an optional "posix" parameter.
-
-- The posixfile module now raises a DeprecationWarning.
-
-- Remove the gopherlib module.  This also leads to the removal of
-  gopher support in urllib/urllib2.
-
-- Fix bug in marshal where bad data would cause a segfault due to lack
-  of an infinite recursion check.
-
-- Removed plat-freebsd2 and plat-freebsd3 directories (and IN.py in
-  the directories).
-
-- HTML-escape the plain traceback in cgitb's HTML output, to prevent
-  the traceback inadvertently or maliciously closing the comment and
-  injecting HTML into the error page.
-
-- The popen2 module and os.popen* are deprecated.  Use the subprocess
-  module.
-
-- Added an optional credentials argument to SMTPHandler, for use with
-  SMTP servers which require authentication.
-
-- Patch #1695948: Added optional timeout parameter to SocketHandler.
-
-- Bug #1652788: Minor fix for currentframe.
-
-- Patch #1598415: Added WatchedFileHandler to better support external
-  log file rotation using e.g. newsyslog or logrotate. This handler is
-  only useful in Unix/Linux environments.
-
-- Bug #1706381: Specifying the SWIG option "-c++" in the setup.py file
-  (as opposed to the command line) will now write file names ending in
-  ".cpp" too.
-
-- As specified in RFC 2616, an HTTP response like 2xx indicates that
-  the client's request was successfully received, understood, and
-  accepted.  Now in these cases no error is raised in urllib (issue
-  #1177) and urllib2.
-
-- Bug #1290505: time.strptime's internal cache of locale information
-  is now properly recreated when the locale is changed.
-
-- Patch #1685563: remove (don't add) duplicate paths in
-  distutils.MSVCCompiler.
-
-- Added a timeout parameter to the constructor of other protocols
-  (telnetlib, ftplib, smtplib and poplib). This is second part of the
-  work started with create_connection() and timeout in httplib, and
-  closes patch #723312.
-
-- Patch #1676823: Added create_connection() to socket.py, which may be
-  called with a timeout, and use it from httplib (whose HTTPConnection
-  and HTTPSConnection now accept an optional timeout).
-
-- Bug #978833: Revert r50844, as it broke _socketobject.dup.
-
-- Bug #1675967: re patterns pickled with Python 2.4 and earlier can
-  now be unpickled with Python 2.5 and newer.
-
-- Patch #1630118: add a SpooledTemporaryFile class to tempfile.py.
-
-- Patch #1273829: os.walk() now has a "followlinks" parameter. If set
-  to True (which is not the default), it visits symlinks pointing to
-  directories.
-
-- Bug #1681228: the webbrowser module now correctly uses the default
-  GNOME or KDE browser, depending on whether there is a session of one
-  of those present. Also, it tries the Windows default browser before
-  trying Mozilla variants.
-
-- Patch #1339796: add a relpath() function to os.path.
-
-- Patch #1681153: the wave module now closes a file object it opened if
-  initialization failed.
-
-- Bug #767111: fix long-standing bug in urllib which caused an
-  AttributeError instead of an IOError when the server's response
-  didn't contain a valid HTTP status line.
-
-- Patch #957650: "%var%" environment variable references are now
-  properly expanded in ntpath.expandvars(), also "~user" home
-  directory references are recognized and handled on Windows.
-
-- Patch #1429539: pdb now correctly initializes the __main__ module
-  for the debugged script, which means that imports from __main__ work
-  correctly now.
-
-- The nonobvious commands.getstatus() function is now deprecated.
-
-- Patch #1393667: pdb now has a "run" command which restarts the
-  debugged Python program, optionally with different arguments.
-
-- Patch #1649190: Adding support for _Bool to ctypes as c_bool.
-
-- Patch #1530482: add pydoc.render_doc() which returns the
-  documentation for a thing instead of paging it to stdout, which
-  pydoc.doc() does.
-
-- Patch #1533909: the timeit module now accepts callables in addition
-  to strings for the code to time and the setup code. Also added two
-  convenience functions for instantiating a Timer and calling its
-  methods.
-
-- Patch #1537850: tempfile.NamedTemporaryFile now has a "delete"
-  parameter which can be set to False to prevent the default
-  delete-on-close behavior.
-
-- Patch #1581073: add a flag to textwrap that prevents the dropping of
-  whitespace while wrapping.
-
-- Patch #1603688: ConfigParser.SafeConfigParser now checks values that
-  are set for invalid interpolation sequences that would lead to
-  errors on reading back those values.
-
-- Added support for the POSIX.1-2001 (pax) format to
-  tarfile.py. Extended and cleaned up the test suite. Added a new
-  testtar.tar.
-
-- Patch #1449244: Support Unicode strings in
-  email.message.Message.{set_charset,get_content_charset}.
-
-- Patch #1542681: add entries for "with", "as" and "CONTEXTMANAGERS"
-  to pydoc's help keywords.
-
-- Patch #1555098: use str.join() instead of repeated string
-  concatenation in robotparser.
-
-- Patch #1635454: the csv.DictWriter class now includes the offending
-  field names in its exception message if you try to write a record
-  with a dictionary containing fields not in the CSV field names list.
-
-- Patch #1668100: urllib2 now correctly raises URLError instead of
-  OSError if accessing a local file via the file:// protocol fails.
-
-- Patch #1677862: Require a space or tab after import in .pth files.
-
-- Patch #1192590: Fix pdb's "ignore" and "condition" commands so they
-  trap the IndexError caused by passing in an invalid breakpoint
-  number.
-
-- Patch #1599845: Add an option to disable the implicit calls to
-  server_bind() and server_activate() in the constructors for
-  TCPServer, SimpleXMLRPCServer and DocXMLRPCServer.
-
-- Bug #1531963: Make SocketServer.TCPServer's server_address always be
-  equal to calling getsockname() on the server's socket. Fixed by
-  patch #1545011.
-
-- Patch #742598: Add .timeout attribute to SocketServer that calls
-  .handle_timeout() when no requests are received.
-
-- Bug #1651235: When a tuple was passed to a ctypes function call,
-  Python would crash instead of raising an error.
-
-- Bug #1646630: ctypes.string_at(buf, 0) and ctypes.wstring_at(buf, 0)
-  returned string up to the first NUL character.
-
-- Patch #957003: Implement smtplib.LMTP.
-
-- Patch #1481079: add support for HTTP_REFERER to CGIHTTPServer.
-
-- Patch #1675424: Added tests for uncovered code in the zipfile
-  module.  The KeyError raised by Zipfile.getinfo for nonexistent
-  names now has a descriptive message.
-
-- Bug #1115886: os.path.splitext('.cshrc') gives now ('.cshrc', '').
-
-- unittest now verifies more of its assumptions. In particular,
-  TestCase and TestSuite subclasses (not instances) are no longer
-  accepted in TestSuite.addTest(). This should cause no
-  incompatibility since it never made sense with ordinary subclasses
-  -- the failure just occurred later, with a more cumbersome
-  exception.
-
-- Patch #787789: allow passing custom TestRunner instances to
-  unittest's main() function.
-
-- Patches #1550273, #1550272: fix a few bugs in unittest and add a
-  comprehensive test suite for the module.
-
-- Patch #1001604: glob.glob() now returns unicode filenames if it was
-  given a unicode argument and os.listdir() returns unicode filenames.
-
-- Patch #1673619: setup.py identifies extension modules it doesn't
-  know how to build and those it knows how to build but that fail to
-  build.
-
-- Patch #912410: Replace HTML entity references for attribute values
-  in HTMLParser.
-
-- Patch #1663234: you can now run doctest on test files and modules
-  using "python -m doctest [-v] filename ...".
-
-- Patch #1121142: Implement ZipFile.open.
-
-- Taught setup.py how to locate Berkeley DB on Macs using MacPorts.
-
-- Added heapq.merge() for merging sorted input streams.
-
-- Added collections.namedtuple() for assigning field names to tuples.
-
-- Added itertools.izip_longest().
-
-- Have the encoding package's search function dynamically import using
-  absolute import semantics.
-
-- Patch #1647484: Renamed GzipFile's filename attribute to name.
-
-- Patch #1517891: Mode 'a' for ZipFile now creates the file if it
-  doesn't exist.
-
-- Patch #698833: Support file decryption in zipfile.
-
-- Patch #685268: Consider a package's __path__ in imputil.
-
-- Patch #1463026: Support default namespace in XMLGenerator.
-
-- Patch #1571379: Make trace's --ignore-dir facility work in the face
-  of relative directory names.
-
-- Bug #1600860: Search for shared python library in LIBDIR, not
-  lib/python/config, on "linux" and "gnu" systems.
-
-- Patch #1652681: tarfile.py: create nonexistent files in append mode
-  and allow appending to empty files.
-
-- Bug #1124861: Automatically create pipes if GetStdHandle fails in
-  subprocess.
-
-- Patch #1634778: add missing encoding aliases for iso8859_15 and
-  iso8859_16.
-
-- Patch #1638243: the compiler package is now able to correctly
-  compile a with statement; previously, executing code containing a
-  with statement compiled by the compiler package crashed the
-  interpreter.
-
-- Bug #1643943: Fix time.strptime's support for the %U directive.
-
-- Patch #1507247: tarfile.py: use current umask for intermediate
-  directories.
-
-- Patch #1627441: close sockets properly in urllib2.
-
-- Bug #494589: make ntpath.expandvars behave according to its
-  docstring.
-
-- Changed platform module API python_version_tuple() to actually
-  return a tuple (it used to return a list).
-
-- Added new platform module APIs python_branch(), python_revision(),
-  python_implementation() and linux_distribution().
-
-- Added support for IronPython and Jython to the platform module.
-
-- The sets module has been deprecated.  Use the built-in set/frozenset
-  types instead.
-
-- Bug #1610795: make ctypes.util.find_library work on BSD systems.
-
-- Fixes for 64-bit Windows: In ctypes.wintypes, correct the
-  definitions of HANDLE, WPARAM, LPARAM data types.  Make
-  parameterless foreign function calls work.
-
-- The version number of the ctypes package changed to "1.1.0".
-
-- Bug #1627575: logging: Added _open() method to FileHandler which can
-  be used to reopen files. The FileHandler instance now saves the
-  encoding (which can be None) in an attribute called "encoding".
-
-- Bug #411881: logging.handlers: bare except clause removed from
-  SMTPHandler.emit. Now, only ImportError is trapped.
-
-- Bug #411881: logging.handlers: bare except clause removed from
-  SocketHandler.createSocket. Now, only socket.error is trapped.
-
-- Bug #411881: logging: bare except clause removed from
-  LogRecord.__init__.  Now, only ValueError, TypeError and
-  AttributeError are trapped.
-
-- Patch #1504073: Fix tarfile.open() for mode "r" with a fileobj
-  argument.
-
-- Patch #1182394 from Shane Holloway: speed up HMAC.hexdigest.
-
-- Patch #1262036: Prevent TarFiles from being added to themselves
-  under certain conditions.
-
-- Patch #1230446: tarfile.py: fix ExFileObject so that read() and
-  tell() work correctly together with readline().
-
-- Patch #1484695: The tarfile module now raises a HeaderError
-  exception if a buffer given to frombuf() is invalid.
-
-- Bug #1503765: Fix a problem in logging.config with spaces in comma-
-  separated lists read from logging config files.
-
-- Patch #1604907: Fix problems in logging.handlers caused at logging
-  shutdown when syslog handlers fail to initialize because of syslogd
-  problems.
-
-- Patch #1608267: fix a race condition in os.makedirs() if the
-  directory to be created is already there.
-
-- Patch #1610437: fix a tarfile bug with long filename headers.
-
-- Patch #1371075: Make ConfigParser accept optional dict type for
-  ordering, sorting, etc.
-
-- Bug #1563807: _ctypes built on AIX fails with ld ffi error.
-
-- Bug #1598620: A ctypes Structure cannot contain itself.
-
-- Patch #1070046: Marshal new-style objects like InstanceType in
-  xmlrpclib.
-
-- cStringIO.truncate(-1) now raises an IOError, like StringIO and
-  regular files.
-
-- Patch #1472877: Fix Tix subwidget name resolution.
-
-- Patch #1594554: Always close a tkSimpleDialog on ok(), even if an
-  exception occurs.
-
-- Patch #1538878: Don't make tkSimpleDialog dialogs transient if the
-  parent window is withdrawn.
-
-- Bug #1597824: return the registered function from atexit.register()
-  to facilitate usage as a decorator.
-
-- Patch #1360200: Use unmangled_version RPM spec field to deal with
-  file name mangling.
-
-- Patch #1359217: Process 2xx response in an ftplib transfer that
-  precedes an 1xx response.
-
-- Patch #1355023: support whence argument for GzipFile.seek.
-
-- Patch #1065257: Support passing open files as body in
-  HTTPConnection.request().
-
-- Bug #1569790: mailbox.py: Maildir.get_folder() and MH.get_folder()
-  weren't passing the message factory on to newly created Maildir/MH
-  objects.
-
-- Patch #1514543: mailbox.py: In the Maildir class, report errors if
-  there's a filename clash instead of possibly losing a message.
-  (Patch by David Watson.)
-
-- Patch #1514544: Try to ensure that messages/indexes have been
-  physically written to disk after calling .flush() or
-  .close(). (Patch by David Watson.)
-
-- Patch #1592250: Add elide argument to Tkinter.Text.search.
-
-- Patch #838546: Make terminal become controlling in pty.fork().
-
-- Patch #1351744: Add askyesnocancel helper for tkMessageBox.
-
-- Patch #1060577: Extract list of RPM files from spec file in
-  bdist_rpm.
-
-- Bug #1586613: fix zlib and bz2 codecs' incremental en/decoders.
-
-- Patch #1583880: fix tarfile's problems with long names and posix/
-  GNU modes.
-
-- Bug #1586448: the compiler module now emits the same bytecode for
-  list comprehensions as the built-in compiler, using the LIST_APPEND
-  opcode.
-
-- Fix codecs.EncodedFile which did not use file_encoding in 2.5.0, and
-  fix all codecs file wrappers to work correctly with the "with"
-  statement (bug #1586513).
-
-- Lib/modulefinder.py now handles absolute and relative imports
-  correctly.
-
-- Patch #1567274: Support SMTP over TLS.
-
-- Patch #1560695: Add .note.GNU-stack to ctypes' sysv.S so that ctypes
-  isn't considered as requiring executable stacks.
-
-- ctypes callback functions only support 'fundamental' data types as
-  result type.  Raise an error when something else is used.  This is a
-  partial fix for Bug #1574584.
-
-- Fix turtle so that time.sleep is imported for the entire library.
-  Allows the demo2 function to be executed on its own instead of only
-  when the module is run as a script.
-
-- Bug #1565150: Fix subsecond processing for os.utime on Windows.
-
-- Support for MSVC 8 was added to bdist_wininst.
-
-- Bug #1446043: correctly raise a LookupError if an encoding name
-  given to encodings.search_function() contains a dot.
-
-- Bug #1560617: in pyclbr, return full module name not only for
-  classes, but also for functions.
-
-- Bug #1457823: cgi.(Sv)FormContentDict's constructor now takes
-  keep_blank_values and strict_parsing keyword arguments.
-
-- Bug #1566602: correct failure of posixpath unittest when $HOME ends
-  with a slash.
-
-- Bug #1565661: in webbrowser, split() the command for the default
-  GNOME browser in case it is a command with args.
-
-- Made the error message for time.strptime when the data and
-  format do match be more clear.
-
-- Fix a bug in traceback.format_exception_only() that led to an error
-  being raised when print_exc() was called without an exception set.
-  In version 2.4, this printed "None", restored that behavior.
-
-- Make webbrowser.BackgroundBrowser usable in Windows (it wasn't
-  because the close_fds arg to subprocess.Popen is not supported).
-
-- Reverted patch #1504333 to sgmllib because it introduced an infinite
-  loop.
-
-- Patch #1553314: Fix the inspect.py slowdown that was hurting IPython
-  & SAGE by adding smarter caching in inspect.getmodule()
-
-- Fix missing import of the types module in logging.config.
-
-- Patch #1550886: Fix decimal module context management implementation
-  to match the localcontext() example from PEP 343.
-
-- Bug #1545341: The 'classifier' keyword argument to the Distutils
-  setup() function now accepts tuples as well as lists.
-
-- Bug #1541863: uuid.uuid1 failed to generate unique identifiers on
-  systems with low clock resolution.
-
-- Bug #1531862: Do not close standard file descriptors in subprocess.
-
-- Fix utf-8-sig incremental decoder, which didn't recognise a BOM when
-  the first chunk fed to the decoder started with a BOM, but was
-  longer than 3 bytes.
-
-- The implementation of UnicodeError objects has been simplified
-  (start and end attributes are now stored directly as Py_ssize_t
-  members).
-
-- Issue #829951: In the smtplib module, SMTP.starttls() now complies
-  with RFC 3207 and forgets any knowledge obtained from the server not
-  obtained from the TLS negotiation itself.  Patch contributed by Bill
-  Fenner.
-
-- Issue #1339: The smtplib.SMTP class has been refactored a bit such
-  that the SMTP.starttls() caller no longer needs to call ehlo()
-  beforehand.  SMTP.starttls() now raises an exception of the server
-  does not claim to support starttls.  Adds the
-  SMTP.ehlo_or_helo_if_needed() method.  Patch contributed by Bill
-  Fenner.
-
-- Patch #1089358: Add signal.siginterrupt, a wrapper around
-  siginterrupt(3).
-
-Extension Modules
------------------
-
-- Patch #1657: added select.epoll and select.kqueue.
-
-- Patch #1506171: added operator.methodcaller().
-
-- Patch #1826: operator.attrgetter() now supports dotted attribute paths.
-
-- Patch #1957: syslogmodule: Release GIL when calling syslog(3).
-
-- Bug #2112: mmap.error is now a subclass of EnvironmentError and not
-  a direct EnvironmentError.
-
-- Bug #2111: mmap segfaults when trying to write a block opened with
-  PROT_READ.
-
-- Bug #2063: correct order of utime and stime in os.times() result on
-  Windows.
-
-- Patch #1736: Fix file name handling of _msi.FCICreate.
-
-- Updated ``big5hkscs`` codec to the HKSCS revision of 2004.
-
-- Issue #1940: make it possible to use curses.filter() before
-  curses.initscr() as the documentation says.
-
-- Backport of _fileio module from Python 3.0.
-
-- Patch #1087741: mmap.mmap is now a class, not a factory function. It
-  is also subclassable now.
-
-- Patch #1648: added ``sys.getprofile()`` and ``sys.gettrace()``.
-
-- Patch #1663329: added ``os.closerange()`` function to quickly close
-  a range of file descriptors without considering errors.
-
-- Patch #976880: ``mmap`` objects now have an ``rfind`` method that
-  works as expected.  ``mmap.find`` also takes an optional ``end``
-  parameter.
-
-- _winreg's HKEY object has gained __enter__ and __exit__ methods to
-  support the context management protocol.  The _winreg module also
-  gained a new function ``ExpandEnvironmentStrings`` to expand
-  REG_EXPAND_SZ keys.
-
-- itertools.starmap() now accepts any iterable input. Previously, it
-  required the function inputs to be tuples.
-
-- itertools.chain() now has an alternate constructor,
-  chain.from_iterable().
-
-- Issue #1646: Make socket support TIPC. The socket module now has
-  support for TIPC under Linux, see http://tipc.sf.net/ for more
-  information.
-
-- Added interface for Windows' WSAIoctl to socket object and added an
-  example for a simple network sniffer.
-
-- Bug #1301: Bad assert in _tkinter fixed.
-
-- Added bdist_wininst executable for VS 2008.
-
-- Bug #1604: collections.deque.__init__(iterable) now clears any prior
-  contents before adding elements from the iterable.  This fix brings
-  the behavior into line with that for list.__init__().
-
-- Added wide char functions to msvcrt module: getwch, getwche, putwch
-  and ungetwch. The functions accept or return unicode.
-
-- os.access now returns True on Windows for any existing directory.
-
-- Added warnpy3k function to the warnings module.
-
-- Marshal.dumps() now expects exact type matches for int, long, float,
-  complex, tuple, list, dict, set, and frozenset.  Formerly, it would
-  silently miscode subclasses of those types.  Now, it raises a
-  ValueError instead.
-
-- Patch #1388440: Add set_completion_display_matches_hook and
-  get_completion_type to readline.
-
-- Bug #1649098: Avoid declaration of zero-sized array declaration in
-  structure.
-
-- Removed the rgbimg module; been deprecated since Python 2.5.
-
-- Bug #1721309: prevent bsddb module from freeing random memory.
-
-- Bug #1233: fix bsddb.dbshelve.DBShelf append method to work as
-  intended for RECNO databases.
-
-- pybsddb.sf.net Bug #477182: Load the database flags at database open
-  time so that opening a database previously created with the DB_DUP
-  or DB_DUPSORT flag set will keep the proper behavior on subsequent
-  opens.  Specifically: dictionary assignment to a DB object will
-  replace all values for a given key when the database allows
-  duplicate values.  DB users should use DB.put(k, v) when they want
-  to store duplicates; not DB[k] = v.
-
-- Add the bsddb.db.DBEnv.lock_id_free method.
-
-- Bug #1686475: Support stat'ing open files on Windows again.
-
-- Patch #1185447: binascii.b2a_qp() now correctly quotes binary
-  characters with ASCII value less than 32. Also, it correctly quotes
-  dots only if they occur on a single line, as opposed to the previous
-  behavior of quoting dots if they are the second character of any
-  line.
-
-- Bug #1622896: fix a rare corner case where the bz2 module raised an
-  error in spite of a succesful compression.
-
-- Patch #1654417: make operator.{get,set,del}slice use the full range
-  of Py_ssize_t.
-
-- Patch #1646728: datetime.fromtimestamp fails with negative
-  fractional times.  With unittest.
-
-- Patch #1490190: posixmodule now includes os.chflags() and
-  os.lchflags() functions on platforms where the underlying system
-  calls are available.
-
-- Patch #1494140: Add documentation for the new struct.Struct object.
-
-- Patch #1432399: Support the HCI protocol for bluetooth sockets
-
-- Patch #1657276: Make NETLINK_DNRTMSG conditional.
-
-- Bug #1653736: Complain about keyword arguments to time.isoformat.
-
-- Bug #1486663: don't reject keyword arguments for subclasses of
-  built-in types.
-
-- Patch #1610575: The struct module now supports the 't' code, for C99
-  _Bool.
-
-- Patch #1635058: ensure that htonl and friends never accept or return
-  negative numbers, per the underlying C implementation.
-
-- Patch #1544279: Improve thread-safety of the socket module by moving
-  the sock_addr_t storage out of the socket object.
-
-- Patch #1019808: fix bug that causes an incorrect error to be
-  returned when a socket timeout is set and a connection attempt
-  fails.
-
-- Speed up function calls into the math module.
-
-- Bug #1588217: don't parse "= " as a soft line break in binascii's
-  a2b_qp() function, instead leave it in the string as quopri.decode()
-  does.
-
-- Bug #1599782: Fix segfault on bsddb.db.DB().type().
-
-- Bug #1567666: Emulate GetFileAttributesExA for Win95.
-
-- Patch #1576166: Support os.utime for directories on Windows NT+.
-
-- Patch #1572724: fix typo ('=' instead of '==') in _msi.c.
-
-- Bug #1572832: fix a bug in ISO-2022 codecs which may cause segfault
-  when encoding non-BMP unicode characters.
-
-- Bug #1556784: allow format strings longer than 127 characters in
-  datetime's strftime function.
-
-- Fix itertools.count(n) to work with negative numbers again.
-
-- RLIMIT_SBSIZE was added to the resource module where available.
-
-- Bug #1551427: fix a wrong NULL pointer check in the win32 version of
-  os.urandom().
-
-- Bug #1548092: fix curses.tparm seg fault on invalid input.
-
-- Patch #1114: fix curses module compilation on 64-bit AIX, & possibly
-  other 64-bit LP64 platforms where attr_t is not the same size as a
-  long.  (Contributed by Luke Mewburn.)
-
-- Bug #1550714: fix SystemError from itertools.tee on negative value
-  for n.
-
-- Fixed a few bugs on cjkcodecs:
-  - gbk and gb18030 codec now handle U+30FB KATAKANA MIDDLE DOT
-    correctly.
-  - iso2022_jp_2 codec now encodes into G0 for KS X 1001, GB2312
-    codepoints to conform the standard.
-  - iso2022_jp_3 and iso2022_jp_2004 codec can encode JIS X 0213:2
-    codepoints now.
-
-- Bug #1552726: in readline.c, avoid repeatedly polling in interactive
-  mode by only placing a timeout on the select() if an input hook has
-  been defined.  This prevents an interactive Python from waking up 10
-  times per second.  Patch by Richard Boulton.
-
-- fixed a bug with bsddb.DB.stat: the flags and txn keyword arguments
-  were transposed.
-
-- Added support for linking the bsddb module against BerkeleyDB 4.5.x,
-  4.6.x and 4.7.x.
-
-- Bug #1633621: if curses.resizeterm() or curses.resize_term() is
-  called, update _curses.LINES, _curses.COLS, curses.LINES and
-  curses.COLS.
-
-- Fix an off-by-one bug in locale.strxfrm().
-
-- Fix libffi configure for hppa*-*-linux* | parisc*-*-linux*.
-
-- Build using system ffi library on arm*-linux*.
-
-- Bug #1372: zlibmodule.c: int overflow in PyZlib_decompress
-
-- bsddb module: Fix memory leak when using database cursors on
-  databases without a DBEnv.
-
-- The sqlite3 module was updated to pysqlite 2.4.1.
-
-IDLE
-----
-
-- Bug #813342: Start the IDLE subprocess with -Qnew if the parent is
-  started with that option.
-
-- IDLE: Honor the "Cancel" action in the save dialog (Debian bug
-  #299092).
-
-Tests
------
-
-- Refactor test_logging to use unittest.
-
-- Refactor test_profile and test_cprofile to use the same code to
-  profile.
-
-- Make test_runpy reentrant by fixing _check_module to clear out any
-  module being tested.  Was causing an error by __import__ doing a
-  reload on the second run and thus suppressing bytecode recreation.
-
-- Capture socket connection resets and timeouts in test_socket_ssl and
-  test_urllib2net and raise test.test_support.ResourceDenied.
-
-- Patch #1559413: Fix test_cmd_line if sys.executable contains a
-  space.
-
-- Added test.test_support.TransientResource which is a context manager
-  to surround calls to resources that are not guaranteed to work even
-  if test.test_support.requires says that the resource should exist.
-
-- Added a test for slicing of an exception.
-
-- Added test.test_support.EnvironmentVarGuard.  It's a class that
-  provides a context manager so that one can temporarily set or unset
-  environment variables.
-
-- Added some tests for modulefinder.
-
-- Converted test_imp to use unittest.
-
-- Fix bsddb test_basics.test06_Transactions to check the version
-  number properly.
-
-- test.test_support.catch_warning is a new context manager that can be
-  used to catch the warnings issued by the warning framework.
-
-Tools
------
-
-- Tools/scripts/reindent.py now creates the backup file using
-  shutil.copy to preserve user/group and permissions. Added also a
-  --nobackup option to not create the backup if the user is concerned
-  regarding this.  Check issue #1050828 for more details.
-
-- Tools/scripts/win_add2path.py was added. The simple script modifes
-  the PATH environment var of the HKCU tree and adds the python bin
-  and script directory.
-
-- Tools/18n/pygettext.py was added to the list of scripts installed by
-  Tools/scripts/setup.py (tracker item 642309).
-
-- Added IronPython and Jython support to pybench (part of which was
-  patch #1563844).
-
-- Made some minor changes to pybench output to allow the user to see
-  which Python version is running pybench.
-
-- Added support for the new platform module feature
-  platform.python_implementation(); this will now be saved in the
-  benchmark pickle.
-
-Documentation
--------------
-
-- RFE #1765140: Updated documentation on FileHandler and subclasses to
-  include new optional delay argument.
-
-- Bug #932563: Added section on getting contextual information into
-  logging output, and added documentation for the new LoggerAdapter
-  class.
-
-- Bug #1295: Added information about caching of formatted exception
-  information in the LogRecord by Formatter.format().
-
-- Bug #1637365: add subsection about "__name__ == __main__" to the
-  Python tutorial.
-
-- Patch #1698768: updated the "using Python on the Mac" intro.
-
-- Bug #1569057: Document that calling file.next() when the file is
-  open for writing is undefined.
-
-- Patch #1489771: the syntax rules in Python Reference Manual were
-  updated to reflect the current Python syntax.
-
-- Patch #1686451: Fix return type for
-  PySequence_{Count,Index,Fast_GET_SIZE}.
-
-- Patch #1679379: add documentation for fnmatch.translate().
-
-- Bug #1629566: clarify the docs on the return values of parsedate()
-  and parsedate_tz() in email.utils and rfc822.
-
-- Patch #1671450: add a section about subclassing built-in types to the
-  "extending and embedding" tutorial.
-
-- Bug #1629125: fix wrong data type (int -> Py_ssize_t) in PyDict_Next
-  docs.
-
-- Bug #1565919: document set types in the Language Reference.
-
-- Bug #1546052: clarify that PyString_FromString(AndSize) copies the
-  string pointed to by its parameter.
-
-- Bug #1566663: remove obsolete example from datetime docs.
-
-- Bug #1541682: Fix example in the "Refcount details" API docs.
-  Additionally, remove a faulty example showing PySequence_SetItem
-  applied to a newly created list object and add notes that this isn't
-  a good idea.
-
-Tools/Demos
------------
-
-- Patch #1552024: add decorator support to unparse.py demo script.
-
-- Make auto-generated python.vim file list built-ins and exceptions in
-  alphatbetical order.  Makes output more deterministic and easier to
-  tell if the file is stale or not.
-
-- Bug #1546372: Fixed small bugglet in pybench that caused a missing
-  file not to get reported properly.
-
-Build
------
-
-- Have the search path for building extensions follow the declared
-  order in $CPPFLAGS and $LDFLAGS when adding directories from those
-  environment variables.
-
-- Bug #1983: Added a check to pyport to verify that sizeof(pid_t) is
-  smaller or equal sizeof(long).
-
-- Bug #1234: Fixed semaphore errors on AIX 5.2
-
-- Issue #1726: Remove Python/atof.c from PCBuild/pythoncore.vcproj.
-
-- Removed PCbuild8/ directory and added a new build directory for VS
-  2005 based on the VS 2008 build directory to PC/VS8.0. The script
-  PCbuild/vs8to9.py was added to sync changes from PCbuild to
-  PC/VS8.0.
-
-- Moved PCbuild/ directory for VS 2003 to PC/VS7.1 and renamed
-  PCBuild9/ directory to PCBuild/.
-
-- Bug #1699: Define _BSD_SOURCE only on OpenBSD.
-
-- Bug #1608: use -fwrapv when GCC supports it.  This is important,
-  newer GCC versions may optimize away overflow buffer overflow checks
-  without this option!
-
-- Patch #1418: Make the AC_REPLACE_FUNCS object files actually work.
-
-- Add a FAST_LOOPS build option that speeds-up looping by trading away
-  periodic threadstate and signal checking in tight loops.  By
-  default, this option is turned-off.  It should only be enabled in
-  debugged, performance critical applications.
-
-- Patch #786737: Allow building in a tree of symlinks pointing to a
-  readonly source.
-
-- Bug #1737210: Change Manufacturer of Windows installer to PSF.
-
-- Bug #1746880: Correctly install DLLs into system32 folder on Win64.
-
-- Define _BSD_SOURCE, to get access to POSIX extensions on OpenBSD
-  4.1+.
-
-- Stop supporting AtheOS and cause a build error in configure for the
-  platform.
-
-- Bug #1655392: don't add -L/usr/lib/pythonX.Y/config to the LDFLAGS
-  returned by python-config if Python was built with --enable-shared
-  because that prevented the shared library from being used.
-
-- Patch #1569798: fix a bug in distutils when building Python from a
-  directory within sys.exec_prefix.
-
-- Bug #1675511: Use -Kpic instead of -xcode=pic32 on Solaris/x86.
-
-- Disable _XOPEN_SOURCE on NetBSD 1.x.
-
-- configure now checks whether gcc supports the PyArg_ParseTuple
-  format attribute.
-
-- Bug #1578513: Cross compilation was broken by a change to configure.
-  Repair so that it's back to how it was in 2.4.3.
-
-- Patch #1576954: Update VC6 build directory; remove redundant files
-  in VC7.
-
-- Bug #1568842: Fix test for uintptr_t.
-
-- Patch #1540470: for OpenBSD 4.0.
-
-- Fix build failure on kfreebsd and on the hurd.
-
-- Fix the build of the library reference in info format.
-
-- Allow Emacs 22 for building the documentation in info format.
-
-- Makefile.pre.in(buildbottest): Run an optional script
-  pybuildbot.identify to include some information about the build
-  environment.
-
-C API
------
-
-- Unified naming convention for free lists and their limits. All free
-  lists in Object/ are named ``free_list``, the counter ``numfree``
-  and the upper limit is a macro ``PyName_MAXFREELIST`` inside an
-  #ifndef block.
-
-- ``PySet_Add()`` can now modify a newly created frozenset.  Similarly
-  to ``PyTuple_SetItem``, it can be used to populate a brand new
-  frozenset; but it does not steal a reference to the added item.
-
-- Added ``PySet_Check()`` and ``PyFrozenSet_Check()`` to the set API.
-
-- Backport of PyUnicode_FromString(), _FromStringAndSize(), _Format
-  and _FormatV from Python 3.0. Made PyLong_AsSsize_t and
-  PyLong_FromSsize_t public functions.
-
-- Patch #1720595: add T_BOOL to the range of structmember types.
-
-- Issue #1534: Added ``PyFloat_GetMax()``, ``PyFloat_GetMin()`` and
-  ``PyFloat_GetInfo()`` to the float API.
-
-- Issue #1521: On 64bit platforms, using PyArgs_ParseTuple with the t#
-  of w# format code incorrectly truncated the length to an int, even
-  when PY_SSIZE_T_CLEAN is set.  The str.decode method used to return
-  incorrect results with huge strings.
-
-- Issue #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE,
-  Py_TYPE and Py_REFCNT.
-
-- PEP 3123: Provide forward compatibility with Python 3.0, while
-  keeping backwards compatibility. Add Py_Refcnt, Py_Type, Py_Size,
-  and PyVarObject_HEAD_INIT.
-
-- Py_ssize_t fields work in structmember when HAVE_LONG_LONG is not
-  defined.
-
-- Patch #1733960: Allow T_LONGLONG to accept ints.
-
-- T_PYSSIZET can now be used in PyMemberDef lists for Py_ssize_t members.
-
-- Added a new API function ``PyImport_ImportModuleNoBlock``.
-
-- Bug #1637022: Prefix AST symbols with _Py_.
-
-- Fix some leftovers from the conversion from int to Py_ssize_t
-  (relevant to strings and sequences of more than 2**31 items).
-
-- Make _PyGILState_NoteThreadState() static, it was not used anywhere
-  outside of pystate.c and should not be necessary.
-
-- ``PyImport_Import`` and ``PyImport_ImportModule`` now always do
-  absolute imports. In earlier versions they might have used relative
-  imports under some conditions.
-
-- Added case insensitive comparison methods ``PyOS_stricmp(char*,
-  char*)`` and ``PyOS_strnicmp(char*, char*, Py_ssize_t)``.
-
-- Bug #1542693: remove semi-colon at end of PyImport_ImportModuleEx
-  macro so it can be used as an expression.
-
-Windows
--------
-
-- Patch #1706: Drop support for Win9x, WinME and NT4. Python now
-  requires Windows 2000 or greater. The _WINVER and NTDDI_VERSION
-  macros are set to Win2k for x86/32bit builds and WinXP for AMD64
-  builds.
-
-- Conditionalize definition of _CRT_SECURE_NO_DEPRECATE and
-  _CRT_NONSTDC_NO_DEPRECATE.
-
-- Bug #1216: Restore support for Visual Studio 2002.
-
-Mac
----
-
-- cfmfile now raises a DeprecationWarning.
-
-- buildtools now raises a DeprecationWarning.
-
-- Removed the macfs module.  It had been deprecated since Python 2.5.
-  This lead to the deprecation of macostools.touched() as it relied
-  solely on macfs and was a no-op under OS X.
-
-----
-
-**(For information about older versions, consult the HISTORY file.)**
-
diff --git a/Misc/NEWS.d/2.6.rst b/Misc/NEWS.d/2.6.rst
new file mode 100644
index 0000000..71753a7
--- /dev/null
+++ b/Misc/NEWS.d/2.6.rst
@@ -0,0 +1,102 @@
+.. bpo: 3967
+.. date: 7179
+.. nonce: q7G-yg
+.. release date: 01-Oct-2008
+.. section: Core and Builtins
+
+Fixed a crash in the count() and find() methods of string-like objects, when
+the "start" parameter is a huge value.
+
+..
+
+.. bpo: 3965
+.. date: 7178
+.. nonce: oD6PeM
+.. section: Core and Builtins
+
+Fixed a crash on Windows when open() is given an invalid filename or mode,
+and the filename is a unicode string.
+
+..
+
+.. bpo: 3951
+.. date: 7177
+.. nonce: WMRS35
+.. section: Core and Builtins
+
+Py_USING_MEMORY_DEBUGGER should not be enabled by default.
+
+..
+
+.. bpo: 3965
+.. date: 7176
+.. nonce: 67WKTr
+.. section: Library
+
+Allow repeated calls to turtle.Screen, by making it a true singleton object.
+
+..
+
+.. bpo: 3895
+.. date: 7175
+.. nonce: 7zAG5K
+.. section: Library
+
+It was possible to crash the interpreter when an external timer was used
+with cProfile that returned an object that could not be converted into a
+float.
+
+..
+
+.. bpo: 3950
+.. date: 7174
+.. nonce: zZXLaL
+.. section: Library
+
+Made turtle respect scale factors.
+
+..
+
+.. bpo: 3547
+.. date: 7173
+.. nonce: MEAOsx
+.. section: Library
+
+Fixed ctypes structures bitfields of varying integer sizes.
+
+..
+
+.. bpo: 3879
+.. date: 7172
+.. nonce: F8u7Is
+.. section: Library
+
+A regression in urllib.getproxies_environment was fixed.
+
+..
+
+.. bpo: 3863
+.. date: 7171
+.. nonce: 5nuS5x
+.. section: Library
+
+Disabled a unit test of fork being called from a thread when running on
+platforms known to exhibit OS bugs when attempting that.
+
+..
+
+.. bpo: 3989
+.. date: 7170
+.. nonce: RW3kS6
+.. section: Build
+
+Package the 2to3 script (as 2to3.py) in the Windows installer.
+
+..
+
+.. bpo: 3887
+.. date: 7169
+.. nonce: qYeYwa
+.. section: Build
+
+Package x64 version of CRT for AMD64 Windows binaries.
diff --git a/Misc/NEWS.d/2.6a1.rst b/Misc/NEWS.d/2.6a1.rst
new file mode 100644
index 0000000..058d8c4
--- /dev/null
+++ b/Misc/NEWS.d/2.6a1.rst
@@ -0,0 +1,5507 @@
+.. bpo: 2051
+.. date: 6793
+.. nonce: ra69cz
+.. release date: 29-Feb-2008
+.. section: Core and Builtins
+
+pyc and pyo files are no longer created with permission 644. The mode is now
+inherited from the py file.
+
+..
+
+.. bpo: 2067
+.. date: 6792
+.. nonce: dnOq_n
+.. section: Core and Builtins
+
+file.__exit__() now calls subclasses' close() method.
+
+..
+
+.. bpo: 1759
+.. date: 6791
+.. nonce: q41gVI
+.. section: Core and Builtins
+
+Backport of PEP 3129 class decorators.
+
+..
+
+.. bpo: 1881
+.. date: 6790
+.. nonce: Z0XsUF
+.. section: Core and Builtins
+
+An internal parser limit has been increased. Also see issue #215555 for a
+discussion.
+
+..
+
+.. bpo: 0
+.. date: 6789
+.. nonce: t4RIVL
+.. section: Core and Builtins
+
+Added the future_builtins module, which contains hex() and oct(). These are
+the PEP 3127 version of these functions, designed to be compatible with the
+hex() and oct() builtins from Python 3.0.  They differ slightly in their
+output formats from the existing, unchanged Python 2.6 builtins.  The
+expected usage of the future_builtins module is:   from future_builtins
+import hex, oct
+
+..
+
+.. bpo: 1600
+.. date: 6788
+.. nonce: s9YmZq
+.. section: Core and Builtins
+
+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, so that any alterations it does to the
+resulting string will be available in stringlib/formatter.h (for
+float.__format__).
+
+..
+
+.. bpo: 0
+.. date: 6787
+.. nonce: 3heWL4
+.. section: Core and Builtins
+
+Implemented PEP 3101, Advanced String Formatting.  This adds a new builtin
+format(); a format() method for str and unicode; a __format__() method to
+object, str, unicode, int, long, float, and datetime; the class
+string.Formatter; and the C API PyObject_Format().
+
+..
+
+.. bpo: 0
+.. date: 6786
+.. nonce: 5DONqn
+.. section: Core and Builtins
+
+Fixed several potential crashes, all caused by specially crafted __del__
+methods exploiting objects in temporarily inconsistent state.
+
+..
+
+.. bpo: 2115
+.. date: 6785
+.. nonce: 0hltM5
+.. section: Core and Builtins
+
+Important speedup in setting __slot__ attributes.  Also prevent a possible
+crash: an Abstract Base Class would try to access a slot on a registered
+virtual subclass.
+
+..
+
+.. bpo: 0
+.. date: 6784
+.. nonce: mw1G3G
+.. section: Core and Builtins
+
+Fixed repr() and str() of complex numbers with infinity or nan as real or
+imaginary part.
+
+..
+
+.. bpo: 0
+.. date: 6783
+.. nonce: 9iXgfq
+.. section: Core and Builtins
+
+Clear all free lists during a gc.collect() of the highest generation in
+order to allow pymalloc to free more arenas. Python may give back memory to
+the OS earlier.
+
+..
+
+.. bpo: 2045
+.. date: 6782
+.. nonce: r1Y5JL
+.. section: Core and Builtins
+
+Fix an infinite recursion triggered when printing a subclass of
+collections.defaultdict, if its default_factory is set to a bound method.
+
+..
+
+.. bpo: 0
+.. date: 6781
+.. nonce: Ix4aiT
+.. section: Core and Builtins
+
+Fixed a minor memory leak in dictobject.c. The content of the free list was
+not freed on interpreter shutdown.
+
+..
+
+.. bpo: 0
+.. date: 6780
+.. nonce: cL2Owz
+.. section: Core and Builtins
+
+Limit free list of method and built-in function objects to 256 entries each.
+
+..
+
+.. bpo: 1953
+.. date: 6779
+.. nonce: e_mPMK
+.. section: Core and Builtins
+
+Added ``sys._compact_freelists()`` and the C API functions
+``PyInt_CompactFreeList`` and ``PyFloat_CompactFreeList`` to compact the
+internal free lists of pre-allocted ints and floats.
+
+..
+
+.. bpo: 1983
+.. date: 6778
+.. nonce: 8sFEOx
+.. section: Core and Builtins
+
+Fixed return type of fork(), fork1() and forkpty() calls.  Python expected
+the return type int but the fork familie returns pi_t.
+
+..
+
+.. bpo: 1678380
+.. date: 6777
+.. nonce: QDsVif
+.. section: Core and Builtins
+
+Fix a bug that identifies 0j and -0j when they appear in the same code unit.
+
+..
+
+.. bpo: 2025
+.. date: 6776
+.. nonce: S9iuHk
+.. section: Core and Builtins
+
+Add tuple.count() and tuple.index() methods to comply with the
+collections.Sequence API.
+
+..
+
+.. bpo: 1970
+.. date: 6775
+.. nonce: QefSF6
+.. section: Core and Builtins
+
+Speedup unicode whitespace and linebreak detection.  (Patch by Antoine
+Pitrou.)
+
+..
+
+.. bpo: 0
+.. date: 6774
+.. nonce: YYnDHc
+.. section: Core and Builtins
+
+Added ``PyType_ClearCache()`` and ``sys._clear_type_cache`` to clear the
+internal lookup cache for ref leak tests.
+
+..
+
+.. bpo: 1473257
+.. date: 6773
+.. nonce: Z579K3
+.. section: Core and Builtins
+
+generator objects gain a gi_code attribute. This is the same object as the
+func_code attribute of the function that produced the generator.
+
+..
+
+.. bpo: 1920
+.. date: 6772
+.. nonce: z8WX6L
+.. section: Core and Builtins
+
+"while 0" statements were completely removed by the compiler, even in the
+presence of an "else" clause, which is supposed to be run when the condition
+is false. Now the compiler correctly emits bytecode for the "else" suite.
+
+..
+
+.. bpo: 0
+.. date: 6771
+.. nonce: VpT9Pm
+.. section: Core and Builtins
+
+A few crashers fixed: weakref_in_del.py (issue #1377858);
+loosing_dict_ref.py (issue #1303614, test67.py); borrowed_ref_[34].py (not
+in tracker).
+
+..
+
+.. bpo: 1069410
+.. date: 6770
+.. nonce: GX0t-e
+.. section: Core and Builtins
+
+The "can't load dll" message box on Windows is suppressed while an extension
+is loaded by calling SetErrorMode in dynload_win.c. The error is still
+reported properly.
+
+..
+
+.. bpo: 1915
+.. date: 6769
+.. nonce: MAhEEN
+.. section: Core and Builtins
+
+Python compiles with --enable-unicode=no again. However several extension
+methods and modules do not work without unicode support.
+
+..
+
+.. bpo: 1882
+.. date: 6768
+.. nonce: -TxSag
+.. section: Core and Builtins
+
+when compiling code from a string, encoding cookies in the second line of
+code were not always recognized correctly.
+
+..
+
+.. bpo: 1679
+.. date: 6767
+.. nonce: 48PPdV
+.. section: Core and Builtins
+
+"0x" was taken as a valid integer literal.
+
+..
+
+.. bpo: 1865
+.. date: 6766
+.. nonce: wGzYDz
+.. section: Core and Builtins
+
+``bytes`` as an alias for ``str`` and b"" as an alias "" were added.
+
+..
+
+.. bpo: 0
+.. date: 6765
+.. nonce: x2ieFr
+.. section: Core and Builtins
+
+sys.float_info / PyFloat_GetInfo: The floating point information object was
+converted from a dict to a specialized structseq object.
+
+..
+
+.. bpo: 1816
+.. date: 6764
+.. nonce: YBjd5H
+.. section: Core and Builtins
+
+Added sys.flags structseq. It exposes the status of most command line
+arguments and PYTHON* environment variables.
+
+..
+
+.. bpo: 0
+.. date: 6763
+.. nonce: wmc0sT
+.. section: Core and Builtins
+
+Objects/structseq.c: Implemented new structseq representation. The patch
+makes structseqs (e.g. the return value of os.stat) more readable.
+
+..
+
+.. bpo: 1700288
+.. date: 6762
+.. nonce: lwJfDZ
+.. section: Core and Builtins
+
+added a type attribute cache that caches method accesses, resulting in
+speedups in heavily object-oriented code.
+
+..
+
+.. bpo: 1776
+.. date: 6761
+.. nonce: JYdqH-
+.. section: Core and Builtins
+
+__import__() no longer accepts filenames on any platform. The first
+parameter to __import__() must be a valid module name.
+
+..
+
+.. bpo: 1668
+.. date: 6760
+.. nonce: mZ5kSj
+.. section: Core and Builtins
+
+renamed THREADDEBUG envvar to PYTHONTHREADDEBUG.
+
+..
+
+.. bpo: 602345
+.. date: 6759
+.. nonce: OOgFXY
+.. section: Core and Builtins
+
+Add -B command line option, PYTHONDONTWRITEBYTECODE envvar and
+sys.dont_write_bytecode attribute. All these can be set to forbid Python to
+attempt to write compiled bytecode files.
+
+..
+
+.. bpo: 0
+.. date: 6758
+.. nonce: _7a_Ll
+.. section: Core and Builtins
+
+Improve some exception messages when Windows fails to load an extension
+module. Now we get for example '%1 is not a valid Win32 application' instead
+of 'error code 193'.
+
+..
+
+.. bpo: 1481296
+.. date: 6757
+.. nonce: nRMqCX
+.. section: Core and Builtins
+
+Fixed long(float('nan')) != 0L.
+
+..
+
+.. bpo: 1640
+.. date: 6756
+.. nonce: INvUrF
+.. section: Core and Builtins
+
+Added math.isinf(x), math.isnan(x) and math.copysign(x, y) functions.
+
+..
+
+.. bpo: 1635
+.. date: 6755
+.. nonce: fiXSfN
+.. section: Core and Builtins
+
+Platform independent creation and representation of NaN and INF.
+float("nan"), float("inf") and float("-inf") now work on every platform with
+IEEE 754 semantics.
+
+..
+
+.. bpo: 0
+.. date: 6754
+.. nonce: MNMsrF
+.. section: Core and Builtins
+
+Compiler now generates simpler and faster code for dictionary literals.  The
+oparg for BUILD_MAP now indicates an estimated dictionary size.  There is a
+new opcode, STORE_MAP, for adding entries to the dictionary.
+
+..
+
+.. bpo: 1638
+.. date: 6753
+.. nonce: eg4t3m
+.. section: Core and Builtins
+
+%zd configure test fails on Linux.
+
+..
+
+.. bpo: 1620
+.. date: 6752
+.. nonce: 9qBeVK
+.. section: Core and Builtins
+
+New property decorator syntax was modifying the decorator in place instead
+of creating a new decorator object.
+
+..
+
+.. bpo: 1538
+.. date: 6751
+.. nonce: OkvKJR
+.. section: Core and Builtins
+
+Avoid copying string in split/rsplit if the split char is not found.
+
+..
+
+.. bpo: 1553
+.. date: 6750
+.. nonce: FCgNDE
+.. section: Core and Builtins
+
+An erroneous __length_hint__ can make list() raise a SystemError.
+
+..
+
+.. bpo: 0
+.. date: 6749
+.. nonce: zw_5PA
+.. section: Core and Builtins
+
+PEP 366: Allow explicit relative imports when executing modules inside
+packages with the -m switch via a new module level __package__ attribute.
+
+..
+
+.. bpo: 1402
+.. date: 6748
+.. nonce: ZTegLQ
+.. section: Core and Builtins
+
+Fix a crash on exit, when another thread is still running, and if the
+deallocation of its frames somehow calls the PyGILState_Ensure() /
+PyGILState_Release() functions.
+
+..
+
+.. bpo: 0
+.. date: 6747
+.. nonce: J3Bwhy
+.. section: Core and Builtins
+
+Expose the Py_Py3kWarningFlag as sys.py3kwarning.
+
+..
+
+.. bpo: 1445
+.. date: 6746
+.. nonce: 6-yfkc
+.. section: Core and Builtins
+
+Fix a SystemError when accessing the ``cell_contents`` attribute of an empty
+cell object.
+
+..
+
+.. bpo: 1460
+.. date: 6745
+.. nonce: y7TP5m
+.. section: Core and Builtins
+
+The utf-7 incremental decoder did not accept truncated input.  It now
+correctly saves its state between chunks of data.
+
+..
+
+.. bpo: 1739468
+.. date: 6744
+.. nonce: yM3B3r
+.. section: Core and Builtins
+
+Directories and zipfiles containing a __main__.py file can now be directly
+executed by passing their name to the interpreter. The directory/zipfile is
+automatically inserted as the first entry in sys.path.
+
+..
+
+.. bpo: 1265
+.. date: 6743
+.. nonce: 4-IaJd
+.. section: Core and Builtins
+
+Fix a problem with sys.settrace, if the tracing function uses a generator
+expression when at the same time the executed code is closing a paused
+generator.
+
+..
+
+.. bpo: 0
+.. date: 6742
+.. nonce: 7h4lCb
+.. section: Core and Builtins
+
+sets and frozensets now have an isdisjoint() method.
+
+..
+
+.. bpo: 0
+.. date: 6741
+.. nonce: 1AoYAQ
+.. section: Core and Builtins
+
+optimize the performance of builtin.sum().
+
+..
+
+.. bpo: 0
+.. date: 6740
+.. nonce: FHJ_J8
+.. section: Core and Builtins
+
+Fix warnings found by the new version of the Coverity checker.
+
+..
+
+.. bpo: 0
+.. date: 6739
+.. nonce: 6dncrc
+.. section: Core and Builtins
+
+The enumerate() built-in function is no longer bounded to sequences smaller
+than LONG_MAX.  Formerly, it raised an OverflowError.  Now, automatically
+shifts from ints to longs.
+
+..
+
+.. bpo: 1686386
+.. date: 6738
+.. nonce: mFw2O5
+.. section: Core and Builtins
+
+Tuple's tp_repr did not take into account the possibility of having a
+self-referential tuple, which is possible from C code.  Nor did object's tp_str
+consider that a type's tp_str could do something that could lead to an
+inifinite recursion. Py_ReprEnter() and Py_EnterRecursiveCall(),
+respectively, fixed the issues.
+
+..
+
+.. bpo: 1164
+.. date: 6737
+.. nonce: uMHT40
+.. section: Core and Builtins
+
+It was possible to trigger deadlock when using the 'print' statement to
+write to a file since the GIL was not released as needed.  Now
+PyObject_Print() does the right thing along with various tp_print
+implementations of the built-in types and those in the collections module.
+
+..
+
+.. bpo: 1147
+.. date: 6736
+.. nonce: aoJ7OF
+.. section: Core and Builtins
+
+Exceptions were directly allowing string exceptions in their throw() method
+even though string exceptions no longer allowed.
+
+..
+
+.. bpo: 1096
+.. date: 6735
+.. nonce: O7aCp5
+.. section: Core and Builtins
+
+Prevent a segfault from getting the repr of a very deeply nested list by
+using the recursion counter.
+
+..
+
+.. bpo: 1202533
+.. date: 6734
+.. nonce: an8trG
+.. section: Core and Builtins
+
+Fix infinite recursion calls triggered by calls to PyObject_Call() never
+calling back out to Python code to trigger recursion depth updates/checks.
+Required the creation of a static RuntimeError instance in case normalizing
+an exception put the recursion check value past its limit.  Fixes crashers
+infinite_rec_(1|2|4|5).py.
+
+..
+
+.. bpo: 1031213
+.. date: 6733
+.. nonce: -pIcnp
+.. section: Core and Builtins
+
+Decode source line in SyntaxErrors back to its original source encoding.
+
+..
+
+.. bpo: 1673759
+.. date: 6732
+.. nonce: BiojUu
+.. section: Core and Builtins
+
+add a missing overflow check when formatting floats with %G.
+
+..
+
+.. bpo: 0
+.. date: 6731
+.. nonce: irpf7S
+.. section: Core and Builtins
+
+Prevent expandtabs() on string and unicode objects from causing a segfault
+when a large width is passed on 32-bit platforms.
+
+..
+
+.. bpo: 1733488
+.. date: 6730
+.. nonce: tl7wNc
+.. section: Core and Builtins
+
+Fix compilation of bufferobject.c on AIX.
+
+..
+
+.. bpo: 1722485
+.. date: 6729
+.. nonce: k6MqIQ
+.. section: Core and Builtins
+
+remove docstrings again when running with -OO.
+
+..
+
+.. bpo: 0
+.. date: 6728
+.. nonce: 7Ddptw
+.. section: Core and Builtins
+
+Add new attribute names for function objects.  All the func_* become __*__
+attributes.  (Some already existed, e.g., __doc__ and __name__.)
+
+..
+
+.. bpo: 0
+.. date: 6727
+.. nonce: yXfECI
+.. section: Core and Builtins
+
+Add -3 option to the interpreter to warn about features that are deprecated
+and will be changed/removed in Python 3.0.
+
+..
+
+.. bpo: 1686487
+.. date: 6726
+.. nonce: K8mtCR
+.. section: Core and Builtins
+
+you can now pass any mapping after '**' in function calls.
+
+..
+
+.. bpo: 0
+.. date: 6725
+.. nonce: JKXn1u
+.. section: Core and Builtins
+
+except clauses may now be spelled either "except E, target:" or "except E as
+target:". This is to provide forwards compatibility with Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6724
+.. nonce: 8LZd6s
+.. section: Core and Builtins
+
+Deprecate BaseException.message as per PEP 352.
+
+..
+
+.. bpo: 1303614
+.. date: 6723
+.. nonce: 4vwOmy
+.. section: Core and Builtins
+
+don't expose object's __dict__ when the dict is inherited from a built-in
+base.
+
+..
+
+.. bpo: 0
+.. date: 6722
+.. nonce: VN88wa
+.. section: Core and Builtins
+
+When __slots__ are set to a unicode string, make it work the same as setting
+a plain string, ie don't expand to single letter identifiers.
+
+..
+
+.. bpo: 1191699
+.. date: 6721
+.. nonce: V0UWcO
+.. section: Core and Builtins
+
+Slices can now be pickled.
+
+..
+
+.. bpo: 1193128
+.. date: 6720
+.. nonce: hTWYjG
+.. section: Core and Builtins
+
+str.translate() now allows a None argument for translations that only remove
+characters without re-mapping the remaining characters.
+
+..
+
+.. bpo: 1682205
+.. date: 6719
+.. nonce: Ma5xwn
+.. section: Core and Builtins
+
+a TypeError while unpacking an iterable is no longer masked by a generic one
+with the message "unpack non-sequence".
+
+..
+
+.. bpo: 0
+.. date: 6718
+.. nonce: 3y4NCG
+.. section: Core and Builtins
+
+Remove unused file Python/fmod.c.
+
+..
+
+.. bpo: 1683368
+.. date: 6717
+.. nonce: 4DybJV
+.. section: Core and Builtins
+
+The object.__init__() and object.__new__() methods are now stricter in
+rejecting excess arguments.  The only time when either allows excess
+arguments is when it is not overridden and the other one is.  For backwards
+compatibility, when both are overridden, it is a deprecation warning (for
+now; maybe a Py3k warning later).  Also, type.__init__() insists on the same
+signature as supported by type.__new__().
+
+..
+
+.. bpo: 1675423
+.. date: 6716
+.. nonce: 1JoPlp
+.. section: Core and Builtins
+
+PyComplex_AsCComplex() now tries to convert an object to complex using its
+__complex__() method before falling back to the __float__() method.
+Therefore, the functions in the cmath module now can operate on objects that
+define a __complex__() method.
+
+..
+
+.. bpo: 1623563
+.. date: 6715
+.. nonce: AMQ5t2
+.. section: Core and Builtins
+
+allow __class__ assignment for classes with __slots__.  The old and the new
+class are still required to have the same slot names.
+
+..
+
+.. bpo: 1642547
+.. date: 6714
+.. nonce: jkS5Ql
+.. section: Core and Builtins
+
+Fix an error/crash when encountering syntax errors in complex if statements.
+
+..
+
+.. bpo: 1462488
+.. date: 6713
+.. nonce: Ci87cu
+.. section: Core and Builtins
+
+Python no longer segfaults when ``object.__reduce_ex__()`` is called with an
+object that is faking its type.
+
+..
+
+.. bpo: 1680015
+.. date: 6712
+.. nonce: FS6aET
+.. section: Core and Builtins
+
+Don't modify __slots__ tuple if it contains a unicode name.
+
+..
+
+.. bpo: 1444529
+.. date: 6711
+.. nonce: 69vMCk
+.. section: Core and Builtins
+
+the builtin compile() now accepts keyword arguments.
+
+..
+
+.. bpo: 1678647
+.. date: 6710
+.. nonce: Ok4Qvk
+.. section: Core and Builtins
+
+write a newline after printing an exception in any case, even when
+converting the value to a string failed.
+
+..
+
+.. bpo: 0
+.. date: 6709
+.. nonce: ec6gzH
+.. section: Core and Builtins
+
+The dir() function has been extended to call the __dir__() method on its
+argument, if it exists. If not, it will work like before. This allows
+customizing the output of dir() in the presence of a __getattr__().
+
+..
+
+.. bpo: 922167
+.. date: 6708
+.. nonce: gnPICc
+.. section: Core and Builtins
+
+Python no longer segfaults when faced with infinitely self-recursive
+reload() calls (as reported by bug #742342).
+
+..
+
+.. bpo: 1675981
+.. date: 6707
+.. nonce: YDAUpa
+.. section: Core and Builtins
+
+remove unreachable code from ``type.__new__()`` method.
+
+..
+
+.. bpo: 1491866
+.. date: 6706
+.. nonce: RNQumX
+.. section: Core and Builtins
+
+change the complex() constructor to allow parthensized forms. This means
+complex(repr(x)) now works instead of raising a ValueError.
+
+..
+
+.. bpo: 703779
+.. date: 6705
+.. nonce: 609S2B
+.. section: Core and Builtins
+
+unset __file__ in __main__ after running a file. This makes the filenames
+the warning module prints much more sensible when a PYTHONSTARTUP file is
+used.
+
+..
+
+.. bpo: 697613
+.. date: 6704
+.. nonce: bnztSz
+.. section: Core and Builtins
+
+Don't exit the interpreter on a SystemExit exception if the -i command line
+option or PYTHONINSPECT environment variable is given, but break into the
+interactive interpreter just like on other exceptions or normal program
+exit.
+
+..
+
+.. bpo: 1638879
+.. date: 6703
+.. nonce: 25rW83
+.. section: Core and Builtins
+
+don't accept strings with embedded NUL bytes in long().
+
+..
+
+.. bpo: 1674503
+.. date: 6702
+.. nonce: k_dwnR
+.. section: Core and Builtins
+
+close the file opened by execfile() in an error condition.
+
+..
+
+.. bpo: 1674228
+.. date: 6701
+.. nonce: 936l-6
+.. section: Core and Builtins
+
+when assigning a slice (old-style), check for the sq_ass_slice instead of
+the sq_slice slot.
+
+..
+
+.. bpo: 0
+.. date: 6700
+.. nonce: 4R0u4H
+.. section: Core and Builtins
+
+When printing an unraisable error, don't print exceptions. before the name.
+This duplicates the behavior whening normally printing exceptions.
+
+..
+
+.. bpo: 1653736
+.. date: 6699
+.. nonce: puX_f-
+.. section: Core and Builtins
+
+Properly discard third argument to slot_nb_inplace_power.
+
+..
+
+.. bpo: 0
+.. date: 6698
+.. nonce: LM67G-
+.. section: Core and Builtins
+
+PEP 352: Raising a string exception now triggers a TypeError. Attempting to
+catch a string exception raises DeprecationWarning.
+
+..
+
+.. bpo: 1377858
+.. date: 6697
+.. nonce: PoWq_L
+.. section: Core and Builtins
+
+Fix the segfaulting of the interpreter when an object created a weakref on
+itself during a __del__ call for new-style classes (classic classes still
+have the bug).
+
+..
+
+.. bpo: 1579370
+.. date: 6696
+.. nonce: 0Jm29g
+.. section: Core and Builtins
+
+Make PyTraceBack_Here use the current thread, not the frame's thread state.
+
+..
+
+.. bpo: 1630975
+.. date: 6695
+.. nonce: MoA2CT
+.. section: Core and Builtins
+
+Fix crash when replacing sys.stdout in sitecustomize.py.
+
+..
+
+.. bpo: 0
+.. date: 6694
+.. nonce: fKwD4u
+.. section: Core and Builtins
+
+Prevent seg fault on shutdown which could occur if an object raised a
+warning.
+
+..
+
+.. bpo: 1566280
+.. date: 6693
+.. nonce: dDNq9b
+.. section: Core and Builtins
+
+Explicitly invoke threading._shutdown from Py_Main, to avoid relying on
+atexit.
+
+..
+
+.. bpo: 1590891
+.. date: 6692
+.. nonce: VyFkXx
+.. section: Core and Builtins
+
+random.randrange don't return correct value for big number.
+
+..
+
+.. bpo: 1586791
+.. date: 6691
+.. nonce: xyEZ-z
+.. section: Core and Builtins
+
+Better exception messages for some operations on strings, tuples and lists.
+
+..
+
+.. bpo: 1067760
+.. date: 6690
+.. nonce: HtgVCb
+.. section: Core and Builtins
+
+Deprecate passing floats to file.seek.
+
+..
+
+.. bpo: 1591996
+.. date: 6689
+.. nonce: j1ATtE
+.. section: Core and Builtins
+
+Correctly forward exception in instance_contains().
+
+..
+
+.. bpo: 1588287
+.. date: 6688
+.. nonce: Mux8Eb
+.. section: Core and Builtins
+
+fix invalid assertion for `1,2` in debug builds.
+
+..
+
+.. bpo: 1576657
+.. date: 6687
+.. nonce: JfJVvT
+.. section: Core and Builtins
+
+when setting a KeyError for a tuple key, make sure that the tuple isn't used
+as the "exception arguments tuple".
+
+..
+
+.. bpo: 1565514
+.. date: 6686
+.. nonce: 3kM2zk
+.. section: Core and Builtins
+
+SystemError not raised on too many nested blocks.
+
+..
+
+.. bpo: 1576174
+.. date: 6685
+.. nonce: Ks0OoN
+.. section: Core and Builtins
+
+WindowsError now displays the windows error code again, no longer the posix
+error code.
+
+..
+
+.. bpo: 1549049
+.. date: 6684
+.. nonce: ufVmC9
+.. section: Core and Builtins
+
+Support long values in structmember, issue warnings if the assigned value
+for structmember fields gets truncated.
+
+..
+
+.. bpo: 0
+.. date: 6683
+.. nonce: v9ZHkl
+.. section: Core and Builtins
+
+Update the peephole optimizer to remove more dead code (jumps after returns)
+and inline unconditional jumps to returns.
+
+..
+
+.. bpo: 1545497
+.. date: 6682
+.. nonce: 0YntFv
+.. section: Core and Builtins
+
+when given an explicit base, int() did ignore NULs embedded in the string to
+convert.
+
+..
+
+.. bpo: 1569998
+.. date: 6681
+.. nonce: mqCYRs
+.. section: Core and Builtins
+
+break inside a try statement (outside a loop) is now recognized and
+rejected.
+
+..
+
+.. bpo: 0
+.. date: 6680
+.. nonce: MdIC85
+.. section: Core and Builtins
+
+list.pop(x) accepts any object x following the __index__ protocol.
+
+..
+
+.. bpo: 0
+.. date: 6679
+.. nonce: nWa36P
+.. section: Core and Builtins
+
+A number of places, including integer negation and absolute value, were
+fixed to not rely on undefined behaviour of the C compiler anymore.
+
+..
+
+.. bpo: 1566800
+.. date: 6678
+.. nonce: 46JUvD
+.. section: Core and Builtins
+
+make sure that EnvironmentError can be called with any number of arguments,
+as was the case in Python 2.4.
+
+..
+
+.. bpo: 1567691
+.. date: 6677
+.. nonce: rDDApW
+.. section: Core and Builtins
+
+super() and new.instancemethod() now don't accept keyword arguments any more
+(previously they accepted them, but didn't use them).
+
+..
+
+.. bpo: 0
+.. date: 6676
+.. nonce: FEPr2V
+.. section: Core and Builtins
+
+Fix a bug in the parser's future statement handling that led to "with" not
+being recognized as a keyword after, e.g., this statement: from __future__
+import division, with_statement
+
+..
+
+.. bpo: 1557232
+.. date: 6675
+.. nonce: 2eVXVS
+.. section: Core and Builtins
+
+fix seg fault with def f((((x)))) and def f(((x),)).
+
+..
+
+.. bpo: 0
+.. date: 6674
+.. nonce: aEwDvG
+.. section: Core and Builtins
+
+Fix %zd string formatting on Mac OS X so it prints negative numbers.
+
+..
+
+.. bpo: 0
+.. date: 6673
+.. nonce: _XQgGS
+.. section: Core and Builtins
+
+Allow exception instances to be directly sliced again.
+
+..
+
+.. bpo: 1551432
+.. date: 6672
+.. nonce: 4Fco_l
+.. section: Core and Builtins
+
+Exceptions do not define an explicit __unicode__ method.  This allows
+calling unicode() on exceptions classes directly to succeed.
+
+..
+
+.. bpo: 1542051
+.. date: 6671
+.. nonce: lVPfnC
+.. section: Core and Builtins
+
+Exceptions now correctly call PyObject_GC_UnTrack. Also make sure that every
+exception class has __module__ set to 'exceptions'.
+
+..
+
+.. bpo: 1550983
+.. date: 6670
+.. nonce: cUpUA-
+.. section: Core and Builtins
+
+emit better error messages for erroneous relative imports (if not in package
+and if beyond toplevel package).
+
+..
+
+.. bpo: 0
+.. date: 6669
+.. nonce: _4DitC
+.. section: Core and Builtins
+
+Overflow checking code in integer division ran afoul of new gcc
+optimizations.  Changed to be more standard-conforming.
+
+..
+
+.. bpo: 1542451
+.. date: 6668
+.. nonce: 2iFYEe
+.. section: Core and Builtins
+
+disallow continue anywhere under a finally.
+
+..
+
+.. bpo: 1546288
+.. date: 6667
+.. nonce: IBkaPv
+.. section: Core and Builtins
+
+fix seg fault in dict_equal due to ref counting bug.
+
+..
+
+.. bpo: 0
+.. date: 6666
+.. nonce: kNIYss
+.. section: Core and Builtins
+
+The return tuple from str.rpartition(sep) is (tail, sep, head) where head is
+the original string if sep was not found.
+
+..
+
+.. bpo: 1520864
+.. date: 6665
+.. nonce: G6F34n
+.. section: Core and Builtins
+
+unpacking singleton tuples in list comprehensions and generator expressions
+(x for x, in ... ) works again.  Fixing this problem required changing the
+.pyc magic number.  This means that .pyc files generated before 2.5c2 will
+be regenerated.
+
+..
+
+.. bpo: 0
+.. date: 6664
+.. nonce: R3bZAP
+.. section: Core and Builtins
+
+``with`` and ``as`` are now keywords.
+
+..
+
+.. bpo: 1664966
+.. date: 6663
+.. nonce: wU2avG
+.. section: Core and Builtins
+
+Fix crash in exec if Unicode filename can't be decoded.
+
+..
+
+.. bpo: 1537
+.. date: 6662
+.. nonce: Qt9CQA
+.. section: Core and Builtins
+
+Changed GeneratorExit's base class from Exception to BaseException.
+
+..
+
+.. bpo: 1703448
+.. date: 6661
+.. nonce: dAcXJT
+.. section: Core and Builtins
+
+A joined thread could show up in the threading.enumerate() list after the
+join() for a brief period until it actually exited.
+
+..
+
+.. bpo: 2274
+.. date: 6660
+.. nonce: COHFzM
+.. section: Library
+
+Add heapq.heappushpop().
+
+..
+
+.. bpo: 0
+.. date: 6659
+.. nonce: fQAzb9
+.. section: Library
+
+Add inspect.isabstract(object) to fix bug #2223
+
+..
+
+.. bpo: 0
+.. date: 6658
+.. nonce: JXuX8j
+.. section: Library
+
+Add a __format__ method to Decimal, to support PEP 3101.
+
+..
+
+.. bpo: 0
+.. date: 6657
+.. nonce: ofhiG1
+.. section: Library
+
+Add a timing parameter when using trace.Trace to print out timestamps.
+
+..
+
+.. bpo: 1627
+.. date: 6656
+.. nonce: -5gXNT
+.. section: Library
+
+httplib now ignores negative Content-Length headers.
+
+..
+
+.. bpo: 900744
+.. date: 6655
+.. nonce: s5RLjb
+.. section: Library
+
+If an invalid chunked-encoding header is sent by a server, httplib will now
+raise IncompleteRead and close the connection instead of raising ValueError.
+
+..
+
+.. bpo: 1492
+.. date: 6654
+.. nonce: 4bp5zb
+.. section: Library
+
+The content type of BaseHTTPServer error messages can now be overridden.
+
+..
+
+.. bpo: 1781
+.. date: 6653
+.. nonce: m_snIp
+.. section: Library
+
+ConfigParser now does not let you add the "default" section (ignore-case)
+
+..
+
+.. bpo: 0
+.. date: 6652
+.. nonce: a5mTI6
+.. section: Library
+
+Removed uses of dict.has_key() from distutils, and uses of callable() from
+copy_reg.py, so the interpreter now starts up without warnings when '-3' is
+given.  More work like this needs to be done in the rest of the stdlib.
+
+..
+
+.. bpo: 1916
+.. date: 6651
+.. nonce: w1JiGM
+.. section: Library
+
+added isgenerator() and isgeneratorfunction() to inspect.py.
+
+..
+
+.. bpo: 1224
+.. date: 6650
+.. nonce: UN2SxX
+.. section: Library
+
+Fixed bad url parsing when path begins with double slash.
+
+..
+
+.. bpo: 0
+.. date: 6649
+.. nonce: T9Y4k2
+.. section: Library
+
+ctypes instances that are not or do not contain pointers can now be pickled.
+
+..
+
+.. bpo: 1966
+.. date: 6648
+.. nonce: 8viueu
+.. section: Library
+
+Break infinite loop in httplib when the servers implements the chunked
+encoding incorrectly.
+
+..
+
+.. bpo: 0
+.. date: 6647
+.. nonce: p6a6jJ
+.. section: Library
+
+Rename rational.py to fractions.py and the rational.Rational class to
+fractions.Fraction, to avoid the name clash with the abstract base class
+numbers.Rational.  See discussion in issue #1682.
+
+..
+
+.. bpo: 0
+.. date: 6646
+.. nonce: KqfmO5
+.. section: Library
+
+The pickletools module now provides an optimize() function that eliminates
+unused PUT opcodes from a pickle string.
+
+..
+
+.. bpo: 2021
+.. date: 6645
+.. nonce: jhrI3F
+.. section: Library
+
+Allow tempfile.NamedTemporaryFile and SpooledTemporaryFile to be used in
+with statements by correctly supporting the context management protocol.
+
+..
+
+.. bpo: 1979
+.. date: 6644
+.. nonce: Ji_oHm
+.. section: Library
+
+Add rich comparisons to Decimal, and make Decimal comparisons involving a
+NaN follow the IEEE 754 standard.
+
+..
+
+.. bpo: 2004
+.. date: 6643
+.. nonce: JJ0sxf
+.. section: Library
+
+tarfile.py: Use mode 0700 for temporary directories and default permissions
+for missing directories.
+
+..
+
+.. bpo: 175006
+.. date: 6642
+.. nonce: 1yQpV-
+.. section: Library
+
+The debugger used to skip the condition of a "while" statement after the
+first iteration. Now it correctly steps on the expression, and breakpoints
+on the "while" statement are honored on each loop.
+
+..
+
+.. bpo: 1765140
+.. date: 6641
+.. nonce: 9htIhK
+.. section: Library
+
+add an optional delay argument to FileHandler and its subclasses. Defaults
+to false (existing behaviour), but if true, defers opening the file until
+the first call to emit().
+
+..
+
+.. bpo: 0
+.. date: 6640
+.. nonce: kWAgVm
+.. section: Library
+
+The pprint module now supports sets and frozensets.
+
+..
+
+.. bpo: 1221598
+.. date: 6639
+.. nonce: Tv3Q8D
+.. section: Library
+
+add optional callbacks to ftplib.FTP's storbinary() and storlines() methods.
+(Contributed by Phil Schwartz)
+
+..
+
+.. bpo: 1715
+.. date: 6638
+.. nonce: JieRLT
+.. section: Library
+
+include sub-extension modules in pydoc's text output.
+
+..
+
+.. bpo: 1836
+.. date: 6637
+.. nonce: dvWiAW
+.. section: Library
+
+fix an off-by-one bug in TimedRotatingHandler's rollover time calculation.
+
+..
+
+.. bpo: 1021
+.. date: 6636
+.. nonce: oJ2Efg
+.. section: Library
+
+fix a bug to allow basicConfig to accept NOTSET as a level.
+
+..
+
+.. bpo: 932563
+.. date: 6635
+.. nonce: KzDj52
+.. section: Library
+
+add LoggerAdapter convenience class to make it easier to add contextual
+information in logging output.
+
+..
+
+.. bpo: 1760556
+.. date: 6634
+.. nonce: TJk_Du
+.. section: Library
+
+fix a bug to avoid FileHandler throwing an exception in flush().
+
+..
+
+.. bpo: 1530959
+.. date: 6633
+.. nonce: FpNHxq
+.. section: Library
+
+distutils' build command now uses different build directory when building
+extension modules against versions of Python compiled with
+``--with-pydebug``.
+
+..
+
+.. bpo: 1555501
+.. date: 6632
+.. nonce: ZWMYzK
+.. section: Library
+
+move plistlib from plat-mac directory to general library.
+
+..
+
+.. bpo: 1269
+.. date: 6631
+.. nonce: mXhB8y
+.. section: Library
+
+fix a bug in pstats.add_callers() and add a unit test file for pstats.
+
+..
+
+.. bpo: 1669
+.. date: 6630
+.. nonce: wYb4kk
+.. section: Library
+
+don't allow shutil.rmtree() to be called on a symlink to a directory.
+
+..
+
+.. bpo: 1664522
+.. date: 6629
+.. nonce: iKq42P
+.. section: Library
+
+in urllib, don't read non-existing directories in ftp mode, returning a
+0-byte file -- raise an IOError instead.
+
+..
+
+.. bpo: 856047
+.. date: 6628
+.. nonce: u8LcMz
+.. section: Library
+
+respect the ``no_proxy`` environment variable when using the ``http_proxy``
+etc. environment variables in urllib.
+
+..
+
+.. bpo: 1178141
+.. date: 6627
+.. nonce: kOvNOH
+.. section: Library
+
+add a getcode() method to the addinfourls that urllib.open() returns so that
+you can retrieve the HTTP status code.
+
+..
+
+.. bpo: 1003
+.. date: 6626
+.. nonce: WwyOlb
+.. section: Library
+
+Fix zipfile decryption check, it would fail zip files with extended local
+headers.
+
+..
+
+.. bpo: 1189216
+.. date: 6625
+.. nonce: ux7ujo
+.. section: Library
+
+Fix the zipfile module to work on archives with headers past the 2**31 byte
+boundary.
+
+..
+
+.. bpo: 1336
+.. date: 6624
+.. nonce: r4ZdAS
+.. section: Library
+
+fix a race condition in subprocess.Popen if the garbage collector kicked in
+at the wrong time that would cause the process to hang when the child wrote
+to stderr.
+
+..
+
+.. bpo: 1146
+.. date: 6623
+.. nonce: 3Fg8Y4
+.. section: Library
+
+fix how textwrap breaks a long word that would start in the last column of a
+line.
+
+..
+
+.. bpo: 1693149
+.. date: 6622
+.. nonce: UDBT5O
+.. section: Library
+
+trace.py --ignore-module - accept multiple comma-separated modules to be
+given.
+
+..
+
+.. bpo: 1822
+.. date: 6621
+.. nonce: p-ABc6
+.. section: Library
+
+MIMEMultipart.is_multipart() behaves correctly for a just-created (and
+empty) instance. Thanks Jonathan Share.
+
+..
+
+.. bpo: 1861
+.. date: 6620
+.. nonce: YK39Pw
+.. section: Library
+
+Added an attribute to the sched module which returns an ordered list of
+upcoming events (displayed as named tuples).
+
+..
+
+.. bpo: 1837
+.. date: 6619
+.. nonce: ltZfCW
+.. section: Library
+
+The queue module now also supports a LIFO queue and a priority queue.
+
+..
+
+.. bpo: 1048820
+.. date: 6618
+.. nonce: hKddPS
+.. section: Library
+
+Add insert-mode editing to curses.textpad.Textbox (patch by Stefan Wehr).
+Also, fix an off-by-one bug in Textbox.gather().
+
+..
+
+.. bpo: 1831
+.. date: 6617
+.. nonce: nEy8wq
+.. section: Library
+
+ctypes now raises a TypeError if conflicting positional and named arguments
+are passed to a Structure or Union initializer. When too many positional
+arguments are passed, also a TypeError is raised instead of a ValueError.
+
+..
+
+.. bpo: 0
+.. date: 6616
+.. nonce: 2_XlvX
+.. section: Library
+
+Convert the internal ctypes array type cache to a WeakValueDict so that
+array types do not live longer than needed.
+
+..
+
+.. bpo: 1786
+.. date: 6615
+.. nonce: glzSfE
+.. section: Library
+
+pdb should use its own stdin/stdout around an exec call and when creating a
+recursive instance.
+
+..
+
+.. bpo: 1698398
+.. date: 6614
+.. nonce: yxfh1R
+.. section: Library
+
+ZipFile.printdir() crashed because the format string expected a tuple type
+of length six instead of time.struct_time object.
+
+..
+
+.. bpo: 1780
+.. date: 6613
+.. nonce: PEqfgx
+.. section: Library
+
+The Decimal constructor now accepts arbitrary leading and trailing
+whitespace when constructing from a string. Context.create_decimal no longer
+accepts trailing newlines.
+
+..
+
+.. bpo: 0
+.. date: 6612
+.. nonce: e5MNna
+.. section: Library
+
+Decimal.as_tuple(), difflib.find_longest_match() and inspect functions that
+returned a tuple now return a named tuple.
+
+..
+
+.. bpo: 0
+.. date: 6611
+.. nonce: r8_kX-
+.. section: Library
+
+Doctest now returns results as a named tuple for readability:     (0, 7) -->
+TestResults(failed=0, attempted=7)
+
+..
+
+.. bpo: 846388
+.. date: 6610
+.. nonce: h2AmOT
+.. section: Library
+
+re.match is interruptible now, which is particularly good for long regular
+expression matches.
+
+..
+
+.. bpo: 1137
+.. date: 6609
+.. nonce: USs2NO
+.. section: Library
+
+allow setting buffer_size attribute on pyexpat Parser objects to set the
+character data buffer size.
+
+..
+
+.. bpo: 1757
+.. date: 6608
+.. nonce: ZXonpG
+.. section: Library
+
+The hash of a Decimal instance is no longer affected by the current context.
+
+..
+
+.. bpo: 467924
+.. date: 6607
+.. nonce: VqzBRz
+.. section: Library
+
+add ZipFile.extract() and ZipFile.extractall() in the zipfile module.
+
+..
+
+.. bpo: 1646
+.. date: 6606
+.. nonce: 0Shvv6
+.. section: Library
+
+Make socket support the TIPC protocol.
+
+..
+
+.. bpo: 1742
+.. date: 6605
+.. nonce: vdh5mh
+.. section: Library
+
+return os.curdir from os.path.relpath() if both arguments are equal instead
+of raising an exception.
+
+..
+
+.. bpo: 1637
+.. date: 6604
+.. nonce: 9ck-BF
+.. section: Library
+
+fix urlparse for URLs like 'http://x.com?arg=/foo'.
+
+..
+
+.. bpo: 1698
+.. date: 6603
+.. nonce: KTC0EP
+.. section: Library
+
+allow '@' in username parsed by urlparse.py.
+
+..
+
+.. bpo: 1735
+.. date: 6602
+.. nonce: Xgf-_n
+.. section: Library
+
+TarFile.extractall() now correctly sets directory permissions and times.
+
+..
+
+.. bpo: 1713
+.. date: 6601
+.. nonce: SO4g7K
+.. section: Library
+
+posixpath.ismount() claims symlink to a mountpoint is a mountpoint.
+
+..
+
+.. bpo: 1687
+.. date: 6600
+.. nonce: qmmQ39
+.. section: Library
+
+Fxed plistlib.py restricts <integer> to Python int when writing
+
+..
+
+.. bpo: 1700
+.. date: 6599
+.. nonce: u0StFP
+.. section: Library
+
+Regular expression inline flags incorrectly handle certain unicode
+characters.
+
+..
+
+.. bpo: 1689
+.. date: 6598
+.. nonce: dx0XAO
+.. section: Library
+
+PEP 3141, numeric abstract base classes.
+
+..
+
+.. bpo: 0
+.. date: 6597
+.. nonce: BOT6AN
+.. section: Library
+
+Tk issue #1851526: Return results from Python callbacks to Tcl as Tcl
+objects.
+
+..
+
+.. bpo: 1642
+.. date: 6596
+.. nonce: doGg1I
+.. section: Library
+
+Fix segfault in ctypes when trying to delete attributes.
+
+..
+
+.. bpo: 1727780
+.. date: 6595
+.. nonce: X0UJbf
+.. section: Library
+
+Support loading pickles of random.Random objects created on 32-bit systems
+on 64-bit systems, and vice versa. As a consequence of the change, Random
+pickles created by Python 2.6 cannot be loaded in Python 2.5.
+
+..
+
+.. bpo: 1455
+.. date: 6594
+.. nonce: qerPO1
+.. section: Library
+
+The distutils package now supports VS 2005 and VS 2008 for both the
+msvccompiler and cygwincompiler.
+
+..
+
+.. bpo: 1531
+.. date: 6593
+.. nonce: hM8cSV
+.. section: Library
+
+tarfile.py: Read fileobj from the current offset, do not seek to the start.
+
+..
+
+.. bpo: 1534
+.. date: 6592
+.. nonce: 2S_yfp
+.. section: Library
+
+Added a dictionary sys.float_info with information about the internal
+floating point type to the sys module.
+
+..
+
+.. bpo: 1429818
+.. date: 6591
+.. nonce: f7q9_-
+.. section: Library
+
+patch for trace and doctest modules so they play nicely together.
+
+..
+
+.. bpo: 0
+.. date: 6590
+.. nonce: ydUJ45
+.. section: Library
+
+doctest made a bad assumption that a package's __loader__.get_data() method
+used universal newlines.
+
+..
+
+.. bpo: 1705170
+.. date: 6589
+.. nonce: 0iNdat
+.. section: Library
+
+contextlib.contextmanager was still swallowing StopIteration in some cases.
+This should no longer happen.
+
+..
+
+.. bpo: 1292
+.. date: 6588
+.. nonce: kW3YuR
+.. section: Library
+
+On alpha, arm, ppc, and s390 linux systems the --with-system-ffi configure
+option defaults to "yes".
+
+..
+
+.. bpo: 0
+.. date: 6587
+.. nonce: nGUzBY
+.. section: Library
+
+IN module for FreeBSD 8 is added and preexisting FreeBSD 6 and 7 files are
+updated.
+
+..
+
+.. bpo: 1181
+.. date: 6586
+.. nonce: -eJDB_
+.. section: Library
+
+unsetenv() is now called when the os.environ.pop() and os.environ.clear()
+methods are used. (See also: bpo-1287)
+
+..
+
+.. bpo: 0
+.. date: 6585
+.. nonce: 76qRj0
+.. section: Library
+
+ctypes will now work correctly on 32-bit systems when Python is configured
+with --with-system-ffi.
+
+..
+
+.. bpo: 1203
+.. date: 6584
+.. nonce: MPohFL
+.. section: Library
+
+ctypes now does work on OS X when Python is built with
+``--disable-toolbox-glue``.
+
+..
+
+.. bpo: 0
+.. date: 6583
+.. nonce: 4gk9jK
+.. section: Library
+
+collections.deque() now supports a "maxlen" argument.
+
+..
+
+.. bpo: 0
+.. date: 6582
+.. nonce: KEzbqu
+.. section: Library
+
+itertools.count() is no longer bounded to LONG_MAX.  Formerly, it raised an
+OverflowError.  Now, automatically shifts from ints to longs.
+
+..
+
+.. bpo: 0
+.. date: 6581
+.. nonce: 8OaKab
+.. section: Library
+
+Added itertools.product() which forms the Cartesian product of the input
+iterables.
+
+..
+
+.. bpo: 0
+.. date: 6580
+.. nonce: w2hxqg
+.. section: Library
+
+Added itertools.combinations() and itertools.permutations().
+
+..
+
+.. bpo: 1541463
+.. date: 6579
+.. nonce: xGnI_Z
+.. section: Library
+
+optimize performance of cgi.FieldStorage operations.
+
+..
+
+.. bpo: 0
+.. date: 6578
+.. nonce: oJ3eSC
+.. section: Library
+
+Decimal is fully updated to the latest Decimal Specification (v1.66).
+
+..
+
+.. bpo: 1153
+.. date: 6577
+.. nonce: oxsMZ-
+.. section: Library
+
+repr.repr() now doesn't require set and dictionary items to be orderable to
+properly represent them.
+
+..
+
+.. bpo: 0
+.. date: 6576
+.. nonce: 3NxHdM
+.. section: Library
+
+A 'c_longdouble' type was added to the ctypes module.
+
+..
+
+.. bpo: 1709599
+.. date: 6575
+.. nonce: ZInQo1
+.. section: Library
+
+Run test_1565150 only if the file system is NTFS.
+
+..
+
+.. bpo: 0
+.. date: 6574
+.. nonce: dXPH7w
+.. section: Library
+
+When encountering a password-protected robots.txt file the RobotFileParser
+no longer prompts interactively for a username and password (bug 813986).
+
+..
+
+.. bpo: 0
+.. date: 6573
+.. nonce: -jXdBx
+.. section: Library
+
+TarFile.__init__() no longer fails if no name argument is passed and the
+fileobj argument has no usable name attribute (e.g. StringIO).
+
+..
+
+.. bpo: 0
+.. date: 6572
+.. nonce: OzvBf4
+.. section: Library
+
+The functools module now provides 'reduce', for forward compatibility with
+Python 3000.
+
+..
+
+.. bpo: 0
+.. date: 6571
+.. nonce: NBttxY
+.. section: Library
+
+Server-side SSL support and cert verification added, by Bill Janssen.
+
+..
+
+.. bpo: 0
+.. date: 6570
+.. nonce: fKSKr7
+.. section: Library
+
+socket.ssl deprecated; use new ssl module instead.
+
+..
+
+.. bpo: 0
+.. date: 6569
+.. nonce: z663Ql
+.. section: Library
+
+uuid creation is now threadsafe.
+
+..
+
+.. bpo: 0
+.. date: 6568
+.. nonce: NGc_vS
+.. section: Library
+
+EUC-KR codec now handles the cheot-ga-keut composed make-up hangul
+syllables.
+
+..
+
+.. bpo: 0
+.. date: 6567
+.. nonce: abpzUy
+.. section: Library
+
+GB18030 codec now can encode additional two-byte characters that are missing
+in GBK.
+
+..
+
+.. bpo: 0
+.. date: 6566
+.. nonce: hoSWQ5
+.. section: Library
+
+Add new codecs for UTF-32, UTF-32-LE and UTF-32-BE.
+
+..
+
+.. bpo: 1704793
+.. date: 6565
+.. nonce: o6G2FY
+.. section: Library
+
+Return UTF-16 pair if unicodedata.lookup cannot represent the result in a
+single character.
+
+..
+
+.. bpo: 978833
+.. date: 6564
+.. nonce: nosP-g
+.. section: Library
+
+Close https sockets by releasing the _ssl object.
+
+..
+
+.. bpo: 0
+.. date: 6563
+.. nonce: Ha8_ga
+.. section: Library
+
+Change location of the package index to pypi.python.org/pypi
+
+..
+
+.. bpo: 1701409
+.. date: 6562
+.. nonce: x3Qs1t
+.. section: Library
+
+Fix a segfault in printing ctypes.c_char_p and ctypes.c_wchar_p when they
+point to an invalid location.  As a sideeffect the representation of these
+instances has changed.
+
+..
+
+.. bpo: 0
+.. date: 6561
+.. nonce: QHd-OV
+.. section: Library
+
+tarfile.py: Added "exclude" keyword argument to TarFile.add().
+
+..
+
+.. bpo: 1734723
+.. date: 6560
+.. nonce: zfdFr7
+.. section: Library
+
+Fix repr.Repr() so it doesn't ignore the maxtuple attribute.
+
+..
+
+.. bpo: 0
+.. date: 6559
+.. nonce: A7KLfz
+.. section: Library
+
+The urlopen function of urllib2 now has an optional timeout parameter (note
+that it actually works with HTTP, HTTPS, FTP and FTPS connections).
+
+..
+
+.. bpo: 0
+.. date: 6558
+.. nonce: mMxho-
+.. section: Library
+
+In ftplib, the FTP.ntransfercmd method, when in passive mode, now uses the
+socket.create_connection function, using the timeout specified at connection
+time.
+
+..
+
+.. bpo: 1728403
+.. date: 6557
+.. nonce: SusWve
+.. section: Library
+
+Fix a bug that CJKCodecs StreamReader hangs when it reads a file that ends
+with incomplete sequence and sizehint argument for .read() is specified.
+
+..
+
+.. bpo: 1730389
+.. date: 6556
+.. nonce: WVvA-8
+.. section: Library
+
+Change time.strptime() to use ``\s+`` instead of ``\s*`` when matching
+spaces in the specified format argument.
+
+..
+
+.. bpo: 1668596
+.. date: 6555
+.. nonce: 5l2Qnk
+.. section: Library
+
+distutils now copies data files even if package_dir is empty. (See also:
+bpo-1720897)
+
+..
+
+.. bpo: 0
+.. date: 6554
+.. nonce: jWDgV4
+.. section: Library
+
+sha now raises a DeprecationWarning upon import.
+
+..
+
+.. bpo: 0
+.. date: 6553
+.. nonce: fepG9O
+.. section: Library
+
+md5 now raises a DeprecationWarning upon import.
+
+..
+
+.. bpo: 1385
+.. date: 6552
+.. nonce: pms34F
+.. section: Library
+
+The hmac module now computes the correct hmac when using hashes with a block
+size other than 64 bytes (such as sha384 and sha512).
+
+..
+
+.. bpo: 0
+.. date: 6551
+.. nonce: soFpEB
+.. section: Library
+
+mimify now raises a DeprecationWarning upon import.
+
+..
+
+.. bpo: 0
+.. date: 6550
+.. nonce: eSD3F7
+.. section: Library
+
+MimeWriter now raises a DeprecationWarning upon import.
+
+..
+
+.. bpo: 0
+.. date: 6549
+.. nonce: CQZoRW
+.. section: Library
+
+tarfile.py: Improved unicode support. Unicode input names are now officially
+supported. Added "errors" argument to the TarFile class.
+
+..
+
+.. bpo: 0
+.. date: 6548
+.. nonce: NLgbaM
+.. section: Library
+
+urllib.ftpwrapper class now accepts an optional timeout.
+
+..
+
+.. bpo: 0
+.. date: 6547
+.. nonce: aRmxLC
+.. section: Library
+
+shlex.split() now has an optional "posix" parameter.
+
+..
+
+.. bpo: 0
+.. date: 6546
+.. nonce: 16HcrE
+.. section: Library
+
+The posixfile module now raises a DeprecationWarning.
+
+..
+
+.. bpo: 0
+.. date: 6545
+.. nonce: oUYKUV
+.. section: Library
+
+Remove the gopherlib module.  This also leads to the removal of gopher
+support in urllib/urllib2.
+
+..
+
+.. bpo: 0
+.. date: 6544
+.. nonce: NH6RAh
+.. section: Library
+
+Fix bug in marshal where bad data would cause a segfault due to lack of an
+infinite recursion check.
+
+..
+
+.. bpo: 0
+.. date: 6543
+.. nonce: 9XHU1_
+.. section: Library
+
+Removed plat-freebsd2 and plat-freebsd3 directories (and IN.py in the
+directories).
+
+..
+
+.. bpo: 0
+.. date: 6542
+.. nonce: Sbs4OF
+.. section: Library
+
+HTML-escape the plain traceback in cgitb's HTML output, to prevent the
+traceback inadvertently or maliciously closing the comment and injecting
+HTML into the error page.
+
+..
+
+.. bpo: 0
+.. date: 6541
+.. nonce: fDPaFU
+.. section: Library
+
+The popen2 module and os.popen* are deprecated.  Use the subprocess module.
+
+..
+
+.. bpo: 0
+.. date: 6540
+.. nonce: DiM9IG
+.. section: Library
+
+Added an optional credentials argument to SMTPHandler, for use with SMTP
+servers which require authentication.
+
+..
+
+.. bpo: 1695948
+.. date: 6539
+.. nonce: Gkj_1M
+.. section: Library
+
+Added optional timeout parameter to SocketHandler.
+
+..
+
+.. bpo: 1652788
+.. date: 6538
+.. nonce: Wp3YON
+.. section: Library
+
+Minor fix for currentframe.
+
+..
+
+.. bpo: 1598415
+.. date: 6537
+.. nonce: z3zZwM
+.. section: Library
+
+Added WatchedFileHandler to better support external log file rotation using
+e.g. newsyslog or logrotate. This handler is only useful in Unix/Linux
+environments.
+
+..
+
+.. bpo: 1706381
+.. date: 6536
+.. nonce: LwHKFI
+.. section: Library
+
+Specifying the SWIG option "-c++" in the setup.py file (as opposed to the
+command line) will now write file names ending in ".cpp" too.
+
+..
+
+.. bpo: 0
+.. date: 6535
+.. nonce: 960i58
+.. section: Library
+
+As specified in RFC 2616, an HTTP response like 2xx indicates that the
+client's request was successfully received, understood, and accepted.  Now
+in these cases no error is raised in urllib (issue #1177) and urllib2.
+
+..
+
+.. bpo: 1290505
+.. date: 6534
+.. nonce: bXfrzq
+.. section: Library
+
+time.strptime's internal cache of locale information is now properly
+recreated when the locale is changed.
+
+..
+
+.. bpo: 1685563
+.. date: 6533
+.. nonce: ce_7tt
+.. section: Library
+
+remove (don't add) duplicate paths in distutils.MSVCCompiler.
+
+..
+
+.. bpo: 0
+.. date: 6532
+.. nonce: 0VS9AQ
+.. section: Library
+
+Added a timeout parameter to the constructor of other protocols (telnetlib,
+ftplib, smtplib and poplib). This is second part of the work started with
+create_connection() and timeout in httplib, and closes patch #723312.
+
+..
+
+.. bpo: 1676823
+.. date: 6531
+.. nonce: Ujlmqa
+.. section: Library
+
+Added create_connection() to socket.py, which may be called with a timeout,
+and use it from httplib (whose HTTPConnection and HTTPSConnection now accept
+an optional timeout).
+
+..
+
+.. bpo: 978833
+.. date: 6530
+.. nonce: zF4H2Y
+.. section: Library
+
+Revert r50844, as it broke _socketobject.dup.
+
+..
+
+.. bpo: 1675967
+.. date: 6529
+.. nonce: 1iw5U2
+.. section: Library
+
+re patterns pickled with Python 2.4 and earlier can now be unpickled with
+Python 2.5 and newer.
+
+..
+
+.. bpo: 1630118
+.. date: 6528
+.. nonce: eZiVxq
+.. section: Library
+
+add a SpooledTemporaryFile class to tempfile.py.
+
+..
+
+.. bpo: 1273829
+.. date: 6527
+.. nonce: mj4QNT
+.. section: Library
+
+os.walk() now has a "followlinks" parameter. If set to True (which is not
+the default), it visits symlinks pointing to directories.
+
+..
+
+.. bpo: 1681228
+.. date: 6526
+.. nonce: 4MMQ01
+.. section: Library
+
+the webbrowser module now correctly uses the default GNOME or KDE browser,
+depending on whether there is a session of one of those present. Also, it
+tries the Windows default browser before trying Mozilla variants.
+
+..
+
+.. bpo: 1339796
+.. date: 6525
+.. nonce: Nn-Kby
+.. section: Library
+
+add a relpath() function to os.path.
+
+..
+
+.. bpo: 1681153
+.. date: 6524
+.. nonce: fQELcx
+.. section: Library
+
+the wave module now closes a file object it opened if initialization failed.
+
+..
+
+.. bpo: 767111
+.. date: 6523
+.. nonce: C9lOY0
+.. section: Library
+
+fix long-standing bug in urllib which caused an AttributeError instead of an
+IOError when the server's response didn't contain a valid HTTP status line.
+
+..
+
+.. bpo: 957650
+.. date: 6522
+.. nonce: 2j9cb4
+.. section: Library
+
+"%var%" environment variable references are now properly expanded in
+ntpath.expandvars(), also "~user" home directory references are recognized
+and handled on Windows.
+
+..
+
+.. bpo: 1429539
+.. date: 6521
+.. nonce: _VYWyV
+.. section: Library
+
+pdb now correctly initializes the __main__ module for the debugged script,
+which means that imports from __main__ work correctly now.
+
+..
+
+.. bpo: 0
+.. date: 6520
+.. nonce: 8oczdW
+.. section: Library
+
+The nonobvious commands.getstatus() function is now deprecated.
+
+..
+
+.. bpo: 1393667
+.. date: 6519
+.. nonce: qba-ui
+.. section: Library
+
+pdb now has a "run" command which restarts the debugged Python program,
+optionally with different arguments.
+
+..
+
+.. bpo: 1649190
+.. date: 6518
+.. nonce: WRBz2d
+.. section: Library
+
+Adding support for _Bool to ctypes as c_bool.
+
+..
+
+.. bpo: 1530482
+.. date: 6517
+.. nonce: 1HDrw-
+.. section: Library
+
+add pydoc.render_doc() which returns the documentation for a thing instead
+of paging it to stdout, which pydoc.doc() does.
+
+..
+
+.. bpo: 1533909
+.. date: 6516
+.. nonce: I3IRRD
+.. section: Library
+
+the timeit module now accepts callables in addition to strings for the code
+to time and the setup code. Also added two convenience functions for
+instantiating a Timer and calling its methods.
+
+..
+
+.. bpo: 1537850
+.. date: 6515
+.. nonce: mojZP-
+.. section: Library
+
+tempfile.NamedTemporaryFile now has a "delete" parameter which can be set to
+False to prevent the default delete-on-close behavior.
+
+..
+
+.. bpo: 1581073
+.. date: 6514
+.. nonce: Im5bIV
+.. section: Library
+
+add a flag to textwrap that prevents the dropping of whitespace while
+wrapping.
+
+..
+
+.. bpo: 1603688
+.. date: 6513
+.. nonce: Mv_jlM
+.. section: Library
+
+ConfigParser.SafeConfigParser now checks values that are set for invalid
+interpolation sequences that would lead to errors on reading back those
+values.
+
+..
+
+.. bpo: 0
+.. date: 6512
+.. nonce: ZYo06p
+.. section: Library
+
+Added support for the POSIX.1-2001 (pax) format to tarfile.py. Extended and
+cleaned up the test suite. Added a new testtar.tar.
+
+..
+
+.. bpo: 1449244
+.. date: 6511
+.. nonce: uHkKjk
+.. section: Library
+
+Support Unicode strings in
+email.message.Message.{set_charset,get_content_charset}.
+
+..
+
+.. bpo: 1542681
+.. date: 6510
+.. nonce: 5y5uCV
+.. section: Library
+
+add entries for "with", "as" and "CONTEXTMANAGERS" to pydoc's help keywords.
+
+..
+
+.. bpo: 1555098
+.. date: 6509
+.. nonce: mO79lM
+.. section: Library
+
+use str.join() instead of repeated string concatenation in robotparser.
+
+..
+
+.. bpo: 1635454
+.. date: 6508
+.. nonce: 8Gv5Ek
+.. section: Library
+
+the csv.DictWriter class now includes the offending field names in its
+exception message if you try to write a record with a dictionary containing
+fields not in the CSV field names list.
+
+..
+
+.. bpo: 1668100
+.. date: 6507
+.. nonce: BfAU9i
+.. section: Library
+
+urllib2 now correctly raises URLError instead of OSError if accessing a
+local file via the file:// protocol fails.
+
+..
+
+.. bpo: 1677862
+.. date: 6506
+.. nonce: YuXNs6
+.. section: Library
+
+Require a space or tab after import in .pth files.
+
+..
+
+.. bpo: 1192590
+.. date: 6505
+.. nonce: d2uMgi
+.. section: Library
+
+Fix pdb's "ignore" and "condition" commands so they trap the IndexError
+caused by passing in an invalid breakpoint number.
+
+..
+
+.. bpo: 1599845
+.. date: 6504
+.. nonce: 9zhNQX
+.. section: Library
+
+Add an option to disable the implicit calls to server_bind() and
+server_activate() in the constructors for TCPServer, SimpleXMLRPCServer and
+DocXMLRPCServer.
+
+..
+
+.. bpo: 1531963
+.. date: 6503
+.. nonce: p5GJcu
+.. section: Library
+
+Make SocketServer.TCPServer's server_address always be equal to calling
+getsockname() on the server's socket. Fixed by patch #1545011.
+
+..
+
+.. bpo: 742598
+.. date: 6502
+.. nonce: -50Nso
+.. section: Library
+
+Add .timeout attribute to SocketServer that calls .handle_timeout() when no
+requests are received.
+
+..
+
+.. bpo: 1651235
+.. date: 6501
+.. nonce: cY8CV7
+.. section: Library
+
+When a tuple was passed to a ctypes function call, Python would crash
+instead of raising an error.
+
+..
+
+.. bpo: 1646630
+.. date: 6500
+.. nonce: rkS7gc
+.. section: Library
+
+ctypes.string_at(buf, 0) and ctypes.wstring_at(buf, 0) returned string up to
+the first NUL character.
+
+..
+
+.. bpo: 957003
+.. date: 6499
+.. nonce: SskRob
+.. section: Library
+
+Implement smtplib.LMTP.
+
+..
+
+.. bpo: 1481079
+.. date: 6498
+.. nonce: gEYAkC
+.. section: Library
+
+add support for HTTP_REFERER to CGIHTTPServer.
+
+..
+
+.. bpo: 1675424
+.. date: 6497
+.. nonce: 8A9fwo
+.. section: Library
+
+Added tests for uncovered code in the zipfile module.  The KeyError raised
+by Zipfile.getinfo for nonexistent names now has a descriptive message.
+
+..
+
+.. bpo: 1115886
+.. date: 6496
+.. nonce: Q-42A9
+.. section: Library
+
+os.path.splitext('.cshrc') gives now ('.cshrc', '').
+
+..
+
+.. bpo: 0
+.. date: 6495
+.. nonce: wlVTpz
+.. section: Library
+
+unittest now verifies more of its assumptions. In particular, TestCase and
+TestSuite subclasses (not instances) are no longer accepted in
+TestSuite.addTest(). This should cause no incompatibility since it never
+made sense with ordinary subclasses -- the failure just occurred later, with
+a more cumbersome exception.
+
+..
+
+.. bpo: 787789
+.. date: 6494
+.. nonce: jzIMu8
+.. section: Library
+
+allow passing custom TestRunner instances to unittest's main() function.
+
+..
+
+.. bpo: 1550273
+.. date: 6493
+.. nonce: Ra8QUZ
+.. section: Library
+
+fix a few bugs in unittest and add a comprehensive test suite for the
+module. (See also: bpo-1550272)
+
+..
+
+.. bpo: 1001604
+.. date: 6492
+.. nonce: Vdqhuq
+.. section: Library
+
+glob.glob() now returns unicode filenames if it was given a unicode argument
+and os.listdir() returns unicode filenames.
+
+..
+
+.. bpo: 1673619
+.. date: 6491
+.. nonce: j16YPr
+.. section: Library
+
+setup.py identifies extension modules it doesn't know how to build and those
+it knows how to build but that fail to build.
+
+..
+
+.. bpo: 912410
+.. date: 6490
+.. nonce: mh0cGH
+.. section: Library
+
+Replace HTML entity references for attribute values in HTMLParser.
+
+..
+
+.. bpo: 1663234
+.. date: 6489
+.. nonce: YZlp53
+.. section: Library
+
+you can now run doctest on test files and modules using "python -m doctest
+[-v] filename ...".
+
+..
+
+.. bpo: 1121142
+.. date: 6488
+.. nonce: EulpqL
+.. section: Library
+
+Implement ZipFile.open.
+
+..
+
+.. bpo: 0
+.. date: 6487
+.. nonce: jimAik
+.. section: Library
+
+Taught setup.py how to locate Berkeley DB on Macs using MacPorts.
+
+..
+
+.. bpo: 0
+.. date: 6486
+.. nonce: qbUsHo
+.. section: Library
+
+Added heapq.merge() for merging sorted input streams.
+
+..
+
+.. bpo: 0
+.. date: 6485
+.. nonce: c69oKw
+.. section: Library
+
+Added collections.namedtuple() for assigning field names to tuples.
+
+..
+
+.. bpo: 0
+.. date: 6484
+.. nonce: 5y6Y9N
+.. section: Library
+
+Added itertools.izip_longest().
+
+..
+
+.. bpo: 0
+.. date: 6483
+.. nonce: VzsTJi
+.. section: Library
+
+Have the encoding package's search function dynamically import using
+absolute import semantics.
+
+..
+
+.. bpo: 1647484
+.. date: 6482
+.. nonce: FkN5SP
+.. section: Library
+
+Renamed GzipFile's filename attribute to name.
+
+..
+
+.. bpo: 1517891
+.. date: 6481
+.. nonce: AvYw8j
+.. section: Library
+
+Mode 'a' for ZipFile now creates the file if it doesn't exist.
+
+..
+
+.. bpo: 698833
+.. date: 6480
+.. nonce: UagENp
+.. section: Library
+
+Support file decryption in zipfile.
+
+..
+
+.. bpo: 685268
+.. date: 6479
+.. nonce: j7gRo3
+.. section: Library
+
+Consider a package's __path__ in imputil.
+
+..
+
+.. bpo: 1463026
+.. date: 6478
+.. nonce: _0rmmb
+.. section: Library
+
+Support default namespace in XMLGenerator.
+
+..
+
+.. bpo: 1571379
+.. date: 6477
+.. nonce: TLNfnP
+.. section: Library
+
+Make trace's --ignore-dir facility work in the face of relative directory
+names.
+
+..
+
+.. bpo: 1600860
+.. date: 6476
+.. nonce: gY3F66
+.. section: Library
+
+Search for shared python library in LIBDIR, not lib/python/config, on
+"linux" and "gnu" systems.
+
+..
+
+.. bpo: 1652681
+.. date: 6475
+.. nonce: ZiYQdm
+.. section: Library
+
+tarfile.py: create nonexistent files in append mode and allow appending to
+empty files.
+
+..
+
+.. bpo: 1124861
+.. date: 6474
+.. nonce: aulyJj
+.. section: Library
+
+Automatically create pipes if GetStdHandle fails in subprocess.
+
+..
+
+.. bpo: 1634778
+.. date: 6473
+.. nonce: pScHLI
+.. section: Library
+
+add missing encoding aliases for iso8859_15 and iso8859_16.
+
+..
+
+.. bpo: 1638243
+.. date: 6472
+.. nonce: SAVlQC
+.. section: Library
+
+the compiler package is now able to correctly compile a with statement;
+previously, executing code containing a with statement compiled by the
+compiler package crashed the interpreter.
+
+..
+
+.. bpo: 1643943
+.. date: 6471
+.. nonce: a4nxv3
+.. section: Library
+
+Fix time.strptime's support for the %U directive.
+
+..
+
+.. bpo: 1507247
+.. date: 6470
+.. nonce: AYqRTm
+.. section: Library
+
+tarfile.py: use current umask for intermediate directories.
+
+..
+
+.. bpo: 1627441
+.. date: 6469
+.. nonce: nTrbqY
+.. section: Library
+
+close sockets properly in urllib2.
+
+..
+
+.. bpo: 494589
+.. date: 6468
+.. nonce: 2kCbNY
+.. section: Library
+
+make ntpath.expandvars behave according to its docstring.
+
+..
+
+.. bpo: 0
+.. date: 6467
+.. nonce: ezpU0D
+.. section: Library
+
+Changed platform module API python_version_tuple() to actually return a
+tuple (it used to return a list).
+
+..
+
+.. bpo: 0
+.. date: 6466
+.. nonce: 2-kVtg
+.. section: Library
+
+Added new platform module APIs python_branch(), python_revision(),
+python_implementation() and linux_distribution().
+
+..
+
+.. bpo: 0
+.. date: 6465
+.. nonce: qzrIXP
+.. section: Library
+
+Added support for IronPython and Jython to the platform module.
+
+..
+
+.. bpo: 0
+.. date: 6464
+.. nonce: MS8C3z
+.. section: Library
+
+The sets module has been deprecated.  Use the built-in set/frozenset types
+instead.
+
+..
+
+.. bpo: 1610795
+.. date: 6463
+.. nonce: FEIux6
+.. section: Library
+
+make ctypes.util.find_library work on BSD systems.
+
+..
+
+.. bpo: 0
+.. date: 6462
+.. nonce: rfv0pM
+.. section: Library
+
+Fixes for 64-bit Windows: In ctypes.wintypes, correct the definitions of
+HANDLE, WPARAM, LPARAM data types.  Make parameterless foreign function
+calls work.
+
+..
+
+.. bpo: 0
+.. date: 6461
+.. nonce: iCu2EB
+.. section: Library
+
+The version number of the ctypes package changed to "1.1.0".
+
+..
+
+.. bpo: 1627575
+.. date: 6460
+.. nonce: ekqcHu
+.. section: Library
+
+logging: Added _open() method to FileHandler which can be used to reopen
+files. The FileHandler instance now saves the encoding (which can be None)
+in an attribute called "encoding".
+
+..
+
+.. bpo: 411881
+.. date: 6459
+.. nonce: SdPBJS
+.. section: Library
+
+logging.handlers: bare except clause removed from SMTPHandler.emit. Now,
+only ImportError is trapped.
+
+..
+
+.. bpo: 411881
+.. date: 6458
+.. nonce: Hui5Li
+.. section: Library
+
+logging.handlers: bare except clause removed from
+SocketHandler.createSocket. Now, only socket.error is trapped.
+
+..
+
+.. bpo: 411881
+.. date: 6457
+.. nonce: EB2bof
+.. section: Library
+
+logging: bare except clause removed from LogRecord.__init__.  Now, only
+ValueError, TypeError and AttributeError are trapped.
+
+..
+
+.. bpo: 1504073
+.. date: 6456
+.. nonce: i48FvZ
+.. section: Library
+
+Fix tarfile.open() for mode "r" with a fileobj argument.
+
+..
+
+.. bpo: 1182394
+.. date: 6455
+.. nonce: oDRBxu
+.. section: Library
+
+Speed up ``HMAC.hexdigest``.  (Patch by Shane Holloway.)
+
+..
+
+.. bpo: 1262036
+.. date: 6454
+.. nonce: 1Y1xgB
+.. section: Library
+
+Prevent TarFiles from being added to themselves under certain conditions.
+
+..
+
+.. bpo: 1230446
+.. date: 6453
+.. nonce: OwOxzM
+.. section: Library
+
+tarfile.py: fix ExFileObject so that read() and tell() work correctly
+together with readline().
+
+..
+
+.. bpo: 1484695
+.. date: 6452
+.. nonce: kbpUdY
+.. section: Library
+
+The tarfile module now raises a HeaderError exception if a buffer given to
+frombuf() is invalid.
+
+..
+
+.. bpo: 1503765
+.. date: 6451
+.. nonce: N5UCHi
+.. section: Library
+
+Fix a problem in logging.config with spaces in comma- separated lists read
+from logging config files.
+
+..
+
+.. bpo: 1604907
+.. date: 6450
+.. nonce: AXQii8
+.. section: Library
+
+Fix problems in logging.handlers caused at logging shutdown when syslog
+handlers fail to initialize because of syslogd problems.
+
+..
+
+.. bpo: 1608267
+.. date: 6449
+.. nonce: ldcDih
+.. section: Library
+
+fix a race condition in os.makedirs() if the directory to be created is
+already there.
+
+..
+
+.. bpo: 1610437
+.. date: 6448
+.. nonce: pXPK4x
+.. section: Library
+
+fix a tarfile bug with long filename headers.
+
+..
+
+.. bpo: 1371075
+.. date: 6447
+.. nonce: NE7BY3
+.. section: Library
+
+Make ConfigParser accept optional dict type for ordering, sorting, etc.
+
+..
+
+.. bpo: 1563807
+.. date: 6446
+.. nonce: r5ah8b
+.. section: Library
+
+_ctypes built on AIX fails with ld ffi error.
+
+..
+
+.. bpo: 1598620
+.. date: 6445
+.. nonce: jHuKUn
+.. section: Library
+
+A ctypes Structure cannot contain itself.
+
+..
+
+.. bpo: 1070046
+.. date: 6444
+.. nonce: E13xc_
+.. section: Library
+
+Marshal new-style objects like InstanceType in xmlrpclib.
+
+..
+
+.. bpo: 0
+.. date: 6443
+.. nonce: P-fEXH
+.. section: Library
+
+cStringIO.truncate(-1) now raises an IOError, like StringIO and regular
+files.
+
+..
+
+.. bpo: 1472877
+.. date: 6442
+.. nonce: qL083L
+.. section: Library
+
+Fix Tix subwidget name resolution.
+
+..
+
+.. bpo: 1594554
+.. date: 6441
+.. nonce: SqL3iT
+.. section: Library
+
+Always close a tkSimpleDialog on ok(), even if an exception occurs.
+
+..
+
+.. bpo: 1538878
+.. date: 6440
+.. nonce: m2hjNu
+.. section: Library
+
+Don't make tkSimpleDialog dialogs transient if the parent window is
+withdrawn.
+
+..
+
+.. bpo: 1597824
+.. date: 6439
+.. nonce: ORR2oo
+.. section: Library
+
+return the registered function from atexit.register() to facilitate usage as
+a decorator.
+
+..
+
+.. bpo: 1360200
+.. date: 6438
+.. nonce: 2ymI3x
+.. section: Library
+
+Use unmangled_version RPM spec field to deal with file name mangling.
+
+..
+
+.. bpo: 1359217
+.. date: 6437
+.. nonce: RlkDVQ
+.. section: Library
+
+Process 2xx response in an ftplib transfer that precedes an 1xx response.
+
+..
+
+.. bpo: 1355023
+.. date: 6436
+.. nonce: gz3jFH
+.. section: Library
+
+support whence argument for GzipFile.seek.
+
+..
+
+.. bpo: 1065257
+.. date: 6435
+.. nonce: dzuo9U
+.. section: Library
+
+Support passing open files as body in HTTPConnection.request().
+
+..
+
+.. bpo: 1569790
+.. date: 6434
+.. nonce: XNZtnX
+.. section: Library
+
+mailbox.py: Maildir.get_folder() and MH.get_folder() weren't passing the
+message factory on to newly created Maildir/MH objects.
+
+..
+
+.. bpo: 1514543
+.. date: 6433
+.. nonce: JxSqun
+.. section: Library
+
+mailbox.py: In the Maildir class, report errors if there's a filename clash
+instead of possibly losing a message. (Patch by David Watson.)
+
+..
+
+.. bpo: 1514544
+.. date: 6432
+.. nonce: nfmx--
+.. section: Library
+
+Try to ensure that messages/indexes have been physically written to disk
+after calling .flush() or .close(). (Patch by David Watson.)
+
+..
+
+.. bpo: 1592250
+.. date: 6431
+.. nonce: cErfyc
+.. section: Library
+
+Add elide argument to Tkinter.Text.search.
+
+..
+
+.. bpo: 838546
+.. date: 6430
+.. nonce: yBohhh
+.. section: Library
+
+Make terminal become controlling in pty.fork().
+
+..
+
+.. bpo: 1351744
+.. date: 6429
+.. nonce: a4x3Q4
+.. section: Library
+
+Add askyesnocancel helper for tkMessageBox.
+
+..
+
+.. bpo: 1060577
+.. date: 6428
+.. nonce: 7Hpowm
+.. section: Library
+
+Extract list of RPM files from spec file in bdist_rpm.
+
+..
+
+.. bpo: 1586613
+.. date: 6427
+.. nonce: pIXli0
+.. section: Library
+
+fix zlib and bz2 codecs' incremental en/decoders.
+
+..
+
+.. bpo: 1583880
+.. date: 6426
+.. nonce: nwiLAW
+.. section: Library
+
+fix tarfile's problems with long names and posix/ GNU modes.
+
+..
+
+.. bpo: 1586448
+.. date: 6425
+.. nonce: FmFoc_
+.. section: Library
+
+the compiler module now emits the same bytecode for list comprehensions as
+the built-in compiler, using the LIST_APPEND opcode.
+
+..
+
+.. bpo: 0
+.. date: 6424
+.. nonce: 2gBgWG
+.. section: Library
+
+Fix codecs.EncodedFile which did not use file_encoding in 2.5.0, and fix all
+codecs file wrappers to work correctly with the "with" statement (bug
+#1586513).
+
+..
+
+.. bpo: 0
+.. date: 6423
+.. nonce: zvhpow
+.. section: Library
+
+Lib/modulefinder.py now handles absolute and relative imports correctly.
+
+..
+
+.. bpo: 1567274
+.. date: 6422
+.. nonce: LA_DH5
+.. section: Library
+
+Support SMTP over TLS.
+
+..
+
+.. bpo: 1560695
+.. date: 6421
+.. nonce: kVpjpW
+.. section: Library
+
+Add .note.GNU-stack to ctypes' sysv.S so that ctypes isn't considered as
+requiring executable stacks.
+
+..
+
+.. bpo: 0
+.. date: 6420
+.. nonce: fKDGbU
+.. section: Library
+
+ctypes callback functions only support 'fundamental' data types as result
+type.  Raise an error when something else is used.  This is a partial fix
+for Bug #1574584.
+
+..
+
+.. bpo: 0
+.. date: 6419
+.. nonce: yLdVeX
+.. section: Library
+
+Fix turtle so that time.sleep is imported for the entire library. Allows the
+demo2 function to be executed on its own instead of only when the module is
+run as a script.
+
+..
+
+.. bpo: 1565150
+.. date: 6418
+.. nonce: DJh_i-
+.. section: Library
+
+Fix subsecond processing for os.utime on Windows.
+
+..
+
+.. bpo: 0
+.. date: 6417
+.. nonce: p_gre9
+.. section: Library
+
+Support for MSVC 8 was added to bdist_wininst.
+
+..
+
+.. bpo: 1446043
+.. date: 6416
+.. nonce: yKz_Q4
+.. section: Library
+
+correctly raise a LookupError if an encoding name given to
+encodings.search_function() contains a dot.
+
+..
+
+.. bpo: 1560617
+.. date: 6415
+.. nonce: aAisSJ
+.. section: Library
+
+in pyclbr, return full module name not only for classes, but also for
+functions.
+
+..
+
+.. bpo: 1457823
+.. date: 6414
+.. nonce: CRxLz4
+.. section: Library
+
+cgi.(Sv)FormContentDict's constructor now takes keep_blank_values and
+strict_parsing keyword arguments.
+
+..
+
+.. bpo: 1566602
+.. date: 6413
+.. nonce: bB3CAB
+.. section: Library
+
+correct failure of posixpath unittest when $HOME ends with a slash.
+
+..
+
+.. bpo: 1565661
+.. date: 6412
+.. nonce: AP25Qm
+.. section: Library
+
+in webbrowser, split() the command for the default GNOME browser in case it
+is a command with args.
+
+..
+
+.. bpo: 0
+.. date: 6411
+.. nonce: DZkwqI
+.. section: Library
+
+Made the error message for time.strptime when the data and format do match
+be more clear.
+
+..
+
+.. bpo: 0
+.. date: 6410
+.. nonce: 7duvEn
+.. section: Library
+
+Fix a bug in traceback.format_exception_only() that led to an error being
+raised when print_exc() was called without an exception set. In version 2.4,
+this printed "None", restored that behavior.
+
+..
+
+.. bpo: 0
+.. date: 6409
+.. nonce: 709mp_
+.. section: Library
+
+Make webbrowser.BackgroundBrowser usable in Windows (it wasn't because the
+close_fds arg to subprocess.Popen is not supported).
+
+..
+
+.. bpo: 1504333
+.. date: 6408
+.. nonce: y46ekU
+.. section: Library
+
+Reverted change to sgmllib because it introduced an infinite loop.
+
+..
+
+.. bpo: 1553314
+.. date: 6407
+.. nonce: RCumD0
+.. section: Library
+
+Fix the inspect.py slowdown that was hurting IPython & SAGE by adding
+smarter caching in inspect.getmodule()
+
+..
+
+.. bpo: 0
+.. date: 6406
+.. nonce: 6I6WXA
+.. section: Library
+
+Fix missing import of the types module in logging.config.
+
+..
+
+.. bpo: 1550886
+.. date: 6405
+.. nonce: DuV8q5
+.. section: Library
+
+Fix decimal module context management implementation to match the
+localcontext() example from PEP 343.
+
+..
+
+.. bpo: 1545341
+.. date: 6404
+.. nonce: EaLhZZ
+.. section: Library
+
+The 'classifier' keyword argument to the Distutils setup() function now
+accepts tuples as well as lists.
+
+..
+
+.. bpo: 1541863
+.. date: 6403
+.. nonce: HUh40x
+.. section: Library
+
+uuid.uuid1 failed to generate unique identifiers on systems with low clock
+resolution.
+
+..
+
+.. bpo: 1531862
+.. date: 6402
+.. nonce: yyYfx5
+.. section: Library
+
+Do not close standard file descriptors in subprocess.
+
+..
+
+.. bpo: 0
+.. date: 6401
+.. nonce: lISaKl
+.. section: Library
+
+Fix utf-8-sig incremental decoder, which didn't recognise a BOM when the
+first chunk fed to the decoder started with a BOM, but was longer than 3
+bytes.
+
+..
+
+.. bpo: 0
+.. date: 6400
+.. nonce: RFXvgt
+.. section: Library
+
+The implementation of UnicodeError objects has been simplified (start and
+end attributes are now stored directly as Py_ssize_t members).
+
+..
+
+.. bpo: 829951
+.. date: 6399
+.. nonce: v5y-W2
+.. section: Library
+
+In the smtplib module, SMTP.starttls() now complies with RFC 3207 and
+forgets any knowledge obtained from the server not obtained from the TLS
+negotiation itself.  Patch contributed by Bill Fenner.
+
+..
+
+.. bpo: 1339
+.. date: 6398
+.. nonce: zNAkVN
+.. section: Library
+
+The smtplib.SMTP class has been refactored a bit such that the
+SMTP.starttls() caller no longer needs to call ehlo() beforehand.
+SMTP.starttls() now raises an exception of the server does not claim to
+support starttls.  Adds the SMTP.ehlo_or_helo_if_needed() method.  Patch
+contributed by Bill Fenner.
+
+..
+
+.. bpo: 1089358
+.. date: 6397
+.. nonce: 91PLbW
+.. section: Library
+
+Add signal.siginterrupt, a wrapper around siginterrupt(3).
+
+..
+
+.. bpo: 1657
+.. date: 6396
+.. nonce: KEujtl
+.. section: Library
+
+added select.epoll and select.kqueue.
+
+..
+
+.. bpo: 1506171
+.. date: 6395
+.. nonce: h2Yotv
+.. section: Library
+
+added operator.methodcaller().
+
+..
+
+.. bpo: 1826
+.. date: 6394
+.. nonce: P9qpop
+.. section: Library
+
+operator.attrgetter() now supports dotted attribute paths.
+
+..
+
+.. bpo: 1957
+.. date: 6393
+.. nonce: oQ_zDG
+.. section: Library
+
+syslogmodule: Release GIL when calling syslog(3).
+
+..
+
+.. bpo: 2112
+.. date: 6392
+.. nonce: CfSrtY
+.. section: Library
+
+mmap.error is now a subclass of EnvironmentError and not a direct
+EnvironmentError.
+
+..
+
+.. bpo: 2111
+.. date: 6391
+.. nonce: nUPHdZ
+.. section: Library
+
+mmap segfaults when trying to write a block opened with PROT_READ.
+
+..
+
+.. bpo: 2063
+.. date: 6390
+.. nonce: -AQbR3
+.. section: Library
+
+correct order of utime and stime in os.times() result on Windows.
+
+..
+
+.. bpo: 1736
+.. date: 6389
+.. nonce: Ag5pGB
+.. section: Library
+
+Fix file name handling of _msi.FCICreate.
+
+..
+
+.. bpo: 0
+.. date: 6388
+.. nonce: zNsGmS
+.. section: Library
+
+Updated ``big5hkscs`` codec to the HKSCS revision of 2004.
+
+..
+
+.. bpo: 1940
+.. date: 6387
+.. nonce: VTj9uW
+.. section: Library
+
+make it possible to use curses.filter() before curses.initscr() as the
+documentation says.
+
+..
+
+.. bpo: 0
+.. date: 6386
+.. nonce: J1VXc3
+.. section: Library
+
+Backport of _fileio module from Python 3.0.
+
+..
+
+.. bpo: 1087741
+.. date: 6385
+.. nonce: pcDAZm
+.. section: Library
+
+mmap.mmap is now a class, not a factory function. It is also subclassable
+now.
+
+..
+
+.. bpo: 1648
+.. date: 6384
+.. nonce: 1C5JXG
+.. section: Library
+
+added ``sys.getprofile()`` and ``sys.gettrace()``.
+
+..
+
+.. bpo: 1663329
+.. date: 6383
+.. nonce: m0g8vu
+.. section: Library
+
+added ``os.closerange()`` function to quickly close a range of file
+descriptors without considering errors.
+
+..
+
+.. bpo: 976880
+.. date: 6382
+.. nonce: R51uQk
+.. section: Library
+
+``mmap`` objects now have an ``rfind`` method that works as expected.
+``mmap.find`` also takes an optional ``end`` parameter.
+
+..
+
+.. bpo: 0
+.. date: 6381
+.. nonce: wrGXou
+.. section: Library
+
+_winreg's HKEY object has gained __enter__ and __exit__ methods to support
+the context management protocol.  The _winreg module also gained a new
+function ``ExpandEnvironmentStrings`` to expand REG_EXPAND_SZ keys.
+
+..
+
+.. bpo: 0
+.. date: 6380
+.. nonce: ke0PK4
+.. section: Library
+
+itertools.starmap() now accepts any iterable input. Previously, it required
+the function inputs to be tuples.
+
+..
+
+.. bpo: 0
+.. date: 6379
+.. nonce: JNKKZ8
+.. section: Library
+
+itertools.chain() now has an alternate constructor, chain.from_iterable().
+
+..
+
+.. bpo: 1646
+.. date: 6378
+.. nonce: DqQiG7
+.. section: Library
+
+Make socket support TIPC. The socket module now has support for TIPC under
+Linux, see http://tipc.sf.net/ for more information.
+
+..
+
+.. bpo: 0
+.. date: 6377
+.. nonce: YrJhGa
+.. section: Library
+
+Added interface for Windows' WSAIoctl to socket object and added an example
+for a simple network sniffer.
+
+..
+
+.. bpo: 1301
+.. date: 6376
+.. nonce: w3N8In
+.. section: Library
+
+Bad assert in _tkinter fixed.
+
+..
+
+.. bpo: 0
+.. date: 6375
+.. nonce: 1zmfDo
+.. section: Library
+
+Added bdist_wininst executable for VS 2008.
+
+..
+
+.. bpo: 1604
+.. date: 6374
+.. nonce: d3HHRR
+.. section: Library
+
+collections.deque.__init__(iterable) now clears any prior contents before
+adding elements from the iterable.  This fix brings the behavior into line
+with that for list.__init__().
+
+..
+
+.. bpo: 0
+.. date: 6373
+.. nonce: hHIPo7
+.. section: Library
+
+Added wide char functions to msvcrt module: getwch, getwche, putwch and
+ungetwch. The functions accept or return unicode.
+
+..
+
+.. bpo: 0
+.. date: 6372
+.. nonce: OFK-oY
+.. section: Library
+
+os.access now returns True on Windows for any existing directory.
+
+..
+
+.. bpo: 0
+.. date: 6371
+.. nonce: vDe3M3
+.. section: Library
+
+Added warnpy3k function to the warnings module.
+
+..
+
+.. bpo: 0
+.. date: 6370
+.. nonce: brR3xl
+.. section: Library
+
+Marshal.dumps() now expects exact type matches for int, long, float,
+complex, tuple, list, dict, set, and frozenset.  Formerly, it would silently
+miscode subclasses of those types.  Now, it raises a ValueError instead.
+
+..
+
+.. bpo: 1388440
+.. date: 6369
+.. nonce: L0q4gk
+.. section: Library
+
+Add set_completion_display_matches_hook and get_completion_type to readline.
+
+..
+
+.. bpo: 1649098
+.. date: 6368
+.. nonce: ahOvw-
+.. section: Library
+
+Avoid declaration of zero-sized array declaration in structure.
+
+..
+
+.. bpo: 0
+.. date: 6367
+.. nonce: -gsoXT
+.. section: Library
+
+Removed the rgbimg module; been deprecated since Python 2.5.
+
+..
+
+.. bpo: 1721309
+.. date: 6366
+.. nonce: Xm2Y60
+.. section: Library
+
+prevent bsddb module from freeing random memory.
+
+..
+
+.. bpo: 1233
+.. date: 6365
+.. nonce: 85-yC3
+.. section: Library
+
+fix bsddb.dbshelve.DBShelf append method to work as intended for RECNO
+databases.
+
+..
+
+.. bpo: 0
+.. date: 6364
+.. nonce: P617AK
+.. section: Library
+
+pybsddb.sf.net Bug #477182: Load the database flags at database open time so
+that opening a database previously created with the DB_DUP or DB_DUPSORT
+flag set will keep the proper behavior on subsequent opens.  Specifically:
+dictionary assignment to a DB object will replace all values for a given key
+when the database allows duplicate values.  DB users should use DB.put(k, v)
+when they want to store duplicates; not DB[k] = v.
+
+..
+
+.. bpo: 0
+.. date: 6363
+.. nonce: 5NHGNc
+.. section: Library
+
+Add the bsddb.db.DBEnv.lock_id_free method.
+
+..
+
+.. bpo: 1686475
+.. date: 6362
+.. nonce: gwpzpq
+.. section: Library
+
+Support stat'ing open files on Windows again.
+
+..
+
+.. bpo: 1185447
+.. date: 6361
+.. nonce: 4SdEiu
+.. section: Library
+
+binascii.b2a_qp() now correctly quotes binary characters with ASCII value
+less than 32. Also, it correctly quotes dots only if they occur on a single
+line, as opposed to the previous behavior of quoting dots if they are the
+second character of any line.
+
+..
+
+.. bpo: 1622896
+.. date: 6360
+.. nonce: 4WbmkO
+.. section: Library
+
+fix a rare corner case where the bz2 module raised an error in spite of a
+succesful compression.
+
+..
+
+.. bpo: 1654417
+.. date: 6359
+.. nonce: H1p2ET
+.. section: Library
+
+make operator.{get,set,del}slice use the full range of Py_ssize_t.
+
+..
+
+.. bpo: 1646728
+.. date: 6358
+.. nonce: qkvzER
+.. section: Library
+
+datetime.fromtimestamp fails with negative fractional times.  With unittest.
+
+..
+
+.. bpo: 1490190
+.. date: 6357
+.. nonce: n7enEK
+.. section: Library
+
+posixmodule now includes os.chflags() and os.lchflags() functions on
+platforms where the underlying system calls are available.
+
+..
+
+.. bpo: 1494140
+.. date: 6356
+.. nonce: --CKWP
+.. section: Library
+
+Add documentation for the new struct.Struct object.
+
+..
+
+.. bpo: 1432399
+.. date: 6355
+.. nonce: uVk0JY
+.. section: Library
+
+Support the HCI protocol for bluetooth sockets
+
+..
+
+.. bpo: 1657276
+.. date: 6354
+.. nonce: fcUdLm
+.. section: Library
+
+Make NETLINK_DNRTMSG conditional.
+
+..
+
+.. bpo: 1653736
+.. date: 6353
+.. nonce: tNuUq7
+.. section: Library
+
+Complain about keyword arguments to time.isoformat.
+
+..
+
+.. bpo: 1486663
+.. date: 6352
+.. nonce: sR35oQ
+.. section: Library
+
+don't reject keyword arguments for subclasses of built-in types.
+
+..
+
+.. bpo: 1610575
+.. date: 6351
+.. nonce: xC0F2x
+.. section: Library
+
+The struct module now supports the 't' code, for C99 _Bool.
+
+..
+
+.. bpo: 1635058
+.. date: 6350
+.. nonce: 1H4WNl
+.. section: Library
+
+ensure that htonl and friends never accept or return negative numbers, per
+the underlying C implementation.
+
+..
+
+.. bpo: 1544279
+.. date: 6349
+.. nonce: oS9QmK
+.. section: Library
+
+Improve thread-safety of the socket module by moving the sock_addr_t storage
+out of the socket object.
+
+..
+
+.. bpo: 1019808
+.. date: 6348
+.. nonce: WZeJ5G
+.. section: Library
+
+fix bug that causes an incorrect error to be returned when a socket timeout
+is set and a connection attempt fails.
+
+..
+
+.. bpo: 0
+.. date: 6347
+.. nonce: yggQVa
+.. section: Library
+
+Speed up function calls into the math module.
+
+..
+
+.. bpo: 1588217
+.. date: 6346
+.. nonce: CZ-jdO
+.. section: Library
+
+don't parse "= " as a soft line break in binascii's a2b_qp() function,
+instead leave it in the string as quopri.decode() does.
+
+..
+
+.. bpo: 1599782
+.. date: 6345
+.. nonce: nZV6k1
+.. section: Library
+
+Fix segfault on bsddb.db.DB().type().
+
+..
+
+.. bpo: 1567666
+.. date: 6344
+.. nonce: Yy8nbf
+.. section: Library
+
+Emulate GetFileAttributesExA for Win95.
+
+..
+
+.. bpo: 1576166
+.. date: 6343
+.. nonce: uPuEL3
+.. section: Library
+
+Support os.utime for directories on Windows NT+.
+
+..
+
+.. bpo: 1572724
+.. date: 6342
+.. nonce: AS17ot
+.. section: Library
+
+fix typo ('=' instead of '==') in _msi.c.
+
+..
+
+.. bpo: 1572832
+.. date: 6341
+.. nonce: usqHny
+.. section: Library
+
+fix a bug in ISO-2022 codecs which may cause segfault when encoding non-BMP
+unicode characters.
+
+..
+
+.. bpo: 1556784
+.. date: 6340
+.. nonce: 1CAZai
+.. section: Library
+
+allow format strings longer than 127 characters in datetime's strftime
+function.
+
+..
+
+.. bpo: 0
+.. date: 6339
+.. nonce: IX1su7
+.. section: Library
+
+Fix itertools.count(n) to work with negative numbers again.
+
+..
+
+.. bpo: 0
+.. date: 6338
+.. nonce: E13nLX
+.. section: Library
+
+RLIMIT_SBSIZE was added to the resource module where available.
+
+..
+
+.. bpo: 1551427
+.. date: 6337
+.. nonce: FbxrjA
+.. section: Library
+
+fix a wrong NULL pointer check in the win32 version of os.urandom().
+
+..
+
+.. bpo: 1548092
+.. date: 6336
+.. nonce: CQ3Zbs
+.. section: Library
+
+fix curses.tparm seg fault on invalid input.
+
+..
+
+.. bpo: 1114
+.. date: 6335
+.. nonce: hs32Do
+.. section: Library
+
+fix curses module compilation on 64-bit AIX, & possibly other 64-bit LP64
+platforms where attr_t is not the same size as a long.  (Contributed by Luke
+Mewburn.)
+
+..
+
+.. bpo: 1550714
+.. date: 6334
+.. nonce: _3LprN
+.. section: Library
+
+fix SystemError from itertools.tee on negative value for n.
+
+..
+
+.. bpo: 0
+.. date: 6333
+.. nonce: 44hgU5
+.. section: Library
+
+Fixed a few bugs on cjkcodecs: - gbk and gb18030 codec now handle U+30FB
+KATAKANA MIDDLE DOT   correctly. - iso2022_jp_2 codec now encodes into G0
+for KS X 1001, GB2312   codepoints to conform the standard. - iso2022_jp_3
+and iso2022_jp_2004 codec can encode JIS X 0213:2   codepoints now.
+
+..
+
+.. bpo: 1552726
+.. date: 6332
+.. nonce: KRiUv4
+.. section: Library
+
+in readline.c, avoid repeatedly polling in interactive mode by only placing
+a timeout on the select() if an input hook has been defined.  This prevents
+an interactive Python from waking up 10 times per second.  Patch by Richard
+Boulton.
+
+..
+
+.. bpo: 0
+.. date: 6331
+.. nonce: a94xwS
+.. section: Library
+
+fixed a bug with bsddb.DB.stat: the flags and txn keyword arguments were
+transposed.
+
+..
+
+.. bpo: 0
+.. date: 6330
+.. nonce: m3uTkK
+.. section: Library
+
+Added support for linking the bsddb module against BerkeleyDB 4.5.x, 4.6.x
+and 4.7.x.
+
+..
+
+.. bpo: 1633621
+.. date: 6329
+.. nonce: M5Ndcj
+.. section: Library
+
+if curses.resizeterm() or curses.resize_term() is called, update
+_curses.LINES, _curses.COLS, curses.LINES and curses.COLS.
+
+..
+
+.. bpo: 0
+.. date: 6328
+.. nonce: HrtEA6
+.. section: Library
+
+Fix an off-by-one bug in locale.strxfrm().
+
+..
+
+.. bpo: 0
+.. date: 6327
+.. nonce: ojYwDU
+.. section: Library
+
+Fix libffi configure for hppa*-*-linux* | parisc*-*-linux*.
+
+..
+
+.. bpo: 0
+.. date: 6326
+.. nonce: A1idYz
+.. section: Library
+
+Build using system ffi library on arm*-linux*.
+
+..
+
+.. bpo: 1372
+.. date: 6325
+.. nonce: VpXOJ9
+.. section: Library
+
+zlibmodule.c: int overflow in PyZlib_decompress
+
+..
+
+.. bpo: 0
+.. date: 6324
+.. nonce: at5Xd_
+.. section: Library
+
+bsddb module: Fix memory leak when using database cursors on databases
+without a DBEnv.
+
+..
+
+.. bpo: 0
+.. date: 6323
+.. nonce: ilOhKQ
+.. section: Library
+
+The sqlite3 module was updated to pysqlite 2.4.1.
+
+..
+
+.. bpo: 813342
+.. date: 6322
+.. nonce: s5yukE
+.. section: IDLE
+
+Start the IDLE subprocess with -Qnew if the parent is started with that
+option.
+
+..
+
+.. bpo: 0
+.. date: 6321
+.. nonce: JiyCdF
+.. section: IDLE
+
+IDLE: Honor the "Cancel" action in the save dialog (Debian bug #299092).
+
+..
+
+.. bpo: 30357
+.. date: 6320
+.. nonce: n4CPEa
+.. section: Tests
+
+test_thread: setUp() now uses support.threading_setup() and
+support.threading_cleanup() to wait until threads complete to avoid random
+side effects on following tests. Initial patch written by Grzegorz Grzywacz.
+
+..
+
+.. bpo: 0
+.. date: 6319
+.. nonce: PVjNrU
+.. section: Tests
+
+Refactor test_logging to use unittest.
+
+..
+
+.. bpo: 0
+.. date: 6318
+.. nonce: 7j-hhA
+.. section: Tests
+
+Refactor test_profile and test_cprofile to use the same code to profile.
+
+..
+
+.. bpo: 0
+.. date: 6317
+.. nonce: q9s3e7
+.. section: Tests
+
+Make test_runpy reentrant by fixing _check_module to clear out any module
+being tested.  Was causing an error by __import__ doing a reload on the
+second run and thus suppressing bytecode recreation.
+
+..
+
+.. bpo: 0
+.. date: 6316
+.. nonce: 7jQnkY
+.. section: Tests
+
+Capture socket connection resets and timeouts in test_socket_ssl and
+test_urllib2net and raise test.test_support.ResourceDenied.
+
+..
+
+.. bpo: 1559413
+.. date: 6315
+.. nonce: GoWQim
+.. section: Tests
+
+Fix test_cmd_line if sys.executable contains a space.
+
+..
+
+.. bpo: 0
+.. date: 6314
+.. nonce: vjtR_D
+.. section: Tests
+
+Added test.test_support.TransientResource which is a context manager to
+surround calls to resources that are not guaranteed to work even if
+test.test_support.requires says that the resource should exist.
+
+..
+
+.. bpo: 0
+.. date: 6313
+.. nonce: 6z7bKB
+.. section: Tests
+
+Added a test for slicing of an exception.
+
+..
+
+.. bpo: 0
+.. date: 6312
+.. nonce: ieil_O
+.. section: Tests
+
+Added test.test_support.EnvironmentVarGuard.  It's a class that provides a
+context manager so that one can temporarily set or unset environment
+variables.
+
+..
+
+.. bpo: 0
+.. date: 6311
+.. nonce: jmumH0
+.. section: Tests
+
+Added some tests for modulefinder.
+
+..
+
+.. bpo: 0
+.. date: 6310
+.. nonce: 0Kz44H
+.. section: Tests
+
+Converted test_imp to use unittest.
+
+..
+
+.. bpo: 0
+.. date: 6309
+.. nonce: smrRfs
+.. section: Tests
+
+Fix bsddb test_basics.test06_Transactions to check the version number
+properly.
+
+..
+
+.. bpo: 0
+.. date: 6308
+.. nonce: Z4K3CJ
+.. section: Tests
+
+test.test_support.catch_warning is a new context manager that can be used to
+catch the warnings issued by the warning framework.
+
+..
+
+.. bpo: 0
+.. date: 6307
+.. nonce: lEqBYO
+.. section: Tools/Demos
+
+Tools/scripts/reindent.py now creates the backup file using shutil.copy to
+preserve user/group and permissions. Added also a --nobackup option to not
+create the backup if the user is concerned regarding this.  Check issue
+#1050828 for more details.
+
+..
+
+.. bpo: 0
+.. date: 6306
+.. nonce: JHrA97
+.. section: Tools/Demos
+
+Tools/scripts/win_add2path.py was added. The simple script modifes the PATH
+environment var of the HKCU tree and adds the python bin and script
+directory.
+
+..
+
+.. bpo: 0
+.. date: 6305
+.. nonce: cj1Ip_
+.. section: Tools/Demos
+
+Tools/18n/pygettext.py was added to the list of scripts installed by
+Tools/scripts/setup.py (tracker item 642309).
+
+..
+
+.. bpo: 0
+.. date: 6304
+.. nonce: q6eo5q
+.. section: Tools/Demos
+
+Added IronPython and Jython support to pybench (part of which was patch
+#1563844).
+
+..
+
+.. bpo: 0
+.. date: 6303
+.. nonce: xPqVA4
+.. section: Tools/Demos
+
+Made some minor changes to pybench output to allow the user to see which
+Python version is running pybench.
+
+..
+
+.. bpo: 0
+.. date: 6302
+.. nonce: Ufn_76
+.. section: Tools/Demos
+
+Added support for the new platform module feature
+platform.python_implementation(); this will now be saved in the benchmark
+pickle.
+
+..
+
+.. bpo: 0
+.. date: 6301
+.. nonce: SJGror
+.. section: Documentation
+
+RFE #1765140: Updated documentation on FileHandler and subclasses to include
+new optional delay argument.
+
+..
+
+.. bpo: 932563
+.. date: 6300
+.. nonce: ujYdrI
+.. section: Documentation
+
+Added section on getting contextual information into logging output, and
+added documentation for the new LoggerAdapter class.
+
+..
+
+.. bpo: 1295
+.. date: 6299
+.. nonce: WBH2ZB
+.. section: Documentation
+
+Added information about caching of formatted exception information in the
+LogRecord by Formatter.format().
+
+..
+
+.. bpo: 1637365
+.. date: 6298
+.. nonce: hHynKK
+.. section: Documentation
+
+add subsection about "__name__ == __main__" to the Python tutorial.
+
+..
+
+.. bpo: 1698768
+.. date: 6297
+.. nonce: e4h7Jp
+.. section: Documentation
+
+updated the "using Python on the Mac" intro.
+
+..
+
+.. bpo: 1569057
+.. date: 6296
+.. nonce: DqDgin
+.. section: Documentation
+
+Document that calling file.next() when the file is open for writing is
+undefined.
+
+..
+
+.. bpo: 1489771
+.. date: 6295
+.. nonce: Ygchql
+.. section: Documentation
+
+the syntax rules in Python Reference Manual were updated to reflect the
+current Python syntax.
+
+..
+
+.. bpo: 1686451
+.. date: 6294
+.. nonce: ODrdFR
+.. section: Documentation
+
+Fix return type for PySequence_{Count,Index,Fast_GET_SIZE}.
+
+..
+
+.. bpo: 1679379
+.. date: 6293
+.. nonce: T_NdX4
+.. section: Documentation
+
+add documentation for fnmatch.translate().
+
+..
+
+.. bpo: 1629566
+.. date: 6292
+.. nonce: IkETIS
+.. section: Documentation
+
+clarify the docs on the return values of parsedate() and parsedate_tz() in
+email.utils and rfc822.
+
+..
+
+.. bpo: 1671450
+.. date: 6291
+.. nonce: nJrEYa
+.. section: Documentation
+
+add a section about subclassing built-in types to the "extending and
+embedding" tutorial.
+
+..
+
+.. bpo: 1629125
+.. date: 6290
+.. nonce: 9JdHlD
+.. section: Documentation
+
+fix wrong data type (int -> Py_ssize_t) in PyDict_Next docs.
+
+..
+
+.. bpo: 1565919
+.. date: 6289
+.. nonce: hwpjHv
+.. section: Documentation
+
+document set types in the Language Reference.
+
+..
+
+.. bpo: 1546052
+.. date: 6288
+.. nonce: 3_Kcqu
+.. section: Documentation
+
+clarify that PyString_FromString(AndSize) copies the string pointed to by
+its parameter.
+
+..
+
+.. bpo: 1566663
+.. date: 6287
+.. nonce: mAgcIO
+.. section: Documentation
+
+remove obsolete example from datetime docs.
+
+..
+
+.. bpo: 1541682
+.. date: 6286
+.. nonce: 10BXyV
+.. section: Documentation
+
+Fix example in the "Refcount details" API docs. Additionally, remove a
+faulty example showing PySequence_SetItem applied to a newly created list
+object and add notes that this isn't a good idea.
+
+..
+
+.. bpo: 1552024
+.. date: 6285
+.. nonce: FQsYLY
+.. section: Tools/Demos
+
+add decorator support to unparse.py demo script.
+
+..
+
+.. bpo: 0
+.. date: 6284
+.. nonce: whjkV0
+.. section: Tools/Demos
+
+Make auto-generated python.vim file list built-ins and exceptions in
+alphatbetical order.  Makes output more deterministic and easier to tell if
+the file is stale or not.
+
+..
+
+.. bpo: 1546372
+.. date: 6283
+.. nonce: MVtd4U
+.. section: Tools/Demos
+
+Fixed small bugglet in pybench that caused a missing file not to get
+reported properly.
+
+..
+
+.. bpo: 0
+.. date: 6282
+.. nonce: keNFft
+.. section: Build
+
+Have the search path for building extensions follow the declared order in
+$CPPFLAGS and $LDFLAGS when adding directories from those environment
+variables.
+
+..
+
+.. bpo: 1983
+.. date: 6281
+.. nonce: DMUUfR
+.. section: Build
+
+Added a check to pyport to verify that sizeof(pid_t) is smaller or equal
+sizeof(long).
+
+..
+
+.. bpo: 1234
+.. date: 6280
+.. nonce: uVPtek
+.. section: Build
+
+Fixed semaphore errors on AIX 5.2
+
+..
+
+.. bpo: 1726
+.. date: 6279
+.. nonce: VPW3gd
+.. section: Build
+
+Remove Python/atof.c from PCBuild/pythoncore.vcproj.
+
+..
+
+.. bpo: 0
+.. date: 6278
+.. nonce: v3vkcE
+.. section: Build
+
+Removed PCbuild8/ directory and added a new build directory for VS 2005
+based on the VS 2008 build directory to PC/VS8.0. The script
+PCbuild/vs8to9.py was added to sync changes from PCbuild to PC/VS8.0.
+
+..
+
+.. bpo: 0
+.. date: 6277
+.. nonce: PiHUNm
+.. section: Build
+
+Moved PCbuild/ directory for VS 2003 to PC/VS7.1 and renamed PCBuild9/
+directory to PCBuild/.
+
+..
+
+.. bpo: 1699
+.. date: 6276
+.. nonce: p7AIXC
+.. section: Build
+
+Define _BSD_SOURCE only on OpenBSD.
+
+..
+
+.. bpo: 1608
+.. date: 6275
+.. nonce: H08Msy
+.. section: Build
+
+use -fwrapv when GCC supports it.  This is important, newer GCC versions may
+optimize away overflow buffer overflow checks without this option!
+
+..
+
+.. bpo: 1418
+.. date: 6274
+.. nonce: DbqMV4
+.. section: Build
+
+Make the AC_REPLACE_FUNCS object files actually work.
+
+..
+
+.. bpo: 0
+.. date: 6273
+.. nonce: voVF_6
+.. section: Build
+
+Add a FAST_LOOPS build option that speeds-up looping by trading away
+periodic threadstate and signal checking in tight loops.  By default, this
+option is turned-off.  It should only be enabled in debugged, performance
+critical applications.
+
+..
+
+.. bpo: 786737
+.. date: 6272
+.. nonce: mJJr01
+.. section: Build
+
+Allow building in a tree of symlinks pointing to a readonly source.
+
+..
+
+.. bpo: 1737210
+.. date: 6271
+.. nonce: hMxaQH
+.. section: Build
+
+Change Manufacturer of Windows installer to PSF.
+
+..
+
+.. bpo: 1746880
+.. date: 6270
+.. nonce: hrR2KM
+.. section: Build
+
+Correctly install DLLs into system32 folder on Win64.
+
+..
+
+.. bpo: 0
+.. date: 6269
+.. nonce: xKHD52
+.. section: Build
+
+Define _BSD_SOURCE, to get access to POSIX extensions on OpenBSD 4.1+.
+
+..
+
+.. bpo: 0
+.. date: 6268
+.. nonce: 3JXjJ7
+.. section: Build
+
+Stop supporting AtheOS and cause a build error in configure for the
+platform.
+
+..
+
+.. bpo: 1655392
+.. date: 6267
+.. nonce: bwAdWN
+.. section: Build
+
+don't add -L/usr/lib/pythonX.Y/config to the LDFLAGS returned by
+python-config if Python was built with --enable-shared because that prevented the
+shared library from being used.
+
+..
+
+.. bpo: 1569798
+.. date: 6266
+.. nonce: 7Camzj
+.. section: Build
+
+fix a bug in distutils when building Python from a directory within
+sys.exec_prefix.
+
+..
+
+.. bpo: 1675511
+.. date: 6265
+.. nonce: j8xiLT
+.. section: Build
+
+Use -Kpic instead of -xcode=pic32 on Solaris/x86.
+
+..
+
+.. bpo: 0
+.. date: 6264
+.. nonce: D_HO5I
+.. section: Build
+
+Disable _XOPEN_SOURCE on NetBSD 1.x.
+
+..
+
+.. bpo: 0
+.. date: 6263
+.. nonce: ipd_yd
+.. section: Build
+
+configure now checks whether gcc supports the PyArg_ParseTuple format
+attribute.
+
+..
+
+.. bpo: 1578513
+.. date: 6262
+.. nonce: MkcqR2
+.. section: Build
+
+Cross compilation was broken by a change to configure. Repair so that it's
+back to how it was in 2.4.3.
+
+..
+
+.. bpo: 1576954
+.. date: 6261
+.. nonce: Rd2jyj
+.. section: Build
+
+Update VC6 build directory; remove redundant files in VC7.
+
+..
+
+.. bpo: 1568842
+.. date: 6260
+.. nonce: xBW1d2
+.. section: Build
+
+Fix test for uintptr_t.
+
+..
+
+.. bpo: 1540470
+.. date: 6259
+.. nonce: JS-AGw
+.. section: Build
+
+for OpenBSD 4.0.
+
+..
+
+.. bpo: 0
+.. date: 6258
+.. nonce: 7uKaSk
+.. section: Build
+
+Fix build failure on kfreebsd and on the hurd.
+
+..
+
+.. bpo: 0
+.. date: 6257
+.. nonce: cPAQ_M
+.. section: Build
+
+Fix the build of the library reference in info format.
+
+..
+
+.. bpo: 0
+.. date: 6256
+.. nonce: vXo4QU
+.. section: Build
+
+Allow Emacs 22 for building the documentation in info format.
+
+..
+
+.. bpo: 0
+.. date: 6255
+.. nonce: UHEp2F
+.. section: Build
+
+Makefile.pre.in(buildbottest): Run an optional script pybuildbot.identify to
+include some information about the build environment.
+
+..
+
+.. bpo: 0
+.. date: 6254
+.. nonce: Wws2go
+.. section: C API
+
+Unified naming convention for free lists and their limits. All free lists in
+Object/ are named ``free_list``, the counter ``numfree`` and the upper limit
+is a macro ``PyName_MAXFREELIST`` inside an #ifndef block.
+
+..
+
+.. bpo: 0
+.. date: 6253
+.. nonce: vwQmXR
+.. section: C API
+
+``PySet_Add()`` can now modify a newly created frozenset.  Similarly to
+``PyTuple_SetItem``, it can be used to populate a brand new frozenset; but
+it does not steal a reference to the added item.
+
+..
+
+.. bpo: 0
+.. date: 6252
+.. nonce: b3Psyt
+.. section: C API
+
+Added ``PySet_Check()`` and ``PyFrozenSet_Check()`` to the set API.
+
+..
+
+.. bpo: 0
+.. date: 6251
+.. nonce: UrXjnD
+.. section: C API
+
+Backport of PyUnicode_FromString(), _FromStringAndSize(), _Format and
+_FormatV from Python 3.0. Made PyLong_AsSsize_t and PyLong_FromSsize_t
+public functions.
+
+..
+
+.. bpo: 1720595
+.. date: 6250
+.. nonce: FdLtKP
+.. section: C API
+
+add T_BOOL to the range of structmember types.
+
+..
+
+.. bpo: 1534
+.. date: 6249
+.. nonce: k9vjbw
+.. section: C API
+
+Added ``PyFloat_GetMax()``, ``PyFloat_GetMin()`` and ``PyFloat_GetInfo()``
+to the float API.
+
+..
+
+.. bpo: 1521
+.. date: 6248
+.. nonce: eHI3IG
+.. section: C API
+
+On 64bit platforms, using PyArgs_ParseTuple with the t# of w# format code
+incorrectly truncated the length to an int, even when PY_SSIZE_T_CLEAN is
+set.  The str.decode method used to return incorrect results with huge
+strings.
+
+..
+
+.. bpo: 1629
+.. date: 6247
+.. nonce: YktpXQ
+.. section: C API
+
+Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT.
+
+..
+
+.. bpo: 0
+.. date: 6246
+.. nonce: g8xMae
+.. section: C API
+
+PEP 3123: Provide forward compatibility with Python 3.0, while keeping
+backwards compatibility. Add Py_Refcnt, Py_Type, Py_Size, and
+PyVarObject_HEAD_INIT.
+
+..
+
+.. bpo: 0
+.. date: 6245
+.. nonce: sGL89S
+.. section: C API
+
+Py_ssize_t fields work in structmember when HAVE_LONG_LONG is not defined.
+
+..
+
+.. bpo: 1733960
+.. date: 6244
+.. nonce: 8rUKMs
+.. section: C API
+
+Allow T_LONGLONG to accept ints.
+
+..
+
+.. bpo: 0
+.. date: 6243
+.. nonce: VY6LgN
+.. section: C API
+
+T_PYSSIZET can now be used in PyMemberDef lists for Py_ssize_t members.
+
+..
+
+.. bpo: 0
+.. date: 6242
+.. nonce: ZkzATk
+.. section: C API
+
+Added a new API function ``PyImport_ImportModuleNoBlock``.
+
+..
+
+.. bpo: 1637022
+.. date: 6241
+.. nonce: wBq1VS
+.. section: C API
+
+Prefix AST symbols with _Py_.
+
+..
+
+.. bpo: 0
+.. date: 6240
+.. nonce: YAicka
+.. section: C API
+
+Fix some leftovers from the conversion from int to Py_ssize_t (relevant to
+strings and sequences of more than 2**31 items).
+
+..
+
+.. bpo: 0
+.. date: 6239
+.. nonce: A7o-lD
+.. section: C API
+
+Make _PyGILState_NoteThreadState() static, it was not used anywhere outside
+of pystate.c and should not be necessary.
+
+..
+
+.. bpo: 0
+.. date: 6238
+.. nonce: ZpnpHT
+.. section: C API
+
+``PyImport_Import`` and ``PyImport_ImportModule`` now always do absolute
+imports. In earlier versions they might have used relative imports under
+some conditions.
+
+..
+
+.. bpo: 0
+.. date: 6237
+.. nonce: 15u7sP
+.. section: C API
+
+Added case insensitive comparison methods ``PyOS_stricmp(char*, char*)`` and
+``PyOS_strnicmp(char*, char*, Py_ssize_t)``.
+
+..
+
+.. bpo: 1542693
+.. date: 6236
+.. nonce: ZPZ9Df
+.. section: C API
+
+remove semi-colon at end of PyImport_ImportModuleEx macro so it can be used
+as an expression.
+
+..
+
+.. bpo: 1706
+.. date: 6235
+.. nonce: D8C2K3
+.. section: Windows
+
+Drop support for Win9x, WinME and NT4. Python now requires Windows 2000 or
+greater. The _WINVER and NTDDI_VERSION macros are set to Win2k for x86/32bit
+builds and WinXP for AMD64 builds.
+
+..
+
+.. bpo: 0
+.. date: 6234
+.. nonce: cKizM7
+.. section: Windows
+
+Conditionalize definition of _CRT_SECURE_NO_DEPRECATE and
+_CRT_NONSTDC_NO_DEPRECATE.
+
+..
+
+.. bpo: 1216
+.. date: 6233
+.. nonce: DblJmV
+.. section: Windows
+
+Restore support for Visual Studio 2002.
+
+..
+
+.. bpo: 0
+.. date: 6232
+.. nonce: 2DB1Bg
+.. section: macOS
+
+cfmfile now raises a DeprecationWarning.
+
+..
+
+.. bpo: 0
+.. date: 6231
+.. nonce: r4EkYd
+.. section: macOS
+
+buildtools now raises a DeprecationWarning.
+
+..
+
+.. bpo: 0
+.. date: 6230
+.. nonce: Mdk5q1
+.. section: macOS
+
+Removed the macfs module.  It had been deprecated since Python 2.5. This
+lead to the deprecation of macostools.touched() as it relied solely on macfs
+and was a no-op under OS X.
diff --git a/Misc/NEWS.d/2.6a2.rst b/Misc/NEWS.d/2.6a2.rst
new file mode 100644
index 0000000..f7c6641
--- /dev/null
+++ b/Misc/NEWS.d/2.6a2.rst
@@ -0,0 +1,694 @@
+.. bpo: 1733757
+.. date: 6865
+.. nonce: cyKvMt
+.. release date: 02-Apr-2008
+.. section: Core and Builtins
+
+The interpreter would hang on shutdown if the tracing function set by
+sys.settrace is still active and happens to call threading.currentThread().
+
+..
+
+.. bpo: 1442
+.. date: 6864
+.. nonce: h73ZTm
+.. section: Core and Builtins
+
+properly report exceptions when the PYTHONSTARTUP file cannot be executed.
+
+..
+
+.. bpo: 0
+.. date: 6863
+.. nonce: q3LWX0
+.. section: Core and Builtins
+
+The compilation of a class nested in another class used to leak one
+reference on the outer class name.
+
+..
+
+.. bpo: 1810
+.. date: 6862
+.. nonce: ESXjRG
+.. section: Core and Builtins
+
+compile() can now compile _ast trees as returned by ``compile(...,
+PyCF_ONLY_AST)``.
+
+..
+
+.. bpo: 2426
+.. date: 6861
+.. nonce: H-NFT6
+.. section: Core and Builtins
+
+Added sqlite3.Connection.iterdump method to allow easy dumping of databases.
+Contributed by Paul Kippes at PyCon 2008.
+
+..
+
+.. bpo: 2477
+.. date: 6860
+.. nonce: iEeee2
+.. section: Core and Builtins
+
+Added from __future__ import unicode_literals.
+
+..
+
+.. bpo: 0
+.. date: 6859
+.. nonce: MQCT3j
+.. section: Core and Builtins
+
+Added backport of bytearray type.
+
+..
+
+.. bpo: 2355
+.. date: 6858
+.. nonce: 3IrFJn
+.. section: Core and Builtins
+
+add Py3k warning for buffer().
+
+..
+
+.. bpo: 1477
+.. date: 6857
+.. nonce: kL8T9Y
+.. section: Core and Builtins
+
+With narrow Unicode builds, the unicode escape sequence \Uxxxxxxxx did not
+accept values outside the Basic Multilingual Plane.  This affected raw
+unicode literals and the 'raw-unicode-escape' codec.  Now UTF-16 surrogates
+are generated in this case, like normal unicode literals and the
+'unicode-escape' codec.
+
+..
+
+.. bpo: 2348
+.. date: 6856
+.. nonce: bTKRrx
+.. section: Core and Builtins
+
+add Py3k warning for file.softspace.
+
+..
+
+.. bpo: 2346
+.. date: 6855
+.. nonce: ZdxBIW
+.. section: Core and Builtins
+
+add Py3k warnings for __methods__ and __members__. (See also: bpo-2347)
+
+..
+
+.. bpo: 2358
+.. date: 6854
+.. nonce: -9p_qA
+.. section: Core and Builtins
+
+Add a Py3k warning on sys.exc_clear() usage.
+
+..
+
+.. bpo: 2400
+.. date: 6853
+.. nonce: Vh9y6O
+.. section: Core and Builtins
+
+Allow relative imports to "import *".
+
+..
+
+.. bpo: 1745
+.. date: 6852
+.. nonce: E7-cUG
+.. section: Core and Builtins
+
+Backport print function with ``from __future__ import print_function``.
+
+..
+
+.. bpo: 2332
+.. date: 6851
+.. nonce: J5iU51
+.. section: Core and Builtins
+
+add new attribute names for instance method objects. The two changes are:
+im_self -> __self__ and im_func -> __func__
+
+..
+
+.. bpo: 2379
+.. date: 6850
+.. nonce: 9-tqgC
+.. section: Core and Builtins
+
+Raise a Py3K warning for __getitem__ or __getslice__ on exception instances.
+
+..
+
+.. bpo: 2371
+.. date: 6849
+.. nonce: xuvdpy
+.. section: Core and Builtins
+
+Add a Py3k warning when catching an exception that doesn't derive from
+BaseException.
+
+..
+
+.. bpo: 2341
+.. date: 6848
+.. nonce: LmD2N7
+.. section: Core and Builtins
+
+Add a Py3k warning when raising an exception that doesn't derive from
+BaseException.
+
+..
+
+.. bpo: 2321
+.. date: 6847
+.. nonce: v7FzTy
+.. section: Core and Builtins
+
+use pymalloc for unicode object string data to reduce memory usage in some
+circumstances.
+
+..
+
+.. bpo: 0
+.. date: 6846
+.. nonce: O8A72m
+.. section: Core and Builtins
+
+PEP 3127: octal literals now start with "0o". Old-style octal literals are
+still valid. There are binary literals with a prefix of "0b".  This also
+affects int(x, 0).
+
+..
+
+.. bpo: 2359
+.. date: 6845
+.. nonce: cR7f7i
+.. section: Core and Builtins
+
+Adding deprecation warnings for array.{read,write}.
+
+..
+
+.. bpo: 1779871
+.. date: 6844
+.. nonce: Q9u7-T
+.. section: Core and Builtins
+
+GNU gcc can now build Python on OS X because the flags -Wno-long-double,
+-no-cpp-precomp, and -mno-fused-madd are no longer passed.
+
+..
+
+.. bpo: 0
+.. date: 6843
+.. nonce: 00spAB
+.. section: Core and Builtins
+
+Add a warning when asserting a non-empty tuple which is always true.
+
+..
+
+.. bpo: 2179
+.. date: 6842
+.. nonce: 6ZA8c-
+.. section: Core and Builtins
+
+speed up with statement execution by storing the exit method on the stack
+instead of in a temporary variable (patch by Jeffrey Yaskin)
+
+..
+
+.. bpo: 2238
+.. date: 6841
+.. nonce: LMUvyp
+.. section: Core and Builtins
+
+Some syntax errors in *args and **kwargs expressions could give bogus error
+messages.
+
+..
+
+.. bpo: 2143
+.. date: 6840
+.. nonce: 39hw9G
+.. section: Core and Builtins
+
+Fix embedded readline() hang on SSL socket EOF.
+
+..
+
+.. bpo: 2240
+.. date: 6839
+.. nonce: WNReGo
+.. section: Library
+
+Implement signal.setitimer and signal.getitimer.
+
+..
+
+.. bpo: 2315
+.. date: 6838
+.. nonce: pqno5o
+.. section: Library
+
+logging.handlers: TimedRotatingFileHandler now accounts for daylight savings
+time in calculating the next rollover.
+
+..
+
+.. bpo: 2316
+.. date: 6837
+.. nonce: ZS89xB
+.. section: Library
+
+logging.handlers: TimedRotatingFileHandler now calculates rollovers
+correctly even when nothing is logged for a while.
+
+..
+
+.. bpo: 2317
+.. date: 6836
+.. nonce: 4RDUg2
+.. section: Library
+
+logging.handlers: TimedRotatingFileHandler now uses improved logic for
+removing old files.
+
+..
+
+.. bpo: 2495
+.. date: 6835
+.. nonce: XaNV_D
+.. section: Library
+
+tokenize.untokenize now inserts a space between two consecutive string
+literals; previously, ["" ""] was rendered as [""""], which is incorrect
+python code.
+
+..
+
+.. bpo: 2248
+.. date: 6834
+.. nonce: EFdgNK
+.. section: Library
+
+return the result of the QUIT command. from SMTP.quit().
+
+..
+
+.. bpo: 0
+.. date: 6833
+.. nonce: lDMF2h
+.. section: Library
+
+Backport of Python 3.0's io module.
+
+..
+
+.. bpo: 2482
+.. date: 6832
+.. nonce: gt5k7F
+.. section: Library
+
+Make sure that the coefficient of a Decimal is always stored as a str
+instance, not as a unicode instance.  This ensures that str(Decimal) is
+always an instance of str.
+
+..
+
+.. bpo: 2478
+.. date: 6831
+.. nonce: A33H1n
+.. section: Library
+
+fix failure of decimal.Decimal(0).sqrt()
+
+..
+
+.. bpo: 2432
+.. date: 6830
+.. nonce: K_Wmv6
+.. section: Library
+
+give DictReader the dialect and line_num attributes advertised in the docs.
+
+..
+
+.. bpo: 2460
+.. date: 6829
+.. nonce: N-GQGP
+.. section: Library
+
+Make Ellipsis object copyable.
+
+..
+
+.. bpo: 1681432
+.. date: 6828
+.. nonce: UMEj9l
+.. section: Library
+
+Add triangular distribution to the random module
+
+..
+
+.. bpo: 2136
+.. date: 6827
+.. nonce: pMUClw
+.. section: Library
+
+urllib2's auth handler now allows single-quoted realms in the
+WWW-Authenticate header.
+
+..
+
+.. bpo: 2434
+.. date: 6826
+.. nonce: 7NhX4x
+.. section: Library
+
+Enhanced platform.win32_ver() to also work on Python installation which do
+not have the win32all package installed.
+
+..
+
+.. bpo: 0
+.. date: 6825
+.. nonce: Mua_8k
+.. section: Library
+
+Added support to platform.uname() to also report the machine and processor
+information on Windows XP and later. As a result, platform.machine() and
+platform.processor() will report this information as well.
+
+..
+
+.. bpo: 0
+.. date: 6824
+.. nonce: TVfcNn
+.. section: Library
+
+The library implementing the 2to3 conversion, lib2to3, was added to the
+standard distribution.
+
+..
+
+.. bpo: 1747858
+.. date: 6823
+.. nonce: q45meX
+.. section: Library
+
+Fix chown to work with large uid's and gid's on 64-bit platforms.
+
+..
+
+.. bpo: 1202
+.. date: 6822
+.. nonce: aihbD5
+.. section: Library
+
+zlib.crc32 and zlib.adler32 no longer return different values on 32-bit vs.
+64-bit python interpreters.  Both were correct, but they now both return a
+signed integer object for consistency.
+
+..
+
+.. bpo: 1158
+.. date: 6821
+.. nonce: AkVzAm
+.. section: Library
+
+add %f format (fractions of a second represented as microseconds) to
+datetime objects.  Understood by both strptime and strftime.
+
+..
+
+.. bpo: 705836
+.. date: 6820
+.. nonce: g5peII
+.. section: Library
+
+struct.pack(">f", x) now raises OverflowError on all platforms when x is too
+large to fit into an IEEE 754 float; previously it only raised OverflowError
+on non IEEE 754 platforms.
+
+..
+
+.. bpo: 2166
+.. date: 6819
+.. nonce: WF2f5f
+.. section: Library
+
+now distutils deals with HOME correctly under win32 (See also: bpo-1741,
+bpo-1531505)
+
+..
+
+.. bpo: 1858
+.. date: 6818
+.. nonce: jGCMLw
+.. section: Library
+
+distutils: added multiple server support in .pypirc
+
+..
+
+.. bpo: 1106316
+.. date: 6817
+.. nonce: uk36rF
+.. section: Library
+
+pdb.post_mortem()'s parameter, "traceback", is now optional: it defaults to
+the traceback of the exception that is currently being handled (is mandatory
+to be in the middle of an exception, otherwise it raises ValueError).
+
+..
+
+.. bpo: 1193577
+.. date: 6816
+.. nonce: b-BahY
+.. section: Library
+
+A .shutdown() method has been added to SocketServers which terminates the
+.serve_forever() loop.
+
+..
+
+.. bpo: 2220
+.. date: 6815
+.. nonce: qjYxWH
+.. section: Library
+
+handle rlcompleter attribute match failure more gracefully.
+
+..
+
+.. bpo: 2225
+.. date: 6814
+.. nonce: a0QsFA
+.. section: Library
+
+py_compile, when executed as a script, now returns a non- zero status code
+if not all files could be compiled successfully.
+
+..
+
+.. bpo: 1725737
+.. date: 6813
+.. nonce: nvfK6A
+.. section: Library
+
+In distutils' sdist, exclude RCS, CVS etc. also in the root directory, and
+also exclude .hg, .git, .bzr, and _darcs.
+
+..
+
+.. bpo: 1872
+.. date: 6812
+.. nonce: m8TmRv
+.. section: Library
+
+The struct module typecode for _Bool has been changed from 't' to '?'.
+
+..
+
+.. bpo: 0
+.. date: 6811
+.. nonce: VqAlAz
+.. section: Library
+
+The bundled libffi copy is now in sync with the recently released
+libffi3.0.4 version, apart from some small changes to
+Modules/_ctypes/libffi/configure.ac.  On OS X, preconfigured libffi files
+are used.  On all linux systems the --with-system-ffi configure option
+defaults to "yes".
+
+..
+
+.. bpo: 1577
+.. date: 6810
+.. nonce: njrgUJ
+.. section: Library
+
+shutil.move() now calls os.rename() if the destination is a directory
+instead of copying-then-remove-source.
+
+..
+
+.. bpo: 0
+.. date: 6809
+.. nonce: K5ZD7T
+.. section: Tests
+
+test_nis no longer fails when test.test_support.verbose is true and NIS is
+not set up on the testing machine.
+
+..
+
+.. bpo: 0
+.. date: 6808
+.. nonce: 1ZE-e2
+.. section: Tests
+
+Output comparison tests are no longer supported.
+
+..
+
+.. bpo: 0
+.. date: 6807
+.. nonce: N2wGxu
+.. section: Tests
+
+Rewrite test_errno to use unittest and no longer be a no-op.
+
+..
+
+.. bpo: 0
+.. date: 6806
+.. nonce: f80pTz
+.. section: Tests
+
+GHOP 234: Convert test_extcall to doctest.
+
+..
+
+.. bpo: 0
+.. date: 6805
+.. nonce: IG1fWw
+.. section: Tests
+
+GHOP 290: Convert test_dbm and test_dummy_threading to unittest.
+
+..
+
+.. bpo: 0
+.. date: 6804
+.. nonce: 2Pr5hV
+.. section: Tests
+
+GHOP 293: Convert test_strftime, test_getargs, and test_pep247 to unittest.
+
+..
+
+.. bpo: 2055
+.. date: 6803
+.. nonce: yoFv4H
+.. section: Tests
+
+Convert test_fcntl to unittest.
+
+..
+
+.. bpo: 1960
+.. date: 6802
+.. nonce: 8bFRO9
+.. section: Tests
+
+Convert test_gdbm to unittest.
+
+..
+
+.. bpo: 0
+.. date: 6801
+.. nonce: 5VXuUU
+.. section: Tests
+
+GHOP 294: Convert test_contains, test_crypt, and test_select to unittest.
+
+..
+
+.. bpo: 0
+.. date: 6800
+.. nonce: Huq18v
+.. section: Tests
+
+GHOP 238: Convert test_tokenize to use doctest.
+
+..
+
+.. bpo: 0
+.. date: 6799
+.. nonce: yrOIgp
+.. section: Tests
+
+GHOP 237: Rewrite test_thread using unittest.
+
+..
+
+.. bpo: 2232
+.. date: 6798
+.. nonce: gT2U-l
+.. section: Tests
+
+os.tmpfile might fail on Windows if the user has no permission to create
+files in the root directory.
+
+..
+
+.. bpo: 0
+.. date: 6797
+.. nonce: xClq5J
+.. section: Build
+
+A new script 2to3 is now installed, to run the 2.x to 3.x converter.
+
+..
+
+.. bpo: 0
+.. date: 6796
+.. nonce: K_qDWf
+.. section: Build
+
+Python/memmove.c and Python/strerror.c have been removed; both functions are
+in the C89 standard library.
+
+..
+
+.. bpo: 2284
+.. date: 6795
+.. nonce: g5HXfy
+.. section: Build
+
+Add -x64 option to rt.bat.
+
+..
+
+.. bpo: 2477
+.. date: 6794
+.. nonce: ff3qxW
+.. section: C API
+
+Added PyParser_ParseFileFlagsEx() and PyParser_ParseStringFlagsFilenameEx().
diff --git a/Misc/NEWS.d/2.6a3.rst b/Misc/NEWS.d/2.6a3.rst
new file mode 100644
index 0000000..5653d38
--- /dev/null
+++ b/Misc/NEWS.d/2.6a3.rst
@@ -0,0 +1,356 @@
+.. bpo: 2719
+.. date: 6897
+.. nonce: 4NH_Xn
+.. release date: 08-May-2008
+.. section: Core and Builtins
+
+backported the ``next()`` builtin from Python 3.
+
+..
+
+.. bpo: 2681
+.. date: 6896
+.. nonce: 8UXx90
+.. section: Core and Builtins
+
+The octal literal ``0o8`` was incorrecly acctepted. Now it properly raises a
+SyntaxError.
+
+..
+
+.. bpo: 2617
+.. date: 6895
+.. nonce: 1gTS6r
+.. section: Core and Builtins
+
+Reserved -J and -X arguments for Jython, IronPython and other
+implementations of Python.
+
+..
+
+.. bpo: 0
+.. date: 6894
+.. nonce: aRO9gE
+.. section: Core and Builtins
+
+Implemented PEP 370: Per user site-packages directory.
+
+..
+
+.. bpo: 2670
+.. date: 6893
+.. nonce: VM2Luj
+.. section: Library
+
+Fix a failure in urllib2.build_opener(), when passed two handlers that
+derive the same default base class.
+
+..
+
+.. bpo: 0
+.. date: 6892
+.. nonce: 7fblHZ
+.. section: Library
+
+Added kill, terminate and send_signal(sig) to subprocess.Popen.
+
+..
+
+.. bpo: 0
+.. date: 6891
+.. nonce: 88WSiY
+.. section: Library
+
+Added phase(z) -> phi, polar(z) -> r, phi and rect(r, phi) -> z to the cmath
+module.
+
+..
+
+.. bpo: 0
+.. date: 6890
+.. nonce: 6dejMd
+.. section: Library
+
+Four new methods were added to the math and cmath modules: acosh, asinh,
+atanh and log1p.
+
+..
+
+.. bpo: 0
+.. date: 6889
+.. nonce: v-VAd8
+.. section: Library
+
+zlib.decompressobj().flush(value) no longer crashes the interpreter when
+passed a value less than or equal to zero.
+
+..
+
+.. bpo: 1631171
+.. date: 6888
+.. nonce: 8Bc0Zl
+.. section: Library
+
+Re-implement the 'warnings' module in C (the original Python code has been
+kept as backup). This will allow for using the 'warning's machinery in such
+places as the parser where use of pure Python code is not possible.  Both
+the ``showarning()`` and ``formatwarning()`` gain an optional 'line'
+argument which is not called by default for backwards-compatibility reasons.
+Setting ``warnings.showwarning()`` to an implementation that lacks support
+for the ``line`` argument will raise a DeprecationWarning.
+
+..
+
+.. bpo: 0
+.. date: 6887
+.. nonce: CNqdrb
+.. section: Library
+
+The audiodev module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 2750
+.. date: 6886
+.. nonce: nv-hkg
+.. section: Library
+
+Add the 'json' package. Based on simplejson 1.9 and contributed by Bob
+Ippolito.
+
+..
+
+.. bpo: 1734346
+.. date: 6885
+.. nonce: lfR8ca
+.. section: Library
+
+Support Unicode file names for zipfiles.
+
+..
+
+.. bpo: 2581
+.. date: 6884
+.. nonce: fOkdCT
+.. section: Library
+
+distutils: Vista UAC/elevation support for bdist_wininst.
+
+..
+
+.. bpo: 2635
+.. date: 6883
+.. nonce: F8Y92w
+.. section: Library
+
+Fix bug in 'fix_sentence_endings' textwrap.fill option, where an extra space
+was added after a word containing (but not ending in) '.', '!' or '?'.
+
+..
+
+.. bpo: 0
+.. date: 6882
+.. nonce: lYk3LA
+.. section: Library
+
+Add from_buffer() and from_buffer_copy() class methods to ctypes data types.
+
+..
+
+.. bpo: 2682
+.. date: 6881
+.. nonce: NLrJe2
+.. section: Library
+
+ctypes callback functions no longer contain a cyclic reference to
+themselves.
+
+..
+
+.. bpo: 0
+.. date: 6880
+.. nonce: TTWJof
+.. section: Library
+
+The getpass module has been improved on Unix.  It now uses /dev/tty by
+default and uses stderr instead of stdout.  A GetPassWarning is issued when
+input echo cannot be controlled.
+
+..
+
+.. bpo: 2014
+.. date: 6879
+.. nonce: CKvu6Y
+.. section: Library
+
+Allow XML-RPC datetime objects to have dates before 1900-01-01.
+
+..
+
+.. bpo: 2439
+.. date: 6878
+.. nonce: Kwwv4U
+.. section: Library
+
+Added new function pkgutil.get_data(), which is a convenience wrapper for
+the PEP 302 get_data() API.
+
+..
+
+.. bpo: 2616
+.. date: 6877
+.. nonce: UHPY7r
+.. section: Library
+
+The ctypes.pointer() and ctypes.POINTER() functions are now implemented in C
+for better performance.
+
+..
+
+.. bpo: 2408
+.. date: 6876
+.. nonce: GhLvZ5
+.. section: Library
+
+The ``_types`` module, which was used as in implementation detail of the
+public ``types`` module, has been removed and replaced by pure python code.
+
+..
+
+.. bpo: 2513
+.. date: 6875
+.. nonce: x3Kj5E
+.. section: Library
+
+distutils on Windows is now capable of cross-compiling extension modules
+between 32 and 64 bit platforms.  See the distutls build documentation for
+more information.
+
+..
+
+.. bpo: 815646
+.. date: 6874
+.. nonce: GhCmJD
+.. section: Library
+
+Individual file objects may now be used from multiple threads at once
+without fear of crashing the Python interpreter.  If file.close() is called
+while an object is in use by another thread an IOError exception will be
+raised and the file will not be closed.
+
+..
+
+.. bpo: 0
+.. date: 6873
+.. nonce: NdBuEp
+.. section: Library
+
+The bundled libffi copy is now in sync with the recently released
+libffi3.0.5 version, apart from some small changes to
+Modules/_ctypes/libffi/configure.ac.
+
+..
+
+.. bpo: 2385
+.. date: 6872
+.. nonce: qIBVVF
+.. section: Library
+
+distutils.core.run_script() makes __file__ available, so the controlled
+environment will more closely mirror the typical script environment.  This
+supports setup.py scripts that refer to data files.
+
+..
+
+.. bpo: 2550
+.. date: 6871
+.. nonce: wbV22J
+.. section: Tests
+
+The approach used by client/server code for obtaining ports to listen on in
+network-oriented tests has been refined in an effort to facilitate running
+multiple instances of the entire regression test suite in parallel without
+issue. test_support.bind_port() has been fixed such that it will always
+return a unique port -- which wasn't always the case with the previous
+implementation, especially if socket options had been set that affected
+address reuse (i.e. SO_REUSEADDR, SO_REUSEPORT).  The new implementation of
+bind_port() will actually raise an exception if it is passed an
+AF_INET/SOCK_STREAM socket with either the SO_REUSEADDR or SO_REUSEPORT
+socket option set.  Furthermore, if available, bind_port() will set the
+SO_EXCLUSIVEADDRUSE option on the socket it's been passed.  This currently
+only applies to Windows.  This option prevents any other sockets from
+binding to the host/port we've bound to, thus removing the possibility of
+the 'non-deterministic' behaviour, as Microsoft puts it, that occurs when a
+second SOCK_STREAM socket binds and accepts to a host/port that's already
+been bound by another socket.  The optional preferred port parameter to
+bind_port() has been removed.  Under no circumstances should tests be hard
+coding ports!
+
+test_support.find_unused_port() has also been introduced, which will pass a
+temporary socket object to bind_port() in order to obtain an unused port.
+The temporary socket object is then closed and deleted, and the port is
+returned.  This method should only be used for obtaining an unused port in
+order to pass to an external program (i.e. the -accept [port] argument to
+openssl's s_server mode) or as a parameter to a server-oriented class that
+doesn't give you direct access to the underlying socket used.
+
+Finally, test_support.HOST has been introduced, which should be used for the
+host argument of any relevant socket calls (i.e. bind and connect).
+
+The following tests were updated to following the new conventions:
+test_socket, test_smtplib, test_asyncore, test_ssl, test_httplib,
+test_poplib, test_ftplib, test_telnetlib, test_socketserver,   test_asynchat
+and test_socket_ssl.
+
+It is now possible for multiple instances of the regression test suite to
+run in parallel without issue.
+
+..
+
+.. bpo: 1496032
+.. date: 6870
+.. nonce: DcJtNu
+.. section: Build
+
+On alpha, use -mieee when gcc is the compiler.
+
+..
+
+.. bpo: 2544
+.. date: 6869
+.. nonce: -H_NZm
+.. section: Build
+
+On HP-UX systems, use 'gcc -shared' for linking when gcc is used as
+compiler.
+
+..
+
+.. bpo: 2573
+.. date: 6868
+.. nonce: 4wDeJ7
+.. section: Build
+
+On MacOS X it is now possible to install the framework with a different name
+using --with-framework-name=NAME.
+
+..
+
+.. bpo: 0
+.. date: 6867
+.. nonce: yznsKq
+.. section: C API
+
+Added implementation of copysign, acosh, asinh, atanh and log1p to the new
+files Include/pymath.h and Python/pymath.h for platforms which provide the
+functions through their libm. The files also contains several helpers and
+constants for math.
+
+..
+
+.. bpo: 0
+.. date: 6866
+.. nonce: Kr65an
+.. section: C API
+
+Added a new convenience macro, PyErr_WarnPy3k, for issuing Py3k warnings.
diff --git a/Misc/NEWS.d/2.6b1.rst b/Misc/NEWS.d/2.6b1.rst
new file mode 100644
index 0000000..e680708
--- /dev/null
+++ b/Misc/NEWS.d/2.6b1.rst
@@ -0,0 +1,1149 @@
+.. bpo: 3211
+.. date: 7017
+.. nonce: 53eouC
+.. release date: 18-June-2008
+.. section: Core and Builtins
+
+warnings.warn_explicit() did not guard against its 'registry' argument being
+anything other than a dict or None. Also fixed a bug in error handling when
+'message' and 'category' were both set to None, triggering a bus error.
+
+..
+
+.. bpo: 3100
+.. date: 7016
+.. nonce: FGUaxt
+.. section: Core and Builtins
+
+Corrected a crash on deallocation of a subclassed weakref which holds the
+last (strong) reference to its referent.
+
+..
+
+.. bpo: 0
+.. date: 7015
+.. nonce: habgq9
+.. section: Core and Builtins
+
+Add future_builtins.ascii().
+
+..
+
+.. bpo: 0
+.. date: 7014
+.. nonce: ZqCwWn
+.. section: Core and Builtins
+
+Several set methods now accept multiple arguments: update(), union(),
+intersection(), intersection_update(), difference(), and
+difference_update().
+
+..
+
+.. bpo: 2898
+.. date: 7013
+.. nonce: 3Al5vX
+.. section: Core and Builtins
+
+Added sys.getsizeof() to retrieve size of objects in bytes.
+
+..
+
+.. bpo: 0
+.. date: 7012
+.. nonce: 7NZKM7
+.. section: Core and Builtins
+
+New environment variable PYTHONIOENCODING.
+
+..
+
+.. bpo: 2488
+.. date: 7011
+.. nonce: SglN-p
+.. section: Core and Builtins
+
+Add sys.maxsize.
+
+..
+
+.. bpo: 2353
+.. date: 7010
+.. nonce: IYOwih
+.. section: Core and Builtins
+
+file.xreadlines() now emits a Py3k warning.
+
+..
+
+.. bpo: 2863
+.. date: 7009
+.. nonce: rpJxY7
+.. section: Core and Builtins
+
+generators now have a ``gen.__name__`` attribute that equals
+``gen.gi_code.co_name``, like ``func.__name___`` that equals
+``func.func_code.co_name``.  The repr() of a generator now also contains
+this name.
+
+..
+
+.. bpo: 2831
+.. date: 7008
+.. nonce: Clokao
+.. section: Core and Builtins
+
+enumerate() now has a ``start`` argument.
+
+..
+
+.. bpo: 2801
+.. date: 7007
+.. nonce: mKH_h9
+.. section: Core and Builtins
+
+fix bug in the float.is_integer method where a ValueError was sometimes
+incorrectly raised.
+
+..
+
+.. bpo: 2790
+.. date: 7006
+.. nonce: XESeko
+.. section: Core and Builtins
+
+sys.flags was not properly exposing its bytes_warning attribute.
+
+..
+
+.. bpo: 2196
+.. date: 7005
+.. nonce: Bzc5vC
+.. section: Core and Builtins
+
+hasattr() now lets exceptions which do not inherit Exception
+(KeyboardInterrupt, and SystemExit) propagate instead of ignoring them.
+
+..
+
+.. bpo: 0
+.. date: 7004
+.. nonce: PBmDwc
+.. section: Core and Builtins
+
+Added checks for integer overflows, contributed by Google. Some are only
+available if asserts are left in the code, in cases where they can't be
+triggered from Python code.
+
+..
+
+.. bpo: 1179
+.. date: 7003
+.. nonce: ZiG6Oq
+.. section: Library
+
+[CVE-2007-4965] Integer overflow in imageop module.
+
+..
+
+.. bpo: 3116
+.. date: 7002
+.. nonce: A_baFS
+.. section: Library
+
+marshal.dumps() had quadratic behavior for strings > 32Mb.
+
+..
+
+.. bpo: 2138
+.. date: 7001
+.. nonce: 1v8Wds
+.. section: Library
+
+Add factorial() to the math module.
+
+..
+
+.. bpo: 0
+.. date: 7000
+.. nonce: Zg08xh
+.. section: Library
+
+The heapq module does comparisons using LT instead of LE.  This makes its
+implementation match that used by list.sort().
+
+..
+
+.. bpo: 2819
+.. date: 6999
+.. nonce: 8rJOqA
+.. section: Library
+
+add full-precision summation function to math module, based on Hettinger's
+ASPN Python Cookbook recipe.
+
+..
+
+.. bpo: 2592
+.. date: 6998
+.. nonce: dyYM9F
+.. section: Library
+
+delegate nb_index and the floor/truediv slots in weakref.proxy.
+
+..
+
+.. bpo: 0
+.. date: 6997
+.. nonce: 9pq1AU
+.. section: Library
+
+Support os.O_ASYNC and fcntl.FASYNC if the constants exist on the platform.
+
+..
+
+.. bpo: 0
+.. date: 6996
+.. nonce: xpuGyu
+.. section: Library
+
+Support for Windows 9x has been removed from the winsound module.
+
+..
+
+.. bpo: 0
+.. date: 6995
+.. nonce: QqGmIr
+.. section: Library
+
+bsddb module updated to version 4.7.3.
+http://www.jcea.es/programacion/pybsddb.htm#bsddb3-4.7.3. This code should
+be compatible with Python 3.0.
+
+..
+
+.. bpo: 2858
+.. date: 6994
+.. nonce: klmpfU
+.. section: Library
+
+Fix potential memory corruption when bsddb.db.DBEnv.lock_get and other
+bsddb.db object constructors raised an exception.
+
+..
+
+.. bpo: 2669
+.. date: 6993
+.. nonce: ThHCIr
+.. section: Library
+
+bsddb/__init__.py iteration no longer silently fails when the database has
+changed size during iteration.  It now raises a RuntimeError in the same
+manner as a dictionary.
+
+..
+
+.. bpo: 2870
+.. date: 6992
+.. nonce: dmu5w6
+.. section: Library
+
+cmathmodule.c compile error.
+
+..
+
+.. bpo: 0
+.. date: 6991
+.. nonce: F-3bCT
+.. section: Library
+
+Added a threading.Thread.ident property.
+
+..
+
+.. bpo: 0
+.. date: 6990
+.. nonce: eoz_IQ
+.. section: Library
+
+logging.config: Removed out-of-date comment in _install_handlers and used
+issubclass in place of equality comparison of classes.
+
+..
+
+.. bpo: 2722
+.. date: 6989
+.. nonce: wqgrWN
+.. section: Library
+
+Now the os.getcwd() supports very long path names.
+
+..
+
+.. bpo: 2888
+.. date: 6988
+.. nonce: gJe46M
+.. section: Library
+
+Fixed the behaviour of pprint when working with nested structures, to match
+the behaviour of 2.5 and 3.0 (now follows the common sense).
+
+..
+
+.. bpo: 1817
+.. date: 6987
+.. nonce: pPMpU3
+.. section: Library
+
+cgi now correctly handles the querystring on POST requests
+
+..
+
+.. bpo: 3136
+.. date: 6986
+.. nonce: h_BTKr
+.. section: Library
+
+fileConfig()'s disabling of old loggers is now conditional via an optional
+disable_existing_loggers parameter, but the default value is such that the
+old behaviour is preserved. Thanks to Leandro Lucarella for the patch.
+
+..
+
+.. bpo: 3126
+.. date: 6985
+.. nonce: fTafXl
+.. section: Library
+
+StreamHandler and FileHandler check before calling "flush" and "close" that
+the stream object has these, using hasattr (thanks to bobf for the patch).
+
+..
+
+.. bpo: 2912
+.. date: 6984
+.. nonce: eOMCRu
+.. section: Library
+
+platform.uname now tries to determine unknown information even if os.uname
+exists.
+
+..
+
+.. bpo: 0
+.. date: 6983
+.. nonce: suPcSI
+.. section: Library
+
+The rfc822 module has been deprecated for removal in 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6982
+.. nonce: UOZNCJ
+.. section: Library
+
+The mimetools module has been deprecated for removal in 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6981
+.. nonce: RqZ_5y
+.. section: Library
+
+The ctypes.byref function now takes an optional second parameter which
+specifies an offset in bytes for the constructed pointer-like object.
+
+..
+
+.. bpo: 0
+.. date: 6980
+.. nonce: oTWuUu
+.. section: Library
+
+Added the ast module.
+
+..
+
+.. bpo: 0
+.. date: 6979
+.. nonce: fHFiuS
+.. section: Library
+
+Added the multiprocessing module, PEP 371.
+
+..
+
+.. bpo: 0
+.. date: 6978
+.. nonce: nlfVuP
+.. section: Library
+
+Factored out the indentation cleaning from inspect.getdoc() into
+inspect.cleandoc() to ease standalone use.
+
+..
+
+.. bpo: 1798
+.. date: 6977
+.. nonce: AzgRaY
+.. section: Library
+
+Add ctypes calling convention that allows safe access to errno.
+
+..
+
+.. bpo: 2404
+.. date: 6976
+.. nonce: y3Vi2t
+.. section: Library
+
+ctypes objects support the new pep3118 buffer interface.
+
+..
+
+.. bpo: 2125
+.. date: 6975
+.. nonce: wZgsqd
+.. section: Library
+
+Add GetInteger and GetString methods for msilib.Record objects.
+
+..
+
+.. bpo: 2782
+.. date: 6974
+.. nonce: cDdM9Y
+.. section: Library
+
+The datetime module's strftime methods now accept unicode format strings
+just as time.strftime always has.
+
+..
+
+.. bpo: 0
+.. date: 6973
+.. nonce: lhIEH0
+.. section: Library
+
+The sgmllib and htmllib modules have been deprecated for removal in Python
+3.0.
+
+..
+
+.. bpo: 3011
+.. date: 6972
+.. nonce: 6bdKsn
+.. section: Library
+
+locale module alias table was updated to the latest version from the X.org
+locale.alias file.
+
+..
+
+.. bpo: 1797
+.. date: 6971
+.. nonce: q7se8Q
+.. section: Library
+
+ctypes NULL function pointers have a False boolean value now.
+
+..
+
+.. bpo: 2985
+.. date: 6970
+.. nonce: Lj8FT6
+.. section: Library
+
+Allow 64-bit integer responses (``<i8>``) in XMLRPC transfers.
+
+..
+
+.. bpo: 2877
+.. date: 6969
+.. nonce: DHx0Vp
+.. section: Library
+
+The UserString.MutableString class has been removed in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6968
+.. nonce: eAZNNA
+.. section: Library
+
+Do not close external file objects passed to tarfile.open(mode='w:bz2') when
+the TarFile is closed.
+
+..
+
+.. bpo: 2959
+.. date: 6967
+.. nonce: VfcUGd
+.. section: Library
+
+For consistency with other file-like objects, gzip's GzipFile.close() can
+now be called multiple times without raising an exception.
+
+..
+
+.. bpo: 1390
+.. date: 6966
+.. nonce: r5VD4K
+.. section: Library
+
+Raise ValueError in toxml when an invalid comment would otherwise be
+produced.
+
+..
+
+.. bpo: 2914
+.. date: 6965
+.. nonce: vFi4D6
+.. section: Library
+
+TimedRotatingFileHandler now takes an optional keyword argument "utc" to use
+UTC time rather than local time.
+
+..
+
+.. bpo: 2929
+.. date: 6964
+.. nonce: rN0khF
+.. section: Library
+
+TimedRotatingFileHandler was using the wrong path when deleting old log
+files (filename only instead of full path).
+
+..
+
+.. bpo: 1775025
+.. date: 6963
+.. nonce: 0zA_rX
+.. section: Library
+
+You can now specify zipfile members to open(), read() or extract() via a
+ZipInfo instance.  This allows handling duplicate filenames in zipfiles.
+
+..
+
+.. bpo: 961805
+.. date: 6962
+.. nonce: lic8H4
+.. section: Library
+
+Fix Text.edit_modified() in Tkinter.
+
+..
+
+.. bpo: 1793
+.. date: 6961
+.. nonce: uqwZq4
+.. section: Library
+
+Function ctypes.util.find_msvcrt() added that returns the name of the C
+runtime library that Python uses. ctypes.util.find_library(name) now call
+this function when name is 'm' or 'c'.
+
+..
+
+.. bpo: 0
+.. date: 6960
+.. nonce: TYfaoC
+.. section: Library
+
+The statvfs module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6959
+.. nonce: YxHVfd
+.. section: Library
+
+The sunaudiodev and SUNAUDIODEV modules have been deprecated for removal in
+Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6958
+.. nonce: xxpvg4
+.. section: Library
+
+The WAIT module from IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6957
+.. nonce: 2EEuVl
+.. section: Library
+
+The torgb module from IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6956
+.. nonce: DxcqyJ
+.. section: Library
+
+The SV module from IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6955
+.. nonce: T3Yn6K
+.. section: Library
+
+The readcd module from IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6954
+.. nonce: H9XINa
+.. section: Library
+
+The panelparser module from IRIX has been deprecated for removal in Python
+3.0.
+
+..
+
+.. bpo: 0
+.. date: 6953
+.. nonce: zVi2Qa
+.. section: Library
+
+The panel module from IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6952
+.. nonce: G7TA5T
+.. section: Library
+
+The jpeg module from IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6951
+.. nonce: mVA78R
+.. section: Library
+
+The IOCTL module from IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6950
+.. nonce: J4KyX6
+.. section: Library
+
+The IN module from IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6949
+.. nonce: Nuh6UM
+.. section: Library
+
+The imgfile module from IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6948
+.. nonce: UBseEw
+.. section: Library
+
+The GLWS module from IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6947
+.. nonce: xgzC-j
+.. section: Library
+
+The GET module from IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6946
+.. nonce: NgBwkl
+.. section: Library
+
+The fm module from IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6945
+.. nonce: 9kD1K-
+.. section: Library
+
+The FL, flp, and fl modules from IRIX have been deprecated for removal in
+Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6944
+.. nonce: AYoVJR
+.. section: Library
+
+The FILE module on IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6943
+.. nonce: CQ38ij
+.. section: Library
+
+The ERRNO module on IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6942
+.. nonce: R-9YLH
+.. section: Library
+
+The DEVICE, GL, gl, and cgen modules (which indirectly includes cgensupport)
+have been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6941
+.. nonce: dKOF2g
+.. section: Library
+
+The CL, CL_old, and cl modules for IRIX have been deprecated for removal in
+Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6940
+.. nonce: 5cFkYd
+.. section: Library
+
+The cdplayer module for IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6939
+.. nonce: 5y0yek
+.. section: Library
+
+The cddb module for IRIX has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6938
+.. nonce: 0pHLuS
+.. section: Library
+
+The cd and CD modules for IRIX have been deprecated for removal in Python
+3.0.
+
+..
+
+.. bpo: 0
+.. date: 6937
+.. nonce: eF0f6O
+.. section: Library
+
+The al and AL modules for IRIX have been deprecated for removal in Python
+3.0.
+
+..
+
+.. bpo: 1713041
+.. date: 6936
+.. nonce: JzsT_z
+.. section: Library
+
+fix pprint's handling of maximum depth.
+
+..
+
+.. bpo: 0
+.. date: 6935
+.. nonce: FpBuBP
+.. section: Library
+
+The timing module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6934
+.. nonce: Lz9Ysd
+.. section: Library
+
+The sv module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6933
+.. nonce: kwju7-
+.. section: Library
+
+The multifile module has been deprecated as per PEP 4.
+
+..
+
+.. bpo: 0
+.. date: 6932
+.. nonce: G-Cuj6
+.. section: Library
+
+The imageop module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 2250
+.. date: 6931
+.. nonce: v4HLiv
+.. section: Library
+
+Exceptions raised during evaluation of names in rlcompleter's
+``Completer.complete()`` method are now caught and ignored.
+
+..
+
+.. bpo: 2659
+.. date: 6930
+.. nonce: FuhwDb
+.. section: Library
+
+Added ``break_on_hyphens`` option to textwrap TextWrapper class.
+
+..
+
+.. bpo: 0
+.. date: 6929
+.. nonce: w8Xvgj
+.. section: Library
+
+The mhlib module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6928
+.. nonce: f4HWLF
+.. section: Library
+
+The linuxaudiodev module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6927
+.. nonce: O9UJsR
+.. section: Library
+
+The ihooks module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6926
+.. nonce: JFJhmk
+.. section: Library
+
+The fpformat module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6925
+.. nonce: BVxyeG
+.. section: Library
+
+The dl module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6924
+.. nonce: MCsyLJ
+.. section: Library
+
+The Canvas module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6923
+.. nonce: aVjhm5
+.. section: Library
+
+The compiler package has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6922
+.. nonce: R6-PB3
+.. section: Library
+
+The Bastion and rexec modules have been deprecated for removal in Python
+3.0.
+
+..
+
+.. bpo: 0
+.. date: 6921
+.. nonce: BvlchT
+.. section: Library
+
+The bsddb185 module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6920
+.. nonce: Lt4pJF
+.. section: Library
+
+The pure module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 2487
+.. date: 6919
+.. nonce: n2AhZO
+.. section: Library
+
+change the semantics of math.ldexp(x, n) when n is too large to fit in a C
+long.  ldexp(x, n) now returns a zero (with suitable sign) if n is large and
+negative; previously, it raised OverflowError.
+
+..
+
+.. bpo: 0
+.. date: 6918
+.. nonce: 6I_VH_
+.. section: Library
+
+The toaiff module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6917
+.. nonce: qWQme_
+.. section: Library
+
+The test.testall module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6916
+.. nonce: HPixGU
+.. section: Library
+
+The new module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6915
+.. nonce: sQ0aEE
+.. section: Library
+
+The user module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6914
+.. nonce: J-y7uq
+.. section: Library
+
+The stringold module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6913
+.. nonce: u1RhAc
+.. section: Library
+
+The mutex module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6912
+.. nonce: NlWeSy
+.. section: Library
+
+The imputil module has been deprecated for removal in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6911
+.. nonce: iI_4rp
+.. section: Library
+
+test.test_support.catch_warning() gained a 'record' argument.
+
+..
+
+.. bpo: 0
+.. date: 6910
+.. nonce: 0DtsL9
+.. section: Library
+
+os.path.walk is deprecated in favor of os.walk.
+
+..
+
+.. bpo: 0
+.. date: 6909
+.. nonce: MWVgy8
+.. section: Library
+
+pdb gained the "until" command.
+
+..
+
+.. bpo: 0
+.. date: 6908
+.. nonce: R978mb
+.. section: Library
+
+The Mac Modules (including Carbon) have been deprecated for removal in
+Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 6907
+.. nonce: 2hRfXS
+.. section: Library
+
+Library: on MacOS X you can now set ``ARCHFLAGS`` in the shell environment
+to control the '-arch' flags that are used to build an extension. This was
+added for compatibility with Apple's build of Python.
+
+..
+
+.. bpo: 0
+.. date: 6906
+.. nonce: HjodSi
+.. section: Library
+
+The bundled OSX-specific copy of libbffi is now in sync with the version
+shipped with PyObjC 2.0 and includes support for x86_64 and ppc64 platforms.
+
+..
+
+.. bpo: 0
+.. date: 6905
+.. nonce: iTp3z3
+.. section: Library
+
+The threading module gained aliases for names that will be removed in the
+3.x series.
+
+..
+
+.. bpo: 0
+.. date: 6904
+.. nonce: 0CBHNl
+.. section: Build
+
+The Windows installer now includes Tk 8.5, bzip2 1.0.5, and SQLite 3.5.9.
+
+..
+
+.. bpo: 1722225
+.. date: 6903
+.. nonce: j9OSPy
+.. section: Build
+
+Support QNX 6.
+
+..
+
+.. bpo: 0
+.. date: 6902
+.. nonce: CBo5JG
+.. section: Build
+
+``Lib/lib-old`` is now added to sys.path.
+
+..
+
+.. bpo: 0
+.. date: 6901
+.. nonce: sehDt_
+.. section: Build
+
+On MacOS X it is now possible to install the framework in 64-bit mode or
+even as a 4-way universal binary (that is, PPC, i386, PPC64 and x86_64
+support in one binary).
+
+This is controlled by the configure argument ``--with-universal-archs``:
+
+- ``--with-universal-archs=all``: install 4-way universal
+
+- ``--with-universal-archs=32-bit``: install 2-way universal, 32-bit (the
+default)
+
+- ``--with-universal-archs=64-bit``: install 2-way universal, 64-bit
+
+This option should be used in combination with ``--enable-universalsdk=``.
+
+NOTE: 64-bit and 4-way builds are only suppported on Mac OS X 10.5 (or
+later).
+
+..
+
+.. bpo: 0
+.. date: 6900
+.. nonce: dWsqLp
+.. section: C API
+
+Add ``PyType_Modified()`` as a public API to clear the type cache.
+
+..
+
+.. bpo: 0
+.. date: 6899
+.. nonce: kBP7ih
+.. section: C API
+
+The PyBytes functions have been renamed to PyByteArray.
+
+..
+
+.. bpo: 0
+.. date: 6898
+.. nonce: Ab5wDH
+.. section: C API
+
+The PyString functions have been renamed to PyBytes. A batch of defines were
+added so that the linker still sees the original PyString names.
diff --git a/Misc/NEWS.d/2.6b2.rst b/Misc/NEWS.d/2.6b2.rst
new file mode 100644
index 0000000..d4e77af
--- /dev/null
+++ b/Misc/NEWS.d/2.6b2.rst
@@ -0,0 +1,424 @@
+.. bpo: 3156
+.. date: 7059
+.. nonce: hdm5KM
+.. release date: 17-Jul-2008
+.. section: Core and Builtins
+
+Fix inconsistent behavior of the bytearray type: all its methods now allow
+for items objects that can be converted to an integer using
+operator.index().
+
+..
+
+.. bpo: 3360
+.. date: 7058
+.. nonce: IrjlMc
+.. section: Core and Builtins
+
+Fix incorrect parsing of '020000000000.0', which produced a ValueError
+instead of giving the correct float.
+
+..
+
+.. bpo: 3083
+.. date: 7057
+.. nonce: -lGbUY
+.. section: Core and Builtins
+
+Add alternate (#) formatting for bin, oct, hex output for str.format().
+This adds the prefix 0b, 0o, or 0x, respectively.
+
+..
+
+.. bpo: 3008
+.. date: 7056
+.. nonce: YsZO12
+.. section: Core and Builtins
+
+the float type has a new instance method 'float.hex' and a new class method
+'float.fromhex' to convert floating-point numbers to and from hexadecimal
+strings, respectively.
+
+..
+
+.. bpo: 2235
+.. date: 7055
+.. nonce: 8Brs_N
+.. section: Core and Builtins
+
+__hash__ is once again inherited by default. To allow collections.Hashable
+to remain meaningful in the presence of the default hash implementation
+(object.__hash__), it is now possible to explicit block inheritance of hash
+by setting __hash__=None at the Python level, or
+tp_hash=PyObject_HashNotImplemented at the C level.
+
+..
+
+.. bpo: 3221
+.. date: 7054
+.. nonce: -0HAEB
+.. section: Core and Builtins
+
+Issue a RuntimeWarning instead of raising SystemError if the parent module
+cannot be found while performing an absolute import. This means that an
+incorrectly defined __package__ attribute will now only prevent relative
+imports in that module rather than causing all imports from that module to
+fail.
+
+..
+
+.. bpo: 2517
+.. date: 7053
+.. nonce: YHwfKp
+.. section: Core and Builtins
+
+Allow unicode messages in Exceptions again by correctly bypassing the
+instance dictionary when looking up __unicode__ on new-style classes.
+
+..
+
+.. bpo: 3242
+.. date: 7052
+.. nonce: uFneM1
+.. section: Core and Builtins
+
+Fix a crash inside the print statement, if sys.stdout is set to a custom
+object whose write() method happens to install another file in sys.stdout.
+
+..
+
+.. bpo: 3088
+.. date: 7051
+.. nonce: bSHlNi
+.. section: Core and Builtins
+
+Corrected a race condition in classes derived from threading.local: the
+first member set by a thread could be saved in another thread's dictionary.
+
+..
+
+.. bpo: 3004
+.. date: 7050
+.. nonce: P4g_vU
+.. section: Core and Builtins
+
+Minor change to slice.indices(): the start and stop arguments are now
+treated identically, making the behaviour easier to describe and understand.
+For example, slice(None, -10, 1).indices(9) now returns (0, 0, 1) instead of
+(0, -1, 1), and slice(None, 10, -1).indices(10) returns (9, 9, -1) instead
+of (9, 10, -1).
+
+..
+
+.. bpo: 3219
+.. date: 7049
+.. nonce: 6awi9c
+.. section: Core and Builtins
+
+Calling a function with repeated keyword arguments, f(a=2, a=23), would not
+cause a syntax error.  This was a regression from 2.4 caused by the switch
+to the new compiler.
+
+..
+
+.. bpo: 2862
+.. date: 7048
+.. nonce: R-Avyy
+.. section: Core and Builtins
+
+Make int and float freelist management consistent with other freelists.
+Changes their CompactFreeList apis into ClearFreeList apis and calls them
+via gc.collect().
+
+..
+
+.. bpo: 3554
+.. date: 7047
+.. nonce: _5DO8B
+.. section: Library
+
+ctypes.string_at and ctypes.wstring_at did call Python api functions without
+holding the GIL, which could lead to a fatal error when they failed.
+
+..
+
+.. bpo: 799428
+.. date: 7046
+.. nonce: kA7sJS
+.. section: Library
+
+Fix Tkinter.Misc._nametowidget to unwrap Tcl command objects.
+
+..
+
+.. bpo: 3395
+.. date: 7045
+.. nonce: j6q9M6
+.. section: Library
+
+fix reference in test_multiprocessing to old debugInfo method
+
+..
+
+.. bpo: 3312
+.. date: 7044
+.. nonce: pGNZVY
+.. section: Library
+
+Fix two crashes in sqlite3.
+
+..
+
+.. bpo: 1608818
+.. date: 7043
+.. nonce: FtvGGk
+.. section: Library
+
+Fix misbehavior in os.listdir() if readdir() fails.
+
+..
+
+.. bpo: 3125
+.. date: 7042
+.. nonce: fEAPxY
+.. section: Library
+
+Remove copy_reg in multiprocessing and replace it with
+ForkingPickler.register() to resolve conflict with ctypes.
+
+..
+
+.. bpo: 3090
+.. date: 7041
+.. nonce: Dl5Ar4
+.. section: Library
+
+Fixed ARCHFLAGS parsing on OS/X
+
+..
+
+.. bpo: 3313
+.. date: 7040
+.. nonce: wvm6HP
+.. section: Library
+
+Fixed a crash when a failed dlopen() call does not set a valid dlerror()
+message.
+
+..
+
+.. bpo: 3258
+.. date: 7039
+.. nonce: JBBmgi
+.. section: Library
+
+Fixed a crash when a ctypes POINTER type to an incomplete structure was
+created.
+
+..
+
+.. bpo: 3339
+.. date: 7038
+.. nonce: L4Fn9f
+.. section: Library
+
+dummy_thread.acquire() should not return None.
+
+..
+
+.. bpo: 3285
+.. date: 7037
+.. nonce: 9B3FF_
+.. section: Library
+
+Fractions from_float() and from_decimal() accept Integral arguments.
+
+..
+
+.. bpo: 3301
+.. date: 7036
+.. nonce: 063oaQ
+.. section: Library
+
+Bisect module behaved badly when lo was negative.
+
+..
+
+.. bpo: 839496
+.. date: 7035
+.. nonce: pl02h-
+.. section: Library
+
+SimpleHTTPServer used to open text files in text mode. This is both
+unnecessary (HTTP allows text content to be sent in several forms) and wrong
+because the actual transmitted size could differ from the content-length.
+The problem had been corrected in the 2.4 branch, but never merged into
+trunk.
+
+..
+
+.. bpo: 2663
+.. date: 7034
+.. nonce: j037TB
+.. section: Library
+
+add filtering capability to shutil.copytree().
+
+..
+
+.. bpo: 1622
+.. date: 7033
+.. nonce: Yi7nBf
+.. section: Library
+
+Correct interpretation of various ZIP header fields.
+
+..
+
+.. bpo: 1526
+.. date: 7032
+.. nonce: GTmFzB
+.. section: Library
+
+Allow more than 64k files to be added to Zip64 file.
+
+..
+
+.. bpo: 1746
+.. date: 7031
+.. nonce: 9HT8Dq
+.. section: Library
+
+Correct handling of zipfile archive comments (previously archives with
+comments over 4k were flagged as invalid). Allow writing Zip files with
+archives by setting the 'comment' attribute of a ZipFile.
+
+..
+
+.. bpo: 449227
+.. date: 7030
+.. nonce: 5LsZeI
+.. section: Library
+
+The rlcompleter module now adds "(" to callable objects when completed.
+
+..
+
+.. bpo: 3190
+.. date: 7029
+.. nonce: VtDnou
+.. section: Library
+
+Pydoc now hides the automatic module attribute __package__ (the handling is
+now the same as that of other special attributes like __name__).
+
+..
+
+.. bpo: 2885
+.. date: 7028
+.. nonce: uiHEVr
+.. section: Library
+
+The urllib.urlopen() function has been deprecated for removal in Python 3.0
+in favor of urllib2.urlopen().
+
+..
+
+.. bpo: 2113
+.. date: 7027
+.. nonce: bYWyrt
+.. section: Library
+
+Fix error in subprocess.Popen if the select system call is interrupted by a
+signal.
+
+..
+
+.. bpo: 3309
+.. date: 7026
+.. nonce: Y7DVRF
+.. section: Library
+
+Fix bz2.BZFile iterator to release its internal lock properly when raising
+an exception due to the bz2file being closed. Prevents a deadlock.
+
+..
+
+.. bpo: 3094
+.. date: 7025
+.. nonce: DuUvkr
+.. section: Library
+
+httplib.HTTPSConnection Host: headers no longer include the redundant ":443"
+port number designation when the connection is using the default https port
+(443).
+
+..
+
+.. bpo: 874900
+.. date: 7024
+.. nonce: O4a6qo
+.. section: Library
+
+after an os.fork() call the threading module state is cleaned up in the
+child process to prevent deadlock and report proper thread counts if the new
+process uses the threading module.
+
+..
+
+.. bpo: 0
+.. date: 7023
+.. nonce: qnkMJb
+.. section: Tests
+
+test.test_support.catch_warning now keeps track of all warnings it sees and
+is now better documented. Explicit unit tests for this context manager have
+been added to test_warnings.
+
+..
+
+.. bpo: 3215
+.. date: 7022
+.. nonce: JA6IUI
+.. section: Build
+
+Build sqlite3 as sqlite3.dll, not sqlite3.pyd.
+
+..
+
+.. bpo: 0
+.. date: 7021
+.. nonce: A25wbC
+.. section: Documentation
+
+Document that robotparser has been renamed to urllib.robotparser in Python
+3.0.
+
+..
+
+.. bpo: 0
+.. date: 7020
+.. nonce: k24KZW
+.. section: Documentation
+
+Document that urlparse has been renamed to urllib.parse in Python 3.0.
+
+..
+
+.. bpo: 0
+.. date: 7019
+.. nonce: wtGKB7
+.. section: Documentation
+
+Document that urllib2 is split across multiple modules and renamed in Python
+3.0.
+
+..
+
+.. bpo: 0
+.. date: 7018
+.. nonce: kWfaYS
+.. section: Documentation
+
+Document that urllib is split across multiple modules and renamed in Python
+3.0.
diff --git a/Misc/NEWS.d/2.6b3.rst b/Misc/NEWS.d/2.6b3.rst
new file mode 100644
index 0000000..6b23d6c
--- /dev/null
+++ b/Misc/NEWS.d/2.6b3.rst
@@ -0,0 +1,531 @@
+.. bpo: 1878
+.. date: 7111
+.. nonce: exCmjh
+.. release date: 20-Aug-2008
+.. section: Core and Builtins
+
+Remove Py_TPFLAGS_HAVE_VERSION_TAG from Py_TPFLAGS_DEFAULT when not building
+the core.  This means 3rd party extensions do not automatically benefit from
+the class attribute cache; they will have to explicitly add
+Py_TPFLAGS_HAVE_VERSION_TAG to their tp_flags field if they care.  This is a
+backwards compatibility feature; in 3.0, all types will use the cache by
+default.
+
+..
+
+.. bpo: 0
+.. date: 7110
+.. nonce: 7crJgG
+.. section: Core and Builtins
+
+Keyword arguments can now follow starred arguments. (``f(a, *args,
+keyword=23)`` is now valid syntax.)
+
+..
+
+.. bpo: 0
+.. date: 7109
+.. nonce: OfzhCP
+.. section: Core and Builtins
+
+ctypes function pointers that are COM methods have a boolean True value
+again.
+
+..
+
+.. bpo: 3139
+.. date: 7108
+.. nonce: j4FT95
+.. section: Core and Builtins
+
+Make buffer-interface thread-safe wrt. PyArg_ParseTuple, by denying s# to
+parse objects that have a releasebuffer procedure, and introducing s*.
+
+..
+
+.. bpo: 3537
+.. date: 7107
+.. nonce: Jd1RRZ
+.. section: Core and Builtins
+
+Fix an assertion failure when an empty but presized dict object was stored
+in the freelist.
+
+..
+
+.. bpo: 1481296
+.. date: 7106
+.. nonce: 9MXKTf
+.. section: Core and Builtins
+
+Make long(float('nan')) and int(float('nan')) raise ValueError consistently
+across platforms.
+
+..
+
+.. bpo: 3479
+.. date: 7105
+.. nonce: 2x4rkT
+.. section: Core and Builtins
+
+On platforms where sizeof(int) is smaller than sizeof(long) (64bit Unix, for
+example), unichr() would truncate its argument and return u'\x00' for
+unichr(2**32). Now it properly raises an OverflowError.
+
+..
+
+.. bpo: 0
+.. date: 7104
+.. nonce: dpio6h
+.. section: Core and Builtins
+
+Apply security patches from Apple.
+
+..
+
+.. bpo: 2542
+.. date: 7103
+.. nonce: OGrPLh
+.. section: Core and Builtins
+
+Now that issubclass() may call arbitrary code, ensure that
+PyErr_ExceptionMatches returns 0 when an exception occurs there.
+
+..
+
+.. bpo: 1819
+.. date: 7102
+.. nonce: LzrD36
+.. section: Core and Builtins
+
+function calls with several named parameters are now on average 35% faster
+(as measured by pybench).
+
+..
+
+.. bpo: 2378
+.. date: 7101
+.. nonce: jnJN2_
+.. section: Core and Builtins
+
+An unexpected UnboundLocalError or NameError could appear when the python
+debugger steps into a class statement: the free variables (local variables
+defined in an outer scope) would be deleted from the outer scope.
+
+..
+
+.. bpo: 2620
+.. date: 7100
+.. nonce: g7NRZZ
+.. section: Core and Builtins
+
+Overflow checking when allocating or reallocating memory was not always
+being done properly in some python types and extension modules.
+PyMem_MALLOC, PyMem_REALLOC, PyMem_NEW and PyMem_RESIZE have all been
+updated to perform better checks and places in the code that would
+previously leak memory on the error path when such an allocation failed have
+been fixed.
+
+..
+
+.. bpo: 3612
+.. date: 7099
+.. nonce: RX3nFS
+.. section: Library
+
+Added some missing basic types in ctypes.wintypes.
+
+..
+
+.. bpo: 0
+.. date: 7098
+.. nonce: 6arfb-
+.. section: Library
+
+The methods ``is_in_tuple()``, ``is_vararg()``, and ``is_keywordarg()`` of
+symtable.Symbol have been deprecated for removal in 3.0 and the next
+release.
+
+..
+
+.. bpo: 2234
+.. date: 7097
+.. nonce: ZY7qAp
+.. section: Library
+
+distutils failed for some versions of the cygwin compiler. The version
+reported by these tools does not necessarily follow the python version
+numbering scheme, so the module is less strict when parsing it.
+
+..
+
+.. bpo: 2235
+.. date: 7096
+.. nonce: lZ4uDf
+.. section: Library
+
+Added Py3k warnings for types which will become unhashable under the
+stricter __hash__ inheritance rules in 3.0. Several types which did not meet
+the rules for hash invariants and were already unhashable in 3.0 have now
+been explicitly flagged as unhashable in 2.6 as well (collections.Mapping,
+collections.Set, unittest.TestSuite, xml.dom.minidom.NamedNodeMap,
+numbers.Number, UserList.UserList)
+
+..
+
+.. bpo: 0
+.. date: 7095
+.. nonce: njv0Yv
+.. section: Library
+
+Update __all__ for cookielib, csv, os, urllib2, and weakref to include
+things imported into the module but exposed as part of the module's API.
+
+..
+
+.. bpo: 0
+.. date: 7094
+.. nonce: IOULx3
+.. section: Library
+
+Remove an unneeded import of abc.ABCMeta from 'inspect'.
+
+..
+
+.. bpo: 0
+.. date: 7093
+.. nonce: ui1bpi
+.. section: Library
+
+Remove unneeded imports of 'sys' and 'warnings' from 'io'.
+
+..
+
+.. bpo: 0
+.. date: 7092
+.. nonce: 5UlHtd
+.. section: Library
+
+Remove unneeded imports of 'warnings' from shelve, filecmp, and
+dummy_thread.
+
+..
+
+.. bpo: 3575
+.. date: 7091
+.. nonce: f0B44V
+.. section: Library
+
+Incremental decoder's decode function now takes bytearray by using 's*'
+instead of 't#'.
+
+..
+
+.. bpo: 2222
+.. date: 7090
+.. nonce: 76LS-7
+.. section: Library
+
+Fixed reference leak when occurred os.rename() fails unicode conversion on
+2nd parameter. (windows only)
+
+..
+
+.. bpo: 2464
+.. date: 7089
+.. nonce: Hm7gBN
+.. section: Library
+
+urllib2 now supports a malformation in the URL received in a redirect.
+
+..
+
+.. bpo: 0
+.. date: 7088
+.. nonce: 1-8Grp
+.. section: Library
+
+Silence the DeprecationWarning raised when importing mimetools in
+BaseHTTPServer, cgi (and rfc822), httplib.
+
+..
+
+.. bpo: 2776
+.. date: 7087
+.. nonce: pcfDP0
+.. section: Library
+
+fixed small issue when handling a URL with double slash after a 302 response
+in the case of not going through a proxy.
+
+..
+
+.. bpo: 2676
+.. date: 7086
+.. nonce: muz1Bh
+.. section: Library
+
+in the email package, content-type parsing was hanging on pathological input
+because of quadratic or exponential behaviour of a regular expression.
+
+..
+
+.. bpo: 3476
+.. date: 7085
+.. nonce: Gdp5Hg
+.. section: Library
+
+binary buffered reading through the new "io" library is now thread-safe.
+
+..
+
+.. bpo: 0
+.. date: 7084
+.. nonce: 4jao1V
+.. section: Library
+
+Silence the DeprecationWarning of rfc822 when it is imported by mimetools
+since mimetools itself is deprecated. Because modules are cached, all
+subsequent imports of rfc822 will not raise a visible DeprecationWarning.
+
+..
+
+.. bpo: 3134
+.. date: 7083
+.. nonce: sGPHeo
+.. section: Library
+
+shutil referenced undefined WindowsError symbol.
+
+..
+
+.. bpo: 1342811
+.. date: 7082
+.. nonce: Mf5TLp
+.. section: Library
+
+Fix leak in Tkinter.Menu.delete. Commands associated to menu entries were
+not deleted.
+
+..
+
+.. bpo: 0
+.. date: 7081
+.. nonce: XIC5LX
+.. section: Library
+
+Copied the implementation of reduce() to _functools.reduce() to have a
+version that did not raise a DeprecationWarning under -3.
+
+..
+
+.. bpo: 3205
+.. date: 7080
+.. nonce: RcrD2G
+.. section: Library
+
+When iterating over a BZ2File fails allocating memory, raise a MemoryError
+rather than silently stop the iteration.
+
+..
+
+.. bpo: 3487
+.. date: 7079
+.. nonce: LoL0Xp
+.. section: Library
+
+sre "bytecode" validator.  Passing invalid "re-bytecode" to _sre.compile()
+will now be rejected.  This should not affect anybody since the re.compile()
+function never generates invalid re-bytecode.
+
+..
+
+.. bpo: 3436
+.. date: 7078
+.. nonce: H10Gz5
+.. section: Library
+
+Make csv.DictReader's fieldnames attribute a property so that upon first
+access it can be automatically initialized from the csv file if it wasn't
+initialized during instantiation.
+
+..
+
+.. bpo: 2338
+.. date: 7077
+.. nonce: jB97v8
+.. section: Library
+
+Create imp.reload() to help with transitioning to Python 3.0 as the reload()
+built-in has been removed.
+
+..
+
+.. bpo: 0
+.. date: 7076
+.. nonce: YAmZW-
+.. section: Library
+
+Changed code in the following modules/packages to remove warnings raised
+while running under the ``-3`` flag: aifc, asynchat, asyncore, bdb, bsddb,
+ConfigParser, cookielib, csv, difflib, distutils, DocXMLRPCServer, email,
+filecmp, fileinput, inspect, logging, modulefinder, pdb, pickle, profile,
+pstats, pydoc, re, rlcompleter, SimpleXMLRPCServer, shelve, socket,
+subprocess, sqlite3, tarfile, Tkinter, test.test_support, textwrap,
+threading, tokenize, traceback, urlparse, wsgiref, xml, xmlrpclib.
+
+..
+
+.. bpo: 3039
+.. date: 7075
+.. nonce: 6106lp
+.. section: Library
+
+Fix tarfile.TarFileCompat.writestr() which always raised an AttributeError.
+
+..
+
+.. bpo: 2523
+.. date: 7074
+.. nonce: F9osM5
+.. section: Library
+
+Fix quadratic behaviour when read()ing a binary file without asking for a
+specific length. This problem only affected files opened using the new "io"
+module, not the built-in open() function.
+
+..
+
+.. bpo: 3449
+.. date: 7073
+.. nonce: HIJRJS
+.. section: Library
+
+Update decimal module to use most recent specification (v. 1.68) and tests
+(v. 2.58) from IBM.
+
+..
+
+.. bpo: 3437
+.. date: 7072
+.. nonce: mFS0ML
+.. section: Library
+
+Bug fix in robotparser parsing of Allow: lines.
+
+..
+
+.. bpo: 1592
+.. date: 7071
+.. nonce: zq1SOI
+.. section: Library
+
+Improve error reporting when operations are attempted on a closed shelf.
+
+..
+
+.. bpo: 0
+.. date: 7070
+.. nonce: q6AI_C
+.. section: Library
+
+Deprecate the "ast" parser function aliases.
+
+..
+
+.. bpo: 3120
+.. date: 7069
+.. nonce: x-kAFj
+.. section: Library
+
+On 64-bit Windows the subprocess module was truncating handles.
+
+..
+
+.. bpo: 3303
+.. date: 7068
+.. nonce: MGj8zT
+.. section: Library
+
+Fix a crash in locale.strcoll() when calling it with invalid arguments.
+
+..
+
+.. bpo: 3302
+.. date: 7067
+.. nonce: qnZ5Ic
+.. section: Library
+
+Fix several crashes when calling locale's gettext functions with None
+arguments.
+
+..
+
+.. bpo: 3389
+.. date: 7066
+.. nonce: Dhf3EA
+.. section: Library
+
+Allow resolving dotted names for handlers in logging configuration files.
+
+..
+
+.. bpo: 0
+.. date: 7065
+.. nonce: wtYP5i
+.. section: Library
+
+Deprecate the sunaudio module for removal in Python 3.0.
+
+..
+
+.. bpo: 3394
+.. date: 7064
+.. nonce: PDdapW
+.. section: Library
+
+zipfile.writestr sets external attributes when passed a file name rather
+than a ZipInfo instance, so files are extracted with mode 0600 rather than
+000 under Unix.
+
+..
+
+.. bpo: 1857
+.. date: 7063
+.. nonce: VLu5_h
+.. section: Library
+
+subprocess.Popen.poll gained an additional _deadstate keyword argument in
+python 2.5, this broke code that subclassed Popen to include its own poll
+method.  Fixed my moving _deadstate to an _internal_poll method.
+
+..
+
+.. bpo: 0
+.. date: 7062
+.. nonce: y_hE4z
+.. section: Build
+
+Generate the PatternGrammar pickle during "make install".
+
+..
+
+.. bpo: 2235
+.. date: 7061
+.. nonce: BMunQV
+.. section: Documentation
+
+the C API function PyObject_HashNotImplemented and its interaction with the
+tp_hash slot (added in 2.6b2) are now documented
+
+..
+
+.. bpo: 643841
+.. date: 7060
+.. nonce: Dc77Ec
+.. section: Documentation
+
+The language reference now provides more detailed coverage of the lookup
+process for special methods. The disclaimers regarding lack of coverage of
+new-style classes have also been removed, since the coverage is now fairly
+reasonable.
diff --git a/Misc/NEWS.d/2.6rc1.rst b/Misc/NEWS.d/2.6rc1.rst
new file mode 100644
index 0000000..8555980
--- /dev/null
+++ b/Misc/NEWS.d/2.6rc1.rst
@@ -0,0 +1,517 @@
+.. bpo: 3642
+.. date: 7164
+.. nonce: TraQw9
+.. release date: 12-Sep-2008
+.. section: Core and Builtins
+
+Suppress warning in obmalloc when size_t is larger than uint.
+
+..
+
+.. bpo: 3743
+.. date: 7163
+.. nonce: _AUYYI
+.. section: Core and Builtins
+
+In a few places, PY_FORMAT_SIZE_T was incorrectly used with
+PyString_FromFormat or PyErr_Format to display size_t values. The macro
+PY_FORMAT_SIZE_T is designed to select the correct format for the OS
+``printf`` function, whereas PyString_FromFormat has an independent
+implementation and uses "%zd" on all platforms for size_t values. This makes
+a difference on win64, where ``printf`` needs "%Id" to display 64bit values.
+
+..
+
+.. bpo: 3634
+.. date: 7162
+.. nonce: q1zzTV
+.. section: Core and Builtins
+
+_weakref.ref(Exception).__init__() gave invalid return value on error.
+
+..
+
+.. bpo: 3777
+.. date: 7161
+.. nonce: NkvE9K
+.. section: Core and Builtins
+
+long() applied to a float object now always return a long object; previously
+an int would be returned for small values. the __long__ method is allowed to
+return either an int or a long, but the behaviour of float objects should
+not change to respect backward compatibility.
+
+..
+
+.. bpo: 3751
+.. date: 7160
+.. nonce: afWsF3
+.. section: Core and Builtins
+
+str.rpartition would perform a left-partition when called with a unicode
+argument.
+
+..
+
+.. bpo: 3683
+.. date: 7159
+.. nonce: CbyWTH
+.. section: Core and Builtins
+
+Fix compilation when --without-threads is given.
+
+..
+
+.. bpo: 3668
+.. date: 7158
+.. nonce: y5pFso
+.. section: Core and Builtins
+
+Fix a memory leak with the "s*" argument parser in PyArg_ParseTuple and
+friends, which occurred when the argument for "s*" was correctly parsed but
+parsing of subsequent arguments failed.
+
+..
+
+.. bpo: 2534
+.. date: 7157
+.. nonce: ZzJgOR
+.. section: Core and Builtins
+
+speed up isinstance() and issubclass() by 50-70%, so as to match Python 2.5
+speed despite the __instancecheck__ / __subclasscheck__ mechanism. In the
+process, fix a bug where isinstance() and issubclass(), when given a tuple
+of classes as second argument, were looking up __instancecheck__ /
+__subclasscheck__ on the tuple rather than on each type object.
+
+..
+
+.. bpo: 0
+.. date: 7156
+.. nonce: IOhEYG
+.. section: Core and Builtins
+
+Fix crashes on memory allocation failure found with failmalloc.
+
+..
+
+.. bpo: 0
+.. date: 7155
+.. nonce: 7fUtnU
+.. section: Core and Builtins
+
+Fix memory leaks found with valgrind and update suppressions file.
+
+..
+
+.. bpo: 0
+.. date: 7154
+.. nonce: C2iKX_
+.. section: Core and Builtins
+
+Fix compiler warnings in opt mode which would lead to invalid memory reads.
+
+..
+
+.. bpo: 0
+.. date: 7153
+.. nonce: F8qIAG
+.. section: Core and Builtins
+
+Fix problem using wrong name in decimal module reported by pychecker.
+
+..
+
+.. bpo: 0
+.. date: 7152
+.. nonce: 9G7-79
+.. section: Core and Builtins
+
+Silenced another compiler warning about a used but not defined function
+'stringlib_contains_obj'.
+
+..
+
+.. bpo: 0
+.. date: 7151
+.. nonce: cL5FNH
+.. section: Core and Builtins
+
+Added warnings on the use of ``__getslice__``, ``__setslice__``, or
+``__delslice__``.
+
+..
+
+.. bpo: 3678
+.. date: 7150
+.. nonce: tSSebH
+.. section: Core and Builtins
+
+Correctly pass LDFLAGS and LDLAST to the linker on shared library targets in
+the Makefile.
+
+..
+
+.. bpo: 1204
+.. date: 7149
+.. nonce: 9IuIp4
+.. section: Core and Builtins
+
+The configure script now tests for additional libraries that may be required
+when linking against readline.  This fixes issues with x86_64 builds on some
+platforms (a few Linux flavors and OpenBSD).
+
+..
+
+.. bpo: 0
+.. date: 7148
+.. nonce: Amo-aR
+.. section: C API
+
+Aliased PyObject_Bytes to PyObject_Str.
+
+..
+
+.. bpo: 3640
+.. date: 7147
+.. nonce: wZzbae
+.. section: Library
+
+Pickling a list or a dict uses less local variables, to reduce stack usage
+in the case of deeply nested objects.
+
+..
+
+.. bpo: 3629
+.. date: 7146
+.. nonce: 2q6K2c
+.. section: Library
+
+Fix sre "bytecode" validator for an end case.
+
+..
+
+.. bpo: 3811
+.. date: 7145
+.. nonce: 1qgQ9c
+.. section: Library
+
+The Unicode database was updated to 5.1.
+
+..
+
+.. bpo: 3781
+.. date: 7144
+.. nonce: HYW5OU
+.. section: Library
+
+Further warnings.catch_warnings() cleanup to prevent silent misbehaviour
+when a single instance is nested in multiple with statements, or when the
+methods are invoked in the wrong order.
+
+..
+
+.. bpo: 3809
+.. date: 7143
+.. nonce: 2A-aqP
+.. section: Library
+
+Fixed spurious 'test.blah' file left behind by test_logging.
+
+..
+
+.. bpo: 3781
+.. date: 7142
+.. nonce: jpkn0I
+.. section: Library
+
+Clean up the API for warnings.catch_warnings() by having it return a list or
+None rather than a custom object.
+
+..
+
+.. bpo: 1638033
+.. date: 7141
+.. nonce: kT2UVI
+.. section: Library
+
+Cookie.Morsel gained the httponly attribute.
+
+..
+
+.. bpo: 3535
+.. date: 7140
+.. nonce: dxRVxE
+.. section: Library
+
+zipfile couldn't read some zip files larger than 2GB.
+
+..
+
+.. bpo: 3776
+.. date: 7139
+.. nonce: Ct7r55
+.. section: Library
+
+Deprecate the bsddb package for removal in 3.0.
+
+..
+
+.. bpo: 3762
+.. date: 7138
+.. nonce: R3t7Yb
+.. section: Library
+
+platform.architecture() fails if python is lanched via its symbolic link.
+
+..
+
+.. bpo: 3772
+.. date: 7137
+.. nonce: 9RUdoE
+.. section: Library
+
+Fixed regression problem in StreamHandler.emit().
+
+..
+
+.. bpo: 600362
+.. date: 7136
+.. nonce: bb-Gpk
+.. section: Library
+
+Relocated parse_qs() and parse_qsl(), from the cgi module to the urlparse
+one.  Added a PendingDeprecationWarning in the old module, it will be
+deprecated in the future.
+
+..
+
+.. bpo: 2562
+.. date: 7135
+.. nonce: gvBsX4
+.. section: Library
+
+Fix distutils PKG-INFO writing logic to allow having non-ascii characters
+and Unicode in setup.py meta-data.
+
+..
+
+.. bpo: 3726
+.. date: 7134
+.. nonce: oNy3vR
+.. section: Library
+
+Allow spaces in separators in logging configuration files.
+
+..
+
+.. bpo: 3719
+.. date: 7133
+.. nonce: vt_7GX
+.. section: Library
+
+platform.architecture() fails if there are spaces in the path to the Python
+binary.
+
+..
+
+.. bpo: 3602
+.. date: 7132
+.. nonce: SFNmF7
+.. section: Library
+
+Moved test.test_support.catch_warning() to warnings.catch_warnings() along
+with some API cleanup. Expanding the tests for catch_warnings() also led to
+an improvement in the raising of a DeprecationWarning related to
+warnings.warn_explicit().
+
+..
+
+.. bpo: 0
+.. date: 7131
+.. nonce: Fxi-Xv
+.. section: Library
+
+The deprecation warnings for the old camelCase threading API were removed.
+
+..
+
+.. bpo: 0
+.. date: 7130
+.. nonce: _Wmj88
+.. section: Library
+
+logging: fixed lack of use of encoding attribute specified on a stream.
+
+..
+
+.. bpo: 0
+.. date: 7129
+.. nonce: yON-CX
+.. section: Library
+
+Silenced a trivial compiler warning in the sqlite module.
+
+..
+
+.. bpo: 0
+.. date: 7128
+.. nonce: UdFFop
+.. section: Library
+
+Fixed two format strings in the _collections module.
+
+..
+
+.. bpo: 3703
+.. date: 7127
+.. nonce: JVWmi4
+.. section: Library
+
+_fileio.FileIO gave unhelpful error message when trying to open a directory.
+
+..
+
+.. bpo: 3708
+.. date: 7126
+.. nonce: dbhr5L
+.. section: Library
+
+os.urandom no longer goes into an infinite loop when passed a non-integer
+floating point number.
+
+..
+
+.. bpo: 3110
+.. date: 7125
+.. nonce: TXNjN7
+.. section: Library
+
+multiprocessing fails to compiel on solaris 10 due to missing SEM_VALUE_MAX.
+
+..
+
+.. bpo: 4301
+.. date: 7124
+.. nonce: To_Er1
+.. section: Library
+
+Patch the logging module to add processName support, remove
+_check_logger_class from multiprocessing.
+
+..
+
+.. bpo: 2975
+.. date: 7123
+.. nonce: 3nTVpN
+.. section: Library
+
+When compiling several extension modules with Visual Studio 2008 from the
+same python interpreter, some environment variables would grow without
+limit.
+
+..
+
+.. bpo: 3643
+.. date: 7122
+.. nonce: r2JHSh
+.. section: Library
+
+Added a few more checks to _testcapi to prevent segfaults by exploitation of
+poor argument checking.
+
+..
+
+.. bpo: 0
+.. date: 7121
+.. nonce: WeFjzv
+.. section: Library
+
+sqlite3: Changed docstring of iterdump() to mark method as "Non-standard".
+
+..
+
+.. bpo: 3103
+.. date: 7120
+.. nonce: WO-2NA
+.. section: Library
+
+Reduced globals symbols used by sqlite3 module and made sure all remaining
+ones have "pysqlite_" prefix.
+
+..
+
+.. bpo: 3846
+.. date: 7119
+.. nonce: IF6rMt
+.. section: Library
+
+Release the GIL during sqlite3_prepare calls. This improves concurrent
+access to the same SQLite database from multiple threads/processes.
+
+..
+
+.. bpo: 3781
+.. date: 7118
+.. nonce: c8hFsy
+.. section: Tests
+
+Add test.test_support.check_warnings() as a convenience wrapper for
+warnings.catch_warnings() that makes it easier to check that expected
+warning messages are being reported.
+
+..
+
+.. bpo: 3796
+.. date: 7117
+.. nonce: 04E6Gg
+.. section: Tests
+
+Some tests functions were not enabled in test_float.
+
+..
+
+.. bpo: 3768
+.. date: 7116
+.. nonce: wK7GYq
+.. section: Tests
+
+Move test_py3kwarn over to the new API for catch_warnings().
+
+..
+
+.. bpo: 3833
+.. date: 7115
+.. nonce: 8gZDgB
+.. section: Build
+
+Use a different upgrade code for Win64 installers.
+
+..
+
+.. bpo: 2271
+.. date: 7114
+.. nonce: 8MXC-o
+.. section: Build
+
+Set SecureCustomProperties so that installation will properly use the
+TARGETDIR even for unprivileged users.
+
+..
+
+.. bpo: 0
+.. date: 7113
+.. nonce: 4XBUzg
+.. section: Build
+
+Allow passing the MSI file name to merge.py.
+
+..
+
+.. bpo: 3758
+.. date: 7112
+.. nonce: xZ4Rlj
+.. section: Build
+
+Rename the 'check' target to 'patchcheck' so as to not clash with GNU build
+target guidelines.
diff --git a/Misc/NEWS.d/2.6rc2.rst b/Misc/NEWS.d/2.6rc2.rst
new file mode 100644
index 0000000..37d435d
--- /dev/null
+++ b/Misc/NEWS.d/2.6rc2.rst
@@ -0,0 +1,39 @@
+.. bpo: 0
+.. date: 7168
+.. nonce: 0ihWh2
+.. release date: 17-Sep-2008
+.. section: Library
+
+Security Issue #2: imageop did not validate arguments correctly and could
+segfault as a result.
+
+..
+
+.. bpo: 3886
+.. date: 7167
+.. nonce: l6kzFl
+.. section: Library
+
+Possible integer overflows in the _hashopenssl module were closed.
+
+..
+
+.. bpo: 3850
+.. date: 7166
+.. nonce: AJBbYw
+.. section: Tools/Demos
+
+recursion tests in Tools/scripts/find_recursion_limit.py can raise
+AttributeError instead of RuntimeError, depending in which C API call
+exactly the recursion limit is exceeded. Consequently, both exception types
+are caught and silenced.
+
+..
+
+.. bpo: 3617
+.. date: 7165
+.. nonce: aR1Dim
+.. section: Build
+
+Include a licensing statement regarding the Microsoft C runtime in the
+Windows installer.
diff --git a/Misc/NEWS.d/2.7.1.rst b/Misc/NEWS.d/2.7.1.rst
new file mode 100644
index 0000000..00072c1
--- /dev/null
+++ b/Misc/NEWS.d/2.7.1.rst
@@ -0,0 +1,187 @@
+.. bpo: 2236
+.. date: 8293
+.. nonce: 1Mj4VJ
+.. release date: 2010-11-27
+.. section: Library
+
+distutils' mkpath ignored the mode parameter.
+
+..
+
+.. bpo: 0
+.. date: 8292
+.. nonce: NFeWRc
+.. section: Library
+
+Fix typo in one sdist option (medata-check).
+
+..
+
+.. bpo: 10323
+.. date: 8291
+.. nonce: rFKI3X
+.. section: Library
+
+itertools.islice() now consumes the minimum number of inputs before
+stopping.  Formerly, the final state of the underlying iterator was
+undefined.
+
+..
+
+.. bpo: 10565
+.. date: 8290
+.. nonce: g3L9da
+.. section: Library
+
+The collections.Iterator ABC now checks for both ``__iter__`` and ``next``.
+
+..
+
+.. bpo: 10092
+.. date: 8289
+.. nonce: -B7ynY
+.. section: Library
+
+Properly reset locale in calendar.Locale*Calendar classes.
+
+..
+
+.. bpo: 10459
+.. date: 8288
+.. nonce: G0RFoD
+.. section: Library
+
+Update CJK character names to Unicode 5.2.
+
+..
+
+.. bpo: 6098
+.. date: 8287
+.. nonce: CKisab
+.. section: Library
+
+Don't claim DOM level 3 conformance in minidom.
+
+..
+
+.. bpo: 10561
+.. date: 8286
+.. nonce: gxs6bQ
+.. section: Library
+
+In pdb, clear the breakpoints by the breakpoint number.
+
+..
+
+.. bpo: 5762
+.. date: 8285
+.. nonce: ADvGzb
+.. section: Library
+
+Fix AttributeError raised by ``xml.dom.minidom`` when an empty XML namespace
+attribute is encountered.
+
+..
+
+.. bpo: 1710703
+.. date: 8284
+.. nonce: NAAh-d
+.. section: Library
+
+Write structures for an empty ZIP archive when a ZipFile is created in modes
+'a' or 'w' and then closed without adding any files. Raise BadZipfile
+(rather than IOError) when opening small non-ZIP files.
+
+..
+
+.. bpo: 4493
+.. date: 8283
+.. nonce: idMjMG
+.. section: Library
+
+urllib2 adds '/' in front of path components which does not start with '/.
+Common behavior exhibited by browsers and other clients.
+
+..
+
+.. bpo: 10407
+.. date: 8282
+.. nonce: f8LrF_
+.. section: Library
+
+Fix one NameError in distutils.
+
+..
+
+.. bpo: 10198
+.. date: 8281
+.. nonce: 7ruhdY
+.. section: Library
+
+fix duplicate header written to wave files when writeframes() is called
+without data.
+
+..
+
+.. bpo: 10467
+.. date: 8280
+.. nonce: uNWGiY
+.. section: Library
+
+Fix BytesIO.readinto() after seeking into a position after the end of the
+file.
+
+..
+
+.. bpo: 5111
+.. date: 8279
+.. nonce: XegYFR
+.. section: Library
+
+IPv6 Host in the Header is wrapped inside [ ]. Patch by Chandru.
+
+..
+
+.. bpo: 6378
+.. date: 8278
+.. nonce: ovcYOt
+.. section: IDLE
+
+idle.bat now runs with the appropriate Python version rather than the system
+default. Patch by Sridhar Ratnakumar.
+
+..
+
+.. bpo: 0
+.. date: 8277
+.. nonce: 64ssfS
+.. section: Build
+
+Backport r83399 to allow test_distutils to pass on installed versions.
+
+..
+
+.. bpo: 1303434
+.. date: 8276
+.. nonce: AVO6EG
+.. section: Build
+
+Generate ZIP file containing all PDBs.
+
+..
+
+.. bpo: 9424
+.. date: 8275
+.. nonce: BO5Jfa
+.. section: Tests
+
+Replace deprecated assert* methods in the Python test suite.
+
+..
+
+.. bpo: 10299
+.. date: 8274
+.. nonce: ERtbPa
+.. section: Documentation
+
+List the built-in functions in a table in functions.rst.
diff --git a/Misc/NEWS.d/2.7.10.rst b/Misc/NEWS.d/2.7.10.rst
new file mode 100644
index 0000000..45e8232
--- /dev/null
+++ b/Misc/NEWS.d/2.7.10.rst
@@ -0,0 +1,7 @@
+.. bpo: 22931
+.. date: 9589
+.. nonce: 4CuWYD
+.. release date: 2015-05-23
+.. section: Library
+
+Allow '[' and ']' in cookie values.
diff --git a/Misc/NEWS.d/2.7.10rc1.rst b/Misc/NEWS.d/2.7.10rc1.rst
new file mode 100644
index 0000000..cad34e3
--- /dev/null
+++ b/Misc/NEWS.d/2.7.10rc1.rst
@@ -0,0 +1,906 @@
+.. bpo: 23971
+.. date: 9588
+.. nonce: fQZtJr
+.. release date: 2015-05-10
+.. section: Core and Builtins
+
+Fix underestimated presizing in dict.fromkeys().
+
+..
+
+.. bpo: 23757
+.. date: 9587
+.. nonce: Q9kwY_
+.. section: Core and Builtins
+
+PySequence_Tuple() incorrectly called the concrete list API when the data
+was a list subclass.
+
+..
+
+.. bpo: 23629
+.. date: 9586
+.. nonce: r9Mt2C
+.. section: Core and Builtins
+
+Fix the default __sizeof__ implementation for variable-sized objects.
+
+..
+
+.. bpo: 23055
+.. date: 9585
+.. nonce: rRkRIJ
+.. section: Core and Builtins
+
+Fixed a buffer overflow in PyUnicode_FromFormatV.  Analysis and fix by Guido
+Vranken.
+
+..
+
+.. bpo: 23048
+.. date: 9584
+.. nonce: X5BUd3
+.. section: Core and Builtins
+
+Fix jumping out of an infinite while loop in the pdb.
+
+..
+
+.. bpo: 0
+.. date: 9583
+.. nonce: fgX8Qe
+.. section: Library
+
+The keywords attribute of functools.partial is now always a dictionary.
+
+..
+
+.. bpo: 20274
+.. date: 9582
+.. nonce: uVHogg
+.. section: Library
+
+When calling a _sqlite.Connection, it now complains if passed any keyword
+arguments.  Previously it silently ignored them.
+
+..
+
+.. bpo: 20274
+.. date: 9581
+.. nonce: hBst4M
+.. section: Library
+
+Remove ignored and erroneous "kwargs" parameters from three METH_VARARGS
+methods on _sqlite.Connection.
+
+..
+
+.. bpo: 24134
+.. date: 9580
+.. nonce: TT0kHE
+.. section: Library
+
+assertRaises() and assertRaisesRegexp() checks are not longer successful if
+the callable is None.
+
+..
+
+.. bpo: 23008
+.. date: 9579
+.. nonce: OZFCd-
+.. section: Library
+
+Fixed resolving attributes with boolean value is False in pydoc.
+
+..
+
+.. bpo: 24099
+.. date: 9578
+.. nonce: 2uAHX7
+.. section: Library
+
+Fix use-after-free bug in heapq's siftup and siftdown functions. (See also:
+bpo-24100, bpo-24101)
+
+..
+
+.. bpo: 0
+.. date: 9577
+.. nonce: OuI94b
+.. section: Library
+
+Backport collections.deque fixes from Python 3.5.  Prevents reentrant
+badness during deletion by deferring the decref until the container has been
+restored to a consistent state.
+
+..
+
+.. bpo: 23842
+.. date: 9576
+.. nonce: 8UD2q_
+.. section: Library
+
+os.major(), os.minor() and os.makedev() now support ints again.
+
+..
+
+.. bpo: 23811
+.. date: 9575
+.. nonce: B6tzf9
+.. section: Library
+
+Add missing newline to the PyCompileError error message. Patch by Alex
+Shkop.
+
+..
+
+.. bpo: 17898
+.. date: 9574
+.. nonce: EsbCnX
+.. section: Library
+
+Fix exception in gettext.py when parsing certain plural forms.
+
+..
+
+.. bpo: 23865
+.. date: 9573
+.. nonce: PtSLgU
+.. section: Library
+
+close() methods in multiple modules now are idempotent and more robust at
+shutdown. If they need to release multiple resources, all are released even
+if errors occur.
+
+..
+
+.. bpo: 23881
+.. date: 9572
+.. nonce: CYmvWv
+.. section: Library
+
+urllib.ftpwrapper constructor now closes the socket if the FTP connection
+failed.
+
+..
+
+.. bpo: 15133
+.. date: 9571
+.. nonce: iHpkhw
+.. section: Library
+
+_tkinter.tkapp.getboolean() now supports long and Tcl_Obj and always returns
+bool.  tkinter.BooleanVar now validates input values (accepted bool, int,
+long, str, unicode, and Tcl_Obj).  tkinter.BooleanVar.get() now always
+returns bool.
+
+..
+
+.. bpo: 23338
+.. date: 9570
+.. nonce: ZYMGN1
+.. section: Library
+
+Fixed formatting ctypes error messages on Cygwin. Patch by Makoto Kato.
+
+..
+
+.. bpo: 16840
+.. date: 9569
+.. nonce: kKIhPm
+.. section: Library
+
+Tkinter now supports 64-bit integers added in Tcl 8.4 and arbitrary
+precision integers added in Tcl 8.5.
+
+..
+
+.. bpo: 23834
+.. date: 9568
+.. nonce: 1w5YIz
+.. section: Library
+
+Fix socket.sendto(), use the C long type to store the result of sendto()
+instead of the C int type.
+
+..
+
+.. bpo: 21526
+.. date: 9567
+.. nonce: QQEXrR
+.. section: Library
+
+Tkinter now supports new boolean type in Tcl 8.5.
+
+..
+
+.. bpo: 23838
+.. date: 9566
+.. nonce: IX6FPX
+.. section: Library
+
+linecache now clears the cache and returns an empty result on MemoryError.
+
+..
+
+.. bpo: 23742
+.. date: 9565
+.. nonce: _EkAIa
+.. section: Library
+
+ntpath.expandvars() no longer loses unbalanced single quotes.
+
+..
+
+.. bpo: 21802
+.. date: 9564
+.. nonce: ygSM2A
+.. section: Library
+
+The reader in BufferedRWPair now is closed even when closing writer failed
+in BufferedRWPair.close().
+
+..
+
+.. bpo: 23671
+.. date: 9563
+.. nonce: zWPm-a
+.. section: Library
+
+string.Template now allows specifying the "self" parameter as a keyword
+argument.  string.Formatter now allows specifying the "self" and the
+"format_string" parameters as keyword arguments.
+
+..
+
+.. bpo: 21560
+.. date: 9562
+.. nonce: lqfYv8
+.. section: Library
+
+An attempt to write a data of wrong type no longer cause GzipFile
+corruption.  Original patch by Wolfgang Maier.
+
+..
+
+.. bpo: 23647
+.. date: 9561
+.. nonce: pX2qrx
+.. section: Library
+
+Increase impalib's MAXLINE to accommodate modern mailbox sizes.
+
+..
+
+.. bpo: 23539
+.. date: 9560
+.. nonce: 5BVUim
+.. section: Library
+
+If body is None, http.client.HTTPConnection.request now sets Content-Length
+to 0 for PUT, POST, and PATCH headers to avoid 411 errors from some web
+servers.
+
+..
+
+.. bpo: 23136
+.. date: 9559
+.. nonce: 1bnpnb
+.. section: Library
+
+_strptime now uniformly handles all days in week 0, including Dec 30 of
+previous year.  Based on patch by Jim Carroll.
+
+..
+
+.. bpo: 23138
+.. date: 9558
+.. nonce: 4vMoMZ
+.. section: Library
+
+Fixed parsing cookies with absent keys or values in cookiejar. Patch by
+Demian Brecht.
+
+..
+
+.. bpo: 23051
+.. date: 9557
+.. nonce: Vi5tCZ
+.. section: Library
+
+multiprocessing.Pool methods imap() and imap_unordered() now handle
+exceptions raised by an iterator.  Patch by Alon Diamant and Davin Potts.
+
+..
+
+.. bpo: 22928
+.. date: 9556
+.. nonce: 1bJJIG
+.. section: Library
+
+Disabled HTTP header injections in httplib. Original patch by Demian Brecht.
+
+..
+
+.. bpo: 23615
+.. date: 9555
+.. nonce: SRSoav
+.. section: Library
+
+Module tarfile is now can be reloaded with imp.reload().
+
+..
+
+.. bpo: 22853
+.. date: 9554
+.. nonce: LUBedC
+.. section: Library
+
+Fixed a deadlock when use multiprocessing.Queue at import time. Patch by
+Florian Finkernagel and Davin Potts.
+
+..
+
+.. bpo: 23476
+.. date: 9553
+.. nonce: 82QV9I
+.. section: Library
+
+In the ssl module, enable OpenSSL's X509_V_FLAG_TRUSTED_FIRST flag on
+certificate stores when it is available.
+
+..
+
+.. bpo: 23576
+.. date: 9552
+.. nonce: 98F-PP
+.. section: Library
+
+Avoid stalling in SSL reads when EOF has been reached in the SSL layer but
+the underlying connection hasn't been closed.
+
+..
+
+.. bpo: 23504
+.. date: 9551
+.. nonce: o31h5I
+.. section: Library
+
+Added an __all__ to the types module.
+
+..
+
+.. bpo: 23458
+.. date: 9550
+.. nonce: QGBFRr
+.. section: Library
+
+On POSIX, the file descriptor kept open by os.urandom() is now set to non
+inheritable
+
+..
+
+.. bpo: 22113
+.. date: 9549
+.. nonce: L5Fo5c
+.. section: Library
+
+struct.pack_into() now supports new buffer protocol (in particular accepts
+writable memoryview).
+
+..
+
+.. bpo: 814253
+.. date: 9548
+.. nonce: AJWDsY
+.. section: Library
+
+Warnings now are raised when group references and conditional group
+references are used in lookbehind assertions in regular expressions. (See
+also: bpo-9179)
+
+..
+
+.. bpo: 23215
+.. date: 9547
+.. nonce: VHVSVX
+.. section: Library
+
+Multibyte codecs with custom error handlers that ignores errors consumed too
+much memory and raised SystemError or MemoryError. Original patch by Aleksi
+Torhamo.
+
+..
+
+.. bpo: 5700
+.. date: 9546
+.. nonce: iA5yzL
+.. section: Library
+
+io.FileIO() called flush() after closing the file. flush() was not called in
+close() if closefd=False.
+
+..
+
+.. bpo: 21548
+.. date: 9545
+.. nonce: Rr1l-c
+.. section: Library
+
+Fix pydoc.synopsis() and pydoc.apropos() on modules with empty docstrings.
+Initial patch by Yuyang Guo.
+
+..
+
+.. bpo: 22885
+.. date: 9544
+.. nonce: c3937m
+.. section: Library
+
+Fixed arbitrary code execution vulnerability in the dumbdbm module.
+Original patch by Claudiu Popa.
+
+..
+
+.. bpo: 23481
+.. date: 9543
+.. nonce: ZWwliG
+.. section: Library
+
+Remove RC4 from the SSL module's default cipher list.
+
+..
+
+.. bpo: 21849
+.. date: 9542
+.. nonce: XUnTp8
+.. section: Library
+
+Fixed xmlrpclib serialization of non-ASCII unicode strings in the
+multiprocessing module.
+
+..
+
+.. bpo: 21840
+.. date: 9541
+.. nonce: PrOwSC
+.. section: Library
+
+Fixed expanding unicode variables of form $var in posixpath.expandvars().
+Fixed all os.path implementations on unicode-disabled builds.
+
+..
+
+.. bpo: 23367
+.. date: 9540
+.. nonce: kHnFiz
+.. section: Library
+
+Fix possible overflows in the unicodedata module.
+
+..
+
+.. bpo: 23363
+.. date: 9539
+.. nonce: -koaol
+.. section: Library
+
+Fix possible overflow in itertools.permutations.
+
+..
+
+.. bpo: 23364
+.. date: 9538
+.. nonce: 3yBV-6
+.. section: Library
+
+Fix possible overflow in itertools.product.
+
+..
+
+.. bpo: 23365
+.. date: 9537
+.. nonce: h5jLQ9
+.. section: Library
+
+Fixed possible integer overflow in itertools.combinations_with_replacement.
+
+..
+
+.. bpo: 23366
+.. date: 9536
+.. nonce: tyAfm8
+.. section: Library
+
+Fixed possible integer overflow in itertools.combinations.
+
+..
+
+.. bpo: 23191
+.. date: 9535
+.. nonce: 55Cwcb
+.. section: Library
+
+fnmatch functions that use caching are now threadsafe.
+
+..
+
+.. bpo: 18518
+.. date: 9534
+.. nonce: JXgicC
+.. section: Library
+
+timeit now rejects statements which can't be compiled outside a function or
+a loop (e.g. "return" or "break").
+
+..
+
+.. bpo: 19996
+.. date: 9533
+.. nonce: FvMyH0
+.. section: Library
+
+Make :mod:`httplib` ignore headers with no name rather than assuming the
+body has started.
+
+..
+
+.. bpo: 20188
+.. date: 9532
+.. nonce: xocY-2
+.. section: Library
+
+Support Application-Layer Protocol Negotiation (ALPN) in the ssl module.
+
+..
+
+.. bpo: 23248
+.. date: 9531
+.. nonce: FjcyCP
+.. section: Library
+
+Update ssl error codes from latest OpenSSL git master.
+
+..
+
+.. bpo: 23098
+.. date: 9530
+.. nonce: 7VwF3K
+.. section: Library
+
+64-bit dev_t is now supported in the os module.
+
+..
+
+.. bpo: 23063
+.. date: 9529
+.. nonce: 9-UJRs
+.. section: Library
+
+In the disutils' check command, fix parsing of reST with code or code-block
+directives.
+
+..
+
+.. bpo: 21356
+.. date: 9528
+.. nonce: 8NY75J
+.. section: Library
+
+Make ssl.RAND_egd() optional to support LibreSSL. The availability of the
+function is checked during the compilation. Patch written by Bernard Spil.
+
+..
+
+.. bpo: 0
+.. date: 9527
+.. nonce: SZRSxn
+.. section: Library
+
+Backport the context argument to ftplib.FTP_TLS.
+
+..
+
+.. bpo: 23111
+.. date: 9526
+.. nonce: A6CAZK
+.. section: Library
+
+Maximize compatibility in protocol versions of ftplib.FTP_TLS.
+
+..
+
+.. bpo: 23112
+.. date: 9525
+.. nonce: dZGf82
+.. section: Library
+
+Fix SimpleHTTPServer to correctly carry the query string and fragment when
+it redirects to add a trailing slash.
+
+..
+
+.. bpo: 22585
+.. date: 9524
+.. nonce: F4BkNo
+.. section: Library
+
+On OpenBSD 5.6 and newer, os.urandom() now calls getentropy(), instead of
+reading /dev/urandom, to get pseudo-random bytes.
+
+..
+
+.. bpo: 23093
+.. date: 9523
+.. nonce: cP7OqD
+.. section: Library
+
+In the io, module allow more operations to work on detached streams.
+
+..
+
+.. bpo: 23071
+.. date: 9522
+.. nonce: 3BSqF7
+.. section: Library
+
+Added missing names to codecs.__all__.  Patch by Martin Panter.
+
+..
+
+.. bpo: 23016
+.. date: 9521
+.. nonce: wctkY3
+.. section: Library
+
+A warning no longer produces an AttributeError when sys.stderr is None.
+
+..
+
+.. bpo: 21032
+.. date: 9520
+.. nonce: wxT_41
+.. section: Library
+
+Fixed socket leak if HTTPConnection.getresponse() fails. Original patch by
+Martin Panter.
+
+..
+
+.. bpo: 22609
+.. date: 9519
+.. nonce: mmLoeb
+.. section: Library
+
+Constructors and update methods of mapping classes in the collections module
+now accept the self keyword argument.
+
+..
+
+.. bpo: 23006
+.. date: 9518
+.. nonce: 6-u4Mv
+.. section: Documentation
+
+Improve the documentation and indexing of dict.__missing__. Add an entry in
+the language datamodel special methods section. Revise and index its
+discussion in the stdtypes mapping/dict section. Backport the code example
+from 3.4.
+
+..
+
+.. bpo: 21514
+.. date: 9517
+.. nonce: 1H16T6
+.. section: Documentation
+
+The documentation of the json module now refers to new JSON RFC 7159 instead
+of obsoleted RFC 4627.
+
+..
+
+.. bpo: 23330
+.. date: 9516
+.. nonce: LTlKDp
+.. section: Tools/Demos
+
+h2py now supports arbitrary filenames in #include.
+
+..
+
+.. bpo: 6639
+.. date: 9515
+.. nonce: rmjUmG
+.. section: Tools/Demos
+
+Module-level turtle functions no longer raise TclError after closing the
+window.
+
+..
+
+.. bpo: 22314
+.. date: 9514
+.. nonce: ws6xsH
+.. section: Tools/Demos
+
+pydoc now works when the LINES environment variable is set.
+
+..
+
+.. bpo: 18905
+.. date: 9513
+.. nonce: oKTvz5
+.. section: Tools/Demos
+
+"pydoc -p 0" now outputs actually used port.  Based on patch by Wieland
+Hoffmann.
+
+..
+
+.. bpo: 23345
+.. date: 9512
+.. nonce: HIGBKx
+.. section: Tools/Demos
+
+Prevent test_ssl failures with large OpenSSL patch level values (like
+0.9.8zc).
+
+..
+
+.. bpo: 23799
+.. date: 9511
+.. nonce: IZtmH_
+.. section: Tests
+
+Added test.test_support.start_threads() for running and cleaning up multiple
+threads.
+
+..
+
+.. bpo: 22390
+.. date: 9510
+.. nonce: UPVFnq
+.. section: Tests
+
+test.regrtest now emits a warning if temporary files or directories are left
+after running a test.
+
+..
+
+.. bpo: 23583
+.. date: 9509
+.. nonce: bY8AbM
+.. section: Tests
+
+Added tests for standard IO streams in IDLE.
+
+..
+
+.. bpo: 23392
+.. date: 9508
+.. nonce: Pe7_WK
+.. section: Tests
+
+Added tests for marshal C API that works with FILE*.
+
+..
+
+.. bpo: 18982
+.. date: 9507
+.. nonce: TynSM6
+.. section: Tests
+
+Add tests for CLI of the calendar module.
+
+..
+
+.. bpo: 19949
+.. date: 9506
+.. nonce: yw7T54
+.. section: Tests
+
+The test_xpickle test now tests compatibility with installed Python 2.7 and
+reports skipped tests.  Based on patch by Zachary Ware.
+
+..
+
+.. bpo: 11578
+.. date: 9505
+.. nonce: 1IaAXh
+.. section: Tests
+
+Backported test for the timeit module.
+
+..
+
+.. bpo: 22943
+.. date: 9504
+.. nonce: t0MW3A
+.. section: Tests
+
+bsddb tests are locale independend now.
+
+..
+
+.. bpo: 23583
+.. date: 9503
+.. nonce: ApIRL5
+.. section: IDLE
+
+Fixed writing unicode to standard output stream in IDLE.
+
+..
+
+.. bpo: 20577
+.. date: 9502
+.. nonce: Y71IMj
+.. section: IDLE
+
+Configuration of the max line length for the FormatParagraph extension has
+been moved from the General tab of the Idle preferences dialog to the
+FormatParagraph tab of the Config Extensions dialog. Patch by Tal Einat.
+
+..
+
+.. bpo: 16893
+.. date: 9501
+.. nonce: JfHAA4
+.. section: IDLE
+
+Update Idle doc chapter to match current Idle and add new information.
+
+..
+
+.. bpo: 23180
+.. date: 9500
+.. nonce: cE_89F
+.. section: IDLE
+
+Rename IDLE "Windows" menu item to "Window". Patch by Al Sweigart.
+
+..
+
+.. bpo: 15506
+.. date: 9499
+.. nonce: nh8KlR
+.. section: Build
+
+Use standard PKG_PROG_PKG_CONFIG autoconf macro in the configure script.
+
+..
+
+.. bpo: 23032
+.. date: 9498
+.. nonce: F8fiIl
+.. section: Build
+
+Fix installer build failures on OS X 10.4 Tiger by disabling assembly code
+in the OpenSSL build.
+
+..
+
+.. bpo: 23686
+.. date: 9497
+.. nonce: QZBsvh
+.. section: Build
+
+Update OS X 10.5 installer and Windows builds to use OpenSSL 1.0.2a.
+
+..
+
+.. bpo: 23998
+.. date: 9496
+.. nonce: z7mlLW
+.. section: C API
+
+PyImport_ReInitLock() now checks for lock allocation error
+
+..
+
+.. bpo: 22079
+.. date: 9495
+.. nonce: zhs2qM
+.. section: C API
+
+PyType_Ready() now checks that statically allocated type has no dynamically
+allocated bases.
diff --git a/Misc/NEWS.d/2.7.11.rst b/Misc/NEWS.d/2.7.11.rst
new file mode 100644
index 0000000..bb8fd15
--- /dev/null
+++ b/Misc/NEWS.d/2.7.11.rst
@@ -0,0 +1,8 @@
+.. bpo: 25624
+.. date: 9702
+.. nonce: ed-fM0
+.. release date: 2015-12-05
+.. section: Library
+
+ZipFile now always writes a ZIP_STORED header for directory entries.  Patch
+by Dingyuan Wang.
diff --git a/Misc/NEWS.d/2.7.11rc1.rst b/Misc/NEWS.d/2.7.11rc1.rst
new file mode 100644
index 0000000..bba3132
--- /dev/null
+++ b/Misc/NEWS.d/2.7.11rc1.rst
@@ -0,0 +1,1127 @@
+.. bpo: 25678
+.. date: 9701
+.. nonce: aOCs4y
+.. release date: 2015-11-21
+.. section: Core and Builtins
+
+Avoid buffer overreads when int(), long(), float(), and compile() are passed
+buffer objects.  These objects are not necessarily terminated by a null
+byte, but the functions assumed they were.
+
+..
+
+.. bpo: 25388
+.. date: 9700
+.. nonce: Yl4HRL
+.. section: Core and Builtins
+
+Fixed tokenizer hang when processing undecodable source code with a null
+byte.
+
+..
+
+.. bpo: 22995
+.. date: 9699
+.. nonce: 90kpuP
+.. section: Core and Builtins
+
+Default implementation of __reduce__ and __reduce_ex__ now rejects builtin
+types with not defined __new__.
+
+..
+
+.. bpo: 7267
+.. date: 9698
+.. nonce: eje_k4
+.. section: Core and Builtins
+
+format(int, 'c') now raises OverflowError when the argument is not in
+range(0, 256).
+
+..
+
+.. bpo: 24806
+.. date: 9697
+.. nonce: Nb0znT
+.. section: Core and Builtins
+
+Prevent builtin types that are not allowed to be subclassed from being
+subclassed through multiple inheritance.
+
+..
+
+.. bpo: 24848
+.. date: 9696
+.. nonce: HlUSuy
+.. section: Core and Builtins
+
+Fixed a number of bugs in UTF-7 decoding of misformed data.
+
+..
+
+.. bpo: 25003
+.. date: 9695
+.. nonce: -bdxOl
+.. section: Core and Builtins
+
+os.urandom() doesn't use getentropy() on Solaris because getentropy() is
+blocking, whereas os.urandom() should not block. getentropy() is supported
+since Solaris 11.3.
+
+..
+
+.. bpo: 21167
+.. date: 9694
+.. nonce: uom-Dq
+.. section: Core and Builtins
+
+NAN operations are now handled correctly when python is compiled with ICC
+even if -fp-model strict is not specified.
+
+..
+
+.. bpo: 24467
+.. date: 9693
+.. nonce: BAJ80-
+.. section: Core and Builtins
+
+Fixed possible buffer over-read in bytearray. The bytearray object now
+always allocates place for trailing null byte and it's buffer now is always
+null-terminated.
+
+..
+
+.. bpo: 19543
+.. date: 9692
+.. nonce: OT7JMe
+.. section: Core and Builtins
+
+encode() and decode() methods and constructors of str, unicode and bytearray
+classes now emit deprecation warning for known non-text encodings when
+Python is ran with the -3 option.
+
+..
+
+.. bpo: 24115
+.. date: 9691
+.. nonce: y9e_MO
+.. section: Core and Builtins
+
+Update uses of PyObject_IsTrue(), PyObject_Not(), PyObject_IsInstance(),
+PyObject_RichCompareBool() and _PyDict_Contains() to check for and handle
+errors correctly.
+
+..
+
+.. bpo: 4753
+.. date: 9690
+.. nonce: o7jpYf
+.. section: Core and Builtins
+
+On compilers where it is supported, use "computed gotos" for bytecode
+dispatch in the interpreter. This improves interpretation performance.
+
+..
+
+.. bpo: 22939
+.. date: 9689
+.. nonce: grBMzV
+.. section: Core and Builtins
+
+Fixed integer overflow in iterator object.  Original patch by Clement
+Rouault.
+
+..
+
+.. bpo: 24102
+.. date: 9688
+.. nonce: 9T6h3m
+.. section: Core and Builtins
+
+Fixed exception type checking in standard error handlers.
+
+..
+
+.. bpo: 10128
+.. date: 9687
+.. nonce: 0pRKCf
+.. section: Library
+
+backport issue #10845's mitigation of incompatibilities between the
+multiprocessing module and directory and zipfile execution. Multiprocessing
+on Windows will now automatically skip rerunning __main__ in spawned
+processes, rather than failing with AssertionError.
+
+..
+
+.. bpo: 25578
+.. date: 9686
+.. nonce: G6S-ft
+.. section: Library
+
+Fix (another) memory leak in SSLSocket.getpeercer().
+
+..
+
+.. bpo: 25590
+.. date: 9685
+.. nonce: aCt-yW
+.. section: Library
+
+In the Readline completer, only call getattr() once per attribute.
+
+..
+
+.. bpo: 25530
+.. date: 9684
+.. nonce: hDFkwu
+.. section: Library
+
+Disable the vulnerable SSLv3 protocol by default when creating
+ssl.SSLContext.
+
+..
+
+.. bpo: 25569
+.. date: 9683
+.. nonce: CfvQjK
+.. section: Library
+
+Fix memory leak in SSLSocket.getpeercert().
+
+..
+
+.. bpo: 7759
+.. date: 9682
+.. nonce: a72qAb
+.. section: Library
+
+Fixed the mhlib module on filesystems that doesn't support link counting for
+directories.
+
+..
+
+.. bpo: 892902
+.. date: 9681
+.. nonce: V_kMwt
+.. section: Library
+
+Fixed pickling recursive objects.
+
+..
+
+.. bpo: 18010
+.. date: 9680
+.. nonce: pHcjnp
+.. section: Library
+
+Fix the pydoc GUI's search function to handle exceptions from importing
+packages.
+
+..
+
+.. bpo: 25515
+.. date: 9679
+.. nonce: fQsyYG
+.. section: Library
+
+Always use os.urandom as a source of randomness in uuid.uuid4.
+
+..
+
+.. bpo: 21827
+.. date: 9678
+.. nonce: k2oreR
+.. section: Library
+
+Fixed textwrap.dedent() for the case when largest common whitespace is a
+substring of smallest leading whitespace. Based on patch by Robert Li.
+
+..
+
+.. bpo: 21709
+.. date: 9677
+.. nonce: hiATOK
+.. section: Library
+
+Fix the logging module to not depend upon __file__ being set properly to get
+the filename of its caller from the stack.  This allows it to work if run in
+a frozen or embedded environment where the module's .__file__ attribute does
+not match its code object's .co_filename.
+
+..
+
+.. bpo: 25319
+.. date: 9676
+.. nonce: iyuglv
+.. section: Library
+
+When threading.Event is reinitialized, the underlying condition should use a
+regular lock rather than a recursive lock.
+
+..
+
+.. bpo: 25232
+.. date: 9675
+.. nonce: KhKjCE
+.. section: Library
+
+Fix CGIRequestHandler to split the query from the URL at the first question
+mark (?) rather than the last. Patch from Xiang Zhang.
+
+..
+
+.. bpo: 24657
+.. date: 9674
+.. nonce: h2Ag7y
+.. section: Library
+
+Prevent CGIRequestHandler from collapsing slashes in the query part of the
+URL as if it were a path. Patch from Xiang Zhang.
+
+..
+
+.. bpo: 22958
+.. date: 9673
+.. nonce: 04wca1
+.. section: Library
+
+Constructor and update method of weakref.WeakValueDictionary now accept the
+self keyword argument.
+
+..
+
+.. bpo: 22609
+.. date: 9672
+.. nonce: aTCKbk
+.. section: Library
+
+Constructor and the update method of collections.UserDict now accept the
+self keyword argument.
+
+..
+
+.. bpo: 25203
+.. date: 9671
+.. nonce: IgDEbt
+.. section: Library
+
+Failed readline.set_completer_delims() no longer left the module in
+inconsistent state.
+
+..
+
+.. bpo: 19143
+.. date: 9670
+.. nonce: 76SBSO
+.. section: Library
+
+platform module now reads Windows version from kernel32.dll to avoid
+compatibility shims.
+
+..
+
+.. bpo: 25135
+.. date: 9669
+.. nonce: gVHNy-
+.. section: Library
+
+Make deque_clear() safer by emptying the deque before clearing. This helps
+avoid possible reentrancy issues.
+
+..
+
+.. bpo: 24684
+.. date: 9668
+.. nonce: 7ewUAL
+.. section: Library
+
+socket.socket.getaddrinfo() now calls PyUnicode_AsEncodedString() instead of
+calling the encode() method of the host, to handle correctly custom unicode
+string with an encode() method which doesn't return a byte string. The
+encoder of the IDNA codec is now called directly instead of calling the
+encode() method of the string.
+
+..
+
+.. bpo: 24982
+.. date: 9667
+.. nonce: sGMMAR
+.. section: Library
+
+shutil.make_archive() with the "zip" format now adds entries for directories
+(including empty directories) in ZIP file.
+
+..
+
+.. bpo: 17849
+.. date: 9666
+.. nonce: prwvGY
+.. section: Library
+
+Raise a sensible exception if an invalid response is received for a HTTP
+tunnel request, as seen with some servers that do not support tunnelling.
+Initial patch from Cory Benfield.
+
+..
+
+.. bpo: 16180
+.. date: 9665
+.. nonce: 6IUcNS
+.. section: Library
+
+Exit pdb if file has syntax error, instead of trapping user in an infinite
+loop.  Patch by Xavier de Gaye.
+
+..
+
+.. bpo: 22812
+.. date: 9664
+.. nonce: kLCF0G
+.. section: Library
+
+Fix unittest discovery examples. Patch from Pam McA'Nulty.
+
+..
+
+.. bpo: 24634
+.. date: 9663
+.. nonce: 7bnVgr
+.. section: Library
+
+Importing uuid should not try to load libc on Windows
+
+..
+
+.. bpo: 23652
+.. date: 9662
+.. nonce: DdZRSr
+.. section: Library
+
+Make it possible to compile the select module against the libc headers from
+the Linux Standard Base, which do not include some EPOLL macros.  Initial
+patch by Matt Frank.
+
+..
+
+.. bpo: 15138
+.. date: 9661
+.. nonce: PXj7mj
+.. section: Library
+
+Speed up base64.urlsafe_b64{en,de}code considerably.
+
+..
+
+.. bpo: 23319
+.. date: 9660
+.. nonce: FXyUH-
+.. section: Library
+
+Fix ctypes.BigEndianStructure, swap correctly bytes. Patch written by
+Matthieu Gautier.
+
+..
+
+.. bpo: 23254
+.. date: 9659
+.. nonce: zNiy1X
+.. section: Library
+
+Document how to close the TCPServer listening socket. Patch from Martin
+Panter.
+
+..
+
+.. bpo: 17527
+.. date: 9658
+.. nonce: ve9fyw
+.. section: Library
+
+Add PATCH to wsgiref.validator. Patch from Luca Sbardella.
+
+..
+
+.. bpo: 24613
+.. date: 9657
+.. nonce: QZrd_P
+.. section: Library
+
+Calling array.fromstring() with self is no longer allowed to prevent the
+use-after-free error.  Patch by John Leitch.
+
+..
+
+.. bpo: 24708
+.. date: 9656
+.. nonce: WIZWbu
+.. section: Library
+
+Fix possible integer overflow in strop.replace().
+
+..
+
+.. bpo: 24620
+.. date: 9655
+.. nonce: rrnxB-
+.. section: Library
+
+Random.setstate() now validates the value of state last element.
+
+..
+
+.. bpo: 13938
+.. date: 9654
+.. nonce: e5NSE1
+.. section: Library
+
+2to3 converts StringTypes to a tuple. Patch from Mark Hammond.
+
+..
+
+.. bpo: 24611
+.. date: 9653
+.. nonce: _KNs8d
+.. section: Library
+
+Fixed compiling the posix module on non-Windows platforms without mknod() or
+makedev() (e.g. on Unixware).
+
+..
+
+.. bpo: 18684
+.. date: 9652
+.. nonce: S2es0F
+.. section: Library
+
+Fixed reading out of the buffer in the re module.
+
+..
+
+.. bpo: 24259
+.. date: 9651
+.. nonce: vMAi1A
+.. section: Library
+
+tarfile now raises a ReadError if an archive is truncated inside a data
+segment.
+
+..
+
+.. bpo: 24514
+.. date: 9650
+.. nonce: _xRb2r
+.. section: Library
+
+tarfile now tolerates number fields consisting of only whitespace.
+
+..
+
+.. bpo: 20387
+.. date: 9649
+.. nonce: aAbWbQ
+.. section: Library
+
+Restore semantic round-trip correctness in tokenize/untokenize for
+tab-indented blocks.
+
+..
+
+.. bpo: 24456
+.. date: 9648
+.. nonce: swkJgS
+.. section: Library
+
+Fixed possible buffer over-read in adpcm2lin() and lin2adpcm() functions of
+the audioop module.  Fixed SystemError when the state is not a tuple.  Fixed
+possible memory leak.
+
+..
+
+.. bpo: 24481
+.. date: 9647
+.. nonce: EsJTQ7
+.. section: Library
+
+Fix possible memory corruption with large profiler info strings in hotshot.
+
+..
+
+.. bpo: 24489
+.. date: 9646
+.. nonce: GJnMcW
+.. section: Library
+
+ensure a previously set C errno doesn't disturb cmath.polar().
+
+..
+
+.. bpo: 19543
+.. date: 9645
+.. nonce: 8XxBDj
+.. section: Library
+
+io.TextIOWrapper (and hence io.open()) now uses the internal codec marking
+system added to emit deprecation warning for known non-text encodings at
+stream construction time when Python is ran with the -3 option.
+
+..
+
+.. bpo: 24264
+.. date: 9644
+.. nonce: 3zMc38
+.. section: Library
+
+Fixed buffer overflow in the imageop module.
+
+..
+
+.. bpo: 5633
+.. date: 9643
+.. nonce: JNzKZq
+.. section: Library
+
+Fixed timeit when the statement is a string and the setup is not.
+
+..
+
+.. bpo: 24326
+.. date: 9642
+.. nonce: 4t_6Gy
+.. section: Library
+
+Fixed audioop.ratecv() with non-default weightB argument. Original patch by
+David Moore.
+
+..
+
+.. bpo: 22095
+.. date: 9641
+.. nonce: iISzxM
+.. section: Library
+
+Fixed HTTPConnection.set_tunnel with default port.  The port value in the
+host header was set to "None".  Patch by Demian Brecht.
+
+..
+
+.. bpo: 24257
+.. date: 9640
+.. nonce: L_efq0
+.. section: Library
+
+Fixed segmentation fault in sqlite3.Row constructor with faked cursor type.
+
+..
+
+.. bpo: 24286
+.. date: 9639
+.. nonce: QTU65z
+.. section: Library
+
+Dict view were not registered with the MappingView abstract base classes.
+This caused key and item views in OrderedDict to not be equal to their
+regular dict counterparts.
+
+..
+
+.. bpo: 22107
+.. date: 9638
+.. nonce: 2F8k4W
+.. section: Library
+
+tempfile.gettempdir() and tempfile.mkdtemp() now try again when a directory
+with the chosen name already exists on Windows as well as on Unix.
+tempfile.mkstemp() now fails early if parent directory is not valid (not
+exists or is a file) on Windows.
+
+..
+
+.. bpo: 6598
+.. date: 9637
+.. nonce: JdZNDt
+.. section: Library
+
+Increased time precision and random number range in email.utils.make_msgid()
+to strengthen the uniqueness of the message ID.
+
+..
+
+.. bpo: 24091
+.. date: 9636
+.. nonce: vBNeTI
+.. section: Library
+
+Fixed various crashes in corner cases in cElementTree.
+
+..
+
+.. bpo: 15267
+.. date: 9635
+.. nonce: xT65mc
+.. section: Library
+
+HTTPConnection.request() now is compatible with old-style classes (such as
+TemporaryFile).  Original patch by Atsuo Ishimoto.
+
+..
+
+.. bpo: 20014
+.. date: 9634
+.. nonce: NfHQd1
+.. section: Library
+
+array.array() now accepts unicode typecodes.  Based on patch by Vajrasky
+Kok.
+
+..
+
+.. bpo: 23637
+.. date: 9633
+.. nonce: 1yFWAy
+.. section: Library
+
+Showing a warning no longer fails with UnicodeError. Formatting unicode
+warning in the file with the path containing non-ascii characters no longer
+fails with UnicodeError.
+
+..
+
+.. bpo: 24134
+.. date: 9632
+.. nonce: 4cPfh1
+.. section: Library
+
+Reverted issue #24134 changes.
+
+..
+
+.. bpo: 15348
+.. date: 9631
+.. nonce: d1Fg01
+.. section: IDLE
+
+Stop the debugger engine (normally in a user process) before closing the
+debugger window (running in the IDLE process). This prevents the
+RuntimeErrors that were being caught and ignored.
+
+..
+
+.. bpo: 24455
+.. date: 9630
+.. nonce: x6YqtE
+.. section: IDLE
+
+Prevent IDLE from hanging when a) closing the shell while the debugger is
+active (15347); b) closing the debugger with the [X] button (15348); and c)
+activating the debugger when already active (24455). The patch by Mark
+Roseman does this by making two changes. 1. Suspend and resume the
+gui.interaction method with the tcl vwait mechanism intended for this
+purpose (instead of root.mainloop & .quit). 2. In gui.run, allow any
+existing interaction to terminate first.
+
+..
+
+.. bpo: 0
+.. date: 9629
+.. nonce: Yp9LRY
+.. section: IDLE
+
+Change 'The program' to 'Your program' in an IDLE 'kill program?' message to
+make it clearer that the program referred to is the currently running user
+program, not IDLE itself.
+
+..
+
+.. bpo: 24750
+.. date: 9628
+.. nonce: xgsi-K
+.. section: IDLE
+
+Improve the appearance of the IDLE editor window status bar. Patch by Mark
+Roseman.
+
+..
+
+.. bpo: 25313
+.. date: 9627
+.. nonce: xMXHpO
+.. section: IDLE
+
+Change the handling of new built-in text color themes to better address the
+compatibility problem introduced by the addition of IDLE Dark. Consistently
+use the revised idleConf.CurrentTheme everywhere in idlelib.
+
+..
+
+.. bpo: 24782
+.. date: 9626
+.. nonce: PCsWad
+.. section: IDLE
+
+Extension configuration is now a tab in the IDLE Preferences dialog rather
+than a separate dialog.   The former tabs are now a sorted list.  Patch by
+Mark Roseman.
+
+..
+
+.. bpo: 22726
+.. date: 9625
+.. nonce: x8T0dA
+.. section: IDLE
+
+Re-activate the config dialog help button with some content about the other
+buttons and the new IDLE Dark theme.
+
+..
+
+.. bpo: 24820
+.. date: 9624
+.. nonce: TFPJhr
+.. section: IDLE
+
+IDLE now has an 'IDLE Dark' built-in text color theme. It is more or less
+IDLE Classic inverted, with a cobalt blue background. Strings, comments,
+keywords, ... are still green, red, orange, ... . To use it with IDLEs
+released before November 2015, hit the 'Save as New Custom Theme' button and
+enter a new name, such as 'Custom Dark'.  The custom theme will work with
+any IDLE release, and can be modified.
+
+..
+
+.. bpo: 25224
+.. date: 9623
+.. nonce: 5Llwo4
+.. section: IDLE
+
+README.txt is now an idlelib index for IDLE developers and curious users.
+The previous user content is now in the IDLE doc chapter. 'IDLE' now means
+'Integrated Development and Learning Environment'.
+
+..
+
+.. bpo: 24820
+.. date: 9622
+.. nonce: ZUz9Fn
+.. section: IDLE
+
+Users can now set breakpoint colors in Settings -> Custom Highlighting.
+Original patch by Mark Roseman.
+
+..
+
+.. bpo: 24972
+.. date: 9621
+.. nonce: uc0uNo
+.. section: IDLE
+
+Inactive selection background now matches active selection background, as
+configured by users, on all systems.  Found items are now always highlighted
+on Windows.  Initial patch by Mark Roseman.
+
+..
+
+.. bpo: 24570
+.. date: 9620
+.. nonce: s3EkNn
+.. section: IDLE
+
+Idle: make calltip and completion boxes appear on Macs affected by a tk
+regression.  Initial patch by Mark Roseman.
+
+..
+
+.. bpo: 24988
+.. date: 9619
+.. nonce: tXqq4T
+.. section: IDLE
+
+Idle ScrolledList context menus (used in debugger) now work on Mac Aqua.
+Patch by Mark Roseman.
+
+..
+
+.. bpo: 24801
+.. date: 9618
+.. nonce: -bj_Ou
+.. section: IDLE
+
+Make right-click for context menu work on Mac Aqua. Patch by Mark Roseman.
+
+..
+
+.. bpo: 25173
+.. date: 9617
+.. nonce: EZzrPg
+.. section: IDLE
+
+Associate tkinter messageboxes with a specific widget. For Mac OSX, make
+them a 'sheet'.  Patch by Mark Roseman.
+
+..
+
+.. bpo: 25198
+.. date: 9616
+.. nonce: -j_BV7
+.. section: IDLE
+
+Enhance the initial html viewer now used for Idle Help. * Properly indent
+fixed-pitch text (patch by Mark Roseman). * Give code snippet a very
+Sphinx-like light blueish-gray background. * Re-use initial width and height set by
+users for shell and editor. * When the Table of Contents (TOC) menu is used,
+put the section header at the top of the screen.
+
+..
+
+.. bpo: 25225
+.. date: 9615
+.. nonce: 9pvdq6
+.. section: IDLE
+
+Condense and rewrite Idle doc section on text colors.
+
+..
+
+.. bpo: 21995
+.. date: 9614
+.. nonce: C5Rmzx
+.. section: IDLE
+
+Explain some differences between IDLE and console Python.
+
+..
+
+.. bpo: 22820
+.. date: 9613
+.. nonce: hix_8X
+.. section: IDLE
+
+Explain need for *print* when running file from Idle editor.
+
+..
+
+.. bpo: 25224
+.. date: 9612
+.. nonce: UVMYQq
+.. section: IDLE
+
+Doc: augment Idle feature list and no-subprocess section.
+
+..
+
+.. bpo: 25219
+.. date: 9611
+.. nonce: 8_9DYg
+.. section: IDLE
+
+Update doc for Idle command line options. Some were missing and notes were
+not correct.
+
+..
+
+.. bpo: 24861
+.. date: 9610
+.. nonce: Ecg2yT
+.. section: IDLE
+
+Most of idlelib is private and subject to change. Use idleib.idle.* to start
+Idle. See idlelib.__init__.__doc__.
+
+..
+
+.. bpo: 25199
+.. date: 9609
+.. nonce: ih7yY3
+.. section: IDLE
+
+Idle: add synchronization comments for future maintainers.
+
+..
+
+.. bpo: 16893
+.. date: 9608
+.. nonce: bZtPgJ
+.. section: IDLE
+
+Replace help.txt with help.html for Idle doc display. The new
+idlelib/help.html is rstripped Doc/build/html/library/idle.html. It looks
+better than help.txt and will better document Idle as released. The tkinter
+html viewer that works for this file was written by Mark Roseman. The now
+unused EditorWindow.HelpDialog class and helt.txt file are deprecated.
+
+..
+
+.. bpo: 24199
+.. date: 9607
+.. nonce: VKnZEv
+.. section: IDLE
+
+Deprecate unused idlelib.idlever with possible removal in 3.6.
+
+..
+
+.. bpo: 24790
+.. date: 9606
+.. nonce: hD1hlj
+.. section: IDLE
+
+Remove extraneous code (which also create 2 & 3 conflicts).
+
+..
+
+.. bpo: 23672
+.. date: 9605
+.. nonce: 8td2se
+.. section: IDLE
+
+Allow Idle to edit and run files with astral chars in name. Patch by Mohd
+Sanad Zaki Rizvi.
+
+..
+
+.. bpo: 24745
+.. date: 9604
+.. nonce: edbziT
+.. section: IDLE
+
+Idle editor default font. Switch from Courier to platform-sensitive
+TkFixedFont.  This should not affect current customized font selections.  If
+there is a problem, edit $HOME/.idlerc/config-main.cfg and remove 'fontxxx'
+entries from [Editor Window].  Patch by Mark Roseman.
+
+..
+
+.. bpo: 21192
+.. date: 9603
+.. nonce: CdbipH
+.. section: IDLE
+
+Idle editor. When a file is run, put its name in the restart bar. Do not
+print false prompts. Original patch by Adnan Umer.
+
+..
+
+.. bpo: 13884
+.. date: 9602
+.. nonce: vVcO1E
+.. section: IDLE
+
+Idle menus. Remove tearoff lines. Patch by Roger Serwy.
+
+..
+
+.. bpo: 15809
+.. date: 9601
+.. nonce: mfawdr
+.. section: IDLE
+
+IDLE shell now uses locale encoding instead of Latin1 for decoding unicode
+literals.
+
+..
+
+.. bpo: 24952
+.. date: 9600
+.. nonce: aJv9x1
+.. section: Documentation
+
+Clarify the default size argument of stack_size() in the "threading" and
+"thread" modules. Patch from Mattip.
+
+..
+
+.. bpo: 20769
+.. date: 9599
+.. nonce: ZUc9z9
+.. section: Documentation
+
+Improve reload() docs. Patch by Dorian Pula.
+
+..
+
+.. bpo: 23589
+.. date: 9598
+.. nonce: rjU421
+.. section: Documentation
+
+Remove duplicate sentence from the FAQ.  Patch by Yongzhi Pan.
+
+..
+
+.. bpo: 22155
+.. date: 9597
+.. nonce: 6Kq5Tv
+.. section: Documentation
+
+Add File Handlers subsection with createfilehandler to Tkinter doc.  Remove
+obsolete example from FAQ.  Patch by Martin Panter.
+
+..
+
+.. bpo: 24751
+.. date: 9596
+.. nonce: pL2pbj
+.. section: Tests
+
+When running regrtest with the ``-w`` command line option, a test run is no
+longer marked as a failure if all tests succeed when re-run.
+
+..
+
+.. bpo: 0
+.. date: 9595
+.. nonce: yeHJKJ
+.. section: Tests
+
+PCbuild\rt.bat now accepts an unlimited number of arguments to pass along to
+regrtest.py.  Previously there was a limit of 9.
+
+..
+
+.. bpo: 24915
+.. date: 9594
+.. nonce: N9MrQY
+.. section: Build
+
+When doing a PGO build, the test suite is now used instead of pybench; Clang
+support was also added as part off this work. Initial patch by Alecsandru
+Patrascu of Intel.
+
+..
+
+.. bpo: 24986
+.. date: 9593
+.. nonce: 1WyXeU
+.. section: Build
+
+It is now possible to build Python on Windows without errors when external
+libraries are not available.
+
+..
+
+.. bpo: 24508
+.. date: 9592
+.. nonce: m8-La8
+.. section: Build
+
+Backported the MSBuild project files from Python 3.5.  The backported files
+replace the old project files in PCbuild; the old files moved to PC/VS9.0
+and remain supported.
+
+..
+
+.. bpo: 24603
+.. date: 9591
+.. nonce: PyHyF5
+.. section: Build
+
+Update Windows builds and OS X 10.5 installer to use OpenSSL 1.0.2d.
+
+..
+
+.. bpo: 25022
+.. date: 9590
+.. nonce: vAt_zr
+.. section: Windows
+
+Removed very outdated PC/example_nt/ directory.
diff --git a/Misc/NEWS.d/2.7.12.rst b/Misc/NEWS.d/2.7.12.rst
new file mode 100644
index 0000000..1b2099a
--- /dev/null
+++ b/Misc/NEWS.d/2.7.12.rst
@@ -0,0 +1,26 @@
+.. bpo: 27641
+.. date: 9821
+.. nonce: Fhtvhi
+.. release date: 2016-06-25
+.. section: Build
+
+The configure script now inserts comments into the makefile to prevent the
+pgen executable from being cross-compiled.
+
+..
+
+.. bpo: 26930
+.. date: 9820
+.. nonce: 9JUeSD
+.. section: Build
+
+Update Windows builds to use OpenSSL 1.0.2h.
+
+..
+
+.. bpo: 27365
+.. date: 9819
+.. nonce: y8CVsn
+.. section: IDLE
+
+Fix about dialog.
diff --git a/Misc/NEWS.d/2.7.12rc1.rst b/Misc/NEWS.d/2.7.12rc1.rst
new file mode 100644
index 0000000..c86df39
--- /dev/null
+++ b/Misc/NEWS.d/2.7.12rc1.rst
@@ -0,0 +1,1161 @@
+.. bpo: 20041
+.. date: 9818
+.. nonce: TypyGp
+.. release date: 2016-06-12
+.. section: Core and Builtins
+
+Fixed TypeError when frame.f_trace is set to None. Patch by Xavier de Gaye.
+
+..
+
+.. bpo: 25702
+.. date: 9817
+.. nonce: ipxyJs
+.. section: Core and Builtins
+
+A --with-lto configure option has been added that will enable link time
+optimizations at build time during a make profile-opt. Some compilers and
+toolchains are known to not produce stable code when using LTO, be sure to
+test things thoroughly before relying on it. It can provide a few % speed up
+over profile-opt alone.
+
+..
+
+.. bpo: 26168
+.. date: 9816
+.. nonce: -nPBL6
+.. section: Core and Builtins
+
+Fixed possible refleaks in failing Py_BuildValue() with the "N" format unit.
+
+..
+
+.. bpo: 27039
+.. date: 9815
+.. nonce: Zj7tV7
+.. section: Core and Builtins
+
+Fixed bytearray.remove() for values greater than 127.  Patch by Joe Jevnik.
+
+..
+
+.. bpo: 4806
+.. date: 9814
+.. nonce: BOapuA
+.. section: Core and Builtins
+
+Avoid masking the original TypeError exception when using star (*) unpacking
+and the exception was raised from a generator.  Based on patch by Hagen
+Fürstenau.
+
+..
+
+.. bpo: 26659
+.. date: 9813
+.. nonce: 5PRa83
+.. section: Core and Builtins
+
+Make the builtin slice type support cycle collection.
+
+..
+
+.. bpo: 26718
+.. date: 9812
+.. nonce: K5PQ8j
+.. section: Core and Builtins
+
+super.__init__ no longer leaks memory if called multiple times. NOTE: A
+direct call of super.__init__ is not endorsed!
+
+..
+
+.. bpo: 13410
+.. date: 9811
+.. nonce: wyldQ4
+.. section: Core and Builtins
+
+Fixed a bug in PyUnicode_Format where it failed to properly ignore errors
+from a __int__() method.
+
+..
+
+.. bpo: 26494
+.. date: 9810
+.. nonce: Ar7ILt
+.. section: Core and Builtins
+
+Fixed crash on iterating exhausting iterators. Affected classes are generic
+sequence iterators, iterators of bytearray, list, tuple, set, frozenset,
+dict, OrderedDict and corresponding views.
+
+..
+
+.. bpo: 26581
+.. date: 9809
+.. nonce: yNA7nm
+.. section: Core and Builtins
+
+If coding cookie is specified multiple times on a line in Python source code
+file, only the first one is taken to account.
+
+..
+
+.. bpo: 22836
+.. date: 9808
+.. nonce: cimt1y
+.. section: Core and Builtins
+
+Ensure exception reports from PyErr_Display() and PyErr_WriteUnraisable()
+are sensible even when formatting them produces secondary errors.  This
+affects the reports produced by sys.__excepthook__() and when __del__()
+raises an exception.
+
+..
+
+.. bpo: 22847
+.. date: 9807
+.. nonce: 6baj9f
+.. section: Core and Builtins
+
+Improve method cache efficiency.
+
+..
+
+.. bpo: 25843
+.. date: 9806
+.. nonce: t2kGug
+.. section: Core and Builtins
+
+When compiling code, don't merge constants if they are equal but have a
+different types. For example, ``f1, f2 = lambda: 1, lambda: 1.0`` is now
+correctly compiled to two different functions: ``f1()`` returns ``1``
+(``int``) and ``f2()`` returns ``1.0`` (``int``), even if ``1`` and ``1.0``
+are equal.
+
+..
+
+.. bpo: 22995
+.. date: 9805
+.. nonce: Rhr9Dh
+.. section: Core and Builtins
+
+[UPDATE] Remove the one of the pickleability tests in _PyObject_GetState()
+due to regressions observed in Cython-based projects.
+
+..
+
+.. bpo: 25961
+.. date: 9804
+.. nonce: Hdjjw0
+.. section: Core and Builtins
+
+Disallowed null characters in the type name.
+
+..
+
+.. bpo: 22995
+.. date: 9803
+.. nonce: Wq0E86
+.. section: Core and Builtins
+
+Instances of extension types with a state that aren't subclasses of list or
+dict and haven't implemented any pickle-related methods (__reduce__,
+__reduce_ex__, __getnewargs__, __getnewargs_ex__, or __getstate__), can no
+longer be pickled.  Including memoryview.
+
+..
+
+.. bpo: 20440
+.. date: 9802
+.. nonce: GCwOfH
+.. section: Core and Builtins
+
+Massive replacing unsafe attribute setting code with special macro
+Py_SETREF.
+
+..
+
+.. bpo: 25421
+.. date: 9801
+.. nonce: c47YEL
+.. section: Core and Builtins
+
+__sizeof__ methods of builtin types now use dynamic basic size. This allows
+sys.getsize() to work correctly with their subclasses with __slots__
+defined.
+
+..
+
+.. bpo: 19543
+.. date: 9800
+.. nonce: FLtPTG
+.. section: Core and Builtins
+
+Added Py3k warning for decoding unicode.
+
+..
+
+.. bpo: 24097
+.. date: 9799
+.. nonce: Vt4E-i
+.. section: Core and Builtins
+
+Fixed crash in object.__reduce__() if slot name is freed inside __getattr__.
+
+..
+
+.. bpo: 24731
+.. date: 9798
+.. nonce: F4USDN
+.. section: Core and Builtins
+
+Fixed crash on converting objects with special methods __str__, __trunc__,
+and __float__ returning instances of subclasses of str, long, and float to
+subclasses of str, long, and float correspondingly.
+
+..
+
+.. bpo: 26478
+.. date: 9797
+.. nonce: n0dB8e
+.. section: Core and Builtins
+
+Fix semantic bugs when using binary operators with dictionary views and
+tuples.
+
+..
+
+.. bpo: 26171
+.. date: 9796
+.. nonce: 8SaQEa
+.. section: Core and Builtins
+
+Fix possible integer overflow and heap corruption in zipimporter.get_data().
+
+..
+
+.. bpo: 26556
+.. date: 9795
+.. nonce: v5j2uL
+.. section: Library
+
+Update expat to 2.1.1, fixes CVE-2015-1283.
+
+..
+
+.. bpo: 0
+.. date: 9794
+.. nonce: qP8WT-
+.. section: Library
+
+Fix TLS stripping vulnerability in smptlib, CVE-2016-0772.  Reported by Team
+Oststrom
+
+..
+
+.. bpo: 7356
+.. date: 9793
+.. nonce: cS5wgj
+.. section: Library
+
+ctypes.util: Make parsing of ldconfig output independent of the locale.
+
+..
+
+.. bpo: 25738
+.. date: 9792
+.. nonce: I_1jpQ
+.. section: Library
+
+Stop BaseHTTPServer.BaseHTTPRequestHandler.send_error() from sending a
+message body for 205 Reset Content.  Also, don't send the Content-Type
+header field in responses that don't have a body.  Based on patch by Susumu
+Koshiba.
+
+..
+
+.. bpo: 21313
+.. date: 9791
+.. nonce: W30MBr
+.. section: Library
+
+Fix the "platform" module to tolerate when sys.version contains truncated
+build information.
+
+..
+
+.. bpo: 27211
+.. date: 9790
+.. nonce: _7HYjx
+.. section: Library
+
+Fix possible memory corruption in io.IOBase.readline().
+
+..
+
+.. bpo: 27114
+.. date: 9789
+.. nonce: bGCuAM
+.. section: Library
+
+Fix SSLContext._load_windows_store_certs fails with PermissionError
+
+..
+
+.. bpo: 14132
+.. date: 9788
+.. nonce: Gpiuxk
+.. section: Library
+
+Fix urllib.request redirect handling when the target only has a query
+string.  Fix by Ján Janech.
+
+..
+
+.. bpo: 0
+.. date: 9787
+.. nonce: bMrCz8
+.. section: Library
+
+Removed the requirements for the ctypes and modulefinder modules to be
+compatible with earlier Python versions.
+
+..
+
+.. bpo: 22274
+.. date: 9786
+.. nonce: 0RHDMN
+.. section: Library
+
+In the subprocess module, allow stderr to be redirected to stdout even when
+stdout is not redirected.  Patch by Akira Li.
+
+..
+
+.. bpo: 12045
+.. date: 9785
+.. nonce: LEH09W
+.. section: Library
+
+Avoid duplicate execution of command in ctypes.util._get_soname(). Patch by
+Sijin Joseph.
+
+..
+
+.. bpo: 26960
+.. date: 9784
+.. nonce: 2l_IOl
+.. section: Library
+
+Backported #16270 from Python 3 to Python 2, to prevent urllib from hanging
+when retrieving certain FTP files.
+
+..
+
+.. bpo: 25745
+.. date: 9783
+.. nonce: -n8acU
+.. section: Library
+
+Fixed leaking a userptr in curses panel destructor.
+
+..
+
+.. bpo: 17765
+.. date: 9782
+.. nonce: hiSVS1
+.. section: Library
+
+weakref.ref() no longer silently ignores keyword arguments. Patch by Georg
+Brandl.
+
+..
+
+.. bpo: 26873
+.. date: 9781
+.. nonce: _qIPUp
+.. section: Library
+
+xmlrpclib now raises ResponseError on unsupported type tags instead of
+silently return incorrect result.
+
+..
+
+.. bpo: 24114
+.. date: 9780
+.. nonce: RMRMtM
+.. section: Library
+
+Fix an uninitialized variable in `ctypes.util`.
+
+The bug only occurs on SunOS when the ctypes implementation searches for the
+`crle` program.  Patch by Xiang Zhang.  Tested on SunOS by Kees Bos.
+
+..
+
+.. bpo: 26864
+.. date: 9779
+.. nonce: DFsgvI
+.. section: Library
+
+In urllib, change the proxy bypass host checking against no_proxy to be
+case-insensitive, and to not match unrelated host names that happen to have
+a bypassed hostname as a suffix.  Patch by Xiang Zhang.
+
+..
+
+.. bpo: 26804
+.. date: 9778
+.. nonce: 6b9_UW
+.. section: Library
+
+urllib will prefer lower_case proxy environment variables over UPPER_CASE or
+Mixed_Case ones. Patch contributed by Hans-Peter Jansen.
+
+..
+
+.. bpo: 26837
+.. date: 9777
+.. nonce: IKt9NJ
+.. section: Library
+
+assertSequenceEqual() now correctly outputs non-stringified differing items.
+This affects assertListEqual() and assertTupleEqual().
+
+..
+
+.. bpo: 26822
+.. date: 9776
+.. nonce: rYSL4W
+.. section: Library
+
+itemgetter, attrgetter and methodcaller objects no longer silently ignore
+keyword arguments.
+
+..
+
+.. bpo: 26657
+.. date: 9775
+.. nonce: dfteub
+.. section: Library
+
+Fix directory traversal vulnerability with SimpleHTTPServer on Windows.
+This fixes a regression that was introduced in 2.7.7.  Based on patch by
+Philipp Hagemeister.
+
+..
+
+.. bpo: 19377
+.. date: 9774
+.. nonce: Al9S53
+.. section: Library
+
+Add .svg to mimetypes.types_map.
+
+..
+
+.. bpo: 13952
+.. date: 9773
+.. nonce: SOoTVE
+.. section: Library
+
+Add .csv to mimetypes.types_map.  Patch by Geoff Wilson.
+
+..
+
+.. bpo: 16329
+.. date: 9772
+.. nonce: nuXD8W
+.. section: Library
+
+Add .webm to mimetypes.types_map.  Patch by Giampaolo Rodola'.
+
+..
+
+.. bpo: 23735
+.. date: 9771
+.. nonce: Y5oQ9r
+.. section: Library
+
+Handle terminal resizing with Readline 6.3+ by installing our own SIGWINCH
+handler.  Patch by Eric Price.
+
+..
+
+.. bpo: 26644
+.. date: 9770
+.. nonce: 7tt1tk
+.. section: Library
+
+Raise ValueError rather than SystemError when a negative length is passed to
+SSLSocket.recv() or read().
+
+..
+
+.. bpo: 23804
+.. date: 9769
+.. nonce: PP63Ff
+.. section: Library
+
+Fix SSL recv(0) and read(0) methods to return zero bytes instead of up to
+1024.
+
+..
+
+.. bpo: 24266
+.. date: 9768
+.. nonce: YZgVyM
+.. section: Library
+
+Ctrl+C during Readline history search now cancels the search mode when
+compiled with Readline 7.
+
+..
+
+.. bpo: 23857
+.. date: 9767
+.. nonce: u94yEL
+.. section: Library
+
+Implement PEP 493, adding a Python-2-only ssl module API and environment
+variable to configure the default handling of SSL/TLS certificates for HTTPS
+connections.
+
+..
+
+.. bpo: 26313
+.. date: 9766
+.. nonce: xhX2Gu
+.. section: Library
+
+ssl.py _load_windows_store_certs fails if windows cert store is empty. Patch
+by Baji.
+
+..
+
+.. bpo: 26513
+.. date: 9765
+.. nonce: HoPepy
+.. section: Library
+
+Fixes platform module detection of Windows Server
+
+..
+
+.. bpo: 23718
+.. date: 9764
+.. nonce: AMPC0o
+.. section: Library
+
+Fixed parsing time in week 0 before Jan 1.  Original patch by Tamás Bence
+Gedai.
+
+..
+
+.. bpo: 26177
+.. date: 9763
+.. nonce: HlSWer
+.. section: Library
+
+Fixed the keys() method for Canvas and Scrollbar widgets.
+
+..
+
+.. bpo: 15068
+.. date: 9762
+.. nonce: bcHtiw
+.. section: Library
+
+Got rid of excessive buffering in the fileinput module. The bufsize
+parameter is no longer used.
+
+..
+
+.. bpo: 2202
+.. date: 9761
+.. nonce: EPsrOA
+.. section: Library
+
+Fix UnboundLocalError in AbstractDigestAuthHandler.get_algorithm_impls.
+Initial patch by Mathieu Dupuy.
+
+..
+
+.. bpo: 26475
+.. date: 9760
+.. nonce: JXVccY
+.. section: Library
+
+Fixed debugging output for regular expressions with the (?x) flag.
+
+..
+
+.. bpo: 26385
+.. date: 9759
+.. nonce: mfwNyt
+.. section: Library
+
+Remove the file if the internal fdopen() call in NamedTemporaryFile() fails.
+Based on patch by Silent Ghost.
+
+..
+
+.. bpo: 26309
+.. date: 9758
+.. nonce: TSTJ3A
+.. section: Library
+
+In the "SocketServer" module, shut down the request (closing the connected
+socket) when verify_request() returns false.  Based on patch by Aviv
+Palivoda.
+
+..
+
+.. bpo: 25939
+.. date: 9757
+.. nonce: I-qK2E
+.. section: Library
+
+On Windows open the cert store readonly in ssl.enum_certificates.
+
+..
+
+.. bpo: 24303
+.. date: 9756
+.. nonce: FDBJWM
+.. section: Library
+
+Fix random EEXIST upon multiprocessing semaphores creation with Linux PID
+namespaces enabled.
+
+..
+
+.. bpo: 25698
+.. date: 9755
+.. nonce: Id3NAo
+.. section: Library
+
+Importing module if the stack is too deep no longer replaces imported module
+with the empty one.
+
+..
+
+.. bpo: 12923
+.. date: 9754
+.. nonce: HPAu-B
+.. section: Library
+
+Reset FancyURLopener's redirect counter even if there is an exception.
+Based on patches by Brian Brazil and Daniel Rocco.
+
+..
+
+.. bpo: 25945
+.. date: 9753
+.. nonce: guNgNM
+.. section: Library
+
+Fixed a crash when unpickle the functools.partial object with wrong state.
+Fixed a leak in failed functools.partial constructor. "args" and "keywords"
+attributes of functools.partial have now always types tuple and dict
+correspondingly.
+
+..
+
+.. bpo: 19883
+.. date: 9752
+.. nonce: z9TsO6
+.. section: Library
+
+Fixed possible integer overflows in zipimport.
+
+..
+
+.. bpo: 26147
+.. date: 9751
+.. nonce: UA8O6s
+.. section: Library
+
+xmlrpclib now works with unicode not encodable with used non-UTF-8 encoding.
+
+..
+
+.. bpo: 16620
+.. date: 9750
+.. nonce: rxpn_Y
+.. section: Library
+
+Fixed AttributeError in msilib.Directory.glob().
+
+..
+
+.. bpo: 21847
+.. date: 9749
+.. nonce: smLnll
+.. section: Library
+
+Fixed xmlrpclib on Unicode-disabled builds.
+
+..
+
+.. bpo: 6500
+.. date: 9748
+.. nonce: n8NGo4
+.. section: Library
+
+Fixed infinite recursion in urllib2.Request.__getattr__().
+
+..
+
+.. bpo: 26083
+.. date: 9747
+.. nonce: siyOnS
+.. section: Library
+
+Workaround a subprocess bug that raises an incorrect "ValueError: insecure
+string pickle" exception instead of the actual exception on some platforms
+such as Mac OS X when an exception raised in the forked child process prior
+to the exec() was large enough that it overflowed the internal errpipe_read
+pipe buffer.
+
+..
+
+.. bpo: 24103
+.. date: 9746
+.. nonce: gWAG0r
+.. section: Library
+
+Fixed possible use after free in ElementTree.iterparse().
+
+..
+
+.. bpo: 20954
+.. date: 9745
+.. nonce: H9-NYO
+.. section: Library
+
+_args_from_interpreter_flags used by multiprocessing and some tests no
+longer behaves incorrectly in the presence of the PYTHONHASHSEED environment
+variable.
+
+..
+
+.. bpo: 14285
+.. date: 9744
+.. nonce: Z5YcQy
+.. section: Library
+
+When executing a package with the "python -m package" option, and package
+initialization raises ImportError, a proper traceback is now reported.
+
+..
+
+.. bpo: 6478
+.. date: 9743
+.. nonce: -Bi9Hb
+.. section: Library
+
+_strptime's regexp cache now is reset after changing timezone with
+time.tzset().
+
+..
+
+.. bpo: 25718
+.. date: 9742
+.. nonce: D9mHZF
+.. section: Library
+
+Fixed copying object with state with boolean value is false.
+
+..
+
+.. bpo: 25742
+.. date: 9741
+.. nonce: y6AAQ4
+.. section: Library
+
+:func:`locale.setlocale` now accepts a Unicode string for its second
+parameter.
+
+..
+
+.. bpo: 10131
+.. date: 9740
+.. nonce: a7tptz
+.. section: Library
+
+Fixed deep copying of minidom documents.  Based on patch by Marian Ganisin.
+
+..
+
+.. bpo: 25725
+.. date: 9739
+.. nonce: mGRrqb
+.. section: Library
+
+Fixed a reference leak in cPickle.loads() when unpickling invalid data
+including tuple instructions.
+
+..
+
+.. bpo: 25663
+.. date: 9738
+.. nonce: Ofwfqa
+.. section: Library
+
+In the Readline completer, avoid listing duplicate global names, and search
+the global namespace before searching builtins.
+
+..
+
+.. bpo: 25688
+.. date: 9737
+.. nonce: 8P1HOv
+.. section: Library
+
+Fixed file leak in ElementTree.iterparse() raising an error.
+
+..
+
+.. bpo: 23914
+.. date: 9736
+.. nonce: vQS48b
+.. section: Library
+
+Fixed SystemError raised by CPickle unpickler on broken data.
+
+..
+
+.. bpo: 25924
+.. date: 9735
+.. nonce: Uxr2vt
+.. section: Library
+
+Avoid unnecessary serialization of getaddrinfo(3) calls on OS X versions
+10.5 or higher.  Original patch by A. Jesse Jiryu Davis.
+
+..
+
+.. bpo: 26406
+.. date: 9734
+.. nonce: ihvhF4
+.. section: Library
+
+Avoid unnecessary serialization of getaddrinfo(3) calls on current versions
+of OpenBSD and NetBSD.  Patch by A. Jesse Jiryu Davis.
+
+..
+
+.. bpo: 5124
+.. date: 9733
+.. nonce: 4kwBvM
+.. section: IDLE
+
+Paste with text selected now replaces the selection on X11. This matches how
+paste works on Windows, Mac, most modern Linux apps, and ttk widgets.
+Original patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 24759
+.. date: 9732
+.. nonce: ccmySu
+.. section: IDLE
+
+Make clear in idlelib.idle_test.__init__ that the directory is a private
+implementation of test.test_idle and tool for maintainers.
+
+..
+
+.. bpo: 26673
+.. date: 9731
+.. nonce: dh0_Ij
+.. section: IDLE
+
+When tk reports font size as 0, change to size 10. Such fonts on Linux
+prevented the configuration dialog from opening.
+
+..
+
+.. bpo: 27044
+.. date: 9730
+.. nonce: 4y7tyM
+.. section: IDLE
+
+Add ConfigDialog.remove_var_callbacks to stop memory leaks.
+
+..
+
+.. bpo: 0
+.. date: 9729
+.. nonce: _YJfG7
+.. section: IDLE
+
+In the 'IDLE-console differences' section of the IDLE doc, clarify how
+running with IDLE affects sys.modules and the standard streams.
+
+..
+
+.. bpo: 25507
+.. date: 9728
+.. nonce: bx-miX
+.. section: IDLE
+
+fix incorrect change in IOBinding that prevented printing. Change also
+prevented saving shell window with non-ascii characters. Augment IOBinding
+htest to include all major IOBinding functions.
+
+..
+
+.. bpo: 25905
+.. date: 9727
+.. nonce: FzNb3B
+.. section: IDLE
+
+Revert unwanted conversion of ' to ’ RIGHT SINGLE QUOTATION MARK in
+README.txt and open this and NEWS.txt with 'ascii'. Re-encode CREDITS.txt to
+utf-8 and open it with 'utf-8'.
+
+..
+
+.. bpo: 26417
+.. date: 9726
+.. nonce: XmSxEK
+.. section: IDLE
+
+Prevent spurious errors and incorrect defaults when installing IDLE 2.7 on
+OS X: default configuration settings are no longer installed from OS X
+specific copies.
+
+..
+
+.. bpo: 26736
+.. date: 9725
+.. nonce: U_Hyqo
+.. section: Documentation
+
+Used HTTPS for external links in the documentation if possible.
+
+..
+
+.. bpo: 6953
+.. date: 9724
+.. nonce: Zk6rno
+.. section: Documentation
+
+Rework the Readline module documentation to group related functions
+together, and add more details such as what underlying Readline functions
+and variables are accessed.
+
+..
+
+.. bpo: 26014
+.. date: 9723
+.. nonce: C3Hbb7
+.. section: Documentation
+
+Guide users to the newer packaging documentation as was done for Python 3.x.
+In particular, the top-level 2.7 documentation page now links to the newer
+installer and distributions pages rather than the legacy install and
+Distutils pages; these are still linked to in the library/distutils doc
+page.
+
+..
+
+.. bpo: 21916
+.. date: 9722
+.. nonce: muwCyp
+.. section: Tests
+
+Added tests for the turtle module.  Patch by ingrid, Gregory Loyse and Jelle
+Zijlstra.
+
+..
+
+.. bpo: 25940
+.. date: 9721
+.. nonce: PgiLVN
+.. section: Tests
+
+Changed test_ssl to use self-signed.pythontest.net.  This avoids relying on
+svn.python.org, which recently changed root certificate.
+
+..
+
+.. bpo: 25616
+.. date: 9720
+.. nonce: Qr-60p
+.. section: Tests
+
+Tests for OrderedDict are extracted from test_collections into separate file
+test_ordered_dict.
+
+..
+
+.. bpo: 22359
+.. date: 9719
+.. nonce: laY9yB
+.. section: Build
+
+Avoid incorrect recursive $(MAKE), and disable the rules for running pgen
+when cross-compiling.  The pgen output is normally saved with the source
+code anyway, and is still regenerated when doing a native build. Patch by
+Jonas Wagner and Xavier de Gaye.
+
+..
+
+.. bpo: 19450
+.. date: 9718
+.. nonce: iS8xhV
+.. section: Build
+
+Update Windows builds to use SQLite 3.8.11.0.
+
+..
+
+.. bpo: 27229
+.. date: 9717
+.. nonce: C2NDch
+.. section: Build
+
+Fix the cross-compiling pgen rule for in-tree builds.  Patch by Xavier de
+Gaye.
+
+..
+
+.. bpo: 17603
+.. date: 9716
+.. nonce: 102DA-
+.. section: Build
+
+Avoid error about nonexistant fileblocks.o file by using a lower-level check
+for st_blocks in struct stat.
+
+..
+
+.. bpo: 26465
+.. date: 9715
+.. nonce: _YR608
+.. section: Build
+
+Update Windows builds to use OpenSSL 1.0.2g.
+
+..
+
+.. bpo: 24421
+.. date: 9714
+.. nonce: 2zY7vM
+.. section: Build
+
+Compile Modules/_math.c once, before building extensions. Previously it
+could fail to compile properly if the math and cmath builds were concurrent.
+
+..
+
+.. bpo: 25824
+.. date: 9713
+.. nonce: u0HToh
+.. section: Build
+
+Fixes sys.winver to not include any architecture suffix.
+
+..
+
+.. bpo: 25348
+.. date: 9712
+.. nonce: u6_BaQ
+.. section: Build
+
+Added ``--pgo`` and ``--pgo-job`` arguments to ``PCbuild\build.bat`` for
+building with Profile-Guided Optimization.  The old
+``PCbuild\build_pgo.bat`` script is now deprecated, and simply calls
+``PCbuild\build.bat --pgo %*``.
+
+..
+
+.. bpo: 25827
+.. date: 9711
+.. nonce: yg3DMM
+.. section: Build
+
+Add support for building with ICC to ``configure``, including a new
+``--with-icc`` flag.
+
+..
+
+.. bpo: 25696
+.. date: 9710
+.. nonce: 2R_wIv
+.. section: Build
+
+Fix installation of Python on UNIX with make -j9.
+
+..
+
+.. bpo: 26930
+.. date: 9709
+.. nonce: Sqz2O3
+.. section: Build
+
+Update OS X 10.5+ 32-bit-only installer to build and link with OpenSSL
+1.0.2h.
+
+..
+
+.. bpo: 26268
+.. date: 9708
+.. nonce: I3-YLh
+.. section: Build
+
+Update Windows builds to use OpenSSL 1.0.2f.
+
+..
+
+.. bpo: 25136
+.. date: 9707
+.. nonce: Vi-fmO
+.. section: Build
+
+Support Apple Xcode 7's new textual SDK stub libraries.
+
+..
+
+.. bpo: 26799
+.. date: 9706
+.. nonce: gK2VXX
+.. section: Tools/Demos
+
+Fix python-gdb.py: don't get C types once when the Python code is loaded,
+but get C types on demand. The C types can change if python-gdb.py is loaded
+before the Python executable. Patch written by Thomas Ilsche.
+
+..
+
+.. bpo: 30255
+.. date: 9705
+.. nonce: EGf-zW
+.. section: C API
+
+PySlice_GetIndicesEx now clips the step to [-PY_SSIZE_T_MAX, PY_SSIZE_T_MAX]
+instead of [-PY_SSIZE_T_MAX-1, PY_SSIZE_T_MAX].  This makes it safe to do
+"step = -step" when reversing a slice.
+
+..
+
+.. bpo: 26476
+.. date: 9704
+.. nonce: oJrb6q
+.. section: C API
+
+Fixed compilation error when use PyErr_BadInternalCall() in C++. Patch by
+Jeroen Demeyer.
+
+..
+
+.. bpo: 17500
+.. date: 9703
+.. nonce: QTZbRV
+.. section: Windows
+
+Remove unused and outdated icons. (See also:
+https://github.com/python/pythondotorg/issues/945)
diff --git a/Misc/NEWS.d/2.7.13.rst b/Misc/NEWS.d/2.7.13.rst
new file mode 100644
index 0000000..0d065e8
--- /dev/null
+++ b/Misc/NEWS.d/2.7.13.rst
@@ -0,0 +1,7 @@
+.. bpo: 5322
+.. date: 9926
+.. nonce: _CaEiN
+.. release date: 2016-12-17
+.. section: Core and Builtins
+
+Revert a37cc3d926ec.
diff --git a/Misc/NEWS.d/2.7.13rc1.rst b/Misc/NEWS.d/2.7.13rc1.rst
new file mode 100644
index 0000000..6bef454
--- /dev/null
+++ b/Misc/NEWS.d/2.7.13rc1.rst
@@ -0,0 +1,1025 @@
+.. bpo: 5322
+.. date: 9925
+.. nonce: 8Fq059
+.. release date: 2016-12-03
+.. section: Core and Builtins
+
+Fixed setting __new__ to a PyCFunction inside Python code. Original patch by
+Andreas Stührk.
+
+..
+
+.. bpo: 28847
+.. date: 9924
+.. nonce: iG6VRD
+.. section: Core and Builtins
+
+dumbdbm no longer writes the index file in when it is not changed and
+supports reading read-only files.
+
+..
+
+.. bpo: 11145
+.. date: 9923
+.. nonce: 3BeZaz
+.. section: Core and Builtins
+
+Fixed miscellaneous issues with C-style formatting of types with custom
+__oct__ and __hex__.
+
+..
+
+.. bpo: 24469
+.. date: 9922
+.. nonce: dl8lJ4
+.. section: Core and Builtins
+
+Fixed memory leak caused by int subclasses without overridden tp_free (e.g.
+C-inherited Cython classes).
+
+..
+
+.. bpo: 19398
+.. date: 9921
+.. nonce: RYbEGH
+.. section: Core and Builtins
+
+Extra slash no longer added to sys.path components in case of empty
+compile-time PYTHONPATH components.
+
+..
+
+.. bpo: 21720
+.. date: 9920
+.. nonce: XSd6LI
+.. section: Core and Builtins
+
+Improve exception message when the type of fromlist is unicode. fromlist
+parameter of __import__() only accepts str in Python 2 and this will help to
+identify the problem especially when the unicode_literals future import is
+used.
+
+..
+
+.. bpo: 26906
+.. date: 9919
+.. nonce: YBjcwI
+.. section: Core and Builtins
+
+Resolving special methods of uninitialized type now causes implicit
+initialization of the type instead of a fail.
+
+..
+
+.. bpo: 18287
+.. date: 9918
+.. nonce: k6jffS
+.. section: Core and Builtins
+
+PyType_Ready() now checks that tp_name is not NULL. Original patch by Niklas
+Koep.
+
+..
+
+.. bpo: 24098
+.. date: 9917
+.. nonce: XqlP_1
+.. section: Core and Builtins
+
+Fixed possible crash when AST is changed in process of compiling it.
+
+..
+
+.. bpo: 28350
+.. date: 9916
+.. nonce: 8M5Eg9
+.. section: Core and Builtins
+
+String constants with null character no longer interned.
+
+..
+
+.. bpo: 27942
+.. date: 9915
+.. nonce: ZGuhns
+.. section: Core and Builtins
+
+String constants now interned recursively in tuples and frozensets.
+
+..
+
+.. bpo: 15578
+.. date: 9914
+.. nonce: xSQWiu
+.. section: Core and Builtins
+
+Correctly incref the parent module while importing.
+
+..
+
+.. bpo: 26307
+.. date: 9913
+.. nonce: Puk2rd
+.. section: Core and Builtins
+
+The profile-opt build now applies PGO to the built-in modules.
+
+..
+
+.. bpo: 26020
+.. date: 9912
+.. nonce: niLbLa
+.. section: Core and Builtins
+
+set literal evaluation order did not match documented behaviour.
+
+..
+
+.. bpo: 27870
+.. date: 9911
+.. nonce: Y0u34u
+.. section: Core and Builtins
+
+A left shift of zero by a large integer no longer attempts to allocate large
+amounts of memory.
+
+..
+
+.. bpo: 25604
+.. date: 9910
+.. nonce: UkeHGy
+.. section: Core and Builtins
+
+Fix a minor bug in integer true division; this bug could potentially have
+caused off-by-one-ulp results on platforms with unreliable ldexp
+implementations.
+
+..
+
+.. bpo: 27473
+.. date: 9909
+.. nonce: d8HWze
+.. section: Core and Builtins
+
+Fixed possible integer overflow in str, unicode and bytearray concatenations
+and repetitions.  Based on patch by Xiang Zhang.
+
+..
+
+.. bpo: 27507
+.. date: 9908
+.. nonce: 3pX0Be
+.. section: Core and Builtins
+
+Add integer overflow check in bytearray.extend().  Patch by Xiang Zhang.
+
+..
+
+.. bpo: 27581
+.. date: 9907
+.. nonce: KezjNt
+.. section: Core and Builtins
+
+Don't rely on wrapping for overflow check in PySequence_Tuple().  Patch by
+Xiang Zhang.
+
+..
+
+.. bpo: 23908
+.. date: 9906
+.. nonce: xXL6_c
+.. section: Core and Builtins
+
+os functions, open() and the io.FileIO constructor now reject unicode paths
+with embedded null character on Windows instead of silently truncating them.
+
+..
+
+.. bpo: 27514
+.. date: 9905
+.. nonce: NLbwPG
+.. section: Core and Builtins
+
+Make having too many statically nested blocks a SyntaxError instead of
+SystemError.
+
+..
+
+.. bpo: 25659
+.. date: 9904
+.. nonce: lE2IlT
+.. section: Library
+
+In ctypes, prevent a crash calling the from_buffer() and from_buffer_copy()
+methods on abstract classes like Array.
+
+..
+
+.. bpo: 28563
+.. date: 9903
+.. nonce: iweEiw
+.. section: Library
+
+Fixed possible DoS and arbitrary code execution when handle plural form
+selections in the gettext module.  The expression parser now supports exact
+syntax supported by GNU gettext.
+
+..
+
+.. bpo: 28387
+.. date: 9902
+.. nonce: 1clJu7
+.. section: Library
+
+Fixed possible crash in _io.TextIOWrapper deallocator when the garbage
+collector is invoked in other thread.  Based on patch by Sebastian Cufre.
+
+..
+
+.. bpo: 28449
+.. date: 9901
+.. nonce: 5JK6ES
+.. section: Library
+
+tarfile.open() with mode "r" or "r:" now tries to open a tar file with
+compression before trying to open it without compression.  Otherwise it had
+50% chance failed with ignore_zeros=True.
+
+..
+
+.. bpo: 25464
+.. date: 9900
+.. nonce: DTGbbr
+.. section: Library
+
+Fixed HList.header_exists() in Tix module by adding a workaround to Tix
+library bug.
+
+..
+
+.. bpo: 28488
+.. date: 9899
+.. nonce: TgO112
+.. section: Library
+
+shutil.make_archive() no longer adds entry "./" to ZIP archive.
+
+..
+
+.. bpo: 28480
+.. date: 9898
+.. nonce: Qh4Xeq
+.. section: Library
+
+Fix error building _sqlite3 module when multithreading is disabled.
+
+..
+
+.. bpo: 24452
+.. date: 9897
+.. nonce: m9Kyg3
+.. section: Library
+
+Make webbrowser support Chrome on Mac OS X.
+
+..
+
+.. bpo: 26293
+.. date: 9896
+.. nonce: 2mjvwX
+.. section: Library
+
+Fixed writing ZIP files that starts not from the start of the file.  Offsets
+in ZIP file now are relative to the start of the archive in conforming to
+the specification.
+
+..
+
+.. bpo: 0
+.. date: 9895
+.. nonce: 81jNns
+.. section: Library
+
+Fix possible integer overflows and crashes in the mmap module with unusual
+usage patterns.
+
+..
+
+.. bpo: 27897
+.. date: 9894
+.. nonce: wfWe9B
+.. section: Library
+
+Fixed possible crash in sqlite3.Connection.create_collation() if pass
+invalid string-like object as a name.  Original patch by Xiang Zhang.
+
+..
+
+.. bpo: 1703178
+.. date: 9893
+.. nonce: meb49K
+.. section: Library
+
+Fix the ability to pass the --link-objects option to the distutils build_ext
+command.
+
+..
+
+.. bpo: 28253
+.. date: 9892
+.. nonce: aLfmhe
+.. section: Library
+
+Fixed calendar functions for extreme months: 0001-01 and 9999-12.
+
+Methods itermonthdays() and itermonthdays2() are reimplemented so that they
+don't call itermonthdates() which can cause datetime.date under/overflow.
+
+..
+
+.. bpo: 27963
+.. date: 9891
+.. nonce: XDgr3L
+.. section: Library
+
+Fixed possible null pointer dereference in ctypes.set_conversion_mode().
+Patch by Xiang Zhang.
+
+..
+
+.. bpo: 28284
+.. date: 9890
+.. nonce: kHbh7e
+.. section: Library
+
+Strengthen resistance of ``_json.encode_basestring_ascii()`` to integer
+overflow.
+
+..
+
+.. bpo: 27611
+.. date: 9889
+.. nonce: yfOkD6
+.. section: Library
+
+Fixed support of default root window in the Tix module.
+
+..
+
+.. bpo: 24363
+.. date: 9888
+.. nonce: PVQg7r
+.. section: Library
+
+When parsing HTTP header fields, if an invalid line is encountered, skip it
+and continue parsing.  Previously, no more header fields were parsed, which
+could lead to fields for HTTP framing like Content-Length and
+Transfer-Encoding being overlooked.
+
+..
+
+.. bpo: 27599
+.. date: 9887
+.. nonce: itvm8T
+.. section: Library
+
+Fixed buffer overrun in binascii.b2a_qp() and binascii.a2b_qp().
+
+..
+
+.. bpo: 25969
+.. date: 9886
+.. nonce: qSPkl-
+.. section: Library
+
+Update the lib2to3 grammar to handle the unpacking generalizations added in
+3.5.
+
+..
+
+.. bpo: 24594
+.. date: 9885
+.. nonce: 9CnFVS
+.. section: Library
+
+Validates persist parameter when opening MSI database
+
+..
+
+.. bpo: 27570
+.. date: 9884
+.. nonce: pU0Zie
+.. section: Library
+
+Avoid zero-length memcpy() etc calls with null source pointers in the
+"ctypes" and "array" modules.
+
+..
+
+.. bpo: 22450
+.. date: 9883
+.. nonce: aWpdde
+.. section: Library
+
+urllib now includes an "Accept: */*" header among the default headers.  This
+makes the results of REST API requests more consistent and predictable
+especially when proxy servers are involved.
+
+..
+
+.. bpo: 0
+.. date: 9882
+.. nonce: PVZStR
+.. section: Library
+
+lib2to3.pgen3.driver.load_grammar() now creates a stable cache file between
+runs given the same Grammar.txt input regardless of the hash randomization
+setting.
+
+..
+
+.. bpo: 27691
+.. date: 9881
+.. nonce: TMYF5_
+.. section: Library
+
+Fix ssl module's parsing of GEN_RID subject alternative name fields in X.509
+certs.
+
+..
+
+.. bpo: 27850
+.. date: 9880
+.. nonce: kIVQ0m
+.. section: Library
+
+Remove 3DES from ssl module's default cipher list to counter measure sweet32
+attack (CVE-2016-2183).
+
+..
+
+.. bpo: 27766
+.. date: 9879
+.. nonce: WI70Tc
+.. section: Library
+
+Add ChaCha20 Poly1305 to ssl module's default ciper list. (Required OpenSSL
+1.1.0 or LibreSSL).
+
+..
+
+.. bpo: 26470
+.. date: 9878
+.. nonce: QGu_wo
+.. section: Library
+
+Port ssl and hashlib module to OpenSSL 1.1.0.
+
+..
+
+.. bpo: 27944
+.. date: 9877
+.. nonce: EVXdfk
+.. section: Library
+
+Fix some memory-corruption bugs in the log reading code of the _hotshot
+module.
+
+..
+
+.. bpo: 27934
+.. date: 9876
+.. nonce: ucQE3p
+.. section: Library
+
+Use ``float.__repr__`` instead of plain ``repr`` when JSON- encoding an
+instance of a float subclass. Thanks Eddie James.
+
+..
+
+.. bpo: 27861
+.. date: 9875
+.. nonce: DBYuo9
+.. section: Library
+
+Fixed a crash in sqlite3.Connection.cursor() when a factory creates not a
+cursor.  Patch by Xiang Zhang.
+
+..
+
+.. bpo: 19884
+.. date: 9874
+.. nonce: MO8AWH
+.. section: Library
+
+Avoid spurious output on OS X with Gnu Readline.
+
+..
+
+.. bpo: 10513
+.. date: 9873
+.. nonce: tQIQD_
+.. section: Library
+
+Fix a regression in Connection.commit().  Statements should not be reset
+after a commit.
+
+..
+
+.. bpo: 2466
+.. date: 9872
+.. nonce: VRNlkg
+.. section: Library
+
+posixpath.ismount now correctly recognizes mount points which the user does
+not have permission to access.
+
+..
+
+.. bpo: 27783
+.. date: 9871
+.. nonce: 6fCCY9
+.. section: Library
+
+Fix possible usage of uninitialized memory in operator.methodcaller.
+
+..
+
+.. bpo: 27774
+.. date: 9870
+.. nonce: FDcik1
+.. section: Library
+
+Fix possible Py_DECREF on unowned object in _sre.
+
+..
+
+.. bpo: 27760
+.. date: 9869
+.. nonce: gxMjp4
+.. section: Library
+
+Fix possible integer overflow in binascii.b2a_qp.
+
+..
+
+.. bpo: 0
+.. date: 9868
+.. nonce: Ny9oPv
+.. section: Library
+
+In the curses module, raise an error if window.getstr() or window.instr() is
+passed a negative value.
+
+..
+
+.. bpo: 27758
+.. date: 9867
+.. nonce: x9DC4R
+.. section: Library
+
+Fix possible integer overflow in the _csv module for large record lengths.
+
+..
+
+.. bpo: 23369
+.. date: 9866
+.. nonce: nqChyE
+.. section: Library
+
+Fixed possible integer overflow in _json.encode_basestring_ascii.
+
+..
+
+.. bpo: 27568
+.. date: 9865
+.. nonce: OnuO9s
+.. section: Library
+
+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.
+
+..
+
+.. bpo: 27130
+.. date: 9864
+.. nonce: zVvNDt
+.. section: Library
+
+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.
+
+..
+
+.. bpo: 23804
+.. date: 9863
+.. nonce: ipFvxc
+.. section: Library
+
+Fix SSL zero-length recv() calls to not block and not raise an error about
+unclean EOF.
+
+..
+
+.. bpo: 27466
+.. date: 9862
+.. nonce: C_3a8E
+.. section: Library
+
+Change time format returned by http.cookie.time2netscape, confirming the
+netscape cookie format and making it consistent with documentation.
+
+..
+
+.. bpo: 22115
+.. date: 9861
+.. nonce: Vpj2aH
+.. section: Library
+
+Fixed tracing Tkinter variables: trace_vdelete() with wrong mode no longer
+break tracing, trace_vinfo() now always returns a list of pairs of strings.
+
+..
+
+.. bpo: 27079
+.. date: 9860
+.. nonce: c7d0Ym
+.. section: Library
+
+Fixed curses.ascii functions isblank(), iscntrl() and ispunct().
+
+..
+
+.. bpo: 22636
+.. date: 9859
+.. nonce: 3fQW_g
+.. section: Library
+
+Avoid shell injection problems with ctypes.util.find_library().
+
+..
+
+.. bpo: 27330
+.. date: 9858
+.. nonce: GJaFCV
+.. section: Library
+
+Fixed possible leaks in the ctypes module.
+
+..
+
+.. bpo: 27238
+.. date: 9857
+.. nonce: Q6v6Qv
+.. section: Library
+
+Got rid of bare excepts in the turtle module.  Original patch by Jelle
+Zijlstra.
+
+..
+
+.. bpo: 26386
+.. date: 9856
+.. nonce: 9L3Ut4
+.. section: Library
+
+Fixed ttk.TreeView selection operations with item id's containing spaces.
+
+..
+
+.. bpo: 25455
+.. date: 9855
+.. nonce: tj_49f
+.. section: Library
+
+Fixed a crash in repr of cElementTree.Element with recursive tag.
+
+..
+
+.. bpo: 21201
+.. date: 9854
+.. nonce: wLCKiA
+.. section: Library
+
+Improves readability of multiprocessing error message.  Thanks to Wojciech
+Walczak for patch.
+
+..
+
+.. bpo: 27854
+.. date: 9853
+.. nonce: 8L_TJb
+.. section: IDLE
+
+Make Help => IDLE Help work again on Windows. Include idlelib/help.html in
+2.7 Windows installer.
+
+..
+
+.. bpo: 25507
+.. date: 9852
+.. nonce: bQVsMZ
+.. section: IDLE
+
+Add back import needed for 2.x encoding warning box. Add pointer to
+'Encoding declaration' in Language Reference.
+
+..
+
+.. bpo: 15308
+.. date: 9851
+.. nonce: zZxn8m
+.. section: IDLE
+
+Add 'interrupt execution' (^C) to Shell menu. Patch by Roger Serwy, updated
+by Bayard Randel.
+
+..
+
+.. bpo: 27922
+.. date: 9850
+.. nonce: UEtEv9
+.. section: IDLE
+
+Stop IDLE tests from 'flashing' gui widgets on the screen.
+
+..
+
+.. bpo: 17642
+.. date: 9849
+.. nonce: B0BNOB
+.. section: IDLE
+
+add larger font sizes for classroom projection.
+
+..
+
+.. bpo: 0
+.. date: 9848
+.. nonce: zWZs6o
+.. section: IDLE
+
+Add version to title of IDLE help window.
+
+..
+
+.. bpo: 25564
+.. date: 9847
+.. nonce: GN0p14
+.. section: IDLE
+
+In section on IDLE -- console differences, mention that using exec means
+that __builtins__ is defined for each statement.
+
+..
+
+.. bpo: 27714
+.. date: 9846
+.. nonce: bUEDsI
+.. section: IDLE
+
+text_textview and test_autocomplete now pass when re-run in the same
+process.  This occurs when test_idle fails when run with the -w option but
+without -jn.  Fix warning from test_config.
+
+..
+
+.. bpo: 27452
+.. date: 9845
+.. nonce: RtWnyR
+.. section: IDLE
+
+add line counter and crc to IDLE configHandler test dump.
+
+..
+
+.. bpo: 27365
+.. date: 9844
+.. nonce: y7ys_A
+.. section: IDLE
+
+Allow non-ascii chars in IDLE NEWS.txt, for contributor names.
+
+..
+
+.. bpo: 27245
+.. date: 9843
+.. nonce: u9aKO1
+.. section: IDLE
+
+IDLE: Cleanly delete custom themes and key bindings. Previously, when IDLE
+was started from a console or by import, a cascade of warnings was emitted.
+Patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 28513
+.. date: 9842
+.. nonce: L3joAz
+.. section: Documentation
+
+Documented command-line interface of zipfile.
+
+..
+
+.. bpo: 16484
+.. date: 9841
+.. nonce: ITzcGg
+.. section: Documentation
+
+Change the default PYTHONDOCS URL to "https:", and fix the resulting links
+to use lowercase.  Patch by Sean Rodman, test by Kaushik Nadikuditi.
+
+..
+
+.. bpo: 28666
+.. date: 9840
+.. nonce: sbGV2K
+.. section: Tests
+
+Now test.test_support.rmtree is able to remove unwritable or unreadable
+directories.
+
+..
+
+.. bpo: 23839
+.. date: 9839
+.. nonce: zsT_L9
+.. section: Tests
+
+Various caches now are cleared before running every test file.
+
+..
+
+.. bpo: 27369
+.. date: 9838
+.. nonce: LG7U2D
+.. section: Tests
+
+In test_pyexpat, avoid testing an error message detail that changed in Expat
+2.2.0.
+
+..
+
+.. bpo: 10656
+.. date: 9837
+.. nonce: pR8FFU
+.. section: Build
+
+Fix out-of-tree building on AIX.  Patch by Tristan Carel and Michael
+Haubenwallner.
+
+..
+
+.. bpo: 26359
+.. date: 9836
+.. nonce: CLz6qy
+.. section: Build
+
+Rename --with-optimiations to --enable-optimizations.
+
+..
+
+.. bpo: 28248
+.. date: 9835
+.. nonce: KY_-en
+.. section: Build
+
+Update Windows build and OS X installers to use OpenSSL 1.0.2j.
+
+..
+
+.. bpo: 28258
+.. date: 9834
+.. nonce: pQNUId
+.. section: Build
+
+Fixed build with Estonian locale (distclean target in Makefile).  Patch by
+Arfrever Frehtes Taifersar Arahesis.
+
+..
+
+.. bpo: 26661
+.. date: 9833
+.. nonce: Z_HNbs
+.. section: Build
+
+setup.py now detects system libffi with multiarch wrapper.
+
+..
+
+.. bpo: 15819
+.. date: 9832
+.. nonce: Wi3naX
+.. section: Build
+
+The Include directory in the build tree is already searched; drop unused
+code trying to add it again.
+
+..
+
+.. bpo: 27566
+.. date: 9831
+.. nonce: xDWjEb
+.. section: Build
+
+Fix clean target in freeze makefile (patch by Lisa Roach)
+
+..
+
+.. bpo: 27983
+.. date: 9830
+.. nonce: jL_1n8
+.. section: Build
+
+Cause lack of llvm-profdata tool when using clang as required for PGO
+linking to be a configure time error rather than make time when
+``--with-optimizations`` is enabled.  Also improve our ability to find the
+llvm-profdata tool on MacOS and some Linuxes.
+
+..
+
+.. bpo: 26359
+.. date: 9829
+.. nonce: WXBL-Y
+.. section: Build
+
+Add the --with-optimizations configure flag.
+
+..
+
+.. bpo: 10910
+.. date: 9828
+.. nonce: ZdRayb
+.. section: Build
+
+Avoid C++ compilation errors on FreeBSD and OS X. Also update FreedBSD
+version checks for the original ctype UTF-8 workaround.
+
+..
+
+.. bpo: 27806
+.. date: 9827
+.. nonce: DEhPsm
+.. section: Build
+
+Fix 32-bit builds on macOS Sierra 10.12 broken by removal of deprecated
+QuickTime/QuickTime.h header file.  Patch by Aleks Bunin.
+
+..
+
+.. bpo: 28676
+.. date: 9826
+.. nonce: 41PL3Q
+.. section: Build
+
+Prevent missing 'getentropy' declaration warning on macOS. Initial patch by
+Gareth Rees.
+
+..
+
+.. bpo: 27952
+.. date: 9825
+.. nonce: OO-hBo
+.. section: Tools/Demos
+
+Get Tools/scripts/fixcid.py working with the current "re" module, avoid
+invalid Python backslash escapes, and fix a bug parsing escaped C quote
+signs.
+
+..
+
+.. bpo: 27932
+.. date: 9824
+.. nonce: mtgl-6
+.. section: Windows
+
+Prevent memory leak in win32_ver().
+
+..
+
+.. bpo: 27888
+.. date: 9823
+.. nonce: xClILd
+.. section: Windows
+
+Prevent Windows installer from displaying console windows and failing when
+pip cannot be installed/uninstalled.
+
+..
+
+.. bpo: 28440
+.. date: 9822
+.. nonce: KBMmDg
+.. section: macOS
+
+No longer add /Library/Python/site-packages, the Apple-supplied system
+Python site-packages directory, to sys.path for macOS framework builds. The
+coupling between the two Python instances often caused confusion and, as of
+macOS 10.12, changes to the site-packages layout can cause pip component
+installations to fail.  This change reverts the effects introduced in 2.7.0
+by Issue #4865.  If you are using a package with both the Apple system
+Python 2.7 and a user-installed Python 2.7, you will need to ensure that
+copies of the package are installed with both Python instances.
diff --git a/Misc/NEWS.d/2.7.14rc1.rst b/Misc/NEWS.d/2.7.14rc1.rst
new file mode 100644
index 0000000..cc74f22
--- /dev/null
+++ b/Misc/NEWS.d/2.7.14rc1.rst
@@ -0,0 +1,149 @@
+.. bpo: 30947
+.. date: 2017-08-16-16-35-59
+.. nonce: iNMmm4
+.. release date: 2017-08-26
+.. section: Security
+
+Upgrade libexpat embedded copy from version 2.2.1 to 2.2.3 to get security
+fixes.
+
+..
+
+.. bpo: 30765
+.. date: 2017-06-26-14-29-50
+.. nonce: Q5iBmf
+.. section: Core and Builtins
+
+Avoid blocking in pthread_mutex_lock() when PyThread_acquire_lock() is asked
+not to block.
+
+..
+
+.. bpo: 31135
+.. date: 2017-08-08-14-59-26
+.. nonce: 9q1QdB
+.. section: Library
+
+ttk: Fix LabeledScale and OptionMenu destroy() method. Call the parent
+destroy() method even if the used attribute doesn't exist. The
+LabeledScale.destroy() method now also explicitly clears label and scale
+attributes to help the garbage collector to destroy all widgets.
+
+..
+
+.. bpo: 31107
+.. date: 2017-08-02-12-48-15
+.. nonce: 1t2hn5
+.. section: Library
+
+Fix `copy_reg._slotnames()` mangled attribute calculation for classes whose
+name begins with an underscore. Patch by Shane Harvey.
+
+..
+
+.. bpo: 29519
+.. date: 2017-07-31-19-32-57
+.. nonce: _j1awg
+.. section: Library
+
+Fix weakref spewing exceptions during interpreter shutdown when used with a
+rare combination of multiprocessing and custom codecs.
+
+..
+
+.. bpo: 30119
+.. date: 2017-07-26-22-02-07
+.. nonce: DZ6C_S
+.. section: Library
+
+ftplib.FTP.putline() now throws ValueError on commands that contains CR or
+LF. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 30595
+.. date: 2017-07-26-04-46-12
+.. nonce: -zJ7d8
+.. section: Library
+
+multiprocessing.Queue.get() with a timeout now polls its reader in
+non-blocking mode if it succeeded to aquire the lock but the acquire took longer
+than the timeout.
+
+..
+
+.. bpo: 29902
+.. date: 2017-07-23-13-47-22
+.. nonce: CiuFdn
+.. section: Library
+
+Py3k deprecation warning now is emitted when pickling or copying some
+builtin and extension objects that don't support pickling explicitly and are
+pickled incorrectly by default (like memoryview or staticmethod).  This is a
+TypeError in Python 3.6.
+
+..
+
+.. bpo: 29854
+.. date: 2017-07-07-02-18-57
+.. nonce: J8wKb_
+.. section: Library
+
+Fix segfault in readline when using readline's history-size option.  Patch
+by Nir Soffer.
+
+..
+
+.. bpo: 30807
+.. date: 2017-06-29-22-04-44
+.. nonce: sLtjY-
+.. section: Library
+
+signal.setitimer() may disable the timer when passed a tiny value.
+
+Tiny values (such as 1e-6) are valid non-zero values for setitimer(), which
+is specified as taking microsecond-resolution intervals. However, on some
+platform, our conversion routine could convert 1e-6 into a zero interval,
+therefore disabling the timer instead of (re-)scheduling it.
+
+..
+
+.. bpo: 30715
+.. date: 2017-07-25-15-27-44
+.. nonce: Sp7bTF
+.. section: Tests
+
+Address ALPN callback changes for OpenSSL 1.1.0f. The latest version behaves
+like OpenSSL 1.0.2 and no longer aborts handshake.
+
+..
+
+.. bpo: 30822
+.. date: 2017-07-20-14-29-54
+.. nonce: X0wREo
+.. section: Tests
+
+Fix regrtest command line parser to allow passing -u extralargefile to run
+test_zipfile64.
+
+..
+
+.. bpo: 30283
+.. date: 2017-06-26-11-24-14
+.. nonce: qCQmlm
+.. section: Tests
+
+regrtest: Enhance regrtest and backport features from the master branch.
+
+Add options: --coverage, --testdir, --list-tests (list test files, don't run
+them), --list-cases (list test identifiers, don't run them, :issue:`30523`),
+--matchfile (load a list of test filters from a text file, :issue:`30540`),
+--slowest (alias to --slow).
+
+Enhance output: add timestamp, test result, currently running tests, "Tests
+result: xxx" summary with total duration, etc.
+
+Fix reference leak hunting in regrtest, --huntrleaks: regrtest now warms up
+caches, create explicitly all internal singletons which are created on
+demand to prevent false positives when checking for reference leaks.
+(:issue:`30675`).
diff --git a/Misc/NEWS.d/2.7.15.rst b/Misc/NEWS.d/2.7.15.rst
new file mode 100644
index 0000000..52b99da
--- /dev/null
+++ b/Misc/NEWS.d/2.7.15.rst
@@ -0,0 +1,9 @@
+.. bpo: 33374
+.. date: 2018-04-29-12-07-00
+.. nonce: -xegL6
+.. release date: 2018-04-29
+.. section: Core and Builtins
+
+Tweak the definition of PyGC_Head, so compilers do not believe it is always
+16-byte aligned on x86. This prevents crashes with more aggressive
+optimizations present in GCC 8.
diff --git a/Misc/NEWS.d/2.7.15rc1.rst b/Misc/NEWS.d/2.7.15rc1.rst
new file mode 100644
index 0000000..de5f61c
--- /dev/null
+++ b/Misc/NEWS.d/2.7.15rc1.rst
@@ -0,0 +1,1683 @@
+.. bpo: 32997
+.. date: 2018-03-05-10-14-42
+.. nonce: hp2s8n
+.. release date: 2018-04-14
+.. section: Security
+
+A regex in fpformat was vulnerable to catastrophic backtracking. This regex
+was a potential DOS vector (REDOS). Based on typical uses of fpformat the
+risk seems low. The regex has been refactored and is now safe. Patch by
+Jamie Davis.
+
+..
+
+.. bpo: 32981
+.. date: 2018-03-02-10-24-52
+.. nonce: O_qDyj
+.. section: Security
+
+Regexes in difflib and poplib were vulnerable to catastrophic backtracking.
+These regexes formed potential DOS vectors (REDOS). They have been
+refactored. This resolves CVE-2018-1060 and CVE-2018-1061. Patch by Jamie
+Davis.
+
+..
+
+.. bpo: 31339
+.. date: 2017-09-04-21-24-51
+.. nonce: YSczZN
+.. section: Security
+
+Rewrite time.asctime() and time.ctime(). Backport and adapt the _asctime()
+function from the master branch to not depend on the implementation of
+asctime() and ctime() from the external C library. This change fixes a bug
+when Python is run using the musl C library.
+
+..
+
+.. bpo: 30730
+.. date: 060
+.. nonce: rJsyTH
+.. original section: Library
+.. section: Security
+
+Prevent environment variables injection in subprocess on Windows.  Prevent
+passing other environment variables and command arguments.
+
+..
+
+.. bpo: 30694
+.. date: 059
+.. nonce: WkMWM_
+.. original section: Library
+.. section: Security
+
+Upgrade expat copy from 2.2.0 to 2.2.1 to get fixes of multiple security
+vulnerabilities including: CVE-2017-9233 (External entity infinite loop
+DoS), CVE-2016-9063 (Integer overflow, re-fix), CVE-2016-0718 (Fix
+regression bugs from 2.2.0's fix to CVE-2016-0718) and CVE-2012-0876
+(Counter hash flooding with SipHash). Note: the CVE-2016-5300 (Use
+os-specific entropy sources like getrandom) doesn't impact Python, since Python
+already gets entropy from the OS to set the expat secret using
+``XML_SetHashSalt()``.
+
+..
+
+.. bpo: 30500
+.. date: 058
+.. nonce: j5KrEp
+.. original section: Library
+.. section: Security
+
+Fix urllib.splithost() to correctly parse fragments. For example,
+``splithost('//127.0.0.1#@evil.com/')`` now correctly returns the
+``127.0.0.1`` host, instead of treating ``@evil.com`` as the host in an
+authentification (``login@host``).
+
+..
+
+.. bpo: 29591
+.. date: 057
+.. nonce: ExKblw
+.. original section: Library
+.. section: Security
+
+Update expat copy from 2.1.1 to 2.2.0 to get fixes of CVE-2016-0718 and
+CVE-2016-4472. See https://sourceforge.net/p/expat/bugs/537/ for more
+information.
+
+..
+
+.. bpo: 33026
+.. date: 2018-03-08-09-48-38
+.. nonce: QZA3Ba
+.. section: Core and Builtins
+
+Fixed jumping out of "with" block by setting f_lineno.
+
+..
+
+.. bpo: 17288
+.. date: 2018-02-27-13-36-21
+.. nonce: Gdj24S
+.. section: Core and Builtins
+
+Prevent jumps from 'return' and 'exception' trace events.
+
+..
+
+.. bpo: 18533
+.. date: 2017-12-13-16-46-23
+.. nonce: Dlk8d7
+.. section: Core and Builtins
+
+``repr()`` on a dict containing its own ``viewvalues()`` or ``viewitems()``
+no longer raises ``RuntimeError``.  Instead, use ``...``, as for other
+recursive structures.  Patch by Ben North.
+
+..
+
+.. bpo: 10544
+.. date: 2017-11-27-08-37-34
+.. nonce: 07nioT
+.. section: Core and Builtins
+
+Yield expressions are now deprecated in comprehensions and generator
+expressions when checking Python 3 compatibility. They are still permitted
+in the definition of the outermost iterable, as that is evaluated directly
+in the enclosing scope.
+
+..
+
+.. bpo: 32137
+.. date: 2017-11-26-14-36-30
+.. nonce: Stj5nL
+.. section: Core and Builtins
+
+The repr of deeply nested dict now raises a RecursionError instead of
+crashing due to a stack overflow.
+
+..
+
+.. bpo: 20047
+.. date: 2017-10-28-19-11-05
+.. nonce: GuNAto
+.. section: Core and Builtins
+
+Bytearray methods partition() and rpartition() now accept only bytes-like
+objects as separator, as documented.  In particular they now raise TypeError
+rather of returning a bogus result when an integer is passed as a separator.
+
+..
+
+.. bpo: 31733
+.. date: 2017-10-09-15-46-37
+.. nonce: pIf17N
+.. section: Core and Builtins
+
+Add a new PYTHONSHOWREFCOUNT environment variable. In debug mode, Python now
+only print the total reference count if PYTHONSHOWREFCOUNT is set.
+
+..
+
+.. bpo: 31692
+.. date: 2017-10-09-11-03-13
+.. nonce: 5-bpdk
+.. section: Core and Builtins
+
+Add a new PYTHONSHOWALLOCCOUNT environment variable. When Python is compiled
+with COUNT_ALLOCS, PYTHONSHOWALLOCCOUNT now has to be set to dump allocation
+counts into stderr on shutdown. Moreover, allocations statistics are now
+dumped into stderr rather than stdout.
+
+..
+
+.. bpo: 31478
+.. date: 2017-10-01-18-59-40
+.. nonce: owtqoO
+.. section: Core and Builtins
+
+Prevent unwanted behavior in `_random.Random.seed()` in case the argument
+has a bad ``__abs__()`` method. Patch by Oren Milman.
+
+..
+
+.. bpo: 31530
+.. date: 2017-09-20-18-28-09
+.. nonce: CdLOM7
+.. section: Core and Builtins
+
+Fixed crashes when iterating over a file on multiple threads.
+
+..
+
+.. bpo: 31490
+.. date: 2017-09-16-13-32-35
+.. nonce: r7m2sj
+.. section: Core and Builtins
+
+Fix an assertion failure in `ctypes` class definition, in case the class has
+an attribute whose name is specified in ``_anonymous_`` but not in
+``_fields_``. Patch by Oren Milman.
+
+..
+
+.. bpo: 31411
+.. date: 2017-09-11-08-50-41
+.. nonce: HZz82I
+.. section: Core and Builtins
+
+Raise a TypeError instead of SystemError in case warnings.onceregistry is
+not a dictionary. Patch by Oren Milman.
+
+..
+
+.. bpo: 31343
+.. date: 2017-09-04-14-57-27
+.. nonce: Kl_fS5
+.. section: Core and Builtins
+
+Include sys/sysmacros.h for major(), minor(), and makedev(). GNU C libray
+plans to remove the functions from sys/types.h.
+
+..
+
+.. bpo: 31311
+.. date: 2017-08-31-17-52-56
+.. nonce: bNE2l-
+.. section: Core and Builtins
+
+Fix a crash in the ``__setstate__()`` method of `ctypes._CData`, in case of
+a bad ``__dict__``. Patch by Oren Milman.
+
+..
+
+.. bpo: 31243
+.. date: 2017-08-29-14-24-34
+.. nonce: tr0E4V
+.. section: Core and Builtins
+
+Fix a crash in some methods of `io.TextIOWrapper`, when the decoder's state
+is invalid. Patch by Oren Milman.
+
+..
+
+.. bpo: 31095
+.. date: 2017-08-01-18-48-30
+.. nonce: bXWZDb
+.. section: Core and Builtins
+
+Fix potential crash during GC caused by ``tp_dealloc`` which doesn't call
+``PyObject_GC_UnTrack()``.
+
+..
+
+.. bpo: 30657
+.. date: 073
+.. nonce: Q_r7JJ
+.. section: Core and Builtins
+
+Fixed possible integer overflow in PyString_DecodeEscape. Patch by Jay
+Bosamiya.
+
+..
+
+.. bpo: 27945
+.. date: 072
+.. nonce: p29r3O
+.. section: Core and Builtins
+
+Fixed various segfaults with dict when input collections are mutated during
+searching, inserting or comparing.  Based on patches by Duane Griffin and
+Tim Mitchell.
+
+..
+
+.. bpo: 25794
+.. date: 071
+.. nonce: j0nJ5x
+.. section: Core and Builtins
+
+Fixed type.__setattr__() and type.__delattr__() for non-interned or unicode
+attribute names.  Based on patch by Eryk Sun.
+
+..
+
+.. bpo: 29935
+.. date: 070
+.. nonce: 2ZTSxR
+.. section: Core and Builtins
+
+Fixed error messages in the index() method of tuple and list when pass
+indices of wrong type.
+
+..
+
+.. bpo: 28598
+.. date: 069
+.. nonce: QxbzQn
+.. section: Core and Builtins
+
+Support __rmod__ for subclasses of str being called before str.__mod__.
+Patch by Martijn Pieters.
+
+..
+
+.. bpo: 29602
+.. date: 068
+.. nonce: qyyskC
+.. section: Core and Builtins
+
+Fix incorrect handling of signed zeros in complex constructor for complex
+subclasses and for inputs having a __complex__ method. Patch by Serhiy
+Storchaka.
+
+..
+
+.. bpo: 29347
+.. date: 067
+.. nonce: 1RPPGN
+.. section: Core and Builtins
+
+Fixed possibly dereferencing undefined pointers when creating weakref
+objects.
+
+..
+
+.. bpo: 14376
+.. date: 066
+.. nonce: xrKNqX
+.. section: Core and Builtins
+
+Allow sys.exit to accept longs as well as ints. Patch by Gareth Rees.
+
+..
+
+.. bpo: 29028
+.. date: 065
+.. nonce: BxGcd9
+.. section: Core and Builtins
+
+Fixed possible use-after-free bugs in the subscription of the buffer object
+with custom index object.
+
+..
+
+.. bpo: 29145
+.. date: 064
+.. nonce: 2x5NOb
+.. section: Core and Builtins
+
+Fix overflow checks in string, bytearray and unicode. Patch by jan matejek
+and Xiang Zhang.
+
+..
+
+.. bpo: 28932
+.. date: 063
+.. nonce: QnLx8A
+.. section: Core and Builtins
+
+Do not include <sys/random.h> if it does not exist.
+
+..
+
+.. bpo: 33096
+.. date: 2018-03-25-13-18-16
+.. nonce: ofdbe7
+.. section: Library
+
+Allow ttk.Treeview.insert to insert iid that has a false boolean value. Note
+iid=0 and iid=False would be same. Patch by Garvit Khatri.
+
+..
+
+.. bpo: 33127
+.. date: 2018-03-24-15-08-24
+.. nonce: olJmHv
+.. section: Library
+
+The ssl module now compiles with LibreSSL 2.7.1.
+
+..
+
+.. bpo: 30622
+.. date: 2018-02-24-21-40-42
+.. nonce: dQjxSe
+.. section: Library
+
+The ssl module now detects missing NPN support in LibreSSL.
+
+..
+
+.. bpo: 21060
+.. date: 2018-02-17-19-20-19
+.. nonce: S1Z-x6
+.. section: Library
+
+Rewrite confusing message from setup.py upload from "No dist file created in
+earlier command" to the more helpful "Must create and upload files in one
+command".
+
+..
+
+.. bpo: 30157
+.. date: 2018-02-09-14-44-43
+.. nonce: lEiiAK
+.. section: Library
+
+Fixed guessing quote and delimiter in csv.Sniffer.sniff() when only the last
+field is quoted.  Patch by Jake Davis.
+
+..
+
+.. bpo: 32647
+.. date: 2018-02-05-13-31-42
+.. nonce: ktmfR_
+.. section: Library
+
+The ctypes module used to depend on indirect linking for dlopen. The shared
+extension is now explicitly linked against libdl on platforms with dl.
+
+..
+
+.. bpo: 32304
+.. date: 2018-01-21-16-33-53
+.. nonce: TItrNv
+.. section: Library
+
+distutils' upload command no longer corrupts tar files ending with a CR
+byte, and no longer tries to convert CR to CRLF in any of the upload text
+fields.
+
+..
+
+.. bpo: 31848
+.. date: 2018-01-18-23-34-17
+.. nonce: M2cldy
+.. section: Library
+
+Fix the error handling in Aifc_read.initfp() when the SSND chunk is not
+found. Patch by Zackery Spytz.
+
+..
+
+.. bpo: 32521
+.. date: 2018-01-15-12-53-13
+.. nonce: IxX4Ba
+.. section: Library
+
+The nis module is now compatible with new libnsl and headers location.
+
+..
+
+.. bpo: 32539
+.. date: 2018-01-12-09-20-22
+.. nonce: D7AbdE
+.. section: Library
+
+Fix ``OSError`` for ``os.listdir`` with deep paths (starting with ``\\?\``)
+on windows.  Patch by Anthony Sottile.
+
+..
+
+.. bpo: 32521
+.. date: 2018-01-08-18-02-33
+.. nonce: Kh-KoN
+.. section: Library
+
+glibc has removed Sun RPC. Use replacement libtirpc headers and library in
+nis module.
+
+..
+
+.. bpo: 18035
+.. date: 2017-12-29-15-16-56
+.. nonce: c6rdCt
+.. section: Library
+
+``telnetlib``: ``select.error`` doesn't have an ``errno`` attribute. Patch
+by Segev Finer.
+
+..
+
+.. bpo: 32185
+.. date: 2017-12-20-09-25-10
+.. nonce: IL0cMt
+.. section: Library
+
+The SSL module no longer sends IP addresses in SNI TLS extension on
+platforms with OpenSSL 1.0.2+ or inet_pton.
+
+..
+
+.. bpo: 32186
+.. date: 2017-11-30-20-33-22
+.. nonce: O42bVe
+.. section: Library
+
+Creating io.FileIO() and builtin file() objects now release the GIL when
+checking the file descriptor. io.FileIO.readall(), io.FileIO.read(), and
+file.read() now release the GIL when getting the file size.  Fixed hang of
+all threads with inaccessible NFS server.  Patch by Nir Soffer.
+
+..
+
+.. bpo: 32110
+.. date: 2017-11-22-09-44-15
+.. nonce: VJa9bo
+.. section: Library
+
+``codecs.StreamReader.read(n)`` now returns not more than *n*
+characters/bytes for non-negative *n*. This makes it compatible with
+``read()`` methods of other file-like objects.
+
+..
+
+.. bpo: 21149
+.. date: 2017-11-10-17-19-24
+.. nonce: 8UVfeT
+.. section: Library
+
+Silence a `'NoneType' object is not callable` in `_removeHandlerRef` error
+that could happen when a logging Handler is destroyed as part of cyclic
+garbage collection during process shutdown.
+
+..
+
+.. bpo: 31764
+.. date: 2017-11-08-11-02-01
+.. nonce: gtlhKj
+.. section: Library
+
+Prevent a crash in ``sqlite3.Cursor.close()`` in case the ``Cursor`` object
+is uninitialized. Patch by Oren Milman.
+
+..
+
+.. bpo: 31955
+.. date: 2017-11-07-19-12-25
+.. nonce: 1DWu-S
+.. section: Library
+
+Fix CCompiler.set_executable() of distutils to handle properly Unicode
+strings.
+
+..
+
+.. bpo: 9678
+.. date: 2017-11-03-22-05-47
+.. nonce: oD51q6
+.. section: Library
+
+Fixed determining the MAC address in the uuid module:
+
+* Using ifconfig on NetBSD and OpenBSD.
+* Using arp on Linux, FreeBSD, NetBSD and OpenBSD.
+
+Based on patch by Takayuki Shimizukawa.
+
+..
+
+.. bpo: 30057
+.. date: 2017-11-03-19-11-43
+.. nonce: NCaijI
+.. section: Library
+
+Fix potential missed signal in signal.signal().
+
+..
+
+.. bpo: 31927
+.. date: 2017-11-02-18-26-40
+.. nonce: 40K6kp
+.. section: Library
+
+Fixed reading arbitrary data when parse a AF_BLUETOOTH address on NetBSD and
+DragonFly BSD.
+
+..
+
+.. bpo: 27666
+.. date: 2017-11-01-18-13-42
+.. nonce: j2zRnF
+.. section: Library
+
+Fixed stack corruption in curses.box() and curses.ungetmouse() when the size
+of types chtype or mmask_t is less than the size of C long.  curses.box()
+now accepts characters as arguments.  Based on patch by Steve Fink.
+
+..
+
+.. bpo: 25720
+.. date: 2017-10-29-17-52-40
+.. nonce: vSvb5h
+.. section: Library
+
+Fix the method for checking pad state of curses WINDOW. Patch by Masayuki
+Yamamoto.
+
+..
+
+.. bpo: 31893
+.. date: 2017-10-29-13-51-01
+.. nonce: 8LZKEz
+.. section: Library
+
+Fixed the layout of the kqueue_event structure on OpenBSD and NetBSD. Fixed
+the comparison of the kqueue_event objects.
+
+..
+
+.. bpo: 31891
+.. date: 2017-10-29-11-23-24
+.. nonce: 9kAPha
+.. section: Library
+
+Fixed building the curses module on NetBSD.
+
+..
+
+.. bpo: 30058
+.. date: 2017-10-12-19-00-53
+.. nonce: cENtry
+.. section: Library
+
+Fixed buffer overflow in select.kqueue.control().
+
+..
+
+.. bpo: 31770
+.. date: 2017-10-12-18-45-38
+.. nonce: GV3MPx
+.. section: Library
+
+Prevent a crash when calling the ``__init__()`` method of a
+``sqlite3.Cursor`` object more than once. Patch by Oren Milman.
+
+..
+
+.. bpo: 31728
+.. date: 2017-10-11-13-05-19
+.. nonce: XrVMME
+.. section: Library
+
+Prevent crashes in `_elementtree` due to unsafe cleanup of `Element.text`
+and `Element.tail`. Patch by Oren Milman.
+
+..
+
+.. bpo: 31752
+.. date: 2017-10-11-00-45-01
+.. nonce: DhWevN
+.. section: Library
+
+Fix possible crash in timedelta constructor called with custom integers.
+
+..
+
+.. bpo: 31681
+.. date: 2017-10-03-15-41-08
+.. nonce: sOJMKV
+.. section: Library
+
+Fix pkgutil.get_data to avoid leaking open files.
+
+..
+
+.. bpo: 31675
+.. date: 2017-10-03-15-06-24
+.. nonce: Nh7jJ3
+.. section: Library
+
+Fixed memory leaks in Tkinter's methods splitlist() and split() when pass a
+string larger than 2 GiB.
+
+..
+
+.. bpo: 30806
+.. date: 2017-09-29
+.. nonce: lP5GrH
+.. section: Library
+
+Fix the string representation of a netrc object.
+
+..
+
+.. bpo: 30347
+.. date: 2017-09-25-14-04-30
+.. nonce: B4--_D
+.. section: Library
+
+Stop crashes when concurrently iterate over itertools.groupby() iterators.
+
+..
+
+.. bpo: 25732
+.. date: 2017-09-25-13-10-08
+.. nonce: RWWgzg
+.. section: Library
+
+`functools.total_ordering()` now implements the `__ne__` method.
+
+..
+
+.. bpo: 31351
+.. date: 2017-09-17-15-24-25
+.. nonce: yQdKv-
+.. section: Library
+
+python -m ensurepip now exits with non-zero exit code if pip bootstrapping
+has failed.
+
+..
+
+.. bpo: 31544
+.. date: 2017-09-13-19-55-35
+.. nonce: beTh6t
+.. section: Library
+
+The C accelerator module of ElementTree ignored exceptions raised when
+looking up TreeBuilder target methods in XMLParser().
+
+..
+
+.. bpo: 31455
+.. date: 2017-09-13-19-55-35
+.. nonce: beTh6t
+.. section: Library
+
+The C accelerator module of ElementTree ignored exceptions raised when
+looking up TreeBuilder target methods in XMLParser().
+
+..
+
+.. bpo: 25404
+.. date: 2017-09-08-11-04-10
+.. nonce: pXetCl
+.. section: Library
+
+SSLContext.load_dh_params() now supports non-ASCII path.
+
+..
+
+.. bpo: 28958
+.. date: 2017-09-06-19-41-01
+.. nonce: x4-K5F
+.. section: Library
+
+ssl.SSLContext() now uses OpenSSL error information when a context cannot be
+instantiated.
+
+..
+
+.. bpo: 27448
+.. date: 2017-09-05-10-55-50
+.. nonce: QdAqzZ
+.. section: Library
+
+Work around a `gc.disable()` race condition in the `subprocess` module that
+could leave garbage collection disabled when multiple threads are spawning
+subprocesses at once.  Users are *strongly encouraged* to use the
+`subprocess32` module from PyPI on Python 2.7 instead, it is much more
+reliable.
+
+..
+
+.. bpo: 31170
+.. date: 2017-09-04-23-41-35
+.. nonce: QGmJ1t
+.. section: Library
+
+expat: Update libexpat from 2.2.3 to 2.2.4. Fix copying of partial
+characters for UTF-8 input (libexpat bug 115):
+https://github.com/libexpat/libexpat/issues/115
+
+..
+
+.. bpo: 29136
+.. date: 2017-09-04-16-39-49
+.. nonce: vSn1oR
+.. section: Library
+
+Add TLS 1.3 cipher suites and OP_NO_TLSv1_3.
+
+..
+
+.. bpo: 31334
+.. date: 2017-09-04-00-22-31
+.. nonce: 9WYRfi
+.. section: Library
+
+Fix ``poll.poll([timeout])`` in the ``select`` module for arbitrary negative
+timeouts on all OSes where it can only be a non-negative integer or -1.
+Patch by Riccardo Coccioli.
+
+..
+
+.. bpo: 10746
+.. date: 2017-08-28-13-01-05
+.. nonce: nmAvfu
+.. section: Library
+
+Fix ctypes producing wrong PEP 3118 type codes for integer types.
+
+..
+
+.. bpo: 30102
+.. date: 2017-08-16-21-14-31
+.. nonce: 1sPqmc
+.. section: Library
+
+The ssl and hashlib modules now call OPENSSL_add_all_algorithms_noconf() on
+OpenSSL < 1.1.0. The function detects CPU features and enables optimizations
+on some CPU architectures such as POWER8. Patch is based on research from
+Gustavo Serra Scalet.
+
+..
+
+.. bpo: 30502
+.. date: 2017-07-27-11-33-58
+.. nonce: GJlfU8
+.. section: Library
+
+Fix handling of long oids in ssl.  Based on patch by Christian Heimes.
+
+..
+
+.. bpo: 25684
+.. date: 2017-07-17-11-35-00
+.. nonce: usELVx
+.. section: Library
+
+Change ``ttk.OptionMenu`` radiobuttons to be unique across instances of
+``OptionMenu``.
+
+..
+
+.. bpo: 29169
+.. date: 062
+.. nonce: 8ypApm
+.. section: Library
+
+Update zlib to 1.2.11.
+
+..
+
+.. bpo: 30746
+.. date: 061
+.. nonce: 7drQI0
+.. section: Library
+
+Prohibited the '=' character in environment variable names in
+``os.putenv()`` and ``os.spawn*()``.
+
+..
+
+.. bpo: 30418
+.. date: 055
+.. nonce: EwISQm
+.. section: Library
+
+On Windows, subprocess.Popen.communicate() now also ignore EINVAL on
+stdin.write() if the child process is still running but closed the pipe.
+
+..
+
+.. bpo: 30378
+.. date: 054
+.. nonce: R_19_5
+.. section: Library
+
+Fix the problem that logging.handlers.SysLogHandler cannot handle IPv6
+addresses.
+
+..
+
+.. bpo: 29960
+.. date: 053
+.. nonce: g0wr3r
+.. section: Library
+
+Preserve generator state when _random.Random.setstate() raises an exception.
+Patch by Bryan Olson.
+
+..
+
+.. bpo: 30310
+.. date: 052
+.. nonce: SAkE6e
+.. section: Library
+
+tkFont now supports unicode options (e.g. font family).
+
+..
+
+.. bpo: 30414
+.. date: 051
+.. nonce: jGl1Lb
+.. section: Library
+
+multiprocessing.Queue._feed background running thread do not break from main
+loop on exception.
+
+..
+
+.. bpo: 30003
+.. date: 050
+.. nonce: BOl9HE
+.. section: Library
+
+Fix handling escape characters in HZ codec.  Based on patch by Ma Lin.
+
+..
+
+.. bpo: 30375
+.. date: 049
+.. nonce: 9c8qM7
+.. section: Library
+
+Warnings emitted when compile a regular expression now always point to the
+line in the user code.  Previously they could point into inners of the re
+module if emitted from inside of groups or conditionals.
+
+..
+
+.. bpo: 30363
+.. date: 048
+.. nonce: l6J41Y
+.. section: Library
+
+Running Python with the -3 option now warns about regular expression syntax
+that is invalid or has different semantic in Python 3 or will change the
+behavior in future Python versions.
+
+..
+
+.. bpo: 30365
+.. date: 047
+.. nonce: eDwdmC
+.. section: Library
+
+Running Python with the -3 option now emits deprecation warnings for
+getchildren() and getiterator() methods of the Element class in the
+xml.etree.cElementTree module and when pass the html argument to
+xml.etree.ElementTree.XMLParser().
+
+..
+
+.. bpo: 30365
+.. date: 046
+.. nonce: XVP7_M
+.. section: Library
+
+Fixed a deprecation warning about the doctype() method of the
+xml.etree.ElementTree.XMLParser class.  Now it is emitted only when define
+the doctype() method in the subclass of XMLParser.
+
+..
+
+.. bpo: 30329
+.. date: 045
+.. nonce: Yb1MTr
+.. section: Library
+
+imaplib now catchs the Windows socket WSAEINVAL error (code 10022) on
+shutdown(SHUT_RDWR): An invalid operation was attempted. This error occurs
+sometimes on SSL connections.
+
+..
+
+.. bpo: 30342
+.. date: 044
+.. nonce: 87Qgur
+.. section: Library
+
+Fix sysconfig.is_python_build() if Python is built with Visual Studio 2008
+(VS 9.0).
+
+..
+
+.. bpo: 29990
+.. date: 043
+.. nonce: HWV6KE
+.. section: Library
+
+Fix range checking in GB18030 decoder.  Original patch by Ma Lin.
+
+..
+
+.. bpo: 30243
+.. date: 042
+.. nonce: RHQt0v
+.. section: Library
+
+Removed the __init__ methods of _json's scanner and encoder. Misusing them
+could cause memory leaks or crashes.  Now scanner and encoder objects are
+completely initialized in the __new__ methods.
+
+..
+
+.. bpo: 26293
+.. date: 041
+.. nonce: wig0YG
+.. section: Library
+
+Change resulted because of zipfile breakage. (See also: bpo-29094)
+
+..
+
+.. bpo: 30070
+.. date: 040
+.. nonce: XM_B41
+.. section: Library
+
+Fixed leaks and crashes in errors handling in the parser module.
+
+..
+
+.. bpo: 30061
+.. date: 039
+.. nonce: ilxNPt
+.. section: Library
+
+Fixed crashes in IOBase methods next() and readlines() when readline() or
+next() respectively return non-sizeable object. Fixed possible other errors
+caused by not checking results of PyObject_Size(), PySequence_Size(), or
+PyMapping_Size().
+
+..
+
+.. bpo: 30011
+.. date: 038
+.. nonce: 2MLfQj
+.. section: Library
+
+Fixed race condition in HTMLParser.unescape().
+
+..
+
+.. bpo: 30068
+.. date: 037
+.. nonce: n4q47r
+.. section: Library
+
+_io._IOBase.readlines will check if it's closed first when hint is present.
+
+..
+
+.. bpo: 27863
+.. date: 036
+.. nonce: pPYHHI
+.. section: Library
+
+Fixed multiple crashes in ElementTree caused by race conditions and wrong
+types.
+
+..
+
+.. bpo: 29942
+.. date: 035
+.. nonce: CsGNuT
+.. section: Library
+
+Fix a crash in itertools.chain.from_iterable when encountering long runs of
+empty iterables.
+
+..
+
+.. bpo: 29861
+.. date: 034
+.. nonce: t2ZoRK
+.. section: Library
+
+Release references to tasks, their arguments and their results as soon as
+they are finished in multiprocessing.Pool.
+
+..
+
+.. bpo: 27880
+.. date: 033
+.. nonce: elFFAF
+.. section: Library
+
+Fixed integer overflow in cPickle when pickle large strings or too many
+objects.
+
+..
+
+.. bpo: 29110
+.. date: 032
+.. nonce: IBWuZ2
+.. section: Library
+
+Fix file object leak in aifc.open() when file is given as a filesystem path
+and is not in valid AIFF format. Original patch by Anthony Zhang.
+
+..
+
+.. bpo: 29354
+.. date: 031
+.. nonce: TH2vMX
+.. section: Library
+
+Fixed inspect.getargs() for parameters which are cell variables.
+
+..
+
+.. bpo: 29335
+.. date: 030
+.. nonce: _KC7IK
+.. section: Library
+
+Fix subprocess.Popen.wait() when the child process has exited to a stopped
+instead of terminated state (ex: when under ptrace).
+
+..
+
+.. bpo: 29219
+.. date: 029
+.. nonce: kxui7t
+.. section: Library
+
+Fixed infinite recursion in the repr of uninitialized ctypes.CDLL instances.
+
+..
+
+.. bpo: 29082
+.. date: 028
+.. nonce: D5Xs7F
+.. section: Library
+
+Fixed loading libraries in ctypes by unicode names on Windows. Original
+patch by Chi Hsuan Yen.
+
+..
+
+.. bpo: 29188
+.. date: 027
+.. nonce: RI3v1Q
+.. section: Library
+
+Support glibc 2.24 on Linux: don't use getentropy() function but read from
+/dev/urandom to get random bytes, for example in os.urandom(). On Linux,
+getentropy() is implemented which getrandom() is blocking mode, whereas
+os.urandom() should not block.
+
+..
+
+.. bpo: 29142
+.. date: 026
+.. nonce: _FTyvm
+.. section: Library
+
+In urllib, suffixes in no_proxy environment variable with leading dots could
+match related hostnames again (e.g. .b.c matches a.b.c). Patch by Milan
+Oberkirch.
+
+..
+
+.. bpo: 13051
+.. date: 025
+.. nonce: YzC1Te
+.. section: Library
+
+Fixed recursion errors in large or resized curses.textpad.Textbox.  Based on
+patch by Tycho Andersen.
+
+..
+
+.. bpo: 9770
+.. date: 024
+.. nonce: WJJnwP
+.. section: Library
+
+curses.ascii predicates now work correctly with negative integers.
+
+..
+
+.. bpo: 28427
+.. date: 023
+.. nonce: vUd-va
+.. section: Library
+
+old keys should not remove new values from WeakValueDictionary when
+collecting from another thread.
+
+..
+
+.. bpo: 28998
+.. date: 022
+.. nonce: NfBgmb
+.. section: Library
+
+More APIs now support longs as well as ints.
+
+..
+
+.. bpo: 28923
+.. date: 021
+.. nonce: _hrXiL
+.. section: Library
+
+Remove editor artifacts from Tix.py, including encoding not recognized by
+codecs.lookup.
+
+..
+
+.. bpo: 29019
+.. date: 020
+.. nonce: MO2AeR
+.. section: Library
+
+Fix dict.fromkeys(x) overallocates when x is sparce dict. Original patch by
+Rasmus Villemoes.
+
+..
+
+.. bpo: 19542
+.. date: 019
+.. nonce: 5tCkaK
+.. section: Library
+
+Fix bugs in WeakValueDictionary.setdefault() and WeakValueDictionary.pop()
+when a GC collection happens in another thread.
+
+..
+
+.. bpo: 28925
+.. date: 018
+.. nonce: 9zLygi
+.. section: Library
+
+cPickle now correctly propagates errors when unpickle instances of old-style
+classes.
+
+..
+
+.. bpo: 27212
+.. date: 2018-03-22-19-23-04
+.. nonce: wrE5KR
+.. section: Documentation
+
+Modify documentation for the :func:`islice` recipe to consume initial values
+up to the start index.
+
+..
+
+.. bpo: 32800
+.. date: 2018-02-10-15-16-04
+.. nonce: FyrqCk
+.. section: Documentation
+
+Update link to w3c doc for xml default namespaces.
+
+..
+
+.. bpo: 17799
+.. date: 2018-01-22-21-13-46
+.. nonce: rdZ-Vk
+.. section: Documentation
+
+Explain real behaviour of sys.settrace and sys.setprofile and their C-API
+counterparts regarding which type of events are received in each function.
+Patch by Pablo Galindo Salgado.
+
+..
+
+.. bpo: 8243
+.. date: 2018-01-13-20-30-53
+.. nonce: s98r28
+.. section: Documentation
+
+Add a note about curses.addch and curses.addstr exception behavior when
+writing outside a window, or pad.
+
+..
+
+.. bpo: 21649
+.. date: 2017-09-06-10-11-57
+.. nonce: EUvqA9
+.. section: Documentation
+
+Add RFC 7525 and Mozilla server side TLS links to SSL documentation.
+
+..
+
+.. bpo: 30176
+.. date: 017
+.. nonce: VivmCg
+.. section: Documentation
+
+Add missing attribute related constants in curses documentation.
+
+..
+
+.. bpo: 28929
+.. date: 016
+.. nonce: Md7kb0
+.. section: Documentation
+
+Link the documentation to its source file on GitHub.
+
+..
+
+.. bpo: 26355
+.. date: 015
+.. nonce: SDq_8Y
+.. section: Documentation
+
+Add canonical header link on each page to corresponding major version of the
+documentation. Patch by Matthias Bussonnier.
+
+..
+
+.. bpo: 12067
+.. date: 014
+.. nonce: 8RbyOz
+.. section: Documentation
+
+Rewrite Comparisons section in the Expressions chapter of the language
+reference. Some of the details of comparing mixed types were incorrect or
+ambiguous. Added default behaviour and consistency suggestions for
+user-defined classes. Based on patch from Andy Maier.
+
+..
+
+.. bpo: 31719
+.. date: 2017-10-06-22-37-38
+.. nonce: gHyrV3
+.. section: Tests
+
+Fix test_regrtest.test_crashed() on s390x. Add a new _testcapi._read_null()
+function to crash Python in a reliable way on s390x. On s390x,
+ctypes.string_at(0) returns an empty string rather than crashing.
+
+..
+
+.. bpo: 31518
+.. date: 2017-09-19-20-48-50
+.. nonce: KwTMMz
+.. section: Tests
+
+Debian Unstable has disabled TLS 1.0 and 1.1 for SSLv23_METHOD(). Change
+TLS/SSL protocol of some tests to PROTOCOL_TLS or PROTOCOL_TLSv1_2 to make
+them pass on Debian.
+
+..
+
+.. bpo: 25674
+.. date: 2017-09-04-13-03-55
+.. nonce: whVTXh
+.. section: Tests
+
+Remove sha256.tbs-internet.com ssl test
+
+..
+
+.. bpo: 11790
+.. date: 007
+.. nonce: 0actZf
+.. section: Tests
+
+Fix sporadic failures in test_multiprocessing.WithProcessesTestCondition.
+
+..
+
+.. bpo: 30236
+.. date: 006
+.. nonce: vOYTDq
+.. section: Tests
+
+Backported test.regrtest options -m/--match and -G/--failfast from Python 3.
+
+..
+
+.. bpo: 30223
+.. date: 005
+.. nonce: TYC9rA
+.. section: Tests
+
+To unify running tests in Python 2.7 and Python 3, the test package can be
+run as a script.  This is equivalent to running the test.regrtest module as
+a script.
+
+..
+
+.. bpo: 30207
+.. date: 004
+.. nonce: EiRhGi
+.. section: Tests
+
+To simplify backports from Python 3, the test.test_support module was
+converted into a package and renamed to test.support.  The
+test.script_helper module was moved into the test.support package. Names
+test.test_support and test.script_helper are left as aliases to test.support
+and test.support.script_helper.
+
+..
+
+.. bpo: 30197
+.. date: 003
+.. nonce: hajYvd
+.. section: Tests
+
+Enhanced function swap_attr() in the test.test_support module. It now works
+when delete replaced attribute inside the with statement.  The old value of
+the attribute (or None if it doesn't exist) now will be assigned to the
+target of the "as" clause, if there is one. Also backported function
+swap_item().
+
+..
+
+.. bpo: 28087
+.. date: 002
+.. nonce: m8dc4R
+.. section: Tests
+
+Skip test_asyncore and test_eintr poll failures on macOS. Skip some tests of
+select.poll when running on macOS due to unresolved issues with the
+underlying system poll function on some macOS versions.
+
+..
+
+.. bpo: 15083
+.. date: 001
+.. nonce: Tz3ZZm
+.. section: Tests
+
+Convert ElementTree doctests to unittests.
+
+..
+
+.. bpo: 33163
+.. date: 2018-03-28-04-15-03
+.. nonce: hfpWuU
+.. section: Build
+
+Upgrade pip to 9.0.3 and setuptools to v39.0.1.
+
+..
+
+.. bpo: 32616
+.. date: 2018-02-07-11-24-38
+.. nonce: o7mFJ3
+.. section: Build
+
+Disable computed gotos by default for clang < 5.0. It caused significant
+performance regression.
+
+..
+
+.. bpo: 32635
+.. date: 2018-01-23-15-33-40
+.. nonce: qHwIZy
+.. section: Build
+
+Fix segfault of the crypt module when libxcrypt is provided instead of
+libcrypt at the system.
+
+..
+
+.. bpo: 31934
+.. date: 2017-11-03-15-17-50
+.. nonce: 8bUlpv
+.. section: Build
+
+Abort the build when building out of a not clean source tree.
+
+..
+
+.. bpo: 31474
+.. date: 2017-09-14-19-38-19
+.. nonce: 0s_mpD
+.. section: Build
+
+Fix -Wint-in-bool-context warnings in PyMem_MALLOC and PyMem_REALLOC macros
+
+..
+
+.. bpo: 29243
+.. date: 013
+.. nonce: WDK4hT
+.. section: Build
+
+Prevent unnecessary rebuilding of Python during ``make test``, ``make
+install`` and some other make targets when configured with
+``--enable-optimizations``.
+
+..
+
+.. bpo: 23404
+.. date: 012
+.. nonce: PdYVWg
+.. section: Build
+
+Don't regenerate generated files based on file modification time anymore:
+the action is now explicit. Replace ``make touch`` with ``make regen-all``.
+
+..
+
+.. bpo: 27593
+.. date: 011
+.. nonce: v87xEr
+.. section: Build
+
+sys.version and the platform module python_build(), python_branch(), and
+python_revision() functions now use git information rather than hg when
+building from a repo.
+
+..
+
+.. bpo: 29643
+.. date: 010
+.. nonce: 4DrjEB
+.. section: Build
+
+Fix ``--enable-optimization`` configure option didn't work.
+
+..
+
+.. bpo: 29572
+.. date: 009
+.. nonce: iZ1XKK
+.. section: Build
+
+Update Windows build and OS X installers to use OpenSSL 1.0.2k.
+
+..
+
+.. bpo: 28768
+.. date: 008
+.. nonce: b9_a6E
+.. section: Build
+
+Fix implicit declaration of function _setmode. Patch by Masayuki Yamamoto
+
+..
+
+.. bpo: 33184
+.. date: 2018-04-14-14-50-01
+.. nonce: to0tIj
+.. section: Windows
+
+Update Windows build to use OpenSSL 1.0.2o.
+
+..
+
+.. bpo: 32903
+.. date: 2018-02-28-11-03-24
+.. nonce: 1SXY4t
+.. section: Windows
+
+Fix a memory leak in os.chdir() on Windows if the current directory is set
+to a UNC path.
+
+..
+
+.. bpo: 30855
+.. date: 2017-11-24-18-18-31
+.. nonce: Sowf7j
+.. section: Windows
+
+Bump Tcl/Tk to 8.5.19.
+
+..
+
+.. bpo: 30450
+.. date: 2017-09-04-14-00-37
+.. nonce: YwitaJ
+.. section: Windows
+
+Pull build dependencies from GitHub rather than svn.python.org.
+
+..
+
+.. bpo: 32726
+.. date: 2018-04-14-08-56-20
+.. nonce: Mticyn
+.. section: macOS
+
+Provide an additional, more modern macOS installer variant that supports
+macOS 10.9+ systems in 64-bit mode only. Upgrade the supplied third-party
+libraries to OpenSSL 1.0.2n and SQLite 3.22.0. The 10.9+ installer now
+supplies its own private copy of Tcl/Tk 8.6.8.
+
+..
+
+.. bpo: 24414
+.. date: 2018-04-14-08-55-36
+.. nonce: Z5A1cS
+.. section: macOS
+
+Default macOS deployment target is now set by ``configure`` to the build
+system's OS version (as is done by Python 3), not ``10.4``; override with,
+for example, ``./configure MACOSX_DEPLOYMENT_TARGET=10.4``.
+
+..
+
+.. bpo: 17128
+.. date: 2018-04-14-08-54-31
+.. nonce: mRkb0w
+.. section: macOS
+
+All 2.7 macOS installer variants now supply their own version of ``OpenSSL
+1.0.2``; the Apple-supplied SSL libraries and root certificates are not
+longer used.  The ``Installer Certificate`` command in
+``/Applications/Python 2.7`` may be used to download and install a default
+set of root certificates from the third-party ``certifi`` package.
+
+..
+
+.. bpo: 11485
+.. date: 2018-04-14-08-49-40
+.. nonce: oALntE
+.. section: macOS
+
+python.org macOS Pythons no longer supply a default SDK value (e.g.
+``-isysroot /``) or specific compiler version default (e.g. ``gcc-4.2``)
+when building extension modules.  Use ``CC``, ``SDKROOT``, and
+``DEVELOPER_DIR`` environment variables to override compilers or to use an
+SDK.  See Apple's ``xcrun`` man page for more info.
+
+..
+
+.. bpo: 33184
+.. date: 2018-04-07-00-58-50
+.. nonce: rMTiqu
+.. section: macOS
+
+Update macOS installer build to use OpenSSL 1.0.2o.
+
+..
+
+.. bpo: 31920
+.. date: 2018-03-26-18-54-24
+.. nonce: u_WKsT
+.. section: Tools/Demos
+
+Fixed handling directories as arguments in the ``pygettext`` script. Based
+on patch by Oleg Krasnikov.
+
+..
+
+.. bpo: 30109
+.. date: 2018-02-12-14-27-01
+.. nonce: lIYlaf
+.. section: Tools/Demos
+
+Fixed Tools/scripts/reindent.py for non-ASCII files. It now processes files
+as binary streams. This also fixes "make reindent".
+
+..
+
+.. bpo: 24960
+.. date: 2017-12-22-09-25-51
+.. nonce: TGdAgO
+.. section: Tools/Demos
+
+2to3 and lib2to3 can now read pickled grammar files using pkgutil.get_data()
+rather than probing the filesystem. This lets 2to3 and lib2to3 work when run
+from a zipfile.
+
+..
+
+.. bpo: 20891
+.. date: 2017-11-30-18-13-45
+.. nonce: wBnMdF
+.. section: C API
+
+Fix PyGILState_Ensure(). When PyGILState_Ensure() is called in a non-Python
+thread before PyEval_InitThreads(), only call PyEval_InitThreads() after
+calling PyThreadState_New() to fix a crash.
+
+..
+
+.. bpo: 31626
+.. date: 2017-11-07-11-59-44
+.. nonce: LP-CoD
+.. section: C API
+
+When Python is built in debug mode, the memory debug hooks now fail with a
+fatal error if realloc() fails to shrink a memory block, because the debug
+hook just erased freed bytes without keeping a copy of them.
diff --git a/Misc/NEWS.d/2.7.1rc1.rst b/Misc/NEWS.d/2.7.1rc1.rst
new file mode 100644
index 0000000..8de80ed
--- /dev/null
+++ b/Misc/NEWS.d/2.7.1rc1.rst
@@ -0,0 +1,1726 @@
+.. bpo: 10221
+.. date: 8273
+.. nonce: 4NppnX
+.. release date: 2010-11-13
+.. section: Core and Builtins
+
+dict.pop(k) now has a key error message that includes the missing key (same
+message d[k] returns for missing keys).
+
+..
+
+.. bpo: 10125
+.. date: 8272
+.. nonce: Zs0ZsA
+.. section: Core and Builtins
+
+Don't segfault when the iterator passed to ``file.writelines()`` closes the
+file.
+
+..
+
+.. bpo: 10186
+.. date: 8271
+.. nonce: _LgTkO
+.. section: Core and Builtins
+
+Fix the SyntaxError caret when the offset is equal to the length of the
+offending line.
+
+..
+
+.. bpo: 9997
+.. date: 8270
+.. nonce: mGq7Dd
+.. section: Core and Builtins
+
+Don't let the name "top" have special significance in scope resolution.
+
+..
+
+.. bpo: 9862
+.. date: 8269
+.. nonce: 18PjRQ
+.. section: Core and Builtins
+
+Compensate for broken PIPE_BUF in AIX by hard coding its value as the
+default 512 when compiling on AIX.
+
+..
+
+.. bpo: 9675
+.. date: 8268
+.. nonce: grRY0l
+.. section: Core and Builtins
+
+CObject use is marked as a Py3k warning, not a deprecation warning.
+
+..
+
+.. bpo: 10068
+.. date: 8267
+.. nonce: CYBiNW
+.. section: Core and Builtins
+
+Global objects which have reference cycles with their module's dict are now
+cleared again. This causes issue #7140 to appear again.
+
+..
+
+.. bpo: 9869
+.. date: 8266
+.. nonce: gwgHCl
+.. section: Core and Builtins
+
+Make long() and PyNumber_Long return something of type long for a class
+whose __long__ method returns a plain int.  This fixes an interpreter crash
+when initializing an instance of a long subclass from an object whose
+__long__ method returns a plain int.
+
+..
+
+.. bpo: 10006
+.. date: 8265
+.. nonce: QMA2kC
+.. section: Core and Builtins
+
+type.__abstractmethods__ now raises an AttributeError.
+
+..
+
+.. bpo: 9797
+.. date: 8264
+.. nonce: YxisFn
+.. section: Core and Builtins
+
+pystate.c wrongly assumed that zero couldn't be a valid thread-local storage
+key.
+
+..
+
+.. bpo: 4947
+.. date: 8263
+.. nonce: abA0AT
+.. section: Core and Builtins
+
+The write() method of sys.stdout and sys.stderr uses their encoding and
+errors attributes instead of using utf-8 in strict mode, to get the same
+behaviour than the print statement.
+
+..
+
+.. bpo: 9737
+.. date: 8262
+.. nonce: JlusIM
+.. section: Core and Builtins
+
+Fix a crash when trying to delete a slice or an item from a memoryview
+object.
+
+..
+
+.. bpo: 0
+.. date: 8261
+.. nonce: MI1h1F
+.. section: Core and Builtins
+
+Restore GIL in nis_cat in case of error.
+
+..
+
+.. bpo: 9688
+.. date: 8260
+.. nonce: PTAKBL
+.. section: Core and Builtins
+
+__basicsize__ and __itemsize__ must be accessed as Py_ssize_t.
+
+..
+
+.. bpo: 8530
+.. date: 8259
+.. nonce: 4OlxZq
+.. section: Core and Builtins
+
+Prevent stringlib fastsearch from reading beyond the front of an array.
+
+..
+
+.. bpo: 83755
+.. date: 8258
+.. nonce: LFoGKM
+.. section: Core and Builtins
+
+Implicit set-to-frozenset conversion was not thread-safe.
+
+..
+
+.. bpo: 9416
+.. date: 8257
+.. nonce: EqecrW
+.. section: Core and Builtins
+
+Fix some issues with complex formatting where the output with no type
+specifier failed to match the str output:
+
+- format(complex(-0.0, 2.0), '-') omitted the real part from the output,   -
+format(complex(0.0, 2.0), '-') included a sign and parentheses.
+
+..
+
+.. bpo: 7616
+.. date: 8256
+.. nonce: AOGmSj
+.. section: Core and Builtins
+
+Fix copying of overlapping memoryview slices with the Intel compiler.
+
+..
+
+.. bpo: 9926
+.. date: 8255
+.. nonce: J4BGGY
+.. section: Library
+
+Wrapped TestSuite subclass does not get __call__ executed
+
+..
+
+.. bpo: 4471
+.. date: 8254
+.. nonce: ZJDlrs
+.. section: Library
+
+Properly shutdown socket in IMAP.shutdown().  Patch by Lorenzo M. Catucci.
+
+..
+
+.. bpo: 10126
+.. date: 8253
+.. nonce: zvTZV-
+.. section: Library
+
+Fix distutils' test_build when Python was built with --enable-shared.
+
+..
+
+.. bpo: 0
+.. date: 8252
+.. nonce: NFeWRc
+.. section: Library
+
+Fix typo in one sdist option (medata-check).
+
+..
+
+.. bpo: 9199
+.. date: 8251
+.. nonce: 8WF_Pp
+.. section: Library
+
+Fix incorrect use of distutils.cmd.Command.announce.
+
+..
+
+.. bpo: 1718574
+.. date: 8250
+.. nonce: iqLV20
+.. section: Library
+
+Fix options that were supposed to accept arguments but did not in
+build_clib.
+
+..
+
+.. bpo: 9281
+.. date: 8249
+.. nonce: 0xYNfM
+.. section: Library
+
+Prevent race condition with mkdir in distutils.  Patch by Arfrever.
+
+..
+
+.. bpo: 10229
+.. date: 8248
+.. nonce: 10oNS7
+.. section: Library
+
+Fix caching error in gettext.
+
+..
+
+.. bpo: 10252
+.. date: 8247
+.. nonce: pGhEYO
+.. section: Library
+
+Close file objects in a timely manner in distutils code and tests.  Patch by
+Brian Brazil, completed by Éric Araujo.
+
+..
+
+.. bpo: 10311
+.. date: 8246
+.. nonce: u1t7up
+.. section: Library
+
+The signal module now restores errno before returning from its low-level
+signal handler.  Patch by Hallvard B Furuseth.
+
+..
+
+.. bpo: 10038
+.. date: 8245
+.. nonce: 5EKcD7
+.. section: Library
+
+json.loads() on str should always return unicode (regression from Python
+2.6).  Patch by Walter Dörwald.
+
+..
+
+.. bpo: 120176
+.. date: 8244
+.. nonce: 9k2NaP
+.. section: Library
+
+Wrapped TestSuite subclass does not get __call__ executed.
+
+..
+
+.. bpo: 6706
+.. date: 8243
+.. nonce: Es-Yrw
+.. section: Library
+
+asyncore accept() method no longer raises EWOULDBLOCK/ECONNABORTED on
+incomplete connection attempt but returns None instead.
+
+..
+
+.. bpo: 10266
+.. date: 8242
+.. nonce: BZ9duO
+.. section: Library
+
+uu.decode didn't close in_file explicitly when it was given as a filename.
+Patch by Brian Brazil.
+
+..
+
+.. bpo: 10246
+.. date: 8241
+.. nonce: NPG3oL
+.. section: Library
+
+uu.encode didn't close file objects explicitly when filenames were given to
+it.  Patch by Brian Brazil.
+
+..
+
+.. bpo: 10253
+.. date: 8240
+.. nonce: TL1F90
+.. section: Library
+
+FileIO leaks a file descriptor when trying to open a file for append that
+isn't seekable.  Patch by Brian Brazil.
+
+..
+
+.. bpo: 6105
+.. date: 8239
+.. nonce: qt9xTV
+.. section: Library
+
+json.dumps now respects OrderedDict's iteration order.
+
+..
+
+.. bpo: 9295
+.. date: 8238
+.. nonce: M7y0mB
+.. section: Library
+
+Fix a crash under Windows when calling close() on a file object with custom
+buffering from two threads at once.
+
+..
+
+.. bpo: 5027
+.. date: 8237
+.. nonce: 6mYRNc
+.. section: Library
+
+The standard ``xml`` namespace is now understood by
+xml.sax.saxutils.XMLGenerator as being bound to
+http://www.w3.org/XML/1998/namespace.  Patch by Troy J. Farrell.
+
+..
+
+.. bpo: 10163
+.. date: 8236
+.. nonce: Lrvd6I
+.. section: Library
+
+Skip unreadable registry keys during mimetypes initialization.
+
+..
+
+.. bpo: 5117
+.. date: 8235
+.. nonce: FzD7qd
+.. section: Library
+
+Fixed root directory related issue on posixpath.relpath() and
+ntpath.relpath().
+
+..
+
+.. bpo: 9409
+.. date: 8234
+.. nonce: HRnhHT
+.. section: Library
+
+Fix the regex to match all kind of filenames, for interactive debugging in
+doctests.
+
+..
+
+.. bpo: 6612
+.. date: 8233
+.. nonce: qaqnnh
+.. section: Library
+
+Fix site and sysconfig to catch os.getcwd() error, eg. if the current
+directory was deleted. Patch written by W. Trevor King.
+
+..
+
+.. bpo: 10045
+.. date: 8232
+.. nonce: iz6KpQ
+.. section: Library
+
+Improved performance when writing after seeking past the end of the "file"
+in cStringIO.
+
+..
+
+.. bpo: 9948
+.. date: 8231
+.. nonce: FOv8kp
+.. section: Library
+
+Fixed problem of losing filename case information.
+
+..
+
+.. bpo: 9437
+.. date: 8230
+.. nonce: a95HEb
+.. section: Library
+
+Fix building C extensions with non-default LDFLAGS.
+
+..
+
+.. bpo: 9759
+.. date: 8229
+.. nonce: aGsQic
+.. section: Library
+
+GzipFile now raises ValueError when an operation is attempted after the file
+is closed.  Patch by Jeffrey Finkelstein.
+
+..
+
+.. bpo: 9042
+.. date: 8228
+.. nonce: dQTK_C
+.. section: Library
+
+Fix interaction of custom translation classes and caching in gettext.
+
+..
+
+.. bpo: 9065
+.. date: 8227
+.. nonce: PTsv6_
+.. section: Library
+
+tarfile no longer uses "root" as the default for the uname and gname field.
+
+..
+
+.. bpo: 1050268
+.. date: 8226
+.. nonce: oOtGVD
+.. section: Library
+
+parseaddr now correctly quotes double quote and backslash characters that
+appear inside quoted strings in email addresses.
+
+..
+
+.. bpo: 10004
+.. date: 8225
+.. nonce: NTY_zM
+.. section: Library
+
+quoprimime no longer generates a traceback when confronted with invalid
+characters after '=' in a Q-encoded word.
+
+..
+
+.. bpo: 9950
+.. date: 8224
+.. nonce: omOgj_
+.. section: Library
+
+Fix socket.sendall() crash or misbehaviour when a signal is received.  Now
+sendall() properly calls signal handlers if necessary, and retries sending
+if these returned successfully, including on sockets with a timeout.
+
+..
+
+.. bpo: 9947
+.. date: 8223
+.. nonce: YCbARo
+.. section: Library
+
+logging: Fixed locking bug in stopListening.
+
+..
+
+.. bpo: 9945
+.. date: 8222
+.. nonce: DTIygY
+.. section: Library
+
+logging: Fixed locking bugs in addHandler/removeHandler.
+
+..
+
+.. bpo: 9936
+.. date: 8221
+.. nonce: evd1vv
+.. section: Library
+
+Fixed executable lines' search in the trace module.
+
+..
+
+.. bpo: 9928
+.. date: 8220
+.. nonce: S5LHD8
+.. section: Library
+
+Properly initialize the types exported by the bz2 module.
+
+..
+
+.. bpo: 9854
+.. date: 8219
+.. nonce: DxDKln
+.. section: Library
+
+The default read() implementation in io.RawIOBase now handles non-blocking
+readinto() returning None correctly.
+
+..
+
+.. bpo: 9729
+.. date: 8218
+.. nonce: mSCrBH
+.. section: Library
+
+Fix the signature of SSLSocket.recvfrom() and SSLSocket.sendto() to match
+the corresponding socket methods.  Also, fix various SSLSocket methods to
+raise socket.error rather than an unhelpful TypeError when called on an
+unconnected socket.  Original patch by Andrew Bennetts.
+
+..
+
+.. bpo: 9826
+.. date: 8217
+.. nonce: OHvlzj
+.. section: Library
+
+OrderedDict.__repr__ can now handle self-referential values:   d['x'] = d.
+
+..
+
+.. bpo: 767645
+.. date: 8216
+.. nonce: YgbDPp
+.. section: Library
+
+Set os.path.supports_unicode_filenames to True on Mac OS X.
+
+..
+
+.. bpo: 9837
+.. date: 8215
+.. nonce: EZowT2
+.. section: Library
+
+The read() method of ZipExtFile objects (as returned by ZipFile.open())
+could return more bytes than requested.
+
+..
+
+.. bpo: 9825
+.. date: 8214
+.. nonce: MVYNUl
+.. section: Library
+
+removed __del__ from the definition of collections.OrderedDict. This
+prevents user-created self-referencing ordered dictionaries from becoming
+permanently uncollectable GC garbage.  The downside is that removing __del__
+means that the internal doubly-linked list has to wait for GC collection
+rather than freeing memory immediately when the refcnt drops to zero.
+
+..
+
+.. bpo: 9816
+.. date: 8213
+.. nonce: jOgfeD
+.. section: Library
+
+random.Random.jumpahead(n) did not produce a sufficiently different internal
+state for small values of n.  Fixed by salting the value.
+
+..
+
+.. bpo: 9792
+.. date: 8212
+.. nonce: 6d8KN7
+.. section: Library
+
+In case of connection failure, socket.create_connection() would swallow the
+exception and raise a new one, making it impossible to fetch the original
+errno, or to filter timeout errors.  Now the original error is re-raised.
+
+..
+
+.. bpo: 9758
+.. date: 8211
+.. nonce: bTCX3s
+.. section: Library
+
+When fcntl.ioctl() was called with mutable_flag set to True, and the passed
+buffer was exactly 1024 bytes long, the buffer wouldn't be updated back
+after the system call.  Original patch by Brian Brazil.
+
+..
+
+.. bpo: 1100562
+.. date: 8210
+.. nonce: w61Crx
+.. section: Library
+
+Fix deep-copying of objects derived from the list and dict types.  Patch by
+Michele Orrù and Björn Lindqvist.
+
+..
+
+.. bpo: 7005
+.. date: 8209
+.. nonce: MVOzyL
+.. section: Library
+
+Fixed output of None values for RawConfigParser.write and
+ConfigParser.write.
+
+..
+
+.. bpo: 808164
+.. date: 8208
+.. nonce: P5YO_B
+.. section: Library
+
+Fixed socket.close to avoid references to globals, to avoid issues when
+socket.close is called from a __del__ method.
+
+..
+
+.. bpo: 2986
+.. date: 8207
+.. nonce: BeBn_s
+.. section: Library
+
+difflib.SequenceMatcher gets a new parameter, autojunk, which can be set to
+False to turn off the previously undocumented 'popularity' heuristic. Patch
+by Terry Reedy and Eli Bendersky
+
+..
+
+.. bpo: 8797
+.. date: 8206
+.. nonce: IkQxYA
+.. section: Library
+
+urllib2 does a retry for Basic Authentication failure instead of falling
+into recursion.
+
+..
+
+.. bpo: 1194222
+.. date: 8205
+.. nonce: UXCJLq
+.. section: Library
+
+email.utils.parsedate now returns RFC2822 compliant four character years
+even if the message contains RFC822 two character years.
+
+..
+
+.. bpo: 8750
+.. date: 8204
+.. nonce: ldqODt
+.. section: Library
+
+Fixed MutableSet's methods to correctly handle reflexive operations, namely
+x -= x and x ^= x.
+
+..
+
+.. bpo: 9129
+.. date: 8203
+.. nonce: AYXAAf
+.. section: Library
+
+smtpd.py is vulnerable to DoS attacks deriving from missing error handling
+when accepting a new connection.
+
+..
+
+.. bpo: 658749
+.. date: 8202
+.. nonce: THL2I_
+.. section: Library
+
+asyncore's connect() method now correctly interprets winsock errors.
+
+..
+
+.. bpo: 9501
+.. date: 8201
+.. nonce: G-M-pc
+.. section: Library
+
+Fixed logging regressions in cleanup code.
+
+..
+
+.. bpo: 9214
+.. date: 8200
+.. nonce: j1o-Zo
+.. section: Library
+
+Set operations on KeysView or ItemsView in the collections module now
+correctly return a set.  (Patch by Eli Bendersky.)
+
+..
+
+.. bpo: 9617
+.. date: 8199
+.. nonce: blJoL4
+.. section: Library
+
+Signals received during a low-level write operation aren't ignored by the
+buffered IO layer anymore.
+
+..
+
+.. bpo: 2521
+.. date: 8198
+.. nonce: iTl7ZU
+.. section: Library
+
+Use weakrefs on for caching in the abc module, so that classes are not held
+onto after they are deleted elsewhere.
+
+..
+
+.. bpo: 9626
+.. date: 8197
+.. nonce: Vowb6X
+.. section: Library
+
+the view methods for collections.OrderedDict() were returning the unordered
+versions inherited from dict.  Those methods are now overridden to provide
+ordered views.
+
+..
+
+.. bpo: 8688
+.. date: 8196
+.. nonce: fFdtWn
+.. section: Library
+
+MANIFEST files created by distutils now include a magic comment indicating
+they are generated.  Manually maintained MANIFESTs without this marker will
+not be overwritten or removed.
+
+..
+
+.. bpo: 7467
+.. date: 8195
+.. nonce: 2aq5Vk
+.. section: Library
+
+when reading a file from a ZIP archive, its CRC is checked and a BadZipfile
+error is raised if it doesn't match (as used to be the case in Python 2.5
+and earlier).
+
+..
+
+.. bpo: 9550
+.. date: 8194
+.. nonce: gz0PSS
+.. section: Library
+
+a BufferedReader could issue an additional read when the original read
+request had been satisfied, which could block indefinitely when the
+underlying raw IO channel was e.g. a socket.  Report and original patch by
+Jason V. Miller.
+
+..
+
+.. bpo: 9551
+.. date: 8193
+.. nonce: 2q2VFJ
+.. section: Library
+
+Don't raise TypeError when setting the value to None for SafeConfigParser
+instances constructed with allow_no_value == True.
+
+..
+
+.. bpo: 6915
+.. date: 8192
+.. nonce: Nh2L6-
+.. section: Library
+
+Under Windows, os.listdir() didn't release the Global Interpreter Lock
+around all system calls.  Original patch by Ryan Kelly.
+
+..
+
+.. bpo: 3757
+.. date: 8191
+.. nonce: Dfue1t
+.. section: Library
+
+thread-local objects now support cyclic garbage collection. Thread-local
+objects involved in reference cycles will be deallocated timely by the
+cyclic GC, even if the underlying thread is still running.
+
+..
+
+.. bpo: 6231
+.. date: 8190
+.. nonce: fvS6jF
+.. section: Library
+
+Fix xml.etree.ElementInclude to include the tail of the current node.
+
+..
+
+.. bpo: 6869
+.. date: 8189
+.. nonce: SI1hyJ
+.. section: Library
+
+Fix a refcount problem in the _ctypes extension.
+
+..
+
+.. bpo: 5504
+.. date: 8188
+.. nonce: DyvVKo
+.. section: Library
+
+ctypes should now work with systems where mmap can't be PROT_WRITE and
+PROT_EXEC.
+
+..
+
+.. bpo: 8280
+.. date: 8187
+.. nonce: PrpMXx
+.. section: Library
+
+urllib2's Request method will remove fragements in the url. This is how it
+is supposed to work, wget and curl do the same.  Previous behavior was
+wrong.
+
+..
+
+.. bpo: 2944
+.. date: 8186
+.. nonce: uva4MG
+.. section: Library
+
+asyncore doesn't handle connection refused correctly.
+
+..
+
+.. bpo: 3196
+.. date: 8185
+.. nonce: oFknaj
+.. section: Library
+
+email header decoding is now forgiving if an RFC2047 encoded word encoded in
+base64 is lacking padding.
+
+..
+
+.. bpo: 9444
+.. date: 8184
+.. nonce: KdKxOB
+.. section: Library
+
+Argparse now uses the first element of prefix_chars as the option character
+for the added 'h/help' option if prefix_chars does not contain a '-',
+instead of raising an error.
+
+..
+
+.. bpo: 9354
+.. date: 8183
+.. nonce: 4mGRrJ
+.. section: Library
+
+Provide getsockopt() in asyncore's file_wrapper.
+
+..
+
+.. bpo: 9428
+.. date: 8182
+.. nonce: 0pea6y
+.. section: Library
+
+Fix running scripts with the profile/cProfile modules from the command line.
+
+..
+
+.. bpo: 7781
+.. date: 8181
+.. nonce: qJIM6S
+.. section: Library
+
+Fix restricting stats by entry counts in the pstats interactive browser.
+
+..
+
+.. bpo: 9209
+.. date: 8180
+.. nonce: q5h2aM
+.. section: Library
+
+Do not crash in the pstats interactive browser on invalid regular
+expressions.
+
+..
+
+.. bpo: 7372
+.. date: 8179
+.. nonce: bjWkFm
+.. section: Library
+
+Fix pstats regression when stripping paths from profile data generated with
+the profile module.
+
+..
+
+.. bpo: 4108
+.. date: 8178
+.. nonce: SGW4tp
+.. section: Library
+
+In urllib.robotparser, if there are multiple 'User-agent: *' entries,
+consider the first one.
+
+..
+
+.. bpo: 8397
+.. date: 8177
+.. nonce: xNl1c0
+.. section: Library
+
+Raise an error when attempting to mix iteration and regular reads on a
+BZ2File object, rather than returning incorrect results.
+
+..
+
+.. bpo: 5294
+.. date: 8176
+.. nonce: OW1qhg
+.. section: Library
+
+Fix the behavior of pdb's "continue" command when called in the top-level
+debugged frame.
+
+..
+
+.. bpo: 5727
+.. date: 8175
+.. nonce: sYm_N8
+.. section: Library
+
+Restore the ability to use readline when calling into pdb in doctests.
+
+..
+
+.. bpo: 6719
+.. date: 8174
+.. nonce: _9t4CD
+.. section: Library
+
+In pdb, do not stop somewhere in the encodings machinery if the source file
+to be debugged is in a non-builtin encoding.
+
+..
+
+.. bpo: 8048
+.. date: 8173
+.. nonce: UMKE5S
+.. section: Library
+
+Prevent doctests from failing when sys.displayhook has been reassigned.
+
+..
+
+.. bpo: 8015
+.. date: 8172
+.. nonce: YNaP75
+.. section: Library
+
+In pdb, do not crash when an empty line is entered as a breakpoint command.
+
+..
+
+.. bpo: 9448
+.. date: 8171
+.. nonce: UD0blh
+.. section: Library
+
+Fix a leak of OS resources (mutexes or semaphores) when re-initializing a
+buffered IO object by calling its ``__init__`` method.
+
+..
+
+.. bpo: 7909
+.. date: 8170
+.. nonce: KNWthV
+.. section: Library
+
+Do not touch paths with the special prefixes ``\\.\`` or ``\\?\`` in
+ntpath.normpath().
+
+..
+
+.. bpo: 5146
+.. date: 8169
+.. nonce: f9NwCU
+.. section: Library
+
+Handle UID THREAD command correctly in imaplib.
+
+..
+
+.. bpo: 5147
+.. date: 8168
+.. nonce: ANusbF
+.. section: Library
+
+Fix the header generated for cookie files written by
+http.cookiejar.MozillaCookieJar.
+
+..
+
+.. bpo: 8198
+.. date: 8167
+.. nonce: WrGm2c
+.. section: Library
+
+In pydoc, output all help text to the correct stream when sys.stdout is
+reassigned.
+
+..
+
+.. bpo: 7395
+.. date: 8166
+.. nonce: FkZk7v
+.. section: Library
+
+Fix tracebacks in pstats interactive browser.
+
+..
+
+.. bpo: 8230
+.. date: 8165
+.. nonce: pBkzM8
+.. section: Library
+
+Fix Lib/test/sortperf.py.
+
+..
+
+.. bpo: 1713
+.. date: 8164
+.. nonce: fknkI-
+.. section: Library
+
+Fix os.path.ismount(), which returned true for symbolic links across
+devices.
+
+..
+
+.. bpo: 8826
+.. date: 8163
+.. nonce: PcQ9NA
+.. section: Library
+
+Properly load old-style "expires" attribute in http.cookies.
+
+..
+
+.. bpo: 1690103
+.. date: 8162
+.. nonce: 5tT47_
+.. section: Library
+
+Fix initial namespace for code run with trace.main().
+
+..
+
+.. bpo: 8471
+.. date: 8161
+.. nonce: RqN6fc
+.. section: Library
+
+In doctest, properly reset the output stream to an empty string when Unicode
+was previously output.
+
+..
+
+.. bpo: 8620
+.. date: 8160
+.. nonce: qQR7E1
+.. section: Library
+
+when a Cmd is fed input that reaches EOF without a final newline, it no
+longer truncates the last character of the last command line.
+
+..
+
+.. bpo: 6213
+.. date: 8159
+.. nonce: oyAtZ0
+.. section: Library
+
+Implement getstate() and setstate() methods of utf-8-sig and utf-16
+incremental encoders.
+
+..
+
+.. bpo: 7113
+.. date: 8158
+.. nonce: vO-_y8
+.. section: Library
+
+Speed up loading in ConfigParser. Patch by Łukasz Langa.
+
+..
+
+.. bpo: 3704
+.. date: 8157
+.. nonce: UbuUn3
+.. section: Library
+
+cookielib was not properly handling URLs with a / in the parameters.
+
+..
+
+.. bpo: 9032
+.. date: 8156
+.. nonce: zX39th
+.. section: Library
+
+XML-RPC client retries the request on EPIPE error. The EPIPE error occurs
+when the server closes the socket and the client sends a big XML-RPC
+request.
+
+..
+
+.. bpo: 5542
+.. date: 8155
+.. nonce: v5vo1o
+.. section: Library
+
+Remove special logic that closes HTTPConnection socket on EPIPE.
+
+..
+
+.. bpo: 4629
+.. date: 8154
+.. nonce: warUcf
+.. section: Library
+
+getopt raises an error if an argument ends with = whereas getopt doesn't
+except a value (eg. --help= is rejected if getopt uses ['help='] long
+options).
+
+..
+
+.. bpo: 7895
+.. date: 8153
+.. nonce: citB4G
+.. section: Library
+
+platform.mac_ver() no longer crashes after calling os.fork()
+
+..
+
+.. bpo: 5395
+.. date: 8152
+.. nonce: _AaZih
+.. section: Library
+
+array.fromfile() would raise a spurious EOFError when an I/O error occurred.
+Now an IOError is raised instead.  Patch by chuck (Jan Hosang).
+
+..
+
+.. bpo: 7646
+.. date: 8151
+.. nonce: af6LG8
+.. section: Library
+
+The fnmatch pattern cache no longer grows without bound.
+
+..
+
+.. bpo: 9136
+.. date: 8150
+.. nonce: GFQg0c
+.. section: Library
+
+Fix 'dictionary changed size during iteration' RuntimeError produced when
+profiling the decimal module.  This was due to a dangerous iteration over
+'locals()' in Context.__init__.
+
+..
+
+.. bpo: 0
+.. date: 8149
+.. nonce: aX1_fT
+.. section: Library
+
+Fix extreme speed issue in Decimal.pow when the base is an exact power of 10
+and the exponent is tiny (for example, Decimal(10) **
+Decimal('1e-999999999')).
+
+..
+
+.. bpo: 9161
+.. date: 8148
+.. nonce: 8Az_aI
+.. section: Library
+
+Fix regression in optparse's acceptance of unicode strings in add_option
+calls.
+
+..
+
+.. bpo: 9130
+.. date: 8147
+.. nonce: cB_z-D
+.. section: Library
+
+Fix validation of relative imports in parser module.
+
+..
+
+.. bpo: 9128
+.. date: 8146
+.. nonce: 2OKBVh
+.. section: Library
+
+Fix validation of class decorators in parser module.
+
+..
+
+.. bpo: 9164
+.. date: 8145
+.. nonce: SK5COV
+.. section: Library
+
+Ensure sysconfig handles dupblice archs while building on OSX
+
+..
+
+.. bpo: 9315
+.. date: 8144
+.. nonce: cZkTvS
+.. section: Library
+
+Fix for the trace module to record correct class name for tracing methods.
+
+..
+
+.. bpo: 9054
+.. date: 8143
+.. nonce: UkA-OR
+.. section: Library
+
+Fix a crash occurring when using the pyexpat module with expat version
+2.0.1.
+
+..
+
+.. bpo: 10003
+.. date: 8142
+.. nonce: AzaOdd
+.. section: Library
+
+Allow handling of SIGBREAK on Windows. Fixes a regression introduced by
+issue #9324.
+
+..
+
+.. bpo: 8734
+.. date: 8141
+.. nonce: f1CtFi
+.. section: Library
+
+Avoid crash in msvcrt.get_osfhandle() when an invalid file descriptor is
+provided.  Patch by Pascal Chambon.
+
+..
+
+.. bpo: 7736
+.. date: 8140
+.. nonce: 7n0AS1
+.. section: Library
+
+Release the GIL around calls to opendir() and closedir() in the posix
+module.  Patch by Marcin Bachry.
+
+..
+
+.. bpo: 0
+.. date: 8139
+.. nonce: Z5wyzY
+.. section: Library
+
+As a result of issue #2521, the _weakref module is now compiled into the
+interpreter by default.
+
+..
+
+.. bpo: 9324
+.. date: 8138
+.. nonce: c_m8af
+.. section: Library
+
+Add parameter validation to signal.signal on Windows in order to prevent
+crashes.
+
+..
+
+.. bpo: 9526
+.. date: 8137
+.. nonce: 8aO189
+.. section: Library
+
+Remove some outdated (int) casts that were preventing the array module from
+working correctly with arrays of more than 2**31 elements.
+
+..
+
+.. bpo: 0
+.. date: 8136
+.. nonce: yfc3zR
+.. section: Library
+
+Fix memory leak in ssl._ssl._test_decode_cert.
+
+..
+
+.. bpo: 8065
+.. date: 8135
+.. nonce: c5wBHe
+.. section: Library
+
+Fix memory leak in readline module (from failure to free the result of
+history_get_history_state()).
+
+..
+
+.. bpo: 9450
+.. date: 8134
+.. nonce: 16iwLn
+.. section: Library
+
+Fix memory leak in readline.replace_history_item and
+readline.remove_history_item for readline version >= 5.0.
+
+..
+
+.. bpo: 8105
+.. date: 8133
+.. nonce: GM5E7v
+.. section: Library
+
+Validate file descriptor passed to mmap.mmap on Windows.
+
+..
+
+.. bpo: 1019882
+.. date: 8132
+.. nonce: VnQ_2J
+.. section: Library
+
+Fix IndexError when loading certain hotshot stats.
+
+..
+
+.. bpo: 9422
+.. date: 8131
+.. nonce: MWxuZj
+.. section: Library
+
+Fix memory leak when re-initializing a struct.Struct object.
+
+..
+
+.. bpo: 7900
+.. date: 8130
+.. nonce: s8mvNz
+.. section: Library
+
+The getgroups(2) system call on MacOSX behaves rather oddly compared to
+other unix systems. In particular, os.getgroups() does not reflect any
+changes made using os.setgroups() but basically always returns the same
+information as the id command.
+
+os.getgroups() can now return more than 16 groups on MacOSX.
+
+..
+
+.. bpo: 9277
+.. date: 8129
+.. nonce: yRnO3Z
+.. section: Library
+
+Fix bug in struct.pack for bools in standard mode (e.g., struct.pack('>?')):
+if conversion to bool raised an exception then that exception wasn't
+properly propagated on machines where char is unsigned.
+
+..
+
+.. bpo: 7567
+.. date: 8128
+.. nonce: hujTBu
+.. section: Library
+
+Don't call `setupterm' twice.
+
+..
+
+.. bpo: 7287
+.. date: 8127
+.. nonce: 6G503Q
+.. section: Tools/Demos
+
+Demo/imputil/knee.py was removed.
+
+..
+
+.. bpo: 9188
+.. date: 8126
+.. nonce: XIcIjV
+.. section: Tools/Demos
+
+The gdb extension now handles correctly narrow (UCS2) as well as wide (UCS4)
+unicode builds for both the host interpreter (embedded inside gdb) and the
+interpreter under test.
+
+..
+
+.. bpo: 8852
+.. date: 8125
+.. nonce: WD9-r5
+.. section: Build
+
+Allow the socket module to build on OpenSolaris.
+
+..
+
+.. bpo: 10054
+.. date: 8124
+.. nonce: Pi5IJn
+.. section: Build
+
+Some platforms provide uintptr_t in inttypes.h.  Patch by Akira Kitada.
+
+..
+
+.. bpo: 10055
+.. date: 8123
+.. nonce: xfTPZn
+.. section: Build
+
+Make json C89-compliant in UCS4 mode.
+
+..
+
+.. bpo: 1633863
+.. date: 8122
+.. nonce: 08O8Og
+.. section: Build
+
+Don't ignore $CC under AIX.
+
+..
+
+.. bpo: 9810
+.. date: 8121
+.. nonce: JACTWC
+.. section: Build
+
+Compile bzip2 source files in python's project file directly. It used to be
+built with bzip2's makefile.
+
+..
+
+.. bpo: 941346
+.. date: 8120
+.. nonce: 4aE21V
+.. section: Build
+
+Improve the build process under AIX and allow Python to be built as a shared
+library.  Patch by Sébastien Sablé.
+
+..
+
+.. bpo: 4026
+.. date: 8119
+.. nonce: 2Kz_uL
+.. section: Build
+
+Make the fcntl extension build under AIX.  Patch by Sébastien Sablé.
+
+..
+
+.. bpo: 3101
+.. date: 8118
+.. nonce: zq3p0s
+.. section: Build
+
+Helper functions _add_one_to_index_C() and _add_one_to_index_F() become
+_Py_add_one_to_index_C() and _Py_add_one_to_index_F(), respectively.
+
+..
+
+.. bpo: 9700
+.. date: 8117
+.. nonce: tC4cof
+.. section: Build
+
+define HAVE_BROKEN_POSIX_SEMAPHORES under AIX 6.x.  Patch by Sébastien
+Sablé.
+
+..
+
+.. bpo: 9280
+.. date: 8116
+.. nonce: 2PISFF
+.. section: Build
+
+Make sharedinstall depend on sharedmods.
+
+..
+
+.. bpo: 9275
+.. date: 8115
+.. nonce: DcFin-
+.. section: Build
+
+The OSX installer once again installs links to binaries in
+``/usr/local/bin``.
+
+..
+
+.. bpo: 9392
+.. date: 8114
+.. nonce: aY7w6w
+.. section: Build
+
+A framework build on OSX will once again use a versioned name of the
+``2to3`` tool, that is you can use ``2to3-2.7`` to select the Python 2.7
+edition of 2to3.
+
+..
+
+.. bpo: 9701
+.. date: 8113
+.. nonce: hgaEU8
+.. section: Build
+
+The MacOSX installer can patch the shell profile to ensure that the "bin"
+directory inside the framework is on the shell's search path. This feature
+now also supports the ZSH shell.
+
+..
+
+.. bpo: 7473
+.. date: 8112
+.. nonce: NuS196
+.. section: Build
+
+avoid link errors when building a framework with a different set of
+architectures than the one that is currently installed.
+
+..
+
+.. bpo: 9978
+.. date: 8111
+.. nonce: PgNzKW
+.. section: Tests
+
+Wait until subprocess completes initialization. (Win32KillTests in test_os)
+
+..
+
+.. bpo: 9894
+.. date: 8110
+.. nonce: 9cw69_
+.. section: Tests
+
+Do not hardcode ENOENT in test_subprocess.
+
+..
+
+.. bpo: 9323
+.. date: 8109
+.. nonce: qAJ8-i
+.. section: Tests
+
+Make test.regrtest.__file__ absolute, this was not always the case when
+running profile or trace, for example.
+
+..
+
+.. bpo: 9315
+.. date: 8108
+.. nonce: f1i0qq
+.. section: Tests
+
+Added tests for the trace module.  Patch by Eli Bendersky.
+
+..
+
+.. bpo: 0
+.. date: 8107
+.. nonce: AVwNn9
+.. section: Tests
+
+Strengthen test_unicode with explicit type checking for assertEqual tests.
+
+..
+
+.. bpo: 8857
+.. date: 8106
+.. nonce: Hy6Qmf
+.. section: Tests
+
+Provide a test case for socket.getaddrinfo.
+
+..
+
+.. bpo: 7564
+.. date: 8105
+.. nonce: ps-pN3
+.. section: Tests
+
+Skip test_ioctl if another process is attached to /dev/tty.
+
+..
+
+.. bpo: 8433
+.. date: 8104
+.. nonce: kMuB7u
+.. section: Tests
+
+Fix test_curses failure with newer versions of ncurses.
+
+..
+
+.. bpo: 9496
+.. date: 8103
+.. nonce: UDIGR0
+.. section: Tests
+
+Provide a test suite for the rlcompleter module.  Patch by Michele Orrù.
+
+..
+
+.. bpo: 8605
+.. date: 8102
+.. nonce: jxIp6Y
+.. section: Tests
+
+Skip test_gdb if Python is compiled with optimizations.
+
+..
+
+.. bpo: 9568
+.. date: 8101
+.. nonce: OoJYE5
+.. section: Tests
+
+Fix test_urllib2_localnet on OS X 10.3.
+
+..
+
+.. bpo: 9817
+.. date: 8100
+.. nonce: sk3Q3T
+.. section: Documentation
+
+Add expat COPYING file; add expat, libffi and expat licenses to
+Doc/license.rst.
+
+..
+
+.. bpo: 9524
+.. date: 8099
+.. nonce: Es25xw
+.. section: Documentation
+
+Document that two CTRL* signals are meant for use only with os.kill.
+
+..
+
+.. bpo: 9255
+.. date: 8098
+.. nonce: tp81US
+.. section: Documentation
+
+Document that the 'test' package is for internal Python use only.
+
+..
+
+.. bpo: 7829
+.. date: 8097
+.. nonce: o1BLF0
+.. section: Documentation
+
+Document in dis that bytecode is an implementation detail.
diff --git a/Misc/NEWS.d/2.7.2.rst b/Misc/NEWS.d/2.7.2.rst
new file mode 100644
index 0000000..346afb1
--- /dev/null
+++ b/Misc/NEWS.d/2.7.2.rst
@@ -0,0 +1,16 @@
+.. bpo: 12009
+.. date: 8463
+.. nonce: nQPg8Y
+.. release date: 2011-06-11
+.. section: Library
+
+Fixed regression in netrc file comment handling.
+
+..
+
+.. bpo: 1221
+.. date: 8462
+.. nonce: vFJB6t
+.. section: Library
+
+Make pyexpat.__version__ equal to the Python version.
diff --git a/Misc/NEWS.d/2.7.2rc1.rst b/Misc/NEWS.d/2.7.2rc1.rst
new file mode 100644
index 0000000..8d55be5
--- /dev/null
+++ b/Misc/NEWS.d/2.7.2rc1.rst
@@ -0,0 +1,1661 @@
+.. bpo: 9670
+.. date: 8461
+.. nonce: D4p50W
+.. release date: 2011-05-29
+.. section: Core and Builtins
+
+Increase the default stack size for secondary threads on Mac OS X and
+FreeBSD to reduce the chances of a crash instead of a "maximum recursion
+depth" RuntimeError exception. (patch by Ronald Oussoren)
+
+..
+
+.. bpo: 0
+.. date: 8460
+.. nonce: w122h9
+.. section: Core and Builtins
+
+Correct lookup of __dir__ on objects. This allows old-style classes to have
+__dir__. It also causes errors besides AttributeError found on lookup to be
+propagated.
+
+..
+
+.. bpo: 1195
+.. date: 8459
+.. nonce: rUvlec
+.. section: Core and Builtins
+
+Fix input() if it is interrupted by CTRL+d and then CTRL+c, clear the
+end-of-file indicator after CTRL+d.
+
+..
+
+.. bpo: 8651
+.. date: 8458
+.. nonce: KT0VWy
+.. section: Core and Builtins
+
+PyArg_Parse*() functions raise an OverflowError if the file doesn't have
+PY_SSIZE_T_CLEAN define and the size doesn't fit in an int (length bigger
+than 2^31-1 bytes).
+
+..
+
+.. bpo: 8651
+.. date: 8457
+.. nonce: d-KV9c
+.. section: Core and Builtins
+
+Fix "z#" format of PyArg_Parse*() function: the size was not written if
+PY_SSIZE_T_CLEAN is defined.
+
+..
+
+.. bpo: 9756
+.. date: 8456
+.. nonce: L962XN
+.. section: Core and Builtins
+
+When calling a method descriptor or a slot wrapper descriptor, the check of
+the object type doesn't read the __class__ attribute anymore. Fix a crash if
+a class override its __class__ attribute (e.g. a proxy of the str type).
+Patch written by Andreas Stührk.
+
+..
+
+.. bpo: 10517
+.. date: 8455
+.. nonce: eHRgPe
+.. section: Core and Builtins
+
+After fork(), reinitialize the TLS used by the PyGILState_* APIs, to avoid a
+crash with the pthread implementation in RHEL 5.  Patch by Charles-François
+Natali.
+
+..
+
+.. bpo: 6780
+.. date: 8454
+.. nonce: MS1yFK
+.. section: Core and Builtins
+
+fix starts/endswith error message to mention that tuples are accepted too.
+
+..
+
+.. bpo: 5057
+.. date: 8453
+.. nonce: BMmS2n
+.. section: Core and Builtins
+
+fix a bug in the peepholer that led to non-portable pyc files between narrow
+and wide builds while optimizing BINARY_SUBSCR on non-BMP chars (e.g.
+u"\U00012345"[0]).
+
+..
+
+.. bpo: 11650
+.. date: 8452
+.. nonce: r47Jvk
+.. section: Core and Builtins
+
+PyOS_StdioReadline() retries fgets() if it was interrupted (EINTR), for
+example if the program is stopped with CTRL+z on Mac OS X. Patch written by
+Charles-Francois Natali.
+
+..
+
+.. bpo: 11144
+.. date: 8451
+.. nonce: FE1cYC
+.. section: Core and Builtins
+
+Ensure that int(a_float) returns an int whenever possible. Previously, there
+were some corner cases where a long was returned even though the result was
+within the range of an int.
+
+..
+
+.. bpo: 11450
+.. date: 8450
+.. nonce: ulI9xJ
+.. section: Core and Builtins
+
+Don't truncate hg version info in Py_GetBuildInfo() when there are many tags
+(e.g. when using mq).  Patch by Nadeem Vawda.
+
+..
+
+.. bpo: 10451
+.. date: 8449
+.. nonce: wlYiI8
+.. section: Core and Builtins
+
+memoryview objects could allow mutating a readable buffer. Initial patch by
+Ross Lagerwall.
+
+..
+
+.. bpo: 10892
+.. date: 8448
+.. nonce: ATjwD_
+.. section: Core and Builtins
+
+Don't segfault when trying to delete __abstractmethods__ from a class.
+
+..
+
+.. bpo: 8020
+.. date: 8447
+.. nonce: aERuZE
+.. section: Core and Builtins
+
+Avoid a crash where the small objects allocator would read non-Python
+managed memory while it is being modified by another thread. Patch by Matt
+Bandy.
+
+..
+
+.. bpo: 11004
+.. date: 8446
+.. nonce: 2Wj4t8
+.. section: Core and Builtins
+
+Repaired edge case in deque.count().
+
+..
+
+.. bpo: 8278
+.. date: 8445
+.. nonce: 8P-kMi
+.. section: Core and Builtins
+
+On Windows and with a NTFS filesystem, os.stat() and os.utime() can now
+handle dates after 2038.
+
+..
+
+.. bpo: 4236
+.. date: 8444
+.. nonce: kMjQK6
+.. section: Core and Builtins
+
+Py_InitModule4 now checks the import machinery directly rather than the
+Py_IsInitialized flag, avoiding a Fatal Python error in certain
+circumstances when an import is done in __del__.
+
+..
+
+.. bpo: 11828
+.. date: 8443
+.. nonce: nBlnst
+.. section: Core and Builtins
+
+startswith and endswith don't accept None as slice index. Patch by Torsten
+Becker.
+
+..
+
+.. bpo: 10674
+.. date: 8442
+.. nonce: ZNFQ1f
+.. section: Core and Builtins
+
+Remove unused 'dictmaker' rule from grammar.
+
+..
+
+.. bpo: 10596
+.. date: 8441
+.. nonce: r05xzm
+.. section: Core and Builtins
+
+Fix float.__mod__ to have the same behaviour as float.__divmod__ with
+respect to signed zeros.  -4.0 % 4.0 should be 0.0, not -0.0.
+
+..
+
+.. bpo: 11386
+.. date: 8440
+.. nonce: wrrB8K
+.. section: Core and Builtins
+
+bytearray.pop() now throws IndexError when the bytearray is empty, instead
+of OverflowError.
+
+..
+
+.. bpo: 12161
+.. date: 8439
+.. nonce: CmDpNV
+.. section: Library
+
+Cause StringIO.getvalue() to raise a ValueError when used on a closed
+StringIO instance.
+
+..
+
+.. bpo: 12182
+.. date: 8438
+.. nonce: IWruZQ
+.. section: Library
+
+Fix pydoc.HTMLDoc.multicolumn() if Python uses the new (true) division
+(python -Qnew). Patch written by Ralf W. Grosse-Kunstleve.
+
+..
+
+.. bpo: 12175
+.. date: 8437
+.. nonce: 9M55CV
+.. section: Library
+
+RawIOBase.readall() now returns None if read() returns None.
+
+..
+
+.. bpo: 12175
+.. date: 8436
+.. nonce: U3k4iw
+.. section: Library
+
+FileIO.readall() now raises a ValueError instead of an IOError if the file
+is closed.
+
+..
+
+.. bpo: 1441530
+.. date: 8435
+.. nonce: pSlnFk
+.. section: Library
+
+In imaplib, use makefile() to wrap the SSL socket to avoid heap
+fragmentation and MemoryError with some malloc implementations.
+
+..
+
+.. bpo: 12100
+.. date: 8434
+.. nonce: 4sb-gJ
+.. section: Library
+
+Don't reset incremental encoders of CJK codecs at each call to their
+encode() method anymore, but continue to call the reset() method if the
+final argument is True.
+
+..
+
+.. bpo: 12124
+.. date: 8433
+.. nonce: qpMI7g
+.. section: Library
+
+zipimport doesn't keep a reference to zlib.decompress() anymore to be able
+to unload the module.
+
+..
+
+.. bpo: 10154
+.. date: 8432
+.. nonce: 4iPVr8
+.. section: Library
+
+change the normalization of UTF-8 to "UTF-8" instead of "UTF8" in the locale
+module as the latter is not supported MacOSX and OpenBSD. (See also:
+bpo-10090)
+
+..
+
+.. bpo: 9516
+.. date: 8431
+.. nonce: WLkxuC
+.. section: Library
+
+avoid errors in sysconfig when MACOSX_DEPLOYMENT_TARGET is set in shell.
+
+..
+
+.. bpo: 12050
+.. date: 8430
+.. nonce: v6HF9i
+.. section: Library
+
+zlib.decompressobj().decompress() now clears the unconsumed_tail attribute
+when called without a max_length argument.
+
+..
+
+.. bpo: 12062
+.. date: 8429
+.. nonce: fUVuyO
+.. section: Library
+
+In the `io` module, fix a flushing bug when doing a certain type of I/O
+sequence on a file opened in read+write mode (namely: reading, seeking a bit
+forward, writing, then seeking before the previous write but still within
+buffered data, and writing again).
+
+..
+
+.. bpo: 8498
+.. date: 8428
+.. nonce: XooGVI
+.. section: Library
+
+In socket.accept(), allow specifying 0 as a backlog value in order to accept
+exactly one connection.  Patch by Daniel Evers.
+
+..
+
+.. bpo: 12012
+.. date: 8427
+.. nonce: raFUoR
+.. section: Library
+
+ssl.PROTOCOL_SSLv2 becomes optional.
+
+..
+
+.. bpo: 11927
+.. date: 8426
+.. nonce: UqvRAV
+.. section: Library
+
+SMTP_SSL now uses port 465 by default as documented.  Patch by Kasun Herath.
+
+..
+
+.. bpo: 11999
+.. date: 8425
+.. nonce: aLa-HD
+.. section: Library
+
+fixed sporadic sync failure mailbox.Maildir due to its trying to detect
+mtime changes by comparing to the system clock instead of to the previous
+value of the mtime.
+
+..
+
+.. bpo: 10684
+.. date: 8424
+.. nonce: Ctye6o
+.. section: Library
+
+shutil.move used to delete a folder on case insensitive filesystems when the
+source and destination name where the same except for the case.
+
+..
+
+.. bpo: 11982
+.. date: 8423
+.. nonce: 4CiHRO
+.. section: Library
+
+fix json.loads('""') to return u'' rather than ''.
+
+..
+
+.. bpo: 11277
+.. date: 8422
+.. nonce: 4nCUxv
+.. section: Library
+
+mmap.mmap() calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get around a mmap
+bug with sparse files. Patch written by Steffen Daode Nurpmeso.
+
+..
+
+.. bpo: 10761
+.. date: 8421
+.. nonce: rwSQE7
+.. section: Library
+
+Fix tarfile.extractall failure when symlinked files are present. Initial
+patch by Scott Leerssen.
+
+..
+
+.. bpo: 11763
+.. date: 8420
+.. nonce: LPGrnG
+.. section: Library
+
+don't use difflib in TestCase.assertMultiLineEqual if the strings are too
+long.
+
+..
+
+.. bpo: 11236
+.. date: 8419
+.. nonce: DyWdnL
+.. section: Library
+
+getpass.getpass responds to ctrl-c or ctrl-z on terminal.
+
+..
+
+.. bpo: 11768
+.. date: 8418
+.. nonce: HRg5Hy
+.. section: Library
+
+The signal handler of the signal module only calls Py_AddPendingCall() for
+the first signal to fix a deadlock on reentrant or parallel calls.
+PyErr_SetInterrupt() writes also into the wake up file.
+
+..
+
+.. bpo: 11875
+.. date: 8417
+.. nonce: xFn-yD
+.. section: Library
+
+collections.OrderedDict's __reduce__ was temporarily mutating the object
+instead of just working on a copy.
+
+..
+
+.. bpo: 11442
+.. date: 8416
+.. nonce: Jta8go
+.. section: Library
+
+Add a charset parameter to the Content-type in SimpleHTTPServer to avoid XSS
+attacks.
+
+..
+
+.. bpo: 11467
+.. date: 8415
+.. nonce: th8B0N
+.. section: Library
+
+Fix urlparse behavior when handling urls which contains scheme specific part
+only digits. Patch by Santoso Wijaya.
+
+..
+
+.. bpo: 0
+.. date: 8414
+.. nonce: MOd782
+.. section: Library
+
+collections.Counter().copy() now works correctly for subclasses.
+
+..
+
+.. bpo: 11474
+.. date: 8413
+.. nonce: UKTAWA
+.. section: Library
+
+Fix the bug with url2pathname() handling of '/C|/' on Windows. Patch by
+Santoso Wijaya.
+
+..
+
+.. bpo: 9233
+.. date: 8412
+.. nonce: AIRcqi
+.. section: Library
+
+Fix json.loads('{}') to return a dict (instead of a list), when _json is not
+available.
+
+..
+
+.. bpo: 11703
+.. date: 8411
+.. nonce: hwI5Mw
+.. section: Library
+
+urllib2.geturl() does not return correct url when the original url contains
+#fragment.
+
+..
+
+.. bpo: 10019
+.. date: 8410
+.. nonce: J7QVFU
+.. section: Library
+
+Fixed regression in json module where an indent of 0 stopped adding newlines
+and acted instead like 'None'.
+
+..
+
+.. bpo: 5162
+.. date: 8409
+.. nonce: UYJrO-
+.. section: Library
+
+Treat services like frozen executables to allow child spawning from
+multiprocessing.forking on Windows.
+
+..
+
+.. bpo: 4877
+.. date: 8408
+.. nonce: 4B7uDJ
+.. section: Library
+
+Fix a segfault in xml.parsers.expat while attempting to parse a closed file.
+
+..
+
+.. bpo: 11830
+.. date: 8407
+.. nonce: tFEtWl
+.. section: Library
+
+Remove unnecessary introspection code in the decimal module. It was causing
+a failed import in the Turkish locale where the locale sensitive str.upper()
+method caused a name mismatch.
+
+..
+
+.. bpo: 8428
+.. date: 8406
+.. nonce: vVu7J6
+.. section: Library
+
+Fix a race condition in multiprocessing.Pool when terminating worker
+processes: new processes would be spawned while the pool is being shut down.
+Patch by Charles-François Natali.
+
+..
+
+.. bpo: 7311
+.. date: 8405
+.. nonce: lRokCQ
+.. section: Library
+
+Fix HTMLParser to accept non-ASCII attribute values.
+
+..
+
+.. bpo: 10963
+.. date: 8404
+.. nonce: _J-MW9
+.. section: Library
+
+Ensure that subprocess.communicate() never raises EPIPE.
+
+..
+
+.. bpo: 11662
+.. date: 8403
+.. nonce: GpHbgk
+.. section: Library
+
+Make urllib and urllib2 ignore redirections if the scheme is not HTTP, HTTPS
+or FTP (CVE-2011-1521).
+
+..
+
+.. bpo: 11256
+.. date: 8402
+.. nonce: AVqrHZ
+.. section: Library
+
+Fix inspect.getcallargs on functions that take only keyword arguments.
+
+..
+
+.. bpo: 11696
+.. date: 8401
+.. nonce: dzz7nM
+.. section: Library
+
+Fix ID generation in msilib.
+
+..
+
+.. bpo: 9696
+.. date: 8400
+.. nonce: Nh0u8J
+.. section: Library
+
+Fix exception incorrectly raised by xdrlib.Packer.pack_int when trying to
+pack a negative (in-range) integer.
+
+..
+
+.. bpo: 11675
+.. date: 8399
+.. nonce: qFfmkU
+.. section: Library
+
+multiprocessing.[Raw]Array objects created from an integer size are now
+zeroed on creation.  This matches the behaviour specified by the
+documentation.
+
+..
+
+.. bpo: 7639
+.. date: 8398
+.. nonce: PKfmwz
+.. section: Library
+
+Fix short file name generation in bdist_msi.
+
+..
+
+.. bpo: 11666
+.. date: 8397
+.. nonce: Hni56e
+.. section: Library
+
+let help() display named tuple attributes and methods that start with a
+leading underscore.
+
+..
+
+.. bpo: 11673
+.. date: 8396
+.. nonce: uXlx4W
+.. section: Library
+
+Fix multiprocessing Array and RawArray constructors to accept a size of type
+'long', rather than only accepting 'int'.
+
+..
+
+.. bpo: 10042
+.. date: 8395
+.. nonce: SCtRiD
+.. section: Library
+
+Fixed the total_ordering decorator to handle cross-type comparisons that
+could lead to infinite recursion.
+
+..
+
+.. bpo: 10979
+.. date: 8394
+.. nonce: FjyVrT
+.. section: Library
+
+unittest stdout buffering now works with class and module setup and
+teardown.
+
+..
+
+.. bpo: 11569
+.. date: 8393
+.. nonce: fp461F
+.. section: Library
+
+use absolute path to the sysctl command in multiprocessing to ensure that it
+will be found regardless of the shell PATH. This ensures that
+multiprocessing.cpu_count works on default installs of MacOSX.
+
+..
+
+.. bpo: 11500
+.. date: 8392
+.. nonce: SOGd4Y
+.. section: Library
+
+Fixed a bug in the os x proxy bypass code for fully qualified IP addresses
+in the proxy exception list.
+
+..
+
+.. bpo: 11131
+.. date: 8391
+.. nonce: PnmRwo
+.. section: Library
+
+Fix sign of zero in plus and minus operations when the context rounding mode
+is ROUND_FLOOR.
+
+..
+
+.. bpo: 5622
+.. date: 8390
+.. nonce: dM7tnW
+.. section: Library
+
+Fix curses.wrapper to raise correct exception if curses initialization
+fails.
+
+..
+
+.. bpo: 11391
+.. date: 8389
+.. nonce: hdoRPe
+.. section: Library
+
+Writing to a mmap object created with ``mmap.PROT_READ|mmap.PROT_EXEC``
+would segfault instead of raising a TypeError.  Patch by Charles-François
+Natali.
+
+..
+
+.. bpo: 11306
+.. date: 8388
+.. nonce: 2rXDt4
+.. section: Library
+
+mailbox in certain cases adapts to an inability to open certain files in
+read-write mode.  Previously it detected this by checking for EACCES, now it
+also checks for EROFS.
+
+..
+
+.. bpo: 11265
+.. date: 8387
+.. nonce: Y51oyn
+.. section: Library
+
+asyncore now correctly handles EPIPE, EBADF and EAGAIN errors on accept(),
+send() and recv().
+
+..
+
+.. bpo: 11326
+.. date: 8386
+.. nonce: 2GUPyU
+.. section: Library
+
+Add the missing connect_ex() implementation for SSL sockets, and make it
+work for non-blocking connects.
+
+..
+
+.. bpo: 10956
+.. date: 8385
+.. nonce: ArNOt6
+.. section: Library
+
+Buffered I/O classes retry reading or writing after a signal has arrived and
+the handler returned successfully.
+
+..
+
+.. bpo: 10680
+.. date: 8384
+.. nonce: pAmFnC
+.. section: Library
+
+Fix mutually exclusive arguments for argument groups in argparse.
+
+..
+
+.. bpo: 4681
+.. date: 8383
+.. nonce: I20jgq
+.. section: Library
+
+Allow mmap() to work on file sizes and offsets larger than 4GB, even on
+32-bit builds.  Initial patch by Ross Lagerwall, adapted for 32-bit Windows.
+
+..
+
+.. bpo: 10360
+.. date: 8382
+.. nonce: JAYw4l
+.. section: Library
+
+In WeakSet, do not raise TypeErrors when testing for membership of
+non-weakrefable objects.
+
+..
+
+.. bpo: 10549
+.. date: 8381
+.. nonce: 15cASW
+.. section: Library
+
+Fix pydoc traceback when text-documenting certain classes.
+
+..
+
+.. bpo: 940286
+.. date: 8380
+.. nonce: cPglIg
+.. section: Library
+
+pydoc.Helper.help() ignores input/output init parameters.
+
+..
+
+.. bpo: 11171
+.. date: 8379
+.. nonce: ZXEFXT
+.. section: Library
+
+Fix detection of config/Makefile when --prefix != --exec-prefix, which
+caused Python to not start.
+
+..
+
+.. bpo: 11116
+.. date: 8378
+.. nonce: J0xgWH
+.. section: Library
+
+any error during addition of a message to a mailbox now causes a rollback,
+instead of leaving the mailbox partially modified.
+
+..
+
+.. bpo: 8275
+.. date: 8377
+.. nonce: -TRADs
+.. section: Library
+
+Fix passing of callback arguments with ctypes under Win64. Patch by Stan
+Mihai.
+
+..
+
+.. bpo: 10949
+.. date: 8376
+.. nonce: sknBTt
+.. section: Library
+
+Improved robustness of rotating file handlers.
+
+..
+
+.. bpo: 10955
+.. date: 8375
+.. nonce: RSqPRN
+.. section: Library
+
+Fix a potential crash when trying to mmap() a file past its length.  Initial
+patch by Ross Lagerwall.
+
+..
+
+.. bpo: 10898
+.. date: 8374
+.. nonce: 2VhVxS
+.. section: Library
+
+Allow compiling the posix module when the C library defines a symbol named
+FSTAT.
+
+..
+
+.. bpo: 10916
+.. date: 8373
+.. nonce: xpdEg8
+.. section: Library
+
+mmap should not segfault when a file is mapped using 0 as length and a
+non-zero offset, and an attempt to read past the end of file is made (IndexError
+is raised instead).  Patch by Ross Lagerwall.
+
+..
+
+.. bpo: 10875
+.. date: 8372
+.. nonce: RSNYLS
+.. section: Library
+
+Update Regular Expression HOWTO; patch by 'SilentGhost'.
+
+..
+
+.. bpo: 10827
+.. date: 8371
+.. nonce: vjZCZr
+.. section: Library
+
+Changed the rules for 2-digit years.  The time.asctime function will now
+format any year when ``time.accept2dyear`` is false and will accept years >=
+1000 otherwise.  The year range accepted by ``time.mktime`` and
+``time.strftime`` is still system dependent, but ``time.mktime`` will now
+accept full range supported by the OS.  Conversion of 2-digit years to
+4-digit is deprecated.
+
+..
+
+.. bpo: 10869
+.. date: 8370
+.. nonce: 3xBkWx
+.. section: Library
+
+Fixed bug where ast.increment_lineno modified the root node twice.
+
+..
+
+.. bpo: 7858
+.. date: 8369
+.. nonce: DKZMOA
+.. section: Library
+
+Raise an error properly when os.utime() fails under Windows on an existing
+file.
+
+..
+
+.. bpo: 3839
+.. date: 8368
+.. nonce: zMNSit
+.. section: Library
+
+wsgiref should not override a Content-Length header set by the application.
+Initial patch by Clovis Fabricio.
+
+..
+
+.. bpo: 10806
+.. date: 8367
+.. nonce: dEztuB
+.. section: Library
+
+Fix subprocess pipes when some of the standard file descriptors (0, 1, 2)
+are closed in the parent process.  Initial patch by Ross Lagerwall. (See
+also: bpo-9905)
+
+..
+
+.. bpo: 4662
+.. date: 8366
+.. nonce: m3fHnI
+.. section: Library
+
+os.tempnam(), os.tmpfile() and os.tmpnam() now raise a py3k
+DeprecationWarning.
+
+..
+
+.. bpo: 0
+.. date: 8365
+.. nonce: t8RJ2P
+.. section: Library
+
+Subclasses of collections.OrderedDict now work correctly with __missing__.
+
+..
+
+.. bpo: 10753
+.. date: 8364
+.. nonce: pjcQCT
+.. section: Library
+
+Characters ';', '=' and ',' in the PATH_INFO environment variable won't be
+quoted when the URI is constructed by the wsgiref.util 's request_uri
+method. According to RFC 3986, these characters can be a part of params in
+PATH component of URI and need not be quoted.
+
+..
+
+.. bpo: 10738
+.. date: 8363
+.. nonce: GT7QZa
+.. section: Library
+
+Fix webbrowser.Opera.raise_opts
+
+..
+
+.. bpo: 9824
+.. date: 8362
+.. nonce: vJBIAh
+.. section: Library
+
+SimpleCookie now encodes , and ; in values to cater to how browsers actually
+parse cookies.
+
+..
+
+.. bpo: 1379416
+.. date: 8361
+.. nonce: fpWgER
+.. section: Library
+
+eliminated a source of accidental unicode promotion in
+email.header.Header.encode.
+
+..
+
+.. bpo: 5258
+.. date: 8360
+.. nonce: fNenmJ
+.. section: Library
+
+if site.py encounters a .pth file that generates an error, it now prints the
+filename, line number, and traceback to stderr and skips the rest of that
+individual file, instead of stopping processing entirely. (See also:
+bpo-10642)
+
+..
+
+.. bpo: 10750
+.. date: 8359
+.. nonce: o-KFTn
+.. section: Library
+
+The ``raw`` attribute of buffered IO objects is now read-only.
+
+..
+
+.. bpo: 10242
+.. date: 8358
+.. nonce: uwgK8s
+.. section: Library
+
+unittest.TestCase.assertItemsEqual makes too many assumptions about input.
+
+..
+
+.. bpo: 10611
+.. date: 8357
+.. nonce: y67Wpv
+.. section: Library
+
+SystemExit should not cause a unittest test run to exit.
+
+..
+
+.. bpo: 6791
+.. date: 8356
+.. nonce: b5b4M7
+.. section: Library
+
+Limit header line length (to 65535 bytes) in http.client, to avoid denial of
+services from the other party.
+
+..
+
+.. bpo: 9907
+.. date: 8355
+.. nonce: EC_Wry
+.. section: Library
+
+Fix tab handling on OSX when using editline by calling rl_initialize first,
+then setting our custom defaults, then reading .editrc.
+
+..
+
+.. bpo: 4188
+.. date: 8354
+.. nonce: nIr5eF
+.. section: Library
+
+Avoid creating dummy thread objects when logging operations from the
+threading module (with the internal verbose flag activated).
+
+..
+
+.. bpo: 9721
+.. date: 8353
+.. nonce: G8i-SO
+.. section: Library
+
+Fix the behavior of urljoin when the relative url starts with a ';'
+character. Patch by Wes Chow.
+
+..
+
+.. bpo: 10714
+.. date: 8352
+.. nonce: 2ytXWI
+.. section: Library
+
+Limit length of incoming request in http.server to 65536 bytes for security
+reasons.  Initial patch by Ross Lagerwall.
+
+..
+
+.. bpo: 9558
+.. date: 8351
+.. nonce: Zu3z6Q
+.. section: Library
+
+Fix distutils.command.build_ext with VS 8.0.
+
+..
+
+.. bpo: 10695
+.. date: 8350
+.. nonce: 9PoZLI
+.. section: Library
+
+passing the port as a string value to telnetlib no longer causes debug mode
+to fail.
+
+..
+
+.. bpo: 10478
+.. date: 8349
+.. nonce: 3rusTg
+.. section: Library
+
+Reentrant calls inside buffered IO objects (for example by way of a signal
+handler) now raise a RuntimeError instead of freezing the current process.
+
+..
+
+.. bpo: 10497
+.. date: 8348
+.. nonce: KCVp0v
+.. section: Library
+
+Fix incorrect use of gettext in argparse.
+
+..
+
+.. bpo: 10464
+.. date: 8347
+.. nonce: oT76Cm
+.. section: Library
+
+netrc now correctly handles lines with embedded '#' characters.
+
+..
+
+.. bpo: 1731717
+.. date: 8346
+.. nonce: 1WiN2u
+.. section: Library
+
+Fixed the problem where subprocess.wait() could cause an OSError exception
+when The OS had been told to ignore SIGCLD in our process or otherwise not
+wait for exiting child processes.
+
+..
+
+.. bpo: 9509
+.. date: 8345
+.. nonce: Oh-iMy
+.. section: Library
+
+argparse now properly handles IOErrors raised by argparse.FileType.
+
+..
+
+.. bpo: 9348
+.. date: 8344
+.. nonce: zsJPPj
+.. section: Library
+
+Raise an early error if argparse nargs and metavar don't match.
+
+..
+
+.. bpo: 8982
+.. date: 8343
+.. nonce: fTONNH
+.. section: Library
+
+Improve the documentation for the argparse Namespace object.
+
+..
+
+.. bpo: 9343
+.. date: 8342
+.. nonce: 9T-Qyz
+.. section: Library
+
+Document that argparse parent parsers must be configured before their
+children.
+
+..
+
+.. bpo: 9026
+.. date: 8341
+.. nonce: 2xqEFT
+.. section: Library
+
+Fix order of argparse sub-commands in help messages.
+
+..
+
+.. bpo: 9347
+.. date: 8340
+.. nonce: R8xBsQ
+.. section: Library
+
+Fix formatting for tuples in argparse type= error messages.
+
+..
+
+.. bpo: 0
+.. date: 8339
+.. nonce: qXxXWp
+.. section: Library
+
+Stop using the old interface for providing methods and attributes in the
+_sre module. Among other things, this gives these classes ``__class__``
+attributes. (See #12099)
+
+..
+
+.. bpo: 10169
+.. date: 8338
+.. nonce: OXJ9Nh
+.. section: Library
+
+Fix argument parsing in socket.sendto() to avoid error masking.
+
+..
+
+.. bpo: 12051
+.. date: 8337
+.. nonce: 7HjY_U
+.. section: Library
+
+Fix segfault in json.dumps() while encoding highly-nested objects using the
+C accelerations.
+
+..
+
+.. bpo: 12017
+.. date: 8336
+.. nonce: w25YNq
+.. section: Library
+
+Fix segfault in json.loads() while decoding highly-nested objects using the
+C accelerations.
+
+..
+
+.. bpo: 1838
+.. date: 8335
+.. nonce: EzKU3z
+.. section: Library
+
+Prevent segfault in ctypes, when _as_parameter_ on a class is set to an
+instance of the class.
+
+..
+
+.. bpo: 678250
+.. date: 8334
+.. nonce: a5vtlO
+.. section: Library
+
+Make mmap flush a noop on ACCESS_READ and ACCESS_COPY.
+
+..
+
+.. bpo: 11718
+.. date: 8333
+.. nonce: giS1iY
+.. section: IDLE
+
+IDLE's open module dialog couldn't find the __init__.py file in a package.
+
+..
+
+.. bpo: 12590
+.. date: 8332
+.. nonce: dcDjo7
+.. section: IDLE
+
+IDLE editor window now always displays the first line when opening a long
+file.  With Tk 8.5, the first line was hidden.
+
+..
+
+.. bpo: 11088
+.. date: 8331
+.. nonce: 08NI5v
+.. section: IDLE
+
+don't crash when using F5 to run a script in IDLE on MacOSX with Tk 8.5.
+
+..
+
+.. bpo: 10940
+.. date: 8330
+.. nonce: qwi3cm
+.. section: IDLE
+
+Workaround an IDLE hang on Mac OS X 10.6 when using the menu accelerators
+for Open Module, Go to Line, and New Indent Width. The accelerators still
+work but no longer appear in the menu items.
+
+..
+
+.. bpo: 10907
+.. date: 8329
+.. nonce: BHHc_r
+.. section: IDLE
+
+Warn OS X 10.6 IDLE users to use ActiveState Tcl/Tk 8.5, rather than the
+currently problematic Apple-supplied one, when running with the 64-/32-bit
+installer variant.
+
+..
+
+.. bpo: 11052
+.. date: 8328
+.. nonce: avmtSQ
+.. section: IDLE
+
+Correct IDLE menu accelerators on Mac OS X for Save commands.
+
+..
+
+.. bpo: 6075
+.. date: 8327
+.. nonce: AHKNEZ
+.. section: IDLE
+
+IDLE on Mac OS X now works with both Carbon AquaTk and Cocoa AquaTk.
+
+..
+
+.. bpo: 10404
+.. date: 8326
+.. nonce: CBzs_G
+.. section: IDLE
+
+Use ctl-button-1 on OSX for the context menu in Idle.
+
+..
+
+.. bpo: 10107
+.. date: 8325
+.. nonce: Bsx-F4
+.. section: IDLE
+
+Warn about unsaved files in IDLE on OSX.
+
+..
+
+.. bpo: 10406
+.. date: 8324
+.. nonce: HKSefS
+.. section: IDLE
+
+Enable Rstrip IDLE extension on OSX (just like on other platforms).
+
+..
+
+.. bpo: 6378
+.. date: 8323
+.. nonce: Vr_x3W
+.. section: IDLE
+
+Further adjust idle.bat to start associated Python
+
+..
+
+.. bpo: 11896
+.. date: 8322
+.. nonce: XPwdkw
+.. section: IDLE
+
+Save on Close failed despite selecting "Yes" in dialog.
+
+..
+
+.. bpo: 4676
+.. date: 8321
+.. nonce: qQkued
+.. section: IDLE
+
+<Home> toggle failing on Tk 8.5, causing IDLE exits and strange selection
+behavior.  Improve selection extension behaviour.
+
+..
+
+.. bpo: 3851
+.. date: 8320
+.. nonce: iy6ENX
+.. section: IDLE
+
+<Home> toggle non-functional when NumLock set on Windows.
+
+..
+
+.. bpo: 11217
+.. date: 8319
+.. nonce: mIEwfc
+.. section: Build
+
+For 64-bit/32-bit Mac OS X universal framework builds, ensure "make install"
+creates symlinks in --prefix bin for the "-32" files in the framework bin
+directory like the installer does.
+
+..
+
+.. bpo: 11411
+.. date: 8318
+.. nonce: 1m9fjv
+.. section: Build
+
+Fix 'make DESTDIR=' with a relative destination.
+
+..
+
+.. bpo: 10709
+.. date: 8317
+.. nonce: QpLCFk
+.. section: Build
+
+Add updated AIX notes in Misc/README.AIX.
+
+..
+
+.. bpo: 11184
+.. date: 8316
+.. nonce: sGfAXw
+.. section: Build
+
+Fix large-file support on AIX.
+
+..
+
+.. bpo: 941346
+.. date: 8315
+.. nonce: heMADD
+.. section: Build
+
+Fix broken shared library build on AIX.
+
+..
+
+.. bpo: 11268
+.. date: 8314
+.. nonce: Lgcka6
+.. section: Build
+
+Prevent Mac OS X Installer failure if Documentation package had previously
+been installed.
+
+..
+
+.. bpo: 11079
+.. date: 8313
+.. nonce: Y0Hh5V
+.. section: Build
+
+The /Applications/Python x.x folder created by the Mac OS X installers now
+includes a link to the installed documentation.
+
+..
+
+.. bpo: 11054
+.. date: 8312
+.. nonce: BN3sYU
+.. section: Build
+
+Allow Mac OS X installer builds to again work on 10.5 with the
+system-provided Python.
+
+..
+
+.. bpo: 10843
+.. date: 8311
+.. nonce: EdyFR6
+.. section: Build
+
+Update third-party library versions used in OS X 32-bit installer builds:
+bzip2 1.0.6, readline 6.1.2, SQLite 3.7.4 (with FTS3/FTS4 and RTREE
+enabled), and ncursesw 5.5 (wide-char support enabled).
+
+..
+
+.. bpo: 0
+.. date: 8310
+.. nonce: nsY3xU
+.. section: Build
+
+Don't run pgen twice when using make -j.
+
+..
+
+.. bpo: 7716
+.. date: 8309
+.. nonce: KkZ-2b
+.. section: Build
+
+Under Solaris, don't assume existence of /usr/xpg4/bin/grep in the configure
+script but use $GREP instead.  Patch by Fabian Groffen.
+
+..
+
+.. bpo: 10475
+.. date: 8308
+.. nonce: LVKSbB
+.. section: Build
+
+Don't hardcode compilers for LDSHARED/LDCXXSHARED on NetBSD and DragonFly
+BSD.  Patch by Nicolas Joly.
+
+..
+
+.. bpo: 10655
+.. date: 8307
+.. nonce: WauLJp
+.. section: Build
+
+Fix the build on PowerPC on Linux with GCC when building with timestamp
+profiling (--with-tsc): the preprocessor test for the PowerPC support now
+looks for "__powerpc__" as well as "__ppc__": the latter seems to only be
+present on OS X; the former is the correct one for Linux with GCC.
+
+..
+
+.. bpo: 1099
+.. date: 8306
+.. nonce: KikOsu
+.. section: Build
+
+Fix the build on MacOSX when building a framework with pydebug using GCC
+4.0.
+
+..
+
+.. bpo: 11164
+.. date: 8305
+.. nonce: w2nrYU
+.. section: Tests
+
+Remove obsolete allnodes test from minidom test.
+
+..
+
+.. bpo: 12205
+.. date: 8304
+.. nonce: gVhWmC
+.. section: Tests
+
+Fix test_subprocess failure due to uninstalled test data.
+
+..
+
+.. bpo: 5723
+.. date: 8303
+.. nonce: Lfg1OX
+.. section: Tests
+
+Improve json tests to be executed with and without accelerations.
+
+..
+
+.. bpo: 11910
+.. date: 8302
+.. nonce: HhQx49
+.. section: Tests
+
+Fix test_heapq to skip the C tests when _heapq is missing.
+
+..
+
+.. bpo: 0
+.. date: 8301
+.. nonce: i8QOXe
+.. section: Tests
+
+Fix test_startfile to wait for child process to terminate before finishing.
+
+..
+
+.. bpo: 11719
+.. date: 8300
+.. nonce: ojamUL
+.. section: Tests
+
+Fix message about unexpected test_msilib skip on non-Windows platforms.
+Patch by Nadeem Vawda.
+
+..
+
+.. bpo: 7108
+.. date: 8299
+.. nonce: xaF3OE
+.. section: Tests
+
+Fix test_commands to not fail when special attributes ('@' or '.') appear in
+'ls -l' output.
+
+..
+
+.. bpo: 11490
+.. date: 8298
+.. nonce: I86Gxz
+.. section: Tests
+
+test_subprocess:test_leaking_fds_on_error no longer gives a false positive
+if the last directory in the path is inaccessible.
+
+..
+
+.. bpo: 10822
+.. date: 8297
+.. nonce: P0VrIZ
+.. section: Tests
+
+Fix test_posix:test_getgroups failure under Solaris.  Patch by Ross
+Lagerwall.
+
+..
+
+.. bpo: 6293
+.. date: 8296
+.. nonce: J7ur1U
+.. section: Tests
+
+Have regrtest.py echo back sys.flags.  This is done by default in whole runs
+and enabled selectively using ``--header`` when running an explicit list of
+tests.  Original patch by Collin Winter.
+
+..
+
+.. bpo: 775964
+.. date: 8295
+.. nonce: 7a2XLN
+.. section: Tests
+
+test_grp now skips YP/NIS entries instead of failing when encountering them.
+
+..
+
+.. bpo: 7110
+.. date: 8294
+.. nonce: SyQreJ
+.. section: Tests
+
+regrtest now sends test failure reports and single-failure tracebacks to
+stderr rather than stdout.
diff --git a/Misc/NEWS.d/2.7.3rc1.rst b/Misc/NEWS.d/2.7.3rc1.rst
new file mode 100644
index 0000000..1fdc19f
--- /dev/null
+++ b/Misc/NEWS.d/2.7.3rc1.rst
@@ -0,0 +1,1916 @@
+.. bpo: 13020
+.. date: 8656
+.. nonce: 7y51PJ
+.. release date: 2012-02-23
+.. section: Core and Builtins
+
+Fix a reference leak when allocating a structsequence object fails.  Patch
+by Suman Saha.
+
+..
+
+.. bpo: 13703
+.. date: 8655
+.. nonce: 8FylqY
+.. section: Core and Builtins
+
+oCERT-2011-003: add -R command-line option and PYTHONHASHSEED environment
+variable, to provide an opt-in way to protect against denial of service
+attacks due to hash collisions within the dict and set types.  Patch by
+David Malcolm, based on work by Victor Stinner.
+
+..
+
+.. bpo: 11235
+.. date: 8654
+.. nonce: 6wzkv-
+.. section: Core and Builtins
+
+Fix OverflowError when trying to import a source file whose modification
+time doesn't fit in a 32-bit timestamp.
+
+..
+
+.. bpo: 11638
+.. date: 8653
+.. nonce: M-D70Z
+.. section: Core and Builtins
+
+Unicode strings in 'name' and 'version' no longer cause UnicodeDecodeErrors.
+
+..
+
+.. bpo: 0
+.. date: 8652
+.. nonce: 2J4kRL
+.. section: Core and Builtins
+
+Fix the fix for issue #12149: it was incorrect, although it had the side
+effect of appearing to resolve the issue.  Thanks to Mark Shannon for
+noticing.
+
+..
+
+.. bpo: 13546
+.. date: 8651
+.. nonce: iNNZwK
+.. section: Core and Builtins
+
+Fixed an overflow issue that could crash the intepreter when calling
+sys.setrecursionlimit((1<<31)-1).
+
+..
+
+.. bpo: 13333
+.. date: 8650
+.. nonce: jkzjPN
+.. section: Core and Builtins
+
+The UTF-7 decoder now accepts lone surrogates (the encoder already accepts
+them).
+
+..
+
+.. bpo: 10519
+.. date: 8649
+.. nonce: vnPUhZ
+.. section: Core and Builtins
+
+Avoid unnecessary recursive function calls in setobject.c.
+
+..
+
+.. bpo: 13268
+.. date: 8648
+.. nonce: 1add1A
+.. section: Core and Builtins
+
+Fix the assert statement when a tuple is passed as the message.
+
+..
+
+.. bpo: 13018
+.. date: 8647
+.. nonce: WRySxn
+.. section: Core and Builtins
+
+Fix reference leaks in error paths in dictobject.c. Patch by Suman Saha.
+
+..
+
+.. bpo: 12604
+.. date: 8646
+.. nonce: dDegux
+.. section: Core and Builtins
+
+VTRACE macro expanded to no-op in _sre.c to avoid compiler warnings. Patch
+by Josh Triplett and Petri Lehtinen.
+
+..
+
+.. bpo: 7833
+.. date: 8645
+.. nonce: NcSnnJ
+.. section: Core and Builtins
+
+Extension modules built using distutils on Windows will no longer include a
+"manifest" to prevent them failing at import time in some embedded
+situations.
+
+..
+
+.. bpo: 13186
+.. date: 8644
+.. nonce: 8x-IKP
+.. section: Core and Builtins
+
+Fix __delitem__ on old-style instances when invoked through
+PySequence_DelItem.
+
+..
+
+.. bpo: 13156
+.. date: 8643
+.. nonce: YQ_oHA
+.. section: Core and Builtins
+
+Revert the patch for issue #10517 (reset TLS upon fork()), which was only
+relevant for the native pthread TLS implementation.
+
+..
+
+.. bpo: 7732
+.. date: 8642
+.. nonce: Su45lo
+.. section: Core and Builtins
+
+Fix a crash on importing a module if a directory has the same name than a
+Python module (e.g. "__init__.py"): don't close the file twice.
+
+..
+
+.. bpo: 12973
+.. date: 8641
+.. nonce: i36yPj
+.. section: Core and Builtins
+
+Fix overflow checks that invoked undefined behaviour in int.__pow__.  These
+overflow checks were causing int.__pow__ to produce incorrect results with
+recent versions of Clang, as a result of the compiler optimizing the check
+away.  Also fix similar overflow checks in list_repeat (listobject.c) and
+islice_next (itertoolsmodule.c).  These bugs caused test failures with
+recent versions of Clang.
+
+..
+
+.. bpo: 12266
+.. date: 8640
+.. nonce: SifsgD
+.. section: Core and Builtins
+
+Fix str.capitalize() to correctly uppercase/lowercase titlecased and cased
+non-letter characters.
+
+..
+
+.. bpo: 12610
+.. date: 8639
+.. nonce: ppRi5I
+.. section: Core and Builtins
+
+Verify that user generated AST has correct string and identifier types
+before compiling. (See also: bpo-12609)
+
+..
+
+.. bpo: 11627
+.. date: 8638
+.. nonce: sfRw_E
+.. section: Core and Builtins
+
+Fix segfault when __new__ on an exception returns a non-exception class.
+
+..
+
+.. bpo: 12149
+.. date: 8637
+.. nonce: tp-PTF
+.. section: Core and Builtins
+
+Update the method cache after a type's dictionnary gets cleared by the
+garbage collector.  This fixes a segfault when an instance and its type get
+caught in a reference cycle, and the instance's deallocator calls one of the
+methods on the type (e.g. when subclassing IOBase).  Diagnosis and patch by
+Davide Rizzo.
+
+..
+
+.. bpo: 12501
+.. date: 8636
+.. nonce: 25PdW1
+.. section: Core and Builtins
+
+Remove Py3k warning for callable. callable() is supported again in Python
+3.2.
+
+..
+
+.. bpo: 9611
+.. date: 8635
+.. nonce: tQEmuh
+.. section: Core and Builtins
+
+FileIO.read(), FileIO.readinto(), FileIO.write() and os.write() clamp the
+length to INT_MAX on Windows. (See also: bpo-9015)
+
+..
+
+.. bpo: 1195
+.. date: 8634
+.. nonce: Tp_J8Y
+.. section: Core and Builtins
+
+my_fgets() now always clears errors before calling fgets(). Fix the
+following case: sys.stdin.read() stopped with CTRL+d (end of file),
+raw_input() interrupted by CTRL+c.
+
+..
+
+.. bpo: 10860
+.. date: 8633
+.. nonce: _w3Kvl
+.. section: Core and Builtins
+
+httplib now correctly handles an empty port after port delimiter in URLs.
+
+..
+
+.. bpo: 0
+.. date: 8632
+.. nonce: dh7XT7
+.. section: Core and Builtins
+
+dict_proxy objects now display their contents rather than just the class
+name.
+
+..
+
+.. bpo: 8033
+.. date: 8631
+.. nonce: vZ-AWU
+.. section: Library
+
+sqlite3: Fix 64-bit integer handling in user functions on 32-bit
+architectures. Initial patch by Philippe Devalkeneer.
+
+..
+
+.. bpo: 0
+.. date: 8630
+.. nonce: Apd_xz
+.. section: Library
+
+HTMLParser is now able to handle slashes in the start tag.
+
+..
+
+.. bpo: 14001
+.. date: 8629
+.. nonce: Za_h38
+.. section: Library
+
+CVE-2012-0845: xmlrpc: Fix an endless loop in SimpleXMLRPCServer upon
+malformed POST request.
+
+..
+
+.. bpo: 2489
+.. date: 8628
+.. nonce: EENP1J
+.. section: Library
+
+pty.spawn could consume 100% cpu when it encountered an EOF.
+
+..
+
+.. bpo: 13014
+.. date: 8627
+.. nonce: bfZLHS
+.. section: Library
+
+Fix a possible reference leak in SSLSocket.getpeercert().
+
+..
+
+.. bpo: 13987
+.. date: 8626
+.. nonce: rZLDDo
+.. section: Library
+
+HTMLParser is now able to handle EOFs in the middle of a construct and
+malformed start tags.
+
+..
+
+.. bpo: 13015
+.. date: 8625
+.. nonce: bxws6S
+.. section: Library
+
+Fix a possible reference leak in defaultdict.__repr__. Patch by Suman Saha.
+
+..
+
+.. bpo: 13979
+.. date: 8624
+.. nonce: Q0ci2w
+.. section: Library
+
+A bug in ctypes.util.find_library that caused the wrong library name to be
+returned has been fixed.
+
+..
+
+.. bpo: 1326113
+.. date: 8623
+.. nonce: QvF-XL
+.. section: Library
+
+distutils' build_ext command --libraries option now correctly parses
+multiple values separated by whitespace or commas.
+
+..
+
+.. bpo: 13993
+.. date: 8622
+.. nonce: 4g3z3P
+.. section: Library
+
+HTMLParser is now able to handle broken end tags.
+
+..
+
+.. bpo: 13960
+.. date: 8621
+.. nonce: g0TjwZ
+.. section: Library
+
+HTMLParser is now able to handle broken comments.
+
+..
+
+.. bpo: 9750
+.. date: 8620
+.. nonce: CsQyVM
+.. section: Library
+
+Fix sqlite3.Connection.iterdump on tables and fields with a name that is a
+keyword or contains quotes. Patch by Marko Kohtala.
+
+..
+
+.. bpo: 13994
+.. date: 8619
+.. nonce: pnLrEB
+.. section: Library
+
+Earlier partial revert of Distutils enhancements in 2.7 has left two
+versions of customize_compiler, the original in distutils.sysconfig and
+another copy in distutils.ccompiler, with some parts of distutils calling
+one and others using the other. Complete the revert back to only having one
+in distutils.sysconfig as is the case in 3.x.
+
+..
+
+.. bpo: 13590
+.. date: 8618
+.. nonce: b6Qvrj
+.. section: Library
+
+On OS X 10.7 and 10.6 with Xcode 4.2, building Distutils-based packages with
+C extension modules may fail because Apple has removed gcc-4.2, the version
+used to build python.org 64-bit/32-bit Pythons.  If the user does not
+explicitly override the default C compiler by setting the CC environment
+variable, Distutils will now attempt to compile extension modules with clang
+if gcc-4.2 is required but not found. Also as a convenience, if the user
+does explicitly set CC, substitute its value as the default compiler in the
+Distutils LDSHARED configuration variable for OS X. (Note, the python.org
+32-bit-only Pythons use gcc-4.0 and the 10.4u SDK, neither of which are
+available in Xcode 4.  This change does not attempt to override settings to
+support their use with Xcode 4.)
+
+..
+
+.. bpo: 9021
+.. date: 8617
+.. nonce: A0WRsT
+.. section: Library
+
+Add an introduction to the copy module documentation.
+
+..
+
+.. bpo: 6005
+.. date: 8616
+.. nonce: cy8Z22
+.. section: Library
+
+Examples in the socket library documentation use sendall, where relevant,
+instead send method.
+
+..
+
+.. bpo: 10811
+.. date: 8615
+.. nonce: m6b_ZC
+.. section: Library
+
+Fix recursive usage of cursors. Instead of crashing, raise a
+ProgrammingError now.
+
+..
+
+.. bpo: 13676
+.. date: 8614
+.. nonce: IwPgKL
+.. section: Library
+
+Handle strings with embedded zeros correctly in sqlite3.
+
+..
+
+.. bpo: 13806
+.. date: 8613
+.. nonce: Y34Lg3
+.. section: Library
+
+The size check in audioop decompression functions was too strict and could
+reject valid compressed data.  Patch by Oleg Plakhotnyuk.
+
+..
+
+.. bpo: 13885
+.. date: 8612
+.. nonce: fTNryk
+.. section: Library
+
+CVE-2011-3389: the _ssl module would always disable the CBC IV attack
+countermeasure.
+
+..
+
+.. bpo: 6631
+.. date: 8611
+.. nonce: FyxhCp
+.. section: Library
+
+Disallow relative file paths in urllib urlopen methods.
+
+..
+
+.. bpo: 13781
+.. date: 8610
+.. nonce: xWnNcZ
+.. section: Library
+
+Prevent gzip.GzipFile from using the dummy filename provided by file objects
+opened with os.fdopen().
+
+..
+
+.. bpo: 13589
+.. date: 8609
+.. nonce: sQsnEf
+.. section: Library
+
+Fix some serialization primitives in the aifc module. Patch by Oleg
+Plakhotnyuk.
+
+..
+
+.. bpo: 13803
+.. date: 8608
+.. nonce: WnPIts
+.. section: Library
+
+Under Solaris, distutils doesn't include bitness in the directory name.
+
+..
+
+.. bpo: 13642
+.. date: 8607
+.. nonce: 8qUg-G
+.. section: Library
+
+Unquote before b64encoding user:password during Basic Authentication. Patch
+contributed by Joonas Kuorilehto and Michele Orrù.
+
+..
+
+.. bpo: 13636
+.. date: 8606
+.. nonce: eWRf1t
+.. section: Library
+
+Weak ciphers are now disabled by default in the ssl module (except when
+SSLv2 is explicitly asked for).
+
+..
+
+.. bpo: 12798
+.. date: 8605
+.. nonce: ggdsmY
+.. section: Library
+
+Updated the mimetypes documentation.
+
+..
+
+.. bpo: 13639
+.. date: 8604
+.. nonce: X0z3dn
+.. section: Library
+
+Accept unicode filenames in tarfile.open(mode="w|gz").
+
+..
+
+.. bpo: 1785
+.. date: 8603
+.. nonce: DKL5I8
+.. section: Library
+
+Fix inspect and pydoc with misbehaving descriptors.
+
+..
+
+.. bpo: 7502
+.. date: 8602
+.. nonce: lIMyju
+.. section: Library
+
+Fix equality comparison for DocTestCase instances.  Patch by Cédric Krier.
+
+..
+
+.. bpo: 11870
+.. date: 8601
+.. nonce: 85bAB9
+.. section: Library
+
+threading: Properly reinitialize threads internal locks and condition
+variables to avoid deadlocks in child processes.
+
+..
+
+.. bpo: 8035
+.. date: 8600
+.. nonce: yzn_Oa
+.. section: Library
+
+urllib: Fix a bug where the client could remain stuck after a redirection or
+an error.
+
+..
+
+.. bpo: 0
+.. date: 8599
+.. nonce: xZO873
+.. section: Library
+
+tarfile.py: Correctly detect bzip2 compressed streams with blocksizes other
+than 900k.
+
+..
+
+.. bpo: 13573
+.. date: 8598
+.. nonce: 2oPaJa
+.. section: Library
+
+The csv.writer now uses the repr() for floats rather than str(). This allows
+floats to round-trip without loss of precision.
+
+..
+
+.. bpo: 13439
+.. date: 8597
+.. nonce: H8wdOt
+.. section: Library
+
+Fix many errors in turtle docstrings.
+
+..
+
+.. bpo: 12856
+.. date: 8596
+.. nonce: 7eIfN8
+.. section: Library
+
+Ensure child processes do not inherit the parent's random seed for filename
+generation in the tempfile module.  Patch by Brian Harring.
+
+..
+
+.. bpo: 13458
+.. date: 8595
+.. nonce: EHyzED
+.. section: Library
+
+Fix a memory leak in the ssl module when decoding a certificate with a
+subjectAltName.  Patch by Robert Xiao.
+
+..
+
+.. bpo: 13415
+.. date: 8594
+.. nonce: Ap8joO
+.. section: Library
+
+os.unsetenv() doesn't ignore errors anymore.
+
+..
+
+.. bpo: 13322
+.. date: 8593
+.. nonce: Ect89q
+.. section: Library
+
+Fix BufferedWriter.write() to ensure that BlockingIOError is raised when the
+wrapped raw file is non-blocking and the write would block. Previous code
+assumed that the raw write() would raise BlockingIOError, but
+RawIOBase.write() is defined to returned None when the call would block.
+Patch by sbt.
+
+..
+
+.. bpo: 13358
+.. date: 8592
+.. nonce: kPO1ja
+.. section: Library
+
+HTMLParser now calls handle_data only once for each CDATA.
+
+..
+
+.. bpo: 4147
+.. date: 8591
+.. nonce: wQbNcw
+.. section: Library
+
+minidom's toprettyxml no longer adds whitespace around a text node when it
+is the only child of an element.  Initial patch by Dan Kenigsberg.
+
+..
+
+.. bpo: 1745761
+.. date: 8590
+.. nonce: zfO1ng
+.. section: Library
+
+HTMLParser now correctly handles non-valid attributes, including adjacent
+and unquoted attributes. (See also: bpo-755670, bpo-13357, bpo-12629,
+bpo-1200313)
+
+..
+
+.. bpo: 13373
+.. date: 8589
+.. nonce: 8wM3bP
+.. section: Library
+
+multiprocessing.Queue.get() could sometimes block indefinitely when called
+with a timeout.  Patch by Arnaud Ysmal.
+
+..
+
+.. bpo: 3067
+.. date: 8588
+.. nonce: yjMIU9
+.. section: Library
+
+Enhance the documentation and docstring of locale.setlocale().
+
+..
+
+.. bpo: 13254
+.. date: 8587
+.. nonce: CKJxT0
+.. section: Library
+
+Fix Maildir initialization so that maildir contents are read correctly.
+
+..
+
+.. bpo: 13140
+.. date: 8586
+.. nonce: EguPSD
+.. section: Library
+
+Fix the daemon_threads attribute of ThreadingMixIn.
+
+..
+
+.. bpo: 2892
+.. date: 8585
+.. nonce: kugtRq
+.. section: Library
+
+preserve iterparse events in case of SyntaxError.
+
+..
+
+.. bpo: 670664
+.. date: 8584
+.. nonce: dPMzKt
+.. section: Library
+
+Fix HTMLParser to correctly handle the content of ``<script>...</script>``
+and ``<style>...</style>``.
+
+..
+
+.. bpo: 10817
+.. date: 8583
+.. nonce: 2NZ4yV
+.. section: Library
+
+Fix urlretrieve function to raise ContentTooShortError even when reporthook
+is None. Patch by Jyrki Pulliainen.
+
+..
+
+.. bpo: 7334
+.. date: 8582
+.. nonce: HVmJ5I
+.. section: Library
+
+close source files on ElementTree.parse and iterparse.
+
+..
+
+.. bpo: 13232
+.. date: 8581
+.. nonce: WWF7QZ
+.. section: Library
+
+logging: Improved logging of exceptions in the presence of multiple
+encodings.
+
+..
+
+.. bpo: 10332
+.. date: 8580
+.. nonce: E9qFmi
+.. section: Library
+
+multiprocessing: fix a race condition when a Pool is closed before all tasks
+have completed.
+
+..
+
+.. bpo: 1548891
+.. date: 8579
+.. nonce: isTjAs
+.. section: Library
+
+The cStringIO.StringIO() constructor now encodes unicode arguments with the
+system default encoding just like the write() method does, instead of
+converting it to a raw buffer.  This also fixes handling of unicode input in
+the shlex module (#6988, #1170).
+
+..
+
+.. bpo: 9168
+.. date: 8578
+.. nonce: eLGWkL
+.. section: Library
+
+now smtpd is able to bind privileged port.
+
+..
+
+.. bpo: 12529
+.. date: 8577
+.. nonce: TX2NNI
+.. section: Library
+
+fix cgi.parse_header issue on strings with double-quotes and semicolons
+together. Patch by Ben Darnell and Petri Lehtinen.
+
+..
+
+.. bpo: 6090
+.. date: 8576
+.. nonce: 8BVasJ
+.. section: Library
+
+zipfile raises a ValueError when a document with a timestamp earlier than
+1980 is provided. Patch contributed by Petri Lehtinen.
+
+..
+
+.. bpo: 13194
+.. date: 8575
+.. nonce: b0HQpu
+.. section: Library
+
+zlib.compressobj().copy() and zlib.decompressobj().copy() are now available
+on Windows.
+
+..
+
+.. bpo: 13114
+.. date: 8574
+.. nonce: qtS6EQ
+.. section: Library
+
+Fix the distutils commands check and register when the long description is a
+Unicode string with non-ASCII characters.
+
+..
+
+.. bpo: 7367
+.. date: 8573
+.. nonce: 2xoC41
+.. section: Library
+
+Fix pkgutil.walk_paths to skip directories whose contents cannot be read.
+
+..
+
+.. bpo: 7425
+.. date: 8572
+.. nonce: e4gH2x
+.. section: Library
+
+Prevent pydoc -k failures due to module import errors. (Backport to 2.7 of
+existing 3.x fix)
+
+..
+
+.. bpo: 13099
+.. date: 8571
+.. nonce: hhmbgp
+.. section: Library
+
+Fix sqlite3.Cursor.lastrowid under a Turkish locale. Reported and diagnosed
+by Thomas Kluyver.
+
+..
+
+.. bpo: 7689
+.. date: 8570
+.. nonce: --iH31
+.. section: Library
+
+Allow pickling of dynamically created classes when their metaclass is
+registered with copy_reg.  Patch by Nicolas M. Thiéry and Craig Citro.
+
+..
+
+.. bpo: 13058
+.. date: 8569
+.. nonce: KJ3kEA
+.. section: Library
+
+ossaudiodev: fix a file descriptor leak on error. Patch by Thomas Jarosch.
+
+..
+
+.. bpo: 12931
+.. date: 8568
+.. nonce: b6La4G
+.. section: Library
+
+xmlrpclib now encodes Unicode URI to ISO-8859-1, instead of failing with a
+UnicodeDecodeError.
+
+..
+
+.. bpo: 8933
+.. date: 8567
+.. nonce: yiVHCJ
+.. section: Library
+
+distutils' PKG-INFO files will now correctly report Metadata-Version: 1.1
+instead of 1.0 if a Classifier or Download-URL field is present.
+
+..
+
+.. bpo: 8286
+.. date: 8566
+.. nonce: 9gJAZN
+.. section: Library
+
+The distutils command sdist will print a warning message instead of crashing
+when an invalid path is given in the manifest template.
+
+..
+
+.. bpo: 12841
+.. date: 8565
+.. nonce: VRTnfy
+.. section: Library
+
+tarfile unnecessarily checked the existence of numerical user and group ids
+on extraction. If one of them did not exist the respective id of the current
+user (i.e. root) was used for the file and ownership information was lost.
+
+..
+
+.. bpo: 10946
+.. date: 8564
+.. nonce: HYgRut
+.. section: Library
+
+The distutils commands bdist_dumb, bdist_wininst and bdist_msi now respect a
+--skip-build option given to bdist.
+
+..
+
+.. bpo: 12287
+.. date: 8563
+.. nonce: _b1Hy3
+.. section: Library
+
+Fix a stack corruption in ossaudiodev module when the FD is greater than
+FD_SETSIZE.
+
+..
+
+.. bpo: 12839
+.. date: 8562
+.. nonce: YFQywe
+.. section: Library
+
+Fix crash in zlib module due to version mismatch. Fix by Richard M. Tew.
+
+..
+
+.. bpo: 12786
+.. date: 8561
+.. nonce: Wv58St
+.. section: Library
+
+Set communication pipes used by subprocess.Popen CLOEXEC to avoid them being
+inherited by other subprocesses.
+
+..
+
+.. bpo: 4106
+.. date: 8560
+.. nonce: CWHsfS
+.. section: Library
+
+Fix occasional exceptions printed out by multiprocessing on interpreter
+shutdown.
+
+..
+
+.. bpo: 11657
+.. date: 8559
+.. nonce: K6NkKs
+.. section: Library
+
+Fix sending file descriptors over 255 over a multiprocessing Pipe.
+
+..
+
+.. bpo: 12213
+.. date: 8558
+.. nonce: nL3AJE
+.. section: Library
+
+Fix a buffering bug with interleaved reads and writes that could appear on
+io.BufferedRandom streams.
+
+..
+
+.. bpo: 12326
+.. date: 8557
+.. nonce: oR88Sz
+.. section: Library
+
+sys.platform is now always 'linux2' on Linux, even if Python is compiled on
+Linux 3.
+
+..
+
+.. bpo: 13007
+.. date: 8556
+.. nonce: 6OcUii
+.. section: Library
+
+whichdb should recognize gdbm 1.9 magic numbers.
+
+..
+
+.. bpo: 9173
+.. date: 8555
+.. nonce: 7CSZen
+.. section: Library
+
+Let shutil._make_archive work if the logger argument is None.
+
+..
+
+.. bpo: 12650
+.. date: 8554
+.. nonce: hY2GLb
+.. section: Library
+
+Fix a race condition where a subprocess.Popen could leak resources
+(FD/zombie) when killed at the wrong time.
+
+..
+
+.. bpo: 12752
+.. date: 8553
+.. nonce: 3uiyON
+.. section: Library
+
+Fix regression which prevented locale.normalize() from accepting unicode
+strings.
+
+..
+
+.. bpo: 12683
+.. date: 8552
+.. nonce: pySdFM
+.. section: Library
+
+urlparse updated to include svn as schemes that uses relative paths. (svn
+from 1.5 onwards support relative path).
+
+..
+
+.. bpo: 11933
+.. date: 8551
+.. nonce: voGTke
+.. section: Library
+
+Fix incorrect mtime comparison in distutils.
+
+..
+
+.. bpo: 11104
+.. date: 8550
+.. nonce: EZRzAK
+.. section: Library
+
+Fix the behavior of distutils' sdist command with manually-maintained
+MANIFEST files. (See also: bpo-8688)
+
+..
+
+.. bpo: 8887
+.. date: 8549
+.. nonce: GV2FAG
+.. section: Library
+
+"pydoc somebuiltin.somemethod" (or help('somebuiltin.somemethod') in Python
+code) now finds the doc of the method.
+
+..
+
+.. bpo: 12603
+.. date: 8548
+.. nonce: wO8DQ8
+.. section: Library
+
+Fix pydoc.synopsis() on files with non-negative st_mtime.
+
+..
+
+.. bpo: 12514
+.. date: 8547
+.. nonce: e1PR4a
+.. section: Library
+
+Use try/finally to assure the timeit module restores garbage collections
+when it is done.
+
+..
+
+.. bpo: 12607
+.. date: 8546
+.. nonce: t5RWHt
+.. section: Library
+
+In subprocess, fix issue where if stdin, stdout or stderr is given as a low
+fd, it gets overwritten.
+
+..
+
+.. bpo: 12102
+.. date: 8545
+.. nonce: VJSgGA
+.. section: Library
+
+Document that buffered files must be flushed before being used with mmap.
+Patch by Steffen Daode Nurpmeso.
+
+..
+
+.. bpo: 12560
+.. date: 8544
+.. nonce: 9ydkW_
+.. section: Library
+
+Build libpython.so on OpenBSD. Patch by Stefan Sperling.
+
+..
+
+.. bpo: 1813
+.. date: 8543
+.. nonce: M1IkRm
+.. section: Library
+
+Fix codec lookup and setting/getting locales under Turkish locales.
+
+..
+
+.. bpo: 10883
+.. date: 8542
+.. nonce: _e0WlS
+.. section: Library
+
+Fix socket leaks in urllib when using FTP.
+
+..
+
+.. bpo: 12592
+.. date: 8541
+.. nonce: -EZrk3
+.. section: Library
+
+Make Python build on OpenBSD 5 (and future major releases).
+
+..
+
+.. bpo: 12372
+.. date: 8540
+.. nonce: 7QRSzO
+.. section: Library
+
+POSIX semaphores are broken on AIX: don't use them.
+
+..
+
+.. bpo: 12571
+.. date: 8539
+.. nonce: qrkjgh
+.. section: Library
+
+Add a plat-linux3 directory mirroring the plat-linux2 directory, so that
+"import DLFCN" and other similar imports work on Linux 3.0.
+
+..
+
+.. bpo: 7484
+.. date: 8538
+.. nonce: 0bZoAH
+.. section: Library
+
+smtplib no longer puts <> around addresses in VRFY and EXPN commands; they
+aren't required and in fact postfix doesn't support that form.
+
+..
+
+.. bpo: 11603
+.. date: 8537
+.. nonce: B016rQ
+.. section: Library
+
+Fix a crash when __str__ is rebound as __repr__.  Patch by Andreas Stührk.
+
+..
+
+.. bpo: 12502
+.. date: 8536
+.. nonce: p8Kedr
+.. section: Library
+
+asyncore: fix polling loop with AF_UNIX sockets.
+
+..
+
+.. bpo: 4376
+.. date: 8535
+.. nonce: 6yUats
+.. section: Library
+
+ctypes now supports nested structures in an endian different than the parent
+structure. Patch by Vlad Riscutia.
+
+..
+
+.. bpo: 12493
+.. date: 8534
+.. nonce: qaPq_Q
+.. section: Library
+
+subprocess: Popen.communicate() now also handles EINTR errors if the process
+has only one pipe.
+
+..
+
+.. bpo: 12467
+.. date: 8533
+.. nonce: x0sMKt
+.. section: Library
+
+warnings: fix a race condition if a warning is emitted at shutdown, if
+globals()['__file__'] is None.
+
+..
+
+.. bpo: 12352
+.. date: 8532
+.. nonce: Htm8Oe
+.. section: Library
+
+Fix a deadlock in multiprocessing.Heap when a block is freed by the garbage
+collector while the Heap lock is held.
+
+..
+
+.. bpo: 9516
+.. date: 8531
+.. nonce: v8AhHk
+.. section: Library
+
+On Mac OS X, change Distutils to no longer globally attempt to check or set
+the MACOSX_DEPLOYMENT_TARGET environment variable for the interpreter
+process.  This could cause failures in non-Distutils subprocesses and was
+unreliable since tests or user programs could modify the interpreter
+environment after Distutils set it.  Instead, have Distutils set the
+deployment target only in the environment of each build subprocess.  It is
+still possible to globally override the default by setting
+MACOSX_DEPLOYMENT_TARGET before launching the interpreter; its value must be
+greater or equal to the default value, the value with which the interpreter
+was built.
+
+..
+
+.. bpo: 11802
+.. date: 8530
+.. nonce: 6ktAp2
+.. section: Library
+
+The cache in filecmp now has a maximum size of 100 so that it won't grow
+without bound.
+
+..
+
+.. bpo: 12404
+.. date: 8529
+.. nonce: bS5-Qf
+.. section: Library
+
+Remove C89 incompatible code from mmap module. Patch by Akira Kitada.
+
+..
+
+.. bpo: 11700
+.. date: 8528
+.. nonce: VpdGS5
+.. section: Library
+
+mailbox proxy object close methods can now be called multiple times without
+error, and _ProxyFile now closes the wrapped file.
+
+..
+
+.. bpo: 12133
+.. date: 8527
+.. nonce: Ag9yty
+.. section: Library
+
+AbstractHTTPHandler.do_open() of urllib.request closes the HTTP connection
+if its getresponse() method fails with a socket error. Patch written by Ezio
+Melotti.
+
+..
+
+.. bpo: 9284
+.. date: 8526
+.. nonce: -NhBcF
+.. section: Library
+
+Allow inspect.findsource() to find the source of doctest functions.
+
+..
+
+.. bpo: 10694
+.. date: 8525
+.. nonce: JD6qXr
+.. section: Library
+
+zipfile now ignores garbage at the end of a zipfile.
+
+..
+
+.. bpo: 11583
+.. date: 8524
+.. nonce: Wu1xMh
+.. section: Library
+
+Speed up os.path.isdir on Windows by using GetFileAttributes instead of
+os.stat.
+
+..
+
+.. bpo: 12080
+.. date: 8523
+.. nonce: oDmVxk
+.. section: Library
+
+Fix a performance issue in Decimal._power_exact that caused some corner-case
+Decimal.__pow__ calls to take an unreasonably long time.
+
+..
+
+.. bpo: 0
+.. date: 8522
+.. nonce: aMnclC
+.. section: Library
+
+Named tuples now work correctly with vars().
+
+..
+
+.. bpo: 0
+.. date: 8521
+.. nonce: qdHiJw
+.. section: Library
+
+sys.setcheckinterval() now updates the current ticker count as well as
+updating the check interval, so if the user decreases the check interval,
+the ticker doesn't have to wind down to zero from the old starting point
+before the new interval takes effect.  And if the user increases the
+interval, it makes sure the new limit takes effect right away rather have an
+early task switch before recognizing the new interval.
+
+..
+
+.. bpo: 12085
+.. date: 8520
+.. nonce: cu9-Sp
+.. section: Library
+
+Fix an attribute error in subprocess.Popen destructor if the constructor has
+failed, e.g. because of an undeclared keyword argument. Patch written by
+Oleg Oshmyan.
+
+..
+
+.. bpo: 9041
+.. date: 8519
+.. nonce: iLXuHK
+.. section: Library
+
+An issue in ctypes.c_longdouble, ctypes.c_double, and ctypes.c_float that
+caused an incorrect exception to be returned in the case of overflow has
+been fixed.
+
+..
+
+.. bpo: 0
+.. date: 8518
+.. nonce: zRuNTM
+.. section: Library
+
+bsddb module: Erratic behaviour of "DBEnv->rep_elect()" because a typo.
+Possible crash.
+
+..
+
+.. bpo: 13774
+.. date: 8517
+.. nonce: -HkPbH
+.. section: Library
+
+json: Fix a SystemError when a bogus encoding is passed to json.loads().
+
+..
+
+.. bpo: 9975
+.. date: 8516
+.. nonce: 2SRKp5
+.. section: Library
+
+socket: Fix incorrect use of flowinfo and scope_id. Patch by Vilmos Nebehaj.
+
+..
+
+.. bpo: 13159
+.. date: 8515
+.. nonce: Zoj0wD
+.. section: Library
+
+FileIO, BZ2File, and the built-in file class now use a linear-time buffer
+growth strategy instead of a quadratic one.
+
+..
+
+.. bpo: 13070
+.. date: 8514
+.. nonce: zcoYVY
+.. section: Library
+
+Fix a crash when a TextIOWrapper caught in a reference cycle would be
+finalized after the reference to its underlying BufferedRWPair's writer got
+cleared by the GC.
+
+..
+
+.. bpo: 12881
+.. date: 8513
+.. nonce: IpOO6j
+.. section: Library
+
+ctypes: Fix segfault with large structure field names.
+
+..
+
+.. bpo: 13013
+.. date: 8512
+.. nonce: KLH96V
+.. section: Library
+
+ctypes: Fix a reference leak in PyCArrayType_from_ctype. Thanks to Suman
+Saha for finding the bug and providing a patch.
+
+..
+
+.. bpo: 13022
+.. date: 8511
+.. nonce: zeo8hs
+.. section: Library
+
+Fix: _multiprocessing.recvfd() doesn't check that file descriptor was
+actually received.
+
+..
+
+.. bpo: 12483
+.. date: 8510
+.. nonce: IpGhKV
+.. section: Library
+
+ctypes: Fix a crash when the destruction of a callback object triggers the
+garbage collector.
+
+..
+
+.. bpo: 12950
+.. date: 8509
+.. nonce: Z7xl-R
+.. section: Library
+
+Fix passing file descriptors in multiprocessing, under OpenIndiana/Illumos.
+
+..
+
+.. bpo: 12764
+.. date: 8508
+.. nonce: YtBoIj
+.. section: Library
+
+Fix a crash in ctypes when the name of a Structure field is not a string.
+
+..
+
+.. bpo: 9651
+.. date: 8507
+.. nonce: INPcwf
+.. section: Library
+
+Fix a crash when ctypes.create_string_buffer(0) was passed to some functions
+like file.write().
+
+..
+
+.. bpo: 10309
+.. date: 8506
+.. nonce: -z_Mxz
+.. section: Library
+
+Define _GNU_SOURCE so that mremap() gets the proper signature.  Without
+this, architectures where sizeof void* != sizeof int are broken.  Patch
+given by Hallvard B Furuseth.
+
+..
+
+.. bpo: 964437
+.. date: 8505
+.. nonce: buwNGK
+.. section: IDLE
+
+Make IDLE help window non-modal. Patch by Guilherme Polo and Roger Serwy.
+
+..
+
+.. bpo: 13933
+.. date: 8504
+.. nonce: 5CAw8l
+.. section: IDLE
+
+IDLE auto-complete did not work with some imported module, like hashlib.
+(Patch by Roger Serwy)
+
+..
+
+.. bpo: 13506
+.. date: 8503
+.. nonce: ztXHhD
+.. section: IDLE
+
+Add '' to path for IDLE Shell when started and restarted with Restart Shell.
+Original patches by Marco Scataglini and Roger Serwy.
+
+..
+
+.. bpo: 4625
+.. date: 8502
+.. nonce: 2pS4tW
+.. section: IDLE
+
+If IDLE cannot write to its recent file or breakpoint files, display a
+message popup and continue rather than crash. (original patch by Roger
+Serwy)
+
+..
+
+.. bpo: 8793
+.. date: 8501
+.. nonce: 2eA1HO
+.. section: IDLE
+
+Prevent IDLE crash when given strings with invalid hex escape sequences.
+
+..
+
+.. bpo: 13296
+.. date: 8500
+.. nonce: bMHIFe
+.. section: IDLE
+
+Fix IDLE to clear compile __future__ flags on shell restart. (Patch by Roger
+Serwy)
+
+..
+
+.. bpo: 14409
+.. date: 8499
+.. nonce: 8SNyRR
+.. section: IDLE
+
+IDLE now properly executes commands in the Shell window when it cannot read
+the normal config files on startup and has to use the built-in default key
+bindings. There was previously a bug in one of the defaults.
+
+..
+
+.. bpo: 3573
+.. date: 8498
+.. nonce: yIQRtd
+.. section: IDLE
+
+IDLE hangs when passing invalid command line args (directory(ies) instead of
+file(s)).
+
+..
+
+.. bpo: 6807
+.. date: 8497
+.. nonce: lfskSG
+.. section: Build
+
+Run msisupport.mak earlier.
+
+..
+
+.. bpo: 10580
+.. date: 8496
+.. nonce: GkwWHF
+.. section: Build
+
+Minor grammar change in Windows installer.
+
+..
+
+.. bpo: 12627
+.. date: 8495
+.. nonce: pVGmbv
+.. section: Build
+
+Implement PEP 394 for Python 2.7 ("python2").
+
+..
+
+.. bpo: 8746
+.. date: 8494
+.. nonce: z-aagT
+.. section: Build
+
+Correct faulty configure checks so that os.chflags() and os.lchflags() are
+once again built on systems that support these functions (*BSD and OS X).
+Also add new stat file flags for OS X (UF_HIDDEN and UF_COMPRESSED).
+
+..
+
+.. bpo: 14053
+.. date: 8493
+.. nonce: tR4DDC
+.. section: Tools/Demos
+
+patchcheck.py ("make patchcheck") now works with MQ patches. Patch by
+Francisco Martín Brugué.
+
+..
+
+.. bpo: 13930
+.. date: 8492
+.. nonce: jUdfJ-
+.. section: Tools/Demos
+
+2to3 is now able to write its converted output files to another directory
+tree as well as copying unchanged files and altering the file suffix.  See
+its new -o, -W and --add-suffix options.  This makes it more useful in many
+automated code translation workflows.
+
+..
+
+.. bpo: 10639
+.. date: 8491
+.. nonce: ZGu-0K
+.. section: Tools/Demos
+
+reindent.py no longer converts newlines and will raise an error if
+attempting to convert a file with mixed newlines.
+
+..
+
+.. bpo: 13628
+.. date: 8490
+.. nonce: XznUD3
+.. section: Tools/Demos
+
+python-gdb.py is now able to retrieve more frames in the Python traceback if
+Python is optimized.
+
+..
+
+.. bpo: 15467
+.. date: 8489
+.. nonce: Ilkvjd
+.. section: Tests
+
+Move helpers for __sizeof__ tests into test_support. Patch by Serhiy
+Storchaka.
+
+..
+
+.. bpo: 11689
+.. date: 8488
+.. nonce: n1UPYK
+.. section: Tests
+
+Fix a variable scoping error in an sqlite3 test. Initial patch by Torsten
+Landschoff.
+
+..
+
+.. bpo: 10881
+.. date: 8487
+.. nonce: CG7Ecn
+.. section: Tests
+
+Fix test_site failures with OS X framework builds.
+
+..
+
+.. bpo: 13901
+.. date: 8486
+.. nonce: ICKGPH
+.. section: Tests
+
+Prevent test_distutils failures on OS X with --enable-shared.
+
+..
+
+.. bpo: 13304
+.. date: 8485
+.. nonce: jDDi97
+.. section: Tests
+
+Skip test case if user site-packages disabled (-s or PYTHONNOUSERSITE).
+(Patch by Carl Meyer)
+
+..
+
+.. bpo: 13218
+.. date: 8484
+.. nonce: EZ3jnV
+.. section: Tests
+
+Fix test_ssl failures on Debian/Ubuntu.
+
+..
+
+.. bpo: 12821
+.. date: 8483
+.. nonce: fmA715
+.. section: Tests
+
+Fix test_fcntl failures on OpenBSD 5.
+
+..
+
+.. bpo: 12331
+.. date: 8482
+.. nonce: ZSPeJW
+.. section: Tests
+
+The test suite for lib2to3 can now run from an installed Python.
+
+..
+
+.. bpo: 12549
+.. date: 8481
+.. nonce: S4urNL
+.. section: Tests
+
+Correct test_platform to not fail when OS X returns 'x86_64' as the
+processor type on some Mac systems.
+
+..
+
+.. bpo: 0
+.. date: 8480
+.. nonce: EofQqr
+.. section: Tests
+
+Skip network tests when getaddrinfo() returns EAI_AGAIN, meaning a temporary
+failure in name resolution.
+
+..
+
+.. bpo: 11812
+.. date: 8479
+.. nonce: jeNaCB
+.. section: Tests
+
+Solve transient socket failure to connect to 'localhost' in
+test_telnetlib.py.
+
+..
+
+.. bpo: 0
+.. date: 8478
+.. nonce: cUdl39
+.. section: Tests
+
+Solved a potential deadlock in test_telnetlib.py. Related to issue #11812.
+
+..
+
+.. bpo: 0
+.. date: 8477
+.. nonce: QtTimW
+.. section: Tests
+
+Avoid failing in test_robotparser when mueblesmoraleda.com is flaky and an
+overzealous DNS service (e.g. OpenDNS) redirects to a placeholder Web site.
+
+..
+
+.. bpo: 0
+.. date: 8476
+.. nonce: Vvh-2P
+.. section: Tests
+
+Avoid failing in test_urllibnet.test_bad_address when some overzealous DNS
+service (e.g. OpenDNS) resolves a non-existent domain name.  The test is now
+skipped instead.
+
+..
+
+.. bpo: 8716
+.. date: 8475
+.. nonce: -qUe-z
+.. section: Tests
+
+Avoid crashes caused by Aqua Tk on OSX when attempting to run test_tk or
+test_ttk_guionly under a username that is not currently logged in to the
+console windowserver (as may be the case under buildbot or ssh).
+
+..
+
+.. bpo: 12141
+.. date: 8474
+.. nonce: -5YCgZ
+.. section: Tests
+
+Install a copy of template C module file so that test_build_ext of
+test_distutils is no longer silently skipped when run outside of a build
+directory.
+
+..
+
+.. bpo: 8746
+.. date: 8473
+.. nonce: I497O-
+.. section: Tests
+
+Add additional tests for os.chflags() and os.lchflags(). Patch by Garrett
+Cooper.
+
+..
+
+.. bpo: 10736
+.. date: 8472
+.. nonce: 60t_7a
+.. section: Tests
+
+Fix test_ttk test_widgets failures with Cocoa Tk 8.5.9 on Mac OS X.  (Patch
+by Ronald Oussoren)
+
+..
+
+.. bpo: 12057
+.. date: 8471
+.. nonce: 7QVG6T
+.. section: Tests
+
+Add tests for ISO 2022 codecs (iso2022_jp, iso2022_jp_2, iso2022_kr).
+
+..
+
+.. bpo: 13491
+.. date: 8470
+.. nonce: zMFNID
+.. section: Documentation
+
+Fix many errors in sqlite3 documentation. Initial patch for #13491 by
+Johannes Vogel. (See also: bpo-13995)
+
+..
+
+.. bpo: 13402
+.. date: 8469
+.. nonce: VSNrG0
+.. section: Documentation
+
+Document absoluteness of sys.executable.
+
+..
+
+.. bpo: 13883
+.. date: 8468
+.. nonce: atFSNh
+.. section: Documentation
+
+PYTHONCASEOK also works on OS X, OS/2, and RiscOS.
+
+..
+
+.. bpo: 2134
+.. date: 8467
+.. nonce: lkdzru
+.. section: Documentation
+
+The tokenize documentation has been clarified to explain why all operator
+and delimiter tokens are treated as token.OP tokens.
+
+..
+
+.. bpo: 13513
+.. date: 8466
+.. nonce: Z6l39q
+.. section: Documentation
+
+Fix io.IOBase documentation to correctly link to the io.IOBase.readline
+method instead of the readline module.
+
+..
+
+.. bpo: 13237
+.. date: 8465
+.. nonce: EVVjZK
+.. section: Documentation
+
+Reorganise subprocess documentation to emphasise convenience functions and
+the most commonly needed arguments to Popen.
+
+..
+
+.. bpo: 13141
+.. date: 8464
+.. nonce: rDLimI
+.. section: Documentation
+
+Demonstrate recommended style for SocketServer examples.
diff --git a/Misc/NEWS.d/2.7.3rc2.rst b/Misc/NEWS.d/2.7.3rc2.rst
new file mode 100644
index 0000000..8927310
--- /dev/null
+++ b/Misc/NEWS.d/2.7.3rc2.rst
@@ -0,0 +1,10 @@
+.. bpo: 14234
+.. date: 8657
+.. nonce: 3-5k8_
+.. release date: 2012-03-17
+.. section: Library
+
+CVE-2012-0876: Randomize hashes of xml attributes in the hash table internal
+to the pyexpat module's copy of the expat library to avoid a denial of
+service due to hash collisions.  Patch by David Malcolm with some
+modifications by the expat project.
diff --git a/Misc/NEWS.d/2.7.4.rst b/Misc/NEWS.d/2.7.4.rst
new file mode 100644
index 0000000..5fbe3ab
--- /dev/null
+++ b/Misc/NEWS.d/2.7.4.rst
@@ -0,0 +1,64 @@
+.. bpo: 17550
+.. date: 9013
+.. nonce: zn8gOk
+.. release date: 2013-04-06
+.. section: Build
+
+Fix the --enable-profiling configure switch.
+
+..
+
+.. bpo: 15801
+.. date: 9012
+.. nonce: zsLcEY
+.. section: Core and Builtins
+
+With string % formatting, relax the type check for a mapping such that any
+type with a __getitem__ can be used on the right hand side.
+
+..
+
+.. bpo: 17625
+.. date: 9011
+.. nonce: SoDm9J
+.. section: IDLE
+
+In IDLE, close the replace dialog after it is used.
+
+..
+
+.. bpo: 17835
+.. date: 9010
+.. nonce: mJdR71
+.. section: Tests
+
+Fix test_io when the default OS pipe buffer size is larger than one million
+bytes.
+
+..
+
+.. bpo: 17531
+.. date: 9009
+.. nonce: 7PzWC2
+.. section: Tests
+
+Fix tests that thought group and user ids were always the int type. Also,
+always allow -1 as a valid group and user id.
+
+..
+
+.. bpo: 17533
+.. date: 9008
+.. nonce: XGejM9
+.. section: Tests
+
+Fix test_xpickle with older versions of Python 2.5.
+
+..
+
+.. bpo: 17538
+.. date: 9007
+.. nonce: M8FVLz
+.. section: Documentation
+
+Document XML vulnerabilties
diff --git a/Misc/NEWS.d/2.7.4rc1.rst b/Misc/NEWS.d/2.7.4rc1.rst
new file mode 100644
index 0000000..d0c615b
--- /dev/null
+++ b/Misc/NEWS.d/2.7.4rc1.rst
@@ -0,0 +1,3419 @@
+.. bpo: 10211
+.. date: 9006
+.. nonce: JF6QJN
+.. release date: 2013-03-23
+.. section: Core and Builtins
+
+Buffer objects expose the new buffer interface internally
+
+..
+
+.. bpo: 16445
+.. date: 9005
+.. nonce: EF19nl
+.. section: Core and Builtins
+
+Fixed potential segmentation fault when deleting an exception message.
+
+..
+
+.. bpo: 17275
+.. date: 9004
+.. nonce: Aqerft
+.. section: Core and Builtins
+
+Corrected class name in init error messages of the C version of
+BufferedWriter and BufferedRandom.
+
+..
+
+.. bpo: 7963
+.. date: 9003
+.. nonce: FWJtUT
+.. section: Core and Builtins
+
+Fixed misleading error message that issued when object is called without
+arguments.
+
+..
+
+.. bpo: 5308
+.. date: 9002
+.. nonce: s5uAbP
+.. section: Core and Builtins
+
+Raise ValueError when marshalling too large object (a sequence with size >=
+2**31), instead of producing illegal marshal data.
+
+..
+
+.. bpo: 17043
+.. date: 9001
+.. nonce: 4OVhGk
+.. section: Core and Builtins
+
+The unicode-internal decoder no longer read past the end of input buffer.
+
+..
+
+.. bpo: 16979
+.. date: 9000
+.. nonce: jTR3Oe
+.. section: Core and Builtins
+
+Fix error handling bugs in the unicode-escape-decode decoder.
+
+..
+
+.. bpo: 10156
+.. date: 8999
+.. nonce: iEZGhY
+.. section: Core and Builtins
+
+In the interpreter's initialization phase, unicode globals are now
+initialized dynamically as needed.
+
+..
+
+.. bpo: 16975
+.. date: 8998
+.. nonce: H9EsG9
+.. section: Core and Builtins
+
+Fix error handling bug in the escape-decode decoder.
+
+..
+
+.. bpo: 14850
+.. date: 8997
+.. nonce: EhU_If
+.. section: Core and Builtins
+
+Now a charmap decoder treats U+FFFE as "undefined mapping" in any mapping,
+not only in a Unicode string.
+
+..
+
+.. bpo: 11461
+.. date: 8996
+.. nonce: xwn_Zw
+.. section: Core and Builtins
+
+Fix the incremental UTF-16 decoder. Original patch by Amaury Forgeot d'Arc.
+
+..
+
+.. bpo: 16367
+.. date: 8995
+.. nonce: lewlCg
+.. section: Core and Builtins
+
+Fix FileIO.readall() on Windows for files larger than 2 GB.
+
+..
+
+.. bpo: 15516
+.. date: 8994
+.. nonce: 5-JJO7
+.. section: Core and Builtins
+
+Fix a bug in PyString_FromFormat where it failed to properly ignore errors
+from a __int__() method.
+
+..
+
+.. bpo: 16839
+.. date: 8993
+.. nonce: aEw6ZB
+.. section: Core and Builtins
+
+Fix a segfault when calling unicode() on a classic class early in
+interpreter initialization.
+
+..
+
+.. bpo: 16761
+.. date: 8992
+.. nonce: Z2d0Tr
+.. section: Core and Builtins
+
+Calling ``int()`` and ``long()`` with *base* argument only now raises
+TypeError.
+
+..
+
+.. bpo: 16759
+.. date: 8991
+.. nonce: U0-CFS
+.. section: Core and Builtins
+
+Support the full DWORD (unsigned long) range in Reg2Py when retrieving a
+REG_DWORD value. This corrects functions like winreg.QueryValueEx that may
+have been returning truncated values.
+
+..
+
+.. bpo: 14420
+.. date: 8990
+.. nonce: uknqaC
+.. section: Core and Builtins
+
+Support the full DWORD (unsigned long) range in Py2Reg when passed a
+REG_DWORD value. Fixes ValueError in winreg.SetValueEx when given a long.
+
+..
+
+.. bpo: 13863
+.. date: 8989
+.. nonce: jfoNlP
+.. section: Core and Builtins
+
+Work around buggy 'fstat' implementation on Windows / NTFS that lead to
+incorrect timestamps (off by one hour) being stored in .pyc files on some
+systems.
+
+..
+
+.. bpo: 16602
+.. date: 8988
+.. nonce: FjnLTD
+.. section: Core and Builtins
+
+When a weakref's target was part of a long deallocation chain, the object
+could remain reachable through its weakref even though its refcount had
+dropped to zero.
+
+..
+
+.. bpo: 9011
+.. date: 8987
+.. nonce: ENWTWf
+.. section: Core and Builtins
+
+Fix hacky AST code that modified the CST when compiling a negated numeric
+literal.
+
+..
+
+.. bpo: 16306
+.. date: 8986
+.. nonce: H29SXn
+.. section: Core and Builtins
+
+Fix multiple error messages when unknown command line parameters where
+passed to the interpreter.  Patch by Hieu Nguyen.
+
+..
+
+.. bpo: 15379
+.. date: 8985
+.. nonce: Ix2NTb
+.. section: Core and Builtins
+
+Fix passing of non-BMP characters as integers for the charmap decoder
+(already working as unicode strings).  Patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 16453
+.. date: 8984
+.. nonce: 0Zm9en
+.. section: Core and Builtins
+
+Fix equality testing of dead weakref objects.
+
+..
+
+.. bpo: 9535
+.. date: 8983
+.. nonce: hkixPD
+.. section: Core and Builtins
+
+Fix pending signals that have been received but not yet handled by Python to
+not persist after os.fork() in the child process.
+
+..
+
+.. bpo: 15001
+.. date: 8982
+.. nonce: oD3gtX
+.. section: Core and Builtins
+
+fix segfault on "del sys.modules['__main__']". Patch by Victor Stinner.
+
+..
+
+.. bpo: 5057
+.. date: 8981
+.. nonce: 5HFeht
+.. section: Core and Builtins
+
+the peepholer no longer optimizes subscription on unicode literals (e.g.
+u'foo'[0]) in order to produce compatible pyc files between narrow and wide
+builds.
+
+..
+
+.. bpo: 8401
+.. date: 8980
+.. nonce: TslRZr
+.. section: Core and Builtins
+
+assigning an int to a bytearray slice (e.g. b[3:4] = 5) now raises an error.
+
+..
+
+.. bpo: 14700
+.. date: 8979
+.. nonce: 1hIs61
+.. section: Core and Builtins
+
+Fix buggy overflow checks for large width and precision in string formatting
+operations.
+
+..
+
+.. bpo: 16345
+.. date: 8978
+.. nonce: azvPpP
+.. section: Core and Builtins
+
+Fix an infinite loop when ``fromkeys`` on a dict subclass received a
+nonempty dict from the constructor.
+
+..
+
+.. bpo: 6074
+.. date: 8977
+.. nonce: CXlveH
+.. section: Core and Builtins
+
+Ensure cached bytecode files can always be updated by the user that created
+them, even when the source file is read-only.
+
+..
+
+.. bpo: 14783
+.. date: 8976
+.. nonce: Sk4dfh
+.. section: Core and Builtins
+
+Improve int() and long() docstrings and switch docstrings for unicode(),
+slice(), range(), and xrange() to use multi-line signatures.
+
+..
+
+.. bpo: 16030
+.. date: 8975
+.. nonce: ljwmkM
+.. section: Core and Builtins
+
+Fix overflow bug in computing the `repr` of an xrange object with large
+start, step or length.
+
+..
+
+.. bpo: 16029
+.. date: 8974
+.. nonce: zGzl68
+.. section: Core and Builtins
+
+Fix overflow bug occurring when pickling xranges with large start, step or
+length.
+
+..
+
+.. bpo: 16037
+.. date: 8973
+.. nonce: tA7cA2
+.. section: Core and Builtins
+
+Limit httplib's _read_status() function to work around broken HTTP servers
+and reduce memory usage. It's actually a backport of a Python 3.2 fix.
+Thanks to Adrien Kunysz.
+
+..
+
+.. bpo: 16588
+.. date: 8972
+.. nonce: YKgxOa
+.. section: Core and Builtins
+
+Silence unused-but-set warnings in Python/thread_pthread
+
+..
+
+.. bpo: 13992
+.. date: 8971
+.. nonce: Jasaf2
+.. section: Core and Builtins
+
+The trashcan mechanism is now thread-safe.  This eliminates sporadic crashes
+in multi-thread programs when several long deallocator chains ran
+concurrently and involved subclasses of built-in container types.
+
+..
+
+.. bpo: 15801
+.. date: 8970
+.. nonce: gpcQV3
+.. section: Core and Builtins
+
+Make sure mappings passed to '%' formatting are actually subscriptable.
+
+..
+
+.. bpo: 15604
+.. date: 8969
+.. nonce: q1V3sc
+.. section: Core and Builtins
+
+Update uses of PyObject_IsTrue() to check for and handle errors correctly.
+Patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 14579
+.. date: 8968
+.. nonce: Bcg1J1
+.. section: Core and Builtins
+
+Fix error handling bug in the utf-16 decoder.  Patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 15368
+.. date: 8967
+.. nonce: iAaiat
+.. section: Core and Builtins
+
+An issue that caused bytecode generation to be non-deterministic when using
+randomized hashing (-R) has been fixed.
+
+..
+
+.. bpo: 15897
+.. date: 8966
+.. nonce: GQpoBE
+.. section: Core and Builtins
+
+zipimport.c doesn't check return value of fseek(). Patch by Felipe Cruz.
+
+..
+
+.. bpo: 16369
+.. date: 8965
+.. nonce: GtRTux
+.. section: Core and Builtins
+
+Global PyTypeObjects not initialized with PyType_Ready(...).
+
+..
+
+.. bpo: 15033
+.. date: 8964
+.. nonce: gKl1Eg
+.. section: Core and Builtins
+
+Fix the exit status bug when modules invoked using -m switch, return the
+proper failure return value (1). Patch contributed by Jeff Knupp.
+
+..
+
+.. bpo: 12268
+.. date: 8963
+.. nonce: 6mnsQI
+.. section: Core and Builtins
+
+File readline, readlines and read() methods no longer lose data when an
+underlying read system call is interrupted.  IOError is no longer raised due
+to a read system call returning EINTR from within these methods.
+
+..
+
+.. bpo: 13512
+.. date: 8962
+.. nonce: KW8Du9
+.. section: Core and Builtins
+
+Create ~/.pypirc securely (CVE-2011-4944).  Initial patch by Philip Jenvey,
+tested by Mageia and Debian.
+
+..
+
+.. bpo: 7719
+.. date: 8961
+.. nonce: O-kdp6
+.. section: Core and Builtins
+
+Make distutils ignore ``.nfs*`` files instead of choking later on.  Initial
+patch by SilentGhost and Jeff Ramnani.
+
+..
+
+.. bpo: 10053
+.. date: 8960
+.. nonce: rOxp0i
+.. section: Core and Builtins
+
+Don't close FDs when FileIO.__init__ fails. Loosely based on the work by
+Hirokazu Yamamoto.
+
+..
+
+.. bpo: 14775
+.. date: 8959
+.. nonce: AHE3Lc
+.. section: Core and Builtins
+
+Fix a potential quadratic dict build-up due to the garbage collector
+repeatedly trying to untrack dicts.
+
+..
+
+.. bpo: 14494
+.. date: 8958
+.. nonce: OjJqfu
+.. section: Core and Builtins
+
+Fix __future__.py and its documentation to note that absolute imports are
+the default behavior in 3.0 instead of 2.7. Patch by Sven Marnach.
+
+..
+
+.. bpo: 14761
+.. date: 8957
+.. nonce: A8TEE6
+.. section: Core and Builtins
+
+Fix potential leak on an error case in the import machinery.
+
+..
+
+.. bpo: 14699
+.. date: 8956
+.. nonce: AuoeMs
+.. section: Core and Builtins
+
+Fix calling the classmethod descriptor directly.
+
+..
+
+.. bpo: 11603
+.. date: 8955
+.. nonce: aGsFsn
+.. section: Core and Builtins
+
+Setting __repr__ to __str__ now raises a RuntimeError when repr() or str()
+is called on such an object.
+
+..
+
+.. bpo: 14658
+.. date: 8954
+.. nonce: jeSkqL
+.. section: Core and Builtins
+
+Fix binding a special method to a builtin implementation of a special method
+with a different name.
+
+..
+
+.. bpo: 14612
+.. date: 8953
+.. nonce: uTBlpg
+.. section: Core and Builtins
+
+Fix jumping around with blocks by setting f_lineno.
+
+..
+
+.. bpo: 13889
+.. date: 8952
+.. nonce: 5jUbDL
+.. section: Core and Builtins
+
+Check and (if necessary) set FPU control word before calling any of the
+dtoa.c string <-> float conversion functions, on MSVC builds of Python.
+This fixes issues when embedding Python in a Delphi app.
+
+..
+
+.. bpo: 14505
+.. date: 8951
+.. nonce: oeGD4J
+.. section: Core and Builtins
+
+Fix file descriptor leak when deallocating file objects created with
+PyFile_FromString().
+
+..
+
+.. bpo: 14474
+.. date: 8950
+.. nonce: 8TuKNN
+.. section: Core and Builtins
+
+Save and restore exception state in thread.start_new_thread() while writing
+error message if the thread leaves an unhandled exception.
+
+..
+
+.. bpo: 13019
+.. date: 8949
+.. nonce: LYHgJO
+.. section: Core and Builtins
+
+Fix potential reference leaks in bytearray.extend().  Patch by Suman Saha.
+
+..
+
+.. bpo: 14378
+.. date: 8948
+.. nonce: SYESoz
+.. section: Core and Builtins
+
+Fix compiling ast.ImportFrom nodes with a "__future__" string as the module
+name that was not interned.
+
+..
+
+.. bpo: 14331
+.. date: 8947
+.. nonce: xcTH6m
+.. section: Core and Builtins
+
+Use significantly less stack space when importing modules by allocating path
+buffers on the heap instead of the stack.
+
+..
+
+.. bpo: 14334
+.. date: 8946
+.. nonce: l8YQhg
+.. section: Core and Builtins
+
+Prevent in a segfault in type.__getattribute__ when it was not passed
+strings. Also fix segfaults in the __getattribute__ and __setattr__ methods
+of old-style classes.
+
+..
+
+.. bpo: 14161
+.. date: 8945
+.. nonce: VorA5N
+.. section: Core and Builtins
+
+fix the __repr__ of file objects to escape the file name.
+
+..
+
+.. bpo: 1469629
+.. date: 8944
+.. nonce: ej86Z-
+.. section: Core and Builtins
+
+Allow cycles through an object's __dict__ slot to be collected. (For example
+if ``x.__dict__ is x``).
+
+..
+
+.. bpo: 13521
+.. date: 8943
+.. nonce: L_inbK
+.. section: Core and Builtins
+
+dict.setdefault() now does only one lookup for the given key, making it
+"atomic" for many purposes.  Patch by Filip Gruszczyński.
+
+..
+
+.. bpo: 1602133
+.. date: 8942
+.. nonce: lYqpUo
+.. section: Core and Builtins
+
+on Mac OS X a shared library build (``--enable-shared``) now fills the
+``os.environ`` variable correctly.
+
+..
+
+.. bpo: 10538
+.. date: 8941
+.. nonce: F7Gerr
+.. section: Core and Builtins
+
+When using the "s*" code with PyArg_ParseTuple() to fill a Py_buffer
+structure with data from an object supporting only the old PyBuffer
+interface, a reference to the source objects is now properly added to the
+Py_buffer.obj member.
+
+..
+
+.. bpo: 12718
+.. date: 8940
+.. nonce: lrGueo
+.. section: Library
+
+Fix interaction with winpdb overriding __import__ by setting importer
+attribute on BaseConfigurator instance.
+
+..
+
+.. bpo: 17521
+.. date: 8939
+.. nonce: rDGKe7
+.. section: Library
+
+Corrected non-enabling of logger following two calls to fileConfig().
+
+..
+
+.. bpo: 17508
+.. date: 8938
+.. nonce: sO6qmY
+.. section: Library
+
+Corrected MemoryHandler configuration in dictConfig() where the target
+handler wasn't configured first.
+
+..
+
+.. bpo: 10212
+.. date: 8937
+.. nonce: XGXAQQ
+.. section: Library
+
+cStringIO and struct.unpack support new buffer objects.
+
+..
+
+.. bpo: 12098
+.. date: 8936
+.. nonce: kcQpDY
+.. section: Library
+
+multiprocessing on Windows now starts child processes using the same
+sys.flags as the current process.  Initial patch by Sergey Mezentsev.
+
+..
+
+.. bpo: 8862
+.. date: 8935
+.. nonce: WpBti_
+.. section: Library
+
+Fixed curses cleanup when getkey is interrupted by a signal.
+
+..
+
+.. bpo: 9090
+.. date: 8934
+.. nonce: FUyySi
+.. section: Library
+
+When a socket with a timeout fails with EWOULDBLOCK or EAGAIN, retry the
+select() loop instead of bailing out.  This is because select() can
+incorrectly report a socket as ready for reading (for example, if it
+received some data with an invalid checksum).
+
+..
+
+.. bpo: 1285086
+.. date: 8933
+.. nonce: U7ONBL
+.. section: Library
+
+Get rid of the refcounting hack and speed up urllib.unquote().
+
+..
+
+.. bpo: 17368
+.. date: 8932
+.. nonce: y8QiJd
+.. section: Library
+
+Fix an off-by-one error in the Python JSON decoder that caused a failure
+while decoding empty object literals when object_pairs_hook was specified.
+
+..
+
+.. bpo: 17278
+.. date: 8931
+.. nonce: pOF4An
+.. section: Library
+
+Fix a crash in heapq.heappush() and heapq.heappop() when the list is being
+resized concurrently.
+
+..
+
+.. bpo: 17018
+.. date: 8930
+.. nonce: l8_sa8
+.. section: Library
+
+Make Process.join() retry if os.waitpid() fails with EINTR.
+
+..
+
+.. bpo: 14720
+.. date: 8929
+.. nonce: rjT0OJ
+.. section: Library
+
+sqlite3: Convert datetime microseconds correctly. Patch by Lowe Thiderman.
+
+..
+
+.. bpo: 17225
+.. date: 8928
+.. nonce: Z396fN
+.. section: Library
+
+JSON decoder now counts columns in the first line starting with 1, as in
+other lines.
+
+..
+
+.. bpo: 7842
+.. date: 8927
+.. nonce: p2kMAC
+.. section: Library
+
+backported fix for py_compile.compile() syntax error handling.
+
+..
+
+.. bpo: 13153
+.. date: 8926
+.. nonce: IN7Ddm
+.. section: Library
+
+Tkinter functions now raise TclError instead of ValueError when a unicode
+argument contains non-BMP character.
+
+..
+
+.. bpo: 9669
+.. date: 8925
+.. nonce: Td9alB
+.. section: Library
+
+Protect re against infinite loops on zero-width matching in non-greedy
+repeat.  Patch by Matthew Barnett.
+
+..
+
+.. bpo: 13169
+.. date: 8924
+.. nonce: txDMgH
+.. section: Library
+
+The maximal repetition number in a regular expression has been increased
+from 65534 to 2147483647 (on 32-bit platform) or 4294967294 (on 64-bit).
+
+..
+
+.. bpo: 16743
+.. date: 8923
+.. nonce: 7vwfDN
+.. section: Library
+
+Fix mmap overflow check on 32 bit Windows.
+
+..
+
+.. bpo: 11311
+.. date: 8922
+.. nonce: NvgObQ
+.. section: Library
+
+StringIO.readline(0) now returns an empty string as all other file-like
+objects.
+
+..
+
+.. bpo: 16800
+.. date: 8921
+.. nonce: HxSo58
+.. section: Library
+
+tempfile.gettempdir() no longer left temporary files when the disk is full.
+Original patch by Amir Szekely.
+
+..
+
+.. bpo: 13555
+.. date: 8920
+.. nonce: bXG1a4
+.. section: Library
+
+cPickle now supports files larger than 2 GiB.
+
+..
+
+.. bpo: 17052
+.. date: 8919
+.. nonce: TEWdzQ
+.. section: Library
+
+unittest discovery should use self.testLoader.
+
+..
+
+.. bpo: 4591
+.. date: 8918
+.. nonce: 9wJlD8
+.. section: Library
+
+Uid and gid values larger than 2**31 are supported now.
+
+..
+
+.. bpo: 17141
+.. date: 8917
+.. nonce: pXFICp
+.. section: Library
+
+random.vonmisesvariate() no more hangs for large kappas.
+
+..
+
+.. bpo: 17149
+.. date: 8916
+.. nonce: ONtJnJ
+.. section: Library
+
+Fix random.vonmisesvariate to always return results in the range [0,
+2*math.pi].
+
+..
+
+.. bpo: 1470548
+.. date: 8915
+.. nonce: xr_CsJ
+.. section: Library
+
+XMLGenerator now works with UTF-16 and UTF-32 encodings.
+
+..
+
+.. bpo: 6975
+.. date: 8914
+.. nonce: 4GoPXW
+.. section: Library
+
+os.path.realpath() now correctly resolves multiple nested symlinks on POSIX
+platforms.
+
+..
+
+.. bpo: 7358
+.. date: 8913
+.. nonce: -jPlTz
+.. section: Library
+
+cStringIO.StringIO now supports writing to and reading from a stream larger
+than 2 GiB on 64-bit systems.
+
+..
+
+.. bpo: 10355
+.. date: 8912
+.. nonce: lkhqo9
+.. section: Library
+
+In SpooledTemporaryFile class mode and name properties and xreadlines method
+now work for unrolled files.  encoding and newlines properties now removed
+as they have no sense and always produced AttributeError.
+
+..
+
+.. bpo: 16686
+.. date: 8911
+.. nonce: zT_bpe
+.. section: Library
+
+Fixed a lot of bugs in audioop module.  Fixed crashes in avgpp(), maxpp()
+and ratecv().  Fixed an integer overflow in add(), bias(), and ratecv().
+reverse(), lin2lin() and ratecv() no more lose precision for 32-bit samples.
+max() and rms() no more returns a negative result and various other
+functions now work correctly with 32-bit sample -0x80000000.
+
+..
+
+.. bpo: 17073
+.. date: 8910
+.. nonce: wlCar1
+.. section: Library
+
+Fix some integer overflows in sqlite3 module.
+
+..
+
+.. bpo: 6083
+.. date: 8909
+.. nonce: MVAIwI
+.. section: Library
+
+Fix multiple segmentation faults occurred when PyArg_ParseTuple parses
+nested mutating sequence.
+
+..
+
+.. bpo: 5289
+.. date: 8908
+.. nonce: 4azz2m
+.. section: Library
+
+Fix ctypes.util.find_library on Solaris.
+
+..
+
+.. bpo: 17106
+.. date: 8907
+.. nonce: -2_cbV
+.. section: Library
+
+Fix a segmentation fault in io.TextIOWrapper when an underlying stream or a
+decoder produces data of an unexpected type (i.e. when io.TextIOWrapper
+initialized with text stream or use bytes-to-bytes codec).
+
+..
+
+.. bpo: 13994
+.. date: 8906
+.. nonce: Y89GZB
+.. section: Library
+
+Add compatibility alias in distutils.ccompiler for
+distutils.sysconfig.customize_compiler.
+
+..
+
+.. bpo: 15633
+.. date: 8905
+.. nonce: t407yZ
+.. section: Library
+
+httplib.HTTPResponse is now mark closed when the server sends less than the
+advertised Content-Length.
+
+..
+
+.. bpo: 15881
+.. date: 8904
+.. nonce: UfzKmP
+.. section: Library
+
+Fixed atexit hook in multiprocessing.
+
+..
+
+.. bpo: 14340
+.. date: 8903
+.. nonce: 6XMfoZ
+.. section: Library
+
+Upgrade the embedded expat library to version 2.1.0.
+
+..
+
+.. bpo: 11159
+.. date: 8902
+.. nonce: P-3Mf3
+.. section: Library
+
+SAX parser now supports unicode file names.
+
+..
+
+.. bpo: 6972
+.. date: 8901
+.. nonce: e2Lq4T
+.. section: Library
+
+The zipfile module no longer overwrites files outside of its destination
+path when extracting malicious zip files.
+
+..
+
+.. bpo: 17049
+.. date: 8900
+.. nonce: CoOx8W
+.. section: Library
+
+Localized calendar methods now return unicode if a locale includes an
+encoding and the result string contains month or weekday (was regression
+from Python 2.6).
+
+..
+
+.. bpo: 4844
+.. date: 8899
+.. nonce: jvXWfL
+.. section: Library
+
+ZipFile now raises BadZipfile when opens a ZIP file with an incomplete "End
+of Central Directory" record.  Original patch by Guilherme Polo and Alan
+McIntyre.
+
+..
+
+.. bpo: 15505
+.. date: 8898
+.. nonce: -pH9Mh
+.. section: Library
+
+`unittest.installHandler` no longer assumes SIGINT handler is set to a
+callable object.
+
+..
+
+.. bpo: 17051
+.. date: 8897
+.. nonce: erKg1U
+.. section: Library
+
+Fix a memory leak in os.path.isdir() on Windows. Patch by Robert Xiao.
+
+..
+
+.. bpo: 13454
+.. date: 8896
+.. nonce: 81rUI-
+.. section: Library
+
+Fix a crash when deleting an iterator created by itertools.tee() if all
+other iterators were very advanced before.
+
+..
+
+.. bpo: 16992
+.. date: 8895
+.. nonce: s_RXIM
+.. section: Library
+
+On Windows in signal.set_wakeup_fd, validate the file descriptor argument.
+
+..
+
+.. bpo: 15861
+.. date: 8894
+.. nonce: gGkxCM
+.. section: Library
+
+tkinter now correctly works with lists and tuples containing strings with
+whitespaces, backslashes or unbalanced braces.
+
+..
+
+.. bpo: 10527
+.. date: 8893
+.. nonce: EuNKip
+.. section: Library
+
+Use poll() instead of select() for multiprocessing pipes.
+
+..
+
+.. bpo: 9720
+.. date: 8892
+.. nonce: XPXDks
+.. section: Library
+
+zipfile now writes correct local headers for files larger than 4 GiB.
+
+..
+
+.. bpo: 13899
+.. date: 8891
+.. nonce: yz3hXA
+.. section: Library
+
+\A, \Z, and \B now correctly match the A, Z, and B literals when used inside
+character classes (e.g. '[\A]').  Patch by Matthew Barnett.
+
+..
+
+.. bpo: 16398
+.. date: 8890
+.. nonce: JU7cL4
+.. section: Library
+
+Optimize deque.rotate() so that it only moves pointers and doesn't touch the
+underlying data with increfs and decrefs.
+
+..
+
+.. bpo: 15109
+.. date: 8889
+.. nonce: Qk6XVt
+.. section: Library
+
+Fix regression in sqlite3's iterdump method where it would die with an
+encoding error if the database contained string values containing non-ASCII.
+(Regression was introduced by fix for 9750).
+
+..
+
+.. bpo: 15545
+.. date: 8888
+.. nonce: FCBNNV
+.. section: Library
+
+Fix regression in sqlite3's iterdump method where it was failing if the
+connection used a row factory (such as sqlite3.Row) that produced unsortable
+objects. (Regression was introduced by fix for 9750).
+
+..
+
+.. bpo: 16828
+.. date: 8887
+.. nonce: KB886T
+.. section: Library
+
+Fix error incorrectly raised by bz2.compress(''). Patch by Martin Packman.
+
+..
+
+.. bpo: 9586
+.. date: 8886
+.. nonce: 9tuKgR
+.. section: Library
+
+Redefine SEM_FAILED on MacOSX to keep compiler happy.
+
+..
+
+.. bpo: 10527
+.. date: 8885
+.. nonce: 7btVvN
+.. section: Library
+
+make multiprocessing use poll() instead of select() if available.
+
+..
+
+.. bpo: 16485
+.. date: 8884
+.. nonce: aUJyTZ
+.. section: Library
+
+Now file descriptors are closed if file header patching failed on closing an
+aifc file.
+
+..
+
+.. bpo: 12065
+.. date: 8883
+.. nonce: FBZpyD
+.. section: Library
+
+connect_ex() on an SSL socket now returns the original errno when the
+socket's timeout expires (it used to return None).
+
+..
+
+.. bpo: 16713
+.. date: 8882
+.. nonce: YX5wyQ
+.. section: Library
+
+Fix the parsing of tel url with params using urlparse module.
+
+..
+
+.. bpo: 16443
+.. date: 8881
+.. nonce: SnGosi
+.. section: Library
+
+Add docstrings to regular expression match objects. Patch by Anton Kasyanov.
+
+..
+
+.. bpo: 8853
+.. date: 8880
+.. nonce: vSQPAG
+.. section: Library
+
+Allow port to be of type long for socket.getaddrinfo().
+
+..
+
+.. bpo: 16597
+.. date: 8879
+.. nonce: z8uMEN
+.. section: Library
+
+In buffered and text IO, call close() on the underlying stream if invoking
+flush() fails.
+
+..
+
+.. bpo: 15701
+.. date: 8878
+.. nonce: rAh1Sy
+.. section: Library
+
+Fix HTTPError info method call to return the headers information.
+
+..
+
+.. bpo: 16646
+.. date: 8877
+.. nonce: Tc3vsq
+.. section: Library
+
+ftplib.FTP.makeport() might lose socket error details. (patch by Serhiy
+Storchaka)
+
+..
+
+.. bpo: 16626
+.. date: 8876
+.. nonce: P9xKcu
+.. section: Library
+
+Fix infinite recursion in glob.glob() on Windows when the pattern contains a
+wildcard in the drive or UNC path.  Patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 16298
+.. date: 8875
+.. nonce: kN3o52
+.. section: Library
+
+In HTTPResponse.read(), close the socket when there is no Content-Length and
+the incoming stream is finished.  Patch by Eran Rundstein.
+
+..
+
+.. bpo: 16248
+.. date: 8874
+.. nonce: yOopnt
+.. section: Library
+
+Disable code execution from the user's home directory by tkinter when the -E
+flag is passed to Python.  Patch by Zachary Ware.
+
+..
+
+.. bpo: 16628
+.. date: 8873
+.. nonce: qnWML3
+.. section: Library
+
+Fix a memory leak in ctypes.resize().
+
+..
+
+.. bpo: 13614
+.. date: 8872
+.. nonce: buqA2j
+.. section: Library
+
+Fix setup.py register failure with invalid rst in description. Patch by
+Julien Courteau and Pierre Paul Lefebvre.
+
+..
+
+.. bpo: 10182
+.. date: 8871
+.. nonce: 0nH79H
+.. section: Library
+
+The re module doesn't truncate indices to 32 bits anymore. Patch by Serhiy
+Storchaka.
+
+..
+
+.. bpo: 16573
+.. date: 8870
+.. nonce: kKjx72
+.. section: Library
+
+In 2to3, treat enumerate() like a consuming call, so superfluous list()
+calls aren't added to filter(), map(), and zip() which are directly passed
+enumerate().
+
+..
+
+.. bpo: 1160
+.. date: 8869
+.. nonce: n79fOA
+.. section: Library
+
+Fix compiling large regular expressions on UCS2 builds. Patch by Serhiy
+Storchaka.
+
+..
+
+.. bpo: 14313
+.. date: 8868
+.. nonce: WpDB93
+.. section: Library
+
+zipfile now raises NotImplementedError when the compression type is unknown.
+
+..
+
+.. bpo: 16408
+.. date: 8867
+.. nonce: iqzks4
+.. section: Library
+
+Fix file descriptors not being closed in error conditions in the zipfile
+module.  Patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 16327
+.. date: 8866
+.. nonce: uVAHv3
+.. section: Library
+
+The subprocess module no longer leaks file descriptors used for
+stdin/stdout/stderr pipes to the child when fork() fails.
+
+..
+
+.. bpo: 14396
+.. date: 8865
+.. nonce: aUgPuV
+.. section: Library
+
+Handle the odd rare case of waitpid returning 0 when not expected in
+subprocess.Popen.wait().
+
+..
+
+.. bpo: 16411
+.. date: 8864
+.. nonce: 9Mn07O
+.. section: Library
+
+Fix a bug where zlib.decompressobj().flush() might try to access
+previously-freed memory. Patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 16350
+.. date: 8863
+.. nonce: b77tF6
+.. section: Library
+
+zlib.decompressobj().decompress() now accumulates data from successive calls
+after EOF in unused_data, instead of only saving the argument to the last
+call. decompressobj().flush() now correctly sets unused_data and
+unconsumed_tail. A bug in the handling of MemoryError when setting the
+unconsumed_tail attribute has also been fixed. Patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 12759
+.. date: 8862
+.. nonce: c7p8aw
+.. section: Library
+
+sre_parse now raises a proper error when the name of the group is missing.
+Initial patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 16152
+.. date: 8861
+.. nonce: Lypvsp
+.. section: Library
+
+fix tokenize to ignore whitespace at the end of the code when no newline is
+found.  Patch by Ned Batchelder.
+
+..
+
+.. bpo: 16230
+.. date: 8860
+.. nonce: Y7XU0-
+.. section: Library
+
+Fix a crash in select.select() when one of the lists changes size while
+iterated on.  Patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 16228
+.. date: 8859
+.. nonce: zsna-8
+.. section: Library
+
+Fix a crash in the json module where a list changes size while it is being
+encoded.  Patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 14897
+.. date: 8858
+.. nonce: OGbALj
+.. section: Library
+
+Enhance error messages of struct.pack and struct.pack_into. Patch by Matti
+Mäki.
+
+..
+
+.. bpo: 12890
+.. date: 8857
+.. nonce: kDaDxa
+.. section: Library
+
+cgitb no longer prints spurious <p> tags in text mode when the logdir option
+is specified.
+
+..
+
+.. bpo: 14398
+.. date: 8856
+.. nonce: jPT4ME
+.. section: Library
+
+Fix size truncation and overflow bugs in the bz2 module.
+
+..
+
+.. bpo: 5148
+.. date: 8855
+.. nonce: VHoO2C
+.. section: Library
+
+Ignore 'U' in mode given to gzip.open() and gzip.GzipFile().
+
+..
+
+.. bpo: 16220
+.. date: 8854
+.. nonce: KAtvbg
+.. section: Library
+
+wsgiref now always calls close() on an iterable response. Patch by Brent
+Tubbs.
+
+..
+
+.. bpo: 16461
+.. date: 8853
+.. nonce: 4XLB7L
+.. section: Library
+
+Wave library should be able to deal with 4GB wav files, and sample rate of
+44100 Hz.
+
+..
+
+.. bpo: 16176
+.. date: 8852
+.. nonce: iZz-x5
+.. section: Library
+
+Properly identify Windows 8 via platform.platform()
+
+..
+
+.. bpo: 15756
+.. date: 8851
+.. nonce: cV4TEW
+.. section: Library
+
+subprocess.poll() now properly handles errno.ECHILD to return a returncode
+of 0 when the child has already exited or cannot be waited on.
+
+..
+
+.. bpo: 12376
+.. date: 8850
+.. nonce: mkpQwv
+.. section: Library
+
+Pass on parameters in TextTestResult.__init__ super call
+
+..
+
+.. bpo: 15222
+.. date: 8849
+.. nonce: lOnn6t
+.. section: Library
+
+Insert blank line after each message in mbox mailboxes
+
+..
+
+.. bpo: 16013
+.. date: 8848
+.. nonce: lJImKp
+.. section: Library
+
+Fix CSV Reader parsing issue with ending quote characters. Patch by Serhiy
+Storchaka.
+
+..
+
+.. bpo: 15421
+.. date: 8847
+.. nonce: SUEEPv
+.. section: Library
+
+fix an OverflowError in Calendar.itermonthdates() after datetime.MAXYEAR.
+Patch by Cédric Krier.
+
+..
+
+.. bpo: 15970
+.. date: 8846
+.. nonce: 8deo2K
+.. section: Library
+
+xml.etree.ElementTree now serializes correctly the empty HTML elements
+'meta' and 'param'.
+
+..
+
+.. bpo: 15676
+.. date: 8845
+.. nonce: V_auQh
+.. section: Library
+
+Now "mmap" check for empty files before doing the offset check.  Patch by
+Steven Willis.
+
+..
+
+.. bpo: 15340
+.. date: 8844
+.. nonce: Aqn0c1
+.. section: Library
+
+Fix importing the random module when /dev/urandom cannot be opened.  This
+was a regression caused by the hash randomization patch.
+
+..
+
+.. bpo: 15841
+.. date: 8843
+.. nonce: M11nwa
+.. section: Library
+
+The readable(), writable() and seekable() methods of io.BytesIO and
+io.StringIO objects now raise ValueError when the object has been closed.
+Patch by Alessandro Moura.
+
+..
+
+.. bpo: 16112
+.. date: 8842
+.. nonce: 7UQthq
+.. section: Library
+
+platform.architecture does not correctly escape argument to /usr/bin/file.
+Patch by David Benjamin.
+
+..
+
+.. bpo: 12776
+.. date: 8841
+.. nonce: MzM-xL
+.. section: Library
+
+call argparse type function (specified by add_argument) only once. Before,
+the type function was called twice in the case where the default was
+specified and the argument was given as well.  This was especially
+problematic for the FileType type, as a default file would always be opened,
+even if a file argument was specified on the command line. (See also:
+bpo-11839)
+
+..
+
+.. bpo: 15906
+.. date: 8840
+.. nonce: sY-Tgu
+.. section: Library
+
+Fix a regression in argparse caused by the preceding change, when
+action='append', type='str' and default=[].
+
+..
+
+.. bpo: 13370
+.. date: 8839
+.. nonce: E9RveK
+.. section: Library
+
+Ensure that ctypes works on Mac OS X when Python is compiled using the clang
+compiler
+
+..
+
+.. bpo: 15544
+.. date: 8838
+.. nonce: 3QjWdU
+.. section: Library
+
+Fix Decimal.__float__ to work with payload-carrying NaNs.
+
+..
+
+.. bpo: 15199
+.. date: 8837
+.. nonce: iOOV1X
+.. section: Library
+
+Fix JavaScript's default MIME type to application/javascript. Patch by
+Bohuslav Kabrda.
+
+..
+
+.. bpo: 15477
+.. date: 8836
+.. nonce: 9gGqPw
+.. section: Library
+
+In cmath and math modules, add workaround for platforms whose
+system-supplied log1p function doesn't respect signs of zeros.
+
+..
+
+.. bpo: 11062
+.. date: 8835
+.. nonce: ZhTF21
+.. section: Library
+
+Fix adding a message from file to Babyl mailbox.
+
+..
+
+.. bpo: 15646
+.. date: 8834
+.. nonce: VbhKq4
+.. section: Library
+
+Prevent equivalent of a fork bomb when using multiprocessing on Windows
+without the "if __name__ == '__main__'" idiom.
+
+..
+
+.. bpo: 15567
+.. date: 8833
+.. nonce: MGuZ8N
+.. section: Library
+
+Fix NameError when running threading._test
+
+..
+
+.. bpo: 15424
+.. date: 8832
+.. nonce: 6ZaCfJ
+.. section: Library
+
+Add a __sizeof__ implementation for array objects. Patch by Ludwig Hähne.
+
+..
+
+.. bpo: 15538
+.. date: 8831
+.. nonce: CJHtAs
+.. section: Library
+
+Fix compilation of the getnameinfo() / getaddrinfo() emulation code.  Patch
+by Philipp Hagemeister.
+
+..
+
+.. bpo: 12288
+.. date: 8830
+.. nonce: EeBUVC
+.. section: Library
+
+Consider '0' and '0.0' as valid initialvalue for tkinter SimpleDialog.
+
+..
+
+.. bpo: 15489
+.. date: 8829
+.. nonce: P9-vH9
+.. section: Library
+
+Add a __sizeof__ implementation for BytesIO objects. Patch by Serhiy
+Storchaka.
+
+..
+
+.. bpo: 15469
+.. date: 8828
+.. nonce: eFsJXX
+.. section: Library
+
+Add a __sizeof__ implementation for deque objects. Patch by Serhiy
+Storchaka.
+
+..
+
+.. bpo: 15487
+.. date: 8827
+.. nonce: vtEBtw
+.. section: Library
+
+Add a __sizeof__ implementation for buffered I/O objects. Patch by Serhiy
+Storchaka.
+
+..
+
+.. bpo: 15512
+.. date: 8826
+.. nonce: JO3bbV
+.. section: Library
+
+Add a __sizeof__ implementation for parser. Patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 15402
+.. date: 8825
+.. nonce: MWs0d1
+.. section: Library
+
+An issue in the struct module that caused sys.getsizeof to return incorrect
+results for struct.Struct instances has been fixed. Initial patch by Serhiy
+Storchaka.
+
+..
+
+.. bpo: 15232
+.. date: 8824
+.. nonce: R723JW
+.. section: Library
+
+when mangle_from is True, email.Generator now correctly mangles lines that
+start with 'From ' that occur in a MIME preamble or epilog.
+
+..
+
+.. bpo: 13922
+.. date: 8823
+.. nonce: mg0ypz
+.. section: Library
+
+argparse no longer incorrectly strips '--'s that appear after the first one.
+
+..
+
+.. bpo: 12353
+.. date: 8822
+.. nonce: S3NUQb
+.. section: Library
+
+argparse now correctly handles null argument values.
+
+..
+
+.. bpo: 6493
+.. date: 8821
+.. nonce: onAuOo
+.. section: Library
+
+An issue in ctypes on Windows that caused structure bitfields of type
+ctypes.c_uint32 and width 32 to incorrectly be set has been fixed.
+
+..
+
+.. bpo: 14635
+.. date: 8820
+.. nonce: R89rsl
+.. section: Library
+
+telnetlib will use poll() rather than select() when possible to avoid
+failing due to the select() file descriptor limit.
+
+..
+
+.. bpo: 15247
+.. date: 8819
+.. nonce: XQlOgY
+.. section: Library
+
+FileIO now raises an error when given a file descriptor pointing to a
+directory.
+
+..
+
+.. bpo: 14591
+.. date: 8818
+.. nonce: WiL398
+.. section: Library
+
+Fix bug in Random.jumpahead that could produce an invalid Mersenne Twister
+state on 64-bit machines.
+
+..
+
+.. bpo: 5346
+.. date: 8817
+.. nonce: KazqNd
+.. section: Library
+
+Preserve permissions of mbox, MMDF and Babyl mailbox files on flush().
+
+..
+
+.. bpo: 15219
+.. date: 8816
+.. nonce: q8ah8W
+.. section: Library
+
+Fix a reference leak when hashlib.new() is called with invalid parameters.
+
+..
+
+.. bpo: 9559
+.. date: 8815
+.. nonce: HNrpSz
+.. section: Library
+
+If messages were only added, a new file is no longer created and renamed
+over the old file when flush() is called on an mbox, MMDF or Babyl mailbox.
+
+..
+
+.. bpo: 14653
+.. date: 8814
+.. nonce: wxr1Hp
+.. section: Library
+
+email.utils.mktime_tz() no longer relies on system mktime() when timezone
+offest is supplied.
+
+..
+
+.. bpo: 6056
+.. date: 8813
+.. nonce: QB7JkF
+.. section: Library
+
+Make multiprocessing use setblocking(True) on the sockets it uses.  Original
+patch by J Derek Wilson.
+
+..
+
+.. bpo: 15101
+.. date: 8812
+.. nonce: IWvk9X
+.. section: Library
+
+Make pool finalizer avoid joining current thread.
+
+..
+
+.. bpo: 15054
+.. date: 8811
+.. nonce: tE72L_
+.. section: Library
+
+A bug in tokenize.tokenize that caused string literals with 'b' and 'br'
+prefixes to be incorrectly tokenized has been fixed. Patch by Serhiy
+Storchaka.
+
+..
+
+.. bpo: 15036
+.. date: 8810
+.. nonce: Mhm512
+.. section: Library
+
+Mailbox no longer throws an error if a flush is done between operations when
+removing or changing multiple items in mbox, MMDF, or Babyl mailboxes.
+
+..
+
+.. bpo: 10133
+.. date: 8809
+.. nonce: RredST
+.. section: Library
+
+Make multiprocessing deallocate buffer if socket read fails.  Patch by
+Hallvard B Furuseth.
+
+..
+
+.. bpo: 13854
+.. date: 8808
+.. nonce: ms8PU3
+.. section: Library
+
+Make multiprocessing properly handle non-integer non-string argument to
+SystemExit.
+
+..
+
+.. bpo: 12157
+.. date: 8807
+.. nonce: awxWQJ
+.. section: Library
+
+Make pool.map() empty iterables correctly.  Initial patch by mouad.
+
+..
+
+.. bpo: 14036
+.. date: 8806
+.. nonce: wfrN3N
+.. section: Library
+
+Add an additional check to validate that port in urlparse does not go in
+illegal range and returns None.
+
+..
+
+.. bpo: 14888
+.. date: 8805
+.. nonce: 8d3GPF
+.. section: Library
+
+Fix misbehaviour of the _md5 module when called on data larger than 2**32
+bytes.
+
+..
+
+.. bpo: 15908
+.. date: 8804
+.. nonce: xfD3R4
+.. section: Library
+
+Fix misbehaviour of the sha1 module when called on data larger than 2**32
+bytes.
+
+..
+
+.. bpo: 15910
+.. date: 8803
+.. nonce: Xik0eY
+.. section: Library
+
+Fix misbehaviour of _md5 and sha1 modules when "updating" on data larger
+than 2**32 bytes.
+
+..
+
+.. bpo: 14875
+.. date: 8802
+.. nonce: pGNN-W
+.. section: Library
+
+Use float('inf') instead of float('1e66666') in the json module.
+
+..
+
+.. bpo: 14572
+.. date: 8801
+.. nonce: FxInwF
+.. section: Library
+
+Prevent build failures with pre-3.5.0 versions of sqlite3, such as was
+shipped with Centos 5 and Mac OS X 10.4.
+
+..
+
+.. bpo: 14426
+.. date: 8800
+.. nonce: GSay45
+.. section: Library
+
+Correct the Date format in Expires attribute of Set-Cookie Header in
+Cookie.py.
+
+..
+
+.. bpo: 14721
+.. date: 8799
+.. nonce: 3gDakm
+.. section: Library
+
+Send proper header, Content-length: 0 when the body is an empty string ''.
+Initial Patch contributed by Arve Knudsen.
+
+..
+
+.. bpo: 14072
+.. date: 8798
+.. nonce: 4bVZye
+.. section: Library
+
+Fix parsing of 'tel' URIs in urlparse by making the check for ports
+stricter.
+
+..
+
+.. bpo: 9374
+.. date: 8797
+.. nonce: 73g_V_
+.. section: Library
+
+Generic parsing of query and fragment portions of url for any scheme.
+Supported both by RFC3986 and RFC2396.
+
+..
+
+.. bpo: 14798
+.. date: 8796
+.. nonce: uw_PT-
+.. section: Library
+
+Fix the functions in pyclbr to raise an ImportError when the first part of a
+dotted name is not a package. Patch by Xavier de Gaye.
+
+..
+
+.. bpo: 14832
+.. date: 8795
+.. nonce: ZyLvfY
+.. section: Library
+
+fixed the order of the argument references in the error message produced by
+unittest's assertItemsEqual.
+
+..
+
+.. bpo: 14829
+.. date: 8794
+.. nonce: yWZKyP
+.. section: Library
+
+Fix bisect issues under 64-bit Windows.
+
+..
+
+.. bpo: 14777
+.. date: 8793
+.. nonce: SS0XEf
+.. section: Library
+
+tkinter may return undecoded UTF-8 bytes as a string when accessing the Tk
+clipboard.  Modify clipboard_get() to first request type UTF8_STRING when no
+specific type is requested in an X11 windowing environment, falling back to
+the current default type STRING if that fails. Original patch by Thomas
+Kluyver.
+
+..
+
+.. bpo: 12541
+.. date: 8792
+.. nonce: srvUYa
+.. section: Library
+
+Be lenient with quotes around Realm field with HTTP Basic Authentation in
+urllib2.
+
+..
+
+.. bpo: 14662
+.. date: 8791
+.. nonce: kBgGen
+.. section: Library
+
+Prevent shutil failures on OS X when destination does not support chflag
+operations.  Patch by Hynek Schlawack.
+
+..
+
+.. bpo: 14157
+.. date: 8790
+.. nonce: QVP6vO
+.. section: Library
+
+Fix time.strptime failing without a year on February 29th. Patch by Hynek
+Schlawack.
+
+..
+
+.. bpo: 14768
+.. date: 8789
+.. nonce: UFzrQa
+.. section: Library
+
+os.path.expanduser('~/a') doesn't work correctly when HOME is '/'.
+
+..
+
+.. bpo: 13183
+.. date: 8788
+.. nonce: WXohoU
+.. section: Library
+
+Fix pdb skipping frames after hitting a breakpoint and running step.  Patch
+by Xavier de Gaye.
+
+..
+
+.. bpo: 14664
+.. date: 8787
+.. nonce: pdyfQE
+.. section: Library
+
+It is now possible to use @unittest.skip{If,Unless} on a test class that
+doesn't inherit from TestCase (i.e. a mixin).
+
+..
+
+.. bpo: 14160
+.. date: 8786
+.. nonce: eP9a5e
+.. section: Library
+
+TarFile.extractfile() failed to resolve symbolic links when the links were
+not located in an archive subdirectory.
+
+..
+
+.. bpo: 14638
+.. date: 8785
+.. nonce: cfMimX
+.. section: Library
+
+pydoc now treats non-string __name__ values as if they were missing, instead
+of raising an error.
+
+..
+
+.. bpo: 13684
+.. date: 8784
+.. nonce: GMakQh
+.. section: Library
+
+Fix httplib tunnel issue of infinite loops for certain sites which send EOF
+without trailing \r\n.
+
+..
+
+.. bpo: 14308
+.. date: 8783
+.. nonce: VI_YtW
+.. section: Library
+
+Fix an exception when a "dummy" thread is in the threading module's active
+list after a fork().
+
+..
+
+.. bpo: 14538
+.. date: 8782
+.. nonce: l61eIV
+.. section: Library
+
+HTMLParser can now parse correctly start tags that contain a bare '/'.
+
+..
+
+.. bpo: 14452
+.. date: 8781
+.. nonce: TPNgz8
+.. section: Library
+
+SysLogHandler no longer inserts a UTF-8 BOM into the message.
+
+..
+
+.. bpo: 13496
+.. date: 8780
+.. nonce: ZTq6yk
+.. section: Library
+
+Fix potential overflow in bisect.bisect algorithm when applied to a
+collection of size > sys.maxsize / 2.
+
+..
+
+.. bpo: 14399
+.. date: 8779
+.. nonce: ucnoq5
+.. section: Library
+
+zipfile now recognizes that the archive has been modified even if only the
+comment is changed.  As a consequence of this fix, ZipFile is now a new
+style class.
+
+..
+
+.. bpo: 7978
+.. date: 8778
+.. nonce: DdYwzu
+.. section: Library
+
+SocketServer now restarts the select() call when EINTR is returned.  This
+avoids crashing the server loop when a signal is received. Patch by Jerzy
+Kozera.
+
+..
+
+.. bpo: 10340
+.. date: 8777
+.. nonce: QZDDK-
+.. section: Library
+
+asyncore - properly handle EINVAL in dispatcher constructor on OSX; avoid to
+call handle_connect in case of a disconnected socket which was not meant to
+connect.
+
+..
+
+.. bpo: 12757
+.. date: 8776
+.. nonce: lfCCKo
+.. section: Library
+
+Fix the skipping of doctests when python is run with -OO so that it works in
+unittest's verbose mode as well as non-verbose mode.
+
+..
+
+.. bpo: 13694
+.. date: 8775
+.. nonce: qresWC
+.. section: Library
+
+asynchronous connect in asyncore.dispatcher does not set addr attribute.
+
+..
+
+.. bpo: 10484
+.. date: 8774
+.. nonce: NgDSdJ
+.. section: Library
+
+Fix the CGIHTTPServer's PATH_INFO handling problem.
+
+..
+
+.. bpo: 11199
+.. date: 8773
+.. nonce: UMivCa
+.. section: Library
+
+Fix the with urllib which hangs on particular ftp urls.
+
+..
+
+.. bpo: 14252
+.. date: 8772
+.. nonce: -5zjL9
+.. section: Library
+
+Fix subprocess.Popen.terminate() to not raise an error under Windows when
+the child process has already exited.
+
+..
+
+.. bpo: 14195
+.. date: 8771
+.. nonce: XpCJYQ
+.. section: Library
+
+An issue that caused weakref.WeakSet instances to incorrectly return True
+for a WeakSet instance 'a' in both 'a < a' and 'a > a' has been fixed.
+
+..
+
+.. bpo: 14159
+.. date: 8770
+.. nonce: -rJiOd
+.. section: Library
+
+Fix the len() of weak sets to return a better approximation when some
+objects are dead or dying.  Moreover, the implementation is now O(1) rather
+than O(n).
+
+..
+
+.. bpo: 2945
+.. date: 8769
+.. nonce: QZCfeH
+.. section: Library
+
+Make the distutils upload command aware of bdist_rpm products.
+
+..
+
+.. bpo: 6884
+.. date: 8768
+.. nonce: w-DWFF
+.. section: Library
+
+Fix long-standing bugs with MANIFEST.in parsing in distutils on Windows.
+
+..
+
+.. bpo: 16441
+.. date: 8767
+.. nonce: zm1gad
+.. section: Library
+
+Avoid excessive memory usage working with large gzip files using the gzip
+module.
+
+..
+
+.. bpo: 15782
+.. date: 8766
+.. nonce: c-rtHz
+.. section: Library
+
+Prevent compile errors of OS X Carbon modules _Fm, _Qd, and _Qdoffs when
+compiling with an SDK of 10.7 or later.  The OS X APIs they wrap have long
+been deprecated and have now been removed with 10.7. These modules were
+already empty for 64-bit builds and have been removed in Python 3.
+
+..
+
+.. bpo: 17477
+.. date: 8765
+.. nonce: mkozKG
+.. section: Library
+
+Update the bsddb module to pybsddb 5.3.0, supporting db-5.x, and dropping
+support for db-4.1 and db-4.2.
+
+..
+
+.. bpo: 17192
+.. date: 8764
+.. nonce: U0oKFo
+.. section: Library
+
+Update the ctypes module's libffi to v3.0.13.  This specifically addresses a
+stack misalignment issue on x86 and issues on some more recent platforms.
+
+..
+
+.. bpo: 12268
+.. date: 8763
+.. nonce: cWvcGA
+.. section: Library
+
+The io module file object write methods no longer abort early when a write
+system calls is interrupted (EINTR).
+
+..
+
+.. bpo: 0
+.. date: 8762
+.. nonce: R41GNw
+.. section: Library
+
+Fix the leak of a dict in the time module when used in an embedded
+interpreter that is repeatedly initialized and shutdown and reinitialized.
+
+..
+
+.. bpo: 12268
+.. date: 8761
+.. nonce: _DnsP2
+.. section: Library
+
+File readline, readlines and read or readall methods no longer lose data
+when an underlying read system call is interrupted within an io module
+object.  IOError is no longer raised due to a read system call returning
+EINTR from within these methods.
+
+..
+
+.. bpo: 16012
+.. date: 8760
+.. nonce: O3e6G-
+.. section: Library
+
+Fix a regression in pyexpat. The parser's UseForeignDTD() method doesn't
+require an argument again.
+
+..
+
+.. bpo: 13590
+.. date: 8759
+.. nonce: 1aEwh4
+.. section: Library
+
+OS X Xcode 4 - improve support for universal extension modules In
+particular, fix extension module build failures when trying to use
+32-bit-only installer Pythons on systems with Xcode 4 (currently OS X 10.8, 10.7,
+and optionally 10.6). * Backport 3.3.0 fixes to 2.7 branch (for release in
+2.7.4) * Since Xcode 4 removes ppc support, extension module builds now
+check for ppc compiler support and by default remove ppc and   ppc64 archs
+when they are not available. * Extension module builds now revert to using
+system installed   headers and libs (/usr and /System/Library) if the SDK
+used   to build the interpreter is not installed or has moved. * Try to
+avoid building extension modules with deprecated   and problematic Apple
+llvm-gcc compiler.  If original compiler   is not available, use clang
+instead by default.
+
+..
+
+.. bpo: 0
+.. date: 8758
+.. nonce: hHxr-m
+.. section: IDLE
+
+IDLE was displaying spurious SystemExit tracebacks when running scripts that
+terminated by raising SystemExit (i.e. unittest and turtledemo).
+
+..
+
+.. bpo: 9290
+.. date: 8757
+.. nonce: Msbacw
+.. section: IDLE
+
+In IDLE the sys.std* streams now implement io.TextIOBase interface and
+support all mandatory methods and properties.
+
+..
+
+.. bpo: 16829
+.. date: 8756
+.. nonce: u44Uel
+.. section: IDLE
+
+IDLE printing no longer fails if there are spaces or other special
+characters in the file path.
+
+..
+
+.. bpo: 16819
+.. date: 8755
+.. nonce: rcJDrk
+.. section: IDLE
+
+IDLE method completion now correctly works for unicode literals.
+
+..
+
+.. bpo: 16504
+.. date: 8754
+.. nonce: othtN_
+.. section: IDLE
+
+IDLE now catches SyntaxErrors raised by tokenizer. Patch by Roger Serwy.
+
+..
+
+.. bpo: 1207589
+.. date: 8753
+.. nonce: 0bmiue
+.. section: IDLE
+
+Add Cut/Copy/Paste items to IDLE right click Context Menu. Patch by Todd
+Rovito.
+
+..
+
+.. bpo: 13052
+.. date: 8752
+.. nonce: ulRmqo
+.. section: IDLE
+
+Fix IDLE crashing when replace string in Search/Replace dialog ended with
+'\'. Patch by Roger Serwy.
+
+..
+
+.. bpo: 9803
+.. date: 8751
+.. nonce: lJhnei
+.. section: IDLE
+
+Don't close IDLE on saving if breakpoint is open. Patch by Roger Serwy.
+
+..
+
+.. bpo: 14958
+.. date: 8750
+.. nonce: fWA3Eh
+.. section: IDLE
+
+Change IDLE systax highlighting to recognize all string and byte literals
+currently supported in Python 2.7.
+
+..
+
+.. bpo: 14962
+.. date: 8749
+.. nonce: W_t8Sw
+.. section: IDLE
+
+Update text coloring in IDLE shell window after changing options.  Patch by
+Roger Serwy.
+
+..
+
+.. bpo: 10997
+.. date: 8748
+.. nonce: D59Zo_
+.. section: IDLE
+
+Prevent a duplicate entry in IDLE's "Recent Files" menu.
+
+..
+
+.. bpo: 12510
+.. date: 8747
+.. nonce: 5hlN77
+.. section: IDLE
+
+Attempting to get invalid tooltip no longer closes IDLE. Original patch by
+Roger Serwy.
+
+..
+
+.. bpo: 10365
+.. date: 8746
+.. nonce: DI-DrH
+.. section: IDLE
+
+File open dialog now works instead of crashing even when parent window is
+closed. Patch by Roger Serwy.
+
+..
+
+.. bpo: 14876
+.. date: 8745
+.. nonce: 73XqgG
+.. section: IDLE
+
+Use user-selected font for highlight configuration. Patch by Roger Serwy.
+
+..
+
+.. bpo: 14409
+.. date: 8744
+.. nonce: 8SNyRR
+.. section: IDLE
+
+IDLE now properly executes commands in the Shell window when it cannot read
+the normal config files on startup and has to use the built-in default key
+bindings. There was previously a bug in one of the defaults.
+
+..
+
+.. bpo: 3573
+.. date: 8743
+.. nonce: FIbWrY
+.. section: IDLE
+
+IDLE hangs when passing invalid command line args (directory(ies) instead of
+file(s)) (Patch by Guilherme Polo)
+
+..
+
+.. bpo: 5219
+.. date: 8742
+.. nonce: We72rp
+.. section: IDLE
+
+Prevent event handler cascade in IDLE.
+
+..
+
+.. bpo: 15318
+.. date: 8741
+.. nonce: H1-iES
+.. section: IDLE
+
+Prevent writing to sys.stdin.
+
+..
+
+.. bpo: 13532
+.. date: 8740
+.. nonce: csNEK_
+.. section: IDLE
+
+Check that arguments to sys.stdout.write are strings. (See also: bpo-15319)
+
+..
+
+.. bpo: 10365
+.. date: 8739
+.. nonce: MInibr
+.. section: IDLE
+
+File open dialog now works instead of crashing even when parent window is
+closed while dialog is open.
+
+..
+
+.. bpo: 14018
+.. date: 8738
+.. nonce: HjN-7b
+.. section: IDLE
+
+Update checks for unstable system Tcl/Tk versions on OS X to include
+versions shipped with OS X 10.7 and 10.8 in addition to 10.6.
+
+..
+
+.. bpo: 15853
+.. date: 8737
+.. nonce: Re1tK-
+.. section: IDLE
+
+Prevent IDLE crash on OS X when opening Preferences menu with certain
+versions of Tk 8.5.  Initial patch by Kevin Walzer.
+
+..
+
+.. bpo: 16702
+.. date: 8736
+.. nonce: 3Xf_t-
+.. section: Tests
+
+test_urllib2_localnet tests now correctly ignores proxies for localhost
+tests.
+
+..
+
+.. bpo: 13447
+.. date: 8735
+.. nonce: _wys-6
+.. section: Tests
+
+Add a test file to host regression tests for bugs in the scripts found in
+the Tools directory.
+
+..
+
+.. bpo: 11420
+.. date: 8734
+.. nonce: J5oaxT
+.. section: Tests
+
+make test suite pass with -B/DONTWRITEBYTECODE set. Initial patch by Thomas
+Wouters.
+
+..
+
+.. bpo: 17299
+.. date: 8733
+.. nonce: N_JA1r
+.. section: Tests
+
+Add test coverage for cPickle with file objects and general IO objects.
+Original patch by Aman Shah.
+
+..
+
+.. bpo: 11963
+.. date: 8732
+.. nonce: _g8d_g
+.. section: Tests
+
+remove human verification from test_parser and test_subprocess.
+
+..
+
+.. bpo: 17249
+.. date: 8731
+.. nonce: wGvw7G
+.. section: Tests
+
+convert a test in test_capi to use unittest and reap threads.
+
+..
+
+.. bpo: 0
+.. date: 8730
+.. nonce: eaH1rt
+.. section: Tests
+
+We now run both test_email.py and test_email_renamed.py when running the
+test_email regression test.  test_email_renamed contains some tests that
+test_email does not.
+
+..
+
+.. bpo: 17041
+.. date: 8729
+.. nonce: 57V5iD
+.. section: Tests
+
+Fix testing when Python is configured with the --without-doc-strings option.
+
+..
+
+.. bpo: 15539
+.. date: 8728
+.. nonce: a1_G0Q
+.. section: Tests
+
+Added regression tests for Tools/scripts/pindent.py.
+
+..
+
+.. bpo: 15324
+.. date: 8727
+.. nonce: VlPGUN
+.. section: Tests
+
+Fix regrtest parsing of --fromfile and --randomize options.
+
+..
+
+.. bpo: 16618
+.. date: 8726
+.. nonce: a2Xoyn
+.. section: Tests
+
+Add more regression tests for glob. Patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 16664
+.. date: 8725
+.. nonce: CxbZwX
+.. section: Tests
+
+Add regression tests for glob's behaviour concerning entries starting with a
+".".  Patch by Sebastian Kreft.
+
+..
+
+.. bpo: 15747
+.. date: 8724
+.. nonce: TE3rVk
+.. section: Tests
+
+ZFS always returns EOPNOTSUPP when attempting to set the UF_IMMUTABLE flag
+(via either chflags or lchflags); refactor affected tests in test_posix.py
+to account for this.
+
+..
+
+.. bpo: 16549
+.. date: 8723
+.. nonce: 9ENPOM
+.. section: Tests
+
+Add tests for json.tools.  Initial patch by Berker Peksag and Serhiy
+Storchaka.
+
+..
+
+.. bpo: 16559
+.. date: 8722
+.. nonce: JvxWbq
+.. section: Tests
+
+Add more tests for the json module, including some from the official test
+suite at json.org.  Patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 16274
+.. date: 8721
+.. nonce: 9-uVb_
+.. section: Tests
+
+Fix test_asyncore on Solaris.  Patch by Giampaolo Rodola'.
+
+..
+
+.. bpo: 15040
+.. date: 8720
+.. nonce: F30TYe
+.. section: Tests
+
+Close files in mailbox tests for PyPy compatibility. Original patch by Matti
+Picus.
+
+..
+
+.. bpo: 15802
+.. date: 8719
+.. nonce: Ow-zrD
+.. section: Tests
+
+Fix test logic in TestMaildir.test_create_tmp. Patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 15765
+.. date: 8718
+.. nonce: rH6KB2
+.. section: Tests
+
+Extend a previous fix to Solaris and OpenBSD for quirky getcwd() behaviour
+(issue #9185) to NetBSD as well.
+
+..
+
+.. bpo: 15615
+.. date: 8717
+.. nonce: C9YuEt
+.. section: Tests
+
+Add some tests for the json module's handling of invalid input data.  Patch
+by Kushal Das.
+
+..
+
+.. bpo: 15496
+.. date: 8716
+.. nonce: tm76dD
+.. section: Tests
+
+Add directory removal helpers for tests on Windows. Patch by Jeremy Kloth.
+
+..
+
+.. bpo: 15043
+.. date: 8715
+.. nonce: R2j8Hb
+.. section: Tests
+
+test_gdb is now skipped entirely if gdb security settings block loading of
+the gdb hooks
+
+..
+
+.. bpo: 14589
+.. date: 8714
+.. nonce: 9aNtuR
+.. section: Tests
+
+Update certificate chain for sha256.tbs-internet.com, fixing a test failure
+in test_ssl.
+
+..
+
+.. bpo: 16698
+.. date: 8713
+.. nonce: RgmYjY
+.. section: Tests
+
+Skip posix test_getgroups when built with OS X deployment target prior to
+10.6.
+
+..
+
+.. bpo: 17111
+.. date: 8712
+.. nonce: ypc66r
+.. section: Tests
+
+Prevent test_surrogates (test_fileio) failure on OS X 10.4.
+
+..
+
+.. bpo: 17425
+.. date: 8711
+.. nonce: wTCSht
+.. section: Build
+
+Build against openssl 0.9.8y on Windows.
+
+..
+
+.. bpo: 16004
+.. date: 8710
+.. nonce: 5o_DZo
+.. section: Build
+
+Add `make touch`.
+
+..
+
+.. bpo: 5033
+.. date: 8709
+.. nonce: HKAgDA
+.. section: Build
+
+Fix building of the sqlite3 extension module when the SQLite library version
+has "beta" in it. Patch by Andreas Pelme.
+
+..
+
+.. bpo: 17228
+.. date: 8708
+.. nonce: CCkAM0
+.. section: Build
+
+Fix building without pymalloc.
+
+..
+
+.. bpo: 17086
+.. date: 8707
+.. nonce: iNoopm
+.. section: Build
+
+Backport the patches from the 3.3 branch to cross-build the package.
+
+..
+
+.. bpo: 3754
+.. date: 8706
+.. nonce: sUdOUp
+.. section: Build
+
+fix typo in pthread AC_CACHE_VAL.
+
+..
+
+.. bpo: 17029
+.. date: 8705
+.. nonce: dUd1NT
+.. section: Build
+
+Let h2py search the multiarch system include directory.
+
+..
+
+.. bpo: 16953
+.. date: 8704
+.. nonce: tW1KVY
+.. section: Build
+
+Fix socket module compilation on platforms with HAVE_BROKEN_POLL. Patch by
+Jeffrey Armstrong.
+
+..
+
+.. bpo: 16836
+.. date: 8703
+.. nonce: JZ-zO7
+.. section: Build
+
+Enable IPv6 support even if IPv6 is disabled on the build host.
+
+..
+
+.. bpo: 15923
+.. date: 8702
+.. nonce: PIv70V
+.. section: Build
+
+fix a mistake in asdl_c.py that resulted in a TypeError after 2801bf875a24
+(see #15801).
+
+..
+
+.. bpo: 11715
+.. date: 8701
+.. nonce: M3MapP
+.. section: Build
+
+Fix multiarch detection without having Debian development tools (dpkg-dev)
+installed.
+
+..
+
+.. bpo: 15819
+.. date: 8700
+.. nonce: 09XLHb
+.. section: Build
+
+Make sure we can build Python out-of-tree from a readonly source directory.
+(Somewhat related to Issue #9860.)
+
+..
+
+.. bpo: 15822
+.. date: 8699
+.. nonce: aLjenQ
+.. section: Build
+
+Ensure 2to3 grammar pickles are properly installed.
+
+..
+
+.. bpo: 15560
+.. date: 8698
+.. nonce: I8yMU0
+.. section: Build
+
+Fix building _sqlite3 extension on OS X with an SDK.
+
+..
+
+.. bpo: 8847
+.. date: 8697
+.. nonce: lqI_r8
+.. section: Build
+
+Disable COMDAT folding in Windows PGO builds.
+
+..
+
+.. bpo: 14018
+.. date: 8696
+.. nonce: RHawO_
+.. section: Build
+
+Fix OS X Tcl/Tk framework checking when using OS X SDKs.
+
+..
+
+.. bpo: 16256
+.. date: 8695
+.. nonce: vrx66r
+.. section: Build
+
+OS X installer now sets correct permissions for doc directory.
+
+..
+
+.. bpo: 8767
+.. date: 8694
+.. nonce: swHbgQ
+.. section: Build
+
+Restore building with --disable-unicode. Patch by Stefano Taschini.
+
+..
+
+.. bpo: 0
+.. date: 8693
+.. nonce: wZLzuy
+.. section: Build
+
+Build against bzip2 1.0.6 and openssl 0.9.8x on Windows.
+
+..
+
+.. bpo: 14557
+.. date: 8692
+.. nonce: UCbIq7
+.. section: Build
+
+Fix extensions build on HP-UX. Patch by Adi Roiban.
+
+..
+
+.. bpo: 14437
+.. date: 8691
+.. nonce: 61tmQt
+.. section: Build
+
+Fix building the _io module under Cygwin.
+
+..
+
+.. bpo: 15587
+.. date: 8690
+.. nonce: gR7vei
+.. section: Build
+
+Enable Tk high-resolution text rendering on Macs with Retina displays.
+Applies to Tkinter apps, such as IDLE, on OS X framework builds linked with
+Cocoa Tk 8.5.
+
+..
+
+.. bpo: 17161
+.. date: 8689
+.. nonce: 8Qr4fl
+.. section: Build
+
+make install now also installs a python2 and python man page.
+
+..
+
+.. bpo: 16848
+.. date: 8688
+.. nonce: CtyvVC
+.. section: Build
+
+python-config now returns proper --ldflags values for OS X framework builds.
+
+..
+
+.. bpo: 17156
+.. date: 8687
+.. nonce: iaFJiz
+.. section: Tools/Demos
+
+pygettext.py now correctly escapes non-ascii characters.
+
+..
+
+.. bpo: 15539
+.. date: 8686
+.. nonce: 6bqqV-
+.. section: Tools/Demos
+
+Fix a number of bugs in Tools/scripts/pindent.py.  Now pindent.py works with
+a "with" statement.  pindent.py no longer produces improper indentation.
+pindent.py now works with continued lines broken after "class" or "def"
+keywords and with continuations at the start of line.
+
+..
+
+.. bpo: 16476
+.. date: 8685
+.. nonce: xAomrd
+.. section: Tools/Demos
+
+Fix json.tool to avoid including trailing whitespace.
+
+..
+
+.. bpo: 13301
+.. date: 8684
+.. nonce: A4WOk5
+.. section: Tools/Demos
+
+use ast.literal_eval() instead of eval() in Tools/i18n/msgfmt.py. Patch by
+Serhiy Storchaka.
+
+..
+
+.. bpo: 15041
+.. date: 8683
+.. nonce: nMyhwF
+.. section: Documentation
+
+Update "see also" list in tkinter documentation.
+
+..
+
+.. bpo: 17412
+.. date: 8682
+.. nonce: 9xIwEh
+.. section: Documentation
+
+update 2.7 Doc/make.bat to also use sphinx-1.0.7.
+
+..
+
+.. bpo: 17047
+.. date: 8681
+.. nonce: sVzpby
+.. section: Documentation
+
+remove doubled words in docs and docstrings reported by Serhiy Storchaka and
+Matthew Barnett.
+
+..
+
+.. bpo: 16406
+.. date: 8680
+.. nonce: _Z8alE
+.. section: Documentation
+
+combine the pages for uploading and registering to PyPI.
+
+..
+
+.. bpo: 16403
+.. date: 8679
+.. nonce: wPuYgA
+.. section: Documentation
+
+Document how distutils uses the maintainer field in PKG-INFO. Patch by Jyrki
+Pulliainen.
+
+..
+
+.. bpo: 16695
+.. date: 8678
+.. nonce: O3-q4k
+.. section: Documentation
+
+Document how glob handles filenames starting with a dot. Initial patch by
+Jyrki Pulliainen.
+
+..
+
+.. bpo: 8890
+.. date: 8677
+.. nonce: ldKgWT
+.. section: Documentation
+
+Stop advertising an insecure practice by replacing uses of the /tmp
+directory with better alternatives in the documentation. Patch by Geoff
+Wilson.
+
+..
+
+.. bpo: 17203
+.. date: 8676
+.. nonce: b42JWx
+.. section: Documentation
+
+add long option names to unittest discovery docs.
+
+..
+
+.. bpo: 13094
+.. date: 8675
+.. nonce: ujdNxz
+.. section: Documentation
+
+add "Why do lambdas defined in a loop with different values all return the
+same result?" programming FAQ.
+
+..
+
+.. bpo: 14901
+.. date: 8674
+.. nonce: o_thZo
+.. section: Documentation
+
+Update portions of the Windows FAQ. Patch by Ashish Nitin Patil.
+
+..
+
+.. bpo: 15990
+.. date: 8673
+.. nonce: 41C5_M
+.. section: Documentation
+
+Improve argument/parameter documentation.
+
+..
+
+.. bpo: 16400
+.. date: 8672
+.. nonce: kDLZRV
+.. section: Documentation
+
+Update the description of which versions of a given package PyPI displays.
+
+..
+
+.. bpo: 15677
+.. date: 8671
+.. nonce: _0vY-h
+.. section: Documentation
+
+Document that zlib and gzip accept a compression level of 0 to mean 'no
+compression'. Patch by Brian Brazil.
+
+..
+
+.. bpo: 8040
+.. date: 8670
+.. nonce: R8VAys
+.. section: Documentation
+
+added a version switcher to the documentation.  Patch by Yury Selivanov.
+
+..
+
+.. bpo: 16115
+.. date: 8669
+.. nonce: Ba1MH_
+.. section: Documentation
+
+Improve subprocess.Popen() documentation around args, shell, and executable
+arguments.
+
+..
+
+.. bpo: 15979
+.. date: 8668
+.. nonce: UATtRZ
+.. section: Documentation
+
+Improve timeit documentation.
+
+..
+
+.. bpo: 16036
+.. date: 8667
+.. nonce: AGR4Am
+.. section: Documentation
+
+Improve documentation of built-in int()'s signature and arguments.
+
+..
+
+.. bpo: 15935
+.. date: 8666
+.. nonce: Ik7Y0z
+.. section: Documentation
+
+Clarification of argparse docs, re: add_argument() type and default
+arguments.  Patch contributed by Chris Jerdonek.
+
+..
+
+.. bpo: 13769
+.. date: 8665
+.. nonce: TfRtQT
+.. section: Documentation
+
+Document the effect of ensure_ascii to the return type of JSON decoding
+functions.
+
+..
+
+.. bpo: 14880
+.. date: 8664
+.. nonce: bfazFx
+.. section: Documentation
+
+Fix kwargs notation in csv.reader, .writer & .register_dialect. Patch by
+Chris Rebert.
+
+..
+
+.. bpo: 14674
+.. date: 8663
+.. nonce: AMOJT_
+.. section: Documentation
+
+Add a discussion of the json module's standard compliance. Patch by Chris
+Rebert.
+
+..
+
+.. bpo: 15630
+.. date: 8662
+.. nonce: ijhqyT
+.. section: Documentation
+
+Add an example for "continue" stmt in the tutorial. Patch by Daniel Ellis.
+
+..
+
+.. bpo: 13557
+.. date: 8661
+.. nonce: IHzHRn
+.. section: Documentation
+
+Clarify effect of giving two different namespaces to exec or execfile().
+
+..
+
+.. bpo: 14034
+.. date: 8660
+.. nonce: 34GDTv
+.. section: Documentation
+
+added the argparse tutorial.
+
+..
+
+.. bpo: 15250
+.. date: 8659
+.. nonce: vLLPGK
+.. section: Documentation
+
+Document that filecmp.dircmp compares files shallowly. Patch contributed by
+Chris Jerdonek.
+
+..
+
+.. bpo: 15116
+.. date: 8658
+.. nonce: uDQI_8
+.. section: Documentation
+
+Remove references to appscript as it is no longer being supported.
diff --git a/Misc/NEWS.d/2.7.5.rst b/Misc/NEWS.d/2.7.5.rst
new file mode 100644
index 0000000..9cd483e
--- /dev/null
+++ b/Misc/NEWS.d/2.7.5.rst
@@ -0,0 +1,510 @@
+.. bpo: 15535
+.. date: 9067
+.. nonce: UcBEvl
+.. release date: 2013-05-12
+.. section: Core and Builtins
+
+Fixed regression in the pickling of named tuples by removing the __dict__
+property introduced in 2.7.4.
+
+..
+
+.. bpo: 17857
+.. date: 9066
+.. nonce: 7cCKDk
+.. section: Core and Builtins
+
+Prevent build failures with pre-3.5.0 versions of sqlite3, such as was
+shipped with Centos 5 and Mac OS X 10.4.
+
+..
+
+.. bpo: 17703
+.. date: 9065
+.. nonce: eLf2tu
+.. section: Core and Builtins
+
+Fix a regression where an illegal use of Py_DECREF() after interpreter
+finalization can cause a crash.
+
+..
+
+.. bpo: 16447
+.. date: 9064
+.. nonce: Nqypja
+.. section: Core and Builtins
+
+Fixed potential segmentation fault when setting __name__ on a class.
+
+..
+
+.. bpo: 17610
+.. date: 9063
+.. nonce: QpIzEB
+.. section: Core and Builtins
+
+Don't rely on non-standard behavior of the C qsort() function.
+
+..
+
+.. bpo: 17979
+.. date: 9062
+.. nonce: l6BtNx
+.. section: Library
+
+Fixed the re module in build with --disable-unicode.
+
+..
+
+.. bpo: 17606
+.. date: 9061
+.. nonce: yNd47F
+.. section: Library
+
+Fixed support of encoded byte strings in the XMLGenerator .characters() and
+ignorableWhitespace() methods.  Original patch by Sebastian Ortiz Vasquez.
+
+..
+
+.. bpo: 16601
+.. date: 9060
+.. nonce: _FiBrB
+.. section: Library
+
+Restarting iteration over tarfile no more continues from where it left off.
+Patch by Michael Birtwell.
+
+..
+
+.. bpo: 16584
+.. date: 9059
+.. nonce: 6yyCuX
+.. section: Library
+
+in filecomp._cmp, catch IOError as well as os.error. Patch by Till Maas.
+
+..
+
+.. bpo: 17926
+.. date: 9058
+.. nonce: nv5fLf
+.. section: Library
+
+Fix dbm.__contains__ on 64-bit big-endian machines.
+
+..
+
+.. bpo: 19267
+.. date: 9057
+.. nonce: SXv-Bh
+.. section: Library
+
+Fix support of multibyte encoding (ex: UTF-16) in the logging module.
+
+..
+
+.. bpo: 17918
+.. date: 9056
+.. nonce: qtEN-L
+.. section: Library
+
+When using SSLSocket.accept(), if the SSL handshake failed on the new
+socket, the socket would linger indefinitely.  Thanks to Peter Saveliev for
+reporting.
+
+..
+
+.. bpo: 17289
+.. date: 9055
+.. nonce: NPHOks
+.. section: Library
+
+The readline module now plays nicer with external modules or applications
+changing the rl_completer_word_break_characters global variable.  Initial
+patch by Bradley Froehle.
+
+..
+
+.. bpo: 12181
+.. date: 9054
+.. nonce: Dq2moC
+.. section: Library
+
+select module: Fix struct kevent definition on OpenBSD 64-bit platforms.
+Patch by Federico Schwindt.
+
+..
+
+.. bpo: 14173
+.. date: 9053
+.. nonce: mZM9Pr
+.. section: Library
+
+Avoid crashing when reading a signal handler during interpreter shutdown.
+
+..
+
+.. bpo: 16316
+.. date: 9052
+.. nonce: AOkxPd
+.. section: Library
+
+mimetypes now recognizes the .xz and .txz (.tar.xz) extensions.
+
+..
+
+.. bpo: 17192
+.. date: 9051
+.. nonce: F-vIFl
+.. section: Library
+
+Restore the patch for Issue #10309 which was ommitted in 2.7.4 when updating
+the bundled version of libffi used by ctypes.
+
+..
+
+.. bpo: 17843
+.. date: 9050
+.. nonce: 9IBe9A
+.. section: Library
+
+Removed test data file that was triggering false-positive virus warnings
+with certain antivirus software.
+
+..
+
+.. bpo: 17353
+.. date: 9049
+.. nonce: 6Wiqfl
+.. section: Library
+
+Plistlib emitted empty data tags with deeply nested datastructures
+
+..
+
+.. bpo: 11714
+.. date: 9048
+.. nonce: EZxzYl
+.. section: Library
+
+Use 'with' statements to assure a Semaphore releases a condition variable.
+Original patch by Thomas Rachel.
+
+..
+
+.. bpo: 17795
+.. date: 9047
+.. nonce: IgVwMv
+.. section: Library
+
+Reverted backwards-incompatible change in SysLogHandler with Unix domain
+sockets.
+
+..
+
+.. bpo: 17555
+.. date: 9046
+.. nonce: 9klJCB
+.. section: Library
+
+Fix ForkAwareThreadLock so that size of after fork registry does not grow
+exponentially with generation of process.
+
+..
+
+.. bpo: 17710
+.. date: 9045
+.. nonce: p-amHh
+.. section: Library
+
+Fix cPickle raising a SystemError on bogus input.
+
+..
+
+.. bpo: 17341
+.. date: 9044
+.. nonce: DI-1AO
+.. section: Library
+
+Include the invalid name in the error messages from re about invalid group
+names.
+
+..
+
+.. bpo: 17016
+.. date: 9043
+.. nonce: lQnMI8
+.. section: Library
+
+Get rid of possible pointer wraparounds and integer overflows in the re
+module.  Patch by Nickolai Zeldovich.
+
+..
+
+.. bpo: 17536
+.. date: 9042
+.. nonce: E6rcrn
+.. section: Library
+
+Add to webbrowser's browser list: xdg-open, gvfs-open, www-browser,
+x-www-browser, chromium browsers, iceweasel, iceape.
+
+..
+
+.. bpo: 17656
+.. date: 9041
+.. nonce: wtQq2x
+.. section: Library
+
+Fix extraction of zip files with unicode member paths.
+
+..
+
+.. bpo: 17666
+.. date: 9040
+.. nonce: L8Gq8u
+.. section: Library
+
+Fix reading gzip files with an extra field.
+
+..
+
+.. bpo: 13150
+.. date: 9039
+.. nonce: fW-wYi
+.. section: Library
+
+sysconfig no longer parses the Makefile and config.h files when imported,
+instead doing it at build time.  This makes importing sysconfig faster and
+reduces Python startup time by 20%. (See also: bpo-17512)
+
+..
+
+.. bpo: 13163
+.. date: 9038
+.. nonce: oHSKa5
+.. section: Library
+
+Rename operands in smtplib.SMTP._get_socket to correct names; fixes
+otherwise misleading output in tracebacks and when when debug is on.
+
+..
+
+.. bpo: 17526
+.. date: 9037
+.. nonce: wiYvlk
+.. section: Library
+
+fix an IndexError raised while passing code without filename to
+inspect.findsource().  Initial patch by Tyler Doyle.
+
+..
+
+.. bpo: 17547
+.. date: 9036
+.. nonce: yVllRd
+.. section: Build
+
+In configure, explicitly pass -Wformat for the benefit for GCC 4.8.
+
+..
+
+.. bpo: 17682
+.. date: 9035
+.. nonce: UJyp1a
+.. section: Build
+
+Add the _io module to Modules/Setup.dist (commented out).
+
+..
+
+.. bpo: 17086
+.. date: 9034
+.. nonce: PPxAFs
+.. section: Build
+
+Search the include and library directories provided by the compiler.
+
+..
+
+.. bpo: 17928
+.. date: 9033
+.. nonce: y6tiT2
+.. section: Tests
+
+Fix test_structmembers on 64-bit big-endian machines.
+
+..
+
+.. bpo: 17883
+.. date: 9032
+.. nonce: SrO_uE
+.. section: Tests
+
+Fix buildbot testing of Tkinter on Windows. Patch by Zachary Ware.
+
+..
+
+.. bpo: 7855
+.. date: 9031
+.. nonce: ZbX91d
+.. section: Tests
+
+Add tests for ctypes/winreg for issues found in IronPython. Initial patch by
+Dino Viehland.
+
+..
+
+.. bpo: 17712
+.. date: 9030
+.. nonce: RqkHUB
+.. section: Tests
+
+Fix test_gdb failures on Ubuntu 13.04.
+
+..
+
+.. bpo: 17065
+.. date: 9029
+.. nonce: rql8lF
+.. section: Tests
+
+Use process-unique key for winreg tests to avoid failures if test is run
+multiple times in parallel (eg: on a buildbot host).
+
+..
+
+.. bpo: 17838
+.. date: 9028
+.. nonce: -DDdhT
+.. section: IDLE
+
+Allow sys.stdin to be reassigned.
+
+..
+
+.. bpo: 14735
+.. date: 9027
+.. nonce: lbbw49
+.. section: IDLE
+
+Update IDLE docs to omit "Control-z on Windows".
+
+..
+
+.. bpo: 17585
+.. date: 9026
+.. nonce: oXlcVX
+.. section: IDLE
+
+Fixed IDLE regression. Now closes when using exit() or quit().
+
+..
+
+.. bpo: 17657
+.. date: 9025
+.. nonce: rGfxNo
+.. section: IDLE
+
+Show full Tk version in IDLE's about dialog. Patch by Todd Rovito.
+
+..
+
+.. bpo: 17613
+.. date: 9024
+.. nonce: MfAJ31
+.. section: IDLE
+
+Prevent traceback when removing syntax colorizer in IDLE.
+
+..
+
+.. bpo: 1207589
+.. date: 9023
+.. nonce: wqzkjh
+.. section: IDLE
+
+Backwards-compatibility patch for right-click menu in IDLE.
+
+..
+
+.. bpo: 16887
+.. date: 9022
+.. nonce: -tb-0g
+.. section: IDLE
+
+IDLE now accepts Cancel in tabify/untabify dialog box.
+
+..
+
+.. bpo: 14254
+.. date: 9021
+.. nonce: heeMG-
+.. section: IDLE
+
+IDLE now handles readline correctly across shell restarts.
+
+..
+
+.. bpo: 17614
+.. date: 9020
+.. nonce: 9pmpYW
+.. section: IDLE
+
+IDLE no longer raises exception when quickly closing a file.
+
+..
+
+.. bpo: 6698
+.. date: 9019
+.. nonce: fXoiv2
+.. section: IDLE
+
+IDLE now opens just an editor window when configured to do so.
+
+..
+
+.. bpo: 8900
+.. date: 9018
+.. nonce: jkW99r
+.. section: IDLE
+
+Using keyboard shortcuts in IDLE to open a file no longer raises an
+exception.
+
+..
+
+.. bpo: 6649
+.. date: 9017
+.. nonce: uwGice
+.. section: IDLE
+
+Fixed missing exit status in IDLE. Patch by Guilherme Polo.
+
+..
+
+.. bpo: 17390
+.. date: 9016
+.. nonce: o3w4vc
+.. section: IDLE
+
+Display Python version on Idle title bar. Initial patch by Edmond Burnett.
+
+..
+
+.. bpo: 15940
+.. date: 9015
+.. nonce: XL62xu
+.. section: Documentation
+
+Specify effect of locale on time functions.
+
+..
+
+.. bpo: 6696
+.. date: 9014
+.. nonce: -aRVrf
+.. section: Documentation
+
+add documentation for the Profile objects, and improve profile/cProfile
+docs.  Patch by Tom Pinckney.
diff --git a/Misc/NEWS.d/2.7.6.rst b/Misc/NEWS.d/2.7.6.rst
new file mode 100644
index 0000000..51ab9bc
--- /dev/null
+++ b/Misc/NEWS.d/2.7.6.rst
@@ -0,0 +1,37 @@
+.. bpo: 19435
+.. date: 9186
+.. nonce: kXqMz3
+.. release date: 2013-11-10
+.. section: Library
+
+Fix directory traversal attack on CGIHttpRequestHandler.
+
+..
+
+.. bpo: 19426
+.. date: 9185
+.. nonce: PwatP7
+.. section: IDLE
+
+Fixed the opening of Python source file with specified encoding.
+
+..
+
+.. bpo: 19457
+.. date: 9184
+.. nonce: HGwEFx
+.. section: Tests
+
+Fixed xmlcharrefreplace tests on wide build when tests are loaded from
+.py[co] files.
+
+..
+
+.. bpo: 15663
+.. date: 9183
+.. nonce: p-vVTG
+.. section: Build
+
+Revert OS X installer built-in Tcl/Tk support for 2.7.6. Some third-party
+projects, such as Matplotlib and PIL/Pillow, depended on being able to build
+with Tcl and Tk frameworks in /Library/Frameworks.
diff --git a/Misc/NEWS.d/2.7.6rc1.rst b/Misc/NEWS.d/2.7.6rc1.rst
new file mode 100644
index 0000000..32ee2e6
--- /dev/null
+++ b/Misc/NEWS.d/2.7.6rc1.rst
@@ -0,0 +1,1130 @@
+.. bpo: 18603
+.. date: 9182
+.. nonce: 7SMyAQ
+.. release date: 2013-10-26
+.. section: Core and Builtins
+
+Ensure that PyOS_mystricmp and PyOS_mystrnicmp are in the Python executable
+and not removed by the linker's optimizer.
+
+..
+
+.. bpo: 19279
+.. date: 9181
+.. nonce: bXi_a1
+.. section: Core and Builtins
+
+UTF-7 decoder no more produces illegal unicode strings.
+
+..
+
+.. bpo: 18739
+.. date: 9180
+.. nonce: ZUuspY
+.. section: Core and Builtins
+
+Fix an inconsistency between math.log(n) and math.log(long(n)); the results
+could be off from one another by a ulp or two.
+
+..
+
+.. bpo: 13461
+.. date: 9179
+.. nonce: ExV3tX
+.. section: Core and Builtins
+
+Fix a crash in the "replace" error handler on 64-bit platforms. Patch by
+Yogesh Chaudhari.
+
+..
+
+.. bpo: 15866
+.. date: 9178
+.. nonce: meZHE-
+.. section: Core and Builtins
+
+The xmlcharrefreplace error handler no more produces two XML entities for a
+non-BMP character on narrow build.
+
+..
+
+.. bpo: 18184
+.. date: 9177
+.. nonce: xLNVG3
+.. section: Core and Builtins
+
+PyUnicode_FromFormat() and PyUnicode_FromFormatV() now raise OverflowError
+when an argument of %c format is out of range.
+
+..
+
+.. bpo: 18137
+.. date: 9176
+.. nonce: a_Vsor
+.. section: Core and Builtins
+
+Detect integer overflow on precision in float.__format__() and
+complex.__format__().
+
+..
+
+.. bpo: 18038
+.. date: 9175
+.. nonce: Q8prhd
+.. section: Core and Builtins
+
+SyntaxError raised during compilation sources with illegal encoding now
+always contains an encoding name.
+
+..
+
+.. bpo: 18019
+.. date: 9174
+.. nonce: HdAInl
+.. section: Core and Builtins
+
+Fix crash in the repr of dictionaries containing their own views.
+
+..
+
+.. bpo: 18427
+.. date: 9173
+.. nonce: XEBN6L
+.. section: Core and Builtins
+
+str.replace could crash the interpreter with huge strings.
+
+..
+
+.. bpo: 19393
+.. date: 9172
+.. nonce: ytbAwl
+.. section: Library
+
+Fix symtable.symtable function to not be confused when there are functions
+or classes named "top".
+
+..
+
+.. bpo: 19327
+.. date: 9171
+.. nonce: S7Xvxs
+.. section: Library
+
+Fixed the working of regular expressions with too big charset.
+
+..
+
+.. bpo: 19350
+.. date: 9170
+.. nonce: MCCKjK
+.. section: Library
+
+Increasing the test coverage of macurl2path. Patch by Colin Williams.
+
+..
+
+.. bpo: 19352
+.. date: 9169
+.. nonce: 3TfAkY
+.. section: Library
+
+Fix unittest discovery when a module can be reached through several paths
+(e.g. under Debian/Ubuntu with virtualenv).
+
+..
+
+.. bpo: 15207
+.. date: 9168
+.. nonce: piOBBi
+.. section: Library
+
+Fix mimetypes to read from correct part of Windows registry Original patch
+by Dave Chambers
+
+..
+
+.. bpo: 8964
+.. date: 9167
+.. nonce: dzU2FB
+.. section: Library
+
+fix platform._sys_version to handle IronPython 2.6+. Patch by Martin
+Matusiak.
+
+..
+
+.. bpo: 16038
+.. date: 9166
+.. nonce: TZGbSo
+.. section: Library
+
+CVE-2013-1752: ftplib: Limit amount of data read by limiting the call to
+readline().  Original patch by Michał Jastrzębski and Giampaolo Rodola.
+
+..
+
+.. bpo: 19276
+.. date: 9165
+.. nonce: Y69Qmv
+.. section: Library
+
+Fixed the wave module on 64-bit big-endian platforms.
+
+..
+
+.. bpo: 18458
+.. date: 9164
+.. nonce: 6Bs0gr
+.. section: Library
+
+Prevent crashes with newer versions of libedit.  Its readline emulation has
+changed from 0-based indexing to 1-based like gnu readline. Original patch
+by Ronald Oussoren.
+
+..
+
+.. bpo: 18919
+.. date: 9163
+.. nonce: rIO3MQ
+.. section: Library
+
+If the close() method of a writer in the sunau or wave module failed, second
+invocation of close() and destructor no more raise an exception.  Second
+invocation of close() on sunau writer now has no effects. The aifc module
+now accepts lower case of names of the 'ulaw' and 'alaw' codecs.
+
+..
+
+.. bpo: 19131
+.. date: 9162
+.. nonce: eZXzpr
+.. section: Library
+
+The aifc module now correctly reads and writes sampwidth of compressed
+streams.
+
+..
+
+.. bpo: 19158
+.. date: 9161
+.. nonce: GvkZuU
+.. section: Library
+
+A rare race in BoundedSemaphore could allow .release() too often.
+
+..
+
+.. bpo: 18037
+.. date: 9160
+.. nonce: pmZRS7
+.. section: Library
+
+2to3 now escapes '\u' and '\U' in native strings.
+
+..
+
+.. bpo: 19137
+.. date: 9159
+.. nonce: kdJchn
+.. section: Library
+
+The pprint module now correctly formats empty set and frozenset and
+instances of set and frozenset subclasses.
+
+..
+
+.. bpo: 16040
+.. date: 9158
+.. nonce: xg3xlX
+.. section: Library
+
+CVE-2013-1752: nntplib: Limit maximum line lengths to 2048 to prevent
+readline() calls from consuming too much memory.  Patch by Jyrki Pulliainen.
+
+..
+
+.. bpo: 12641
+.. date: 9157
+.. nonce: r9sIyX
+.. section: Library
+
+Avoid passing "-mno-cygwin" to the mingw32 compiler, except when necessary.
+Patch by Oscar Benjamin.
+
+..
+
+.. bpo: 0
+.. date: 9156
+.. nonce: 08TsG5
+.. section: Library
+
+Properly initialize all fields of a SSL object after allocation.
+
+..
+
+.. bpo: 4366
+.. date: 9155
+.. nonce: lDEdfK
+.. section: Library
+
+Fix building extensions on all platforms when --enable-shared is used.
+
+..
+
+.. bpo: 18950
+.. date: 9154
+.. nonce: AoZ5GZ
+.. section: Library
+
+Fix miscellaneous bugs in the sunau module. Au_read.readframes() now updates
+current file position and reads correct number of frames from multichannel
+stream.  Au_write.writeframesraw() now correctly updates current file
+position.  Au_read and Au_write now correctly work with file object if start
+file position is not a zero.
+
+..
+
+.. bpo: 18050
+.. date: 9153
+.. nonce: LUKrBT
+.. section: Library
+
+Fixed an incompatibility of the re module with Python 2.7.3 and older
+binaries.
+
+..
+
+.. bpo: 19037
+.. date: 9152
+.. nonce: OfBhoU
+.. section: Library
+
+The mailbox module now makes all changes to maildir files before moving them
+into place, to avoid race conditions with other programs that may be
+accessing the maildir directory.
+
+..
+
+.. bpo: 14984
+.. date: 9151
+.. nonce: iRbFp4
+.. section: Library
+
+On POSIX systems, when netrc is called without a filename argument (and
+therefore is reading the user's $HOME/.netrc file), it now enforces the same
+security rules as typical ftp clients: the .netrc file must be owned by the
+user that owns the process and must not be readable by any other user.
+
+..
+
+.. bpo: 17324
+.. date: 9150
+.. nonce: 0PkOTi
+.. section: Library
+
+Fix http.server's request handling case on trailing '/'. Patch contributed
+by Vajrasky Kok.
+
+..
+
+.. bpo: 19018
+.. date: 9149
+.. nonce: mntKOW
+.. section: Library
+
+The heapq.merge() function no longer suppresses IndexError in the underlying
+iterables.
+
+..
+
+.. bpo: 18784
+.. date: 9148
+.. nonce: ocU3GG
+.. section: Library
+
+The uuid module no more attempts to load libc via ctypes.CDLL, if all
+necessary functions are already found in libuuid. Patch by Evgeny Sologubov.
+
+..
+
+.. bpo: 14971
+.. date: 9147
+.. nonce: cc8xNA
+.. section: Library
+
+unittest test discovery no longer gets confused when a function has a
+different __name__ than its name in the TestCase class dictionary.
+
+..
+
+.. bpo: 18672
+.. date: 9146
+.. nonce: CIblDh
+.. section: Library
+
+Fixed format specifiers for Py_ssize_t in debugging output in the _sre
+module.
+
+..
+
+.. bpo: 18830
+.. date: 9145
+.. nonce: Uzi-Y4
+.. section: Library
+
+inspect.getclasstree() no more produces duplicated entries even when input
+list contains duplicates.
+
+..
+
+.. bpo: 18909
+.. date: 9144
+.. nonce: XSu98N
+.. section: Library
+
+Fix _tkinter.tkapp.interpaddr() on Windows 64-bit, don't cast 64-bit pointer
+to long (32 bits).
+
+..
+
+.. bpo: 18876
+.. date: 9143
+.. nonce: 30Ist9
+.. section: Library
+
+The FileIO.mode attribute now better reflects the actual mode under which
+the file was opened.  Patch by Erik Bray.
+
+..
+
+.. bpo: 18851
+.. date: 9142
+.. nonce: -YsF6X
+.. section: Library
+
+Avoid a double close of subprocess pipes when the child process fails
+starting.
+
+..
+
+.. bpo: 18418
+.. date: 9141
+.. nonce: _SFG8w
+.. section: Library
+
+After fork(), reinit all threads states, not only active ones. Patch by A.
+Jesse Jiryu Davis.
+
+..
+
+.. bpo: 11973
+.. date: 9140
+.. nonce: uPtBvG
+.. section: Library
+
+Fix a problem in kevent. The flags and fflags fields are now properly
+handled as unsigned.
+
+..
+
+.. bpo: 16809
+.. date: 9139
+.. nonce: TF5mD7
+.. section: Library
+
+Fixed some tkinter incompatibilities with Tcl/Tk 8.6.
+
+..
+
+.. bpo: 16809
+.. date: 9138
+.. nonce: WqSHdP
+.. section: Library
+
+Tkinter's splitlist() and split() methods now accept Tcl_Obj argument.
+
+..
+
+.. bpo: 17119
+.. date: 9137
+.. nonce: sfp47f
+.. section: Library
+
+Fixed integer overflows when processing large Unicode strings and tuples in
+the tkinter module.
+
+..
+
+.. bpo: 15233
+.. date: 9136
+.. nonce: 8YQW0-
+.. section: Library
+
+Python now guarantees that callables registered with the atexit module will
+be called in a deterministic order.
+
+..
+
+.. bpo: 18747
+.. date: 9135
+.. nonce: tPZkbG
+.. section: Library
+
+Re-seed OpenSSL's pseudo-random number generator after fork. A
+pthread_atfork() parent handler is used to seed the PRNG with pid, time and
+some stack data.
+
+..
+
+.. bpo: 8865
+.. date: 9134
+.. nonce: cKBSJh
+.. section: Library
+
+Concurrent invocation of select.poll.poll() now raises a RuntimeError
+exception.  Patch by Christian Schubert.
+
+..
+
+.. bpo: 13461
+.. date: 9133
+.. nonce: nLeS2R
+.. section: Library
+
+Fix a crash in the TextIOWrapper.tell method on 64-bit platforms.  Patch by
+Yogesh Chaudhari.
+
+..
+
+.. bpo: 18777
+.. date: 9132
+.. nonce: VLsjOw
+.. section: Library
+
+The ssl module now uses the new CRYPTO_THREADID API of OpenSSL 1.0.0+
+instead of the deprecated CRYPTO id callback function.
+
+..
+
+.. bpo: 18768
+.. date: 9131
+.. nonce: r3TSCo
+.. section: Library
+
+Correct doc string of RAND_edg(). Patch by Vajrasky Kok.
+
+..
+
+.. bpo: 18178
+.. date: 9130
+.. nonce: i4hnf-
+.. section: Library
+
+Fix ctypes on BSD. dlmalloc.c was compiled twice which broke malloc weak
+symbols.
+
+..
+
+.. bpo: 18709
+.. date: 9129
+.. nonce: DWzpRe
+.. section: Library
+
+Fix CVE-2013-4238. The SSL module now handles NULL bytes inside
+subjectAltName correctly. Formerly the module has used OpenSSL's
+GENERAL_NAME_print() function to get the string representation of ASN.1
+strings for ``rfc822Name`` (email), ``dNSName`` (DNS) and
+``uniformResourceIdentifier`` (URI).
+
+..
+
+.. bpo: 18756
+.. date: 9128
+.. nonce: moRUfX
+.. section: Library
+
+Improve error reporting in os.urandom() when the failure is due to something
+else than /dev/urandom not existing (for example, exhausting the file
+descriptor limit).
+
+..
+
+.. bpo: 0
+.. date: 9127
+.. nonce: b9GShY
+.. section: Library
+
+Fix tkinter regression introduced by the security fix in issue #16248.
+
+..
+
+.. bpo: 18676
+.. date: 9126
+.. nonce: WAq1iB
+.. section: Library
+
+Change 'positive' to 'non-negative' in queue.py put and get docstrings and
+ValueError messages. Patch by Zhongyue Luo
+
+..
+
+.. bpo: 17998
+.. date: 9125
+.. nonce: hIbru5
+.. section: Library
+
+Fix an internal error in regular expression engine.
+
+..
+
+.. bpo: 17557
+.. date: 9124
+.. nonce: s6BEMI
+.. section: Library
+
+Fix os.getgroups() to work with the modified behavior of getgroups(2) on OS
+X 10.8.  Original patch by Mateusz Lenik.
+
+..
+
+.. bpo: 18455
+.. date: 9123
+.. nonce: t1b0R_
+.. section: Library
+
+multiprocessing should not retry connect() with same socket.
+
+..
+
+.. bpo: 18513
+.. date: 9122
+.. nonce: 12JUZi
+.. section: Library
+
+Fix behaviour of cmath.rect w.r.t. signed zeros on OS X 10.8 + gcc.
+
+..
+
+.. bpo: 18101
+.. date: 9121
+.. nonce: hWfUNM
+.. section: Library
+
+Tcl.split() now process Unicode strings nested in a tuple as it do with byte
+strings.
+
+..
+
+.. bpo: 18347
+.. date: 9120
+.. nonce: r98Yh-
+.. section: Library
+
+ElementTree's html serializer now preserves the case of closing tags.
+
+..
+
+.. bpo: 17261
+.. date: 9119
+.. nonce: FBzLVh
+.. section: Library
+
+Ensure multiprocessing's proxies use proper address.
+
+..
+
+.. bpo: 17097
+.. date: 9118
+.. nonce: npje1S
+.. section: Library
+
+Make multiprocessing ignore EINTR.
+
+..
+
+.. bpo: 18155
+.. date: 9117
+.. nonce: P-O3wv
+.. section: Library
+
+The csv module now correctly handles csv files that use a delimiter
+character that has a special meaning in regexes, instead of throwing an
+exception.
+
+..
+
+.. bpo: 18135
+.. date: 9116
+.. nonce: AYPE8L
+.. section: Library
+
+ssl.SSLSocket.write() now raises an OverflowError if the input string in
+longer than 2 gigabytes. The ssl module does not support partial write.
+
+..
+
+.. bpo: 18167
+.. date: 9115
+.. nonce: CE6ZMO
+.. section: Library
+
+cgi.FieldStorage no longer fails to handle multipart/form-data when \r\n
+appears at end of 65535 bytes without other newlines.
+
+..
+
+.. bpo: 17403
+.. date: 9114
+.. nonce: gtIhUd
+.. section: Library
+
+urllib.parse.robotparser normalizes the urls before adding to ruleline. This
+helps in handling certain types invalid urls in a conservative manner. Patch
+contributed by Mher Movsisyan.
+
+..
+
+.. bpo: 0
+.. date: 9113
+.. nonce: jM5EPF
+.. section: Library
+
+Implement inequality on weakref.WeakSet.
+
+..
+
+.. bpo: 17981
+.. date: 9112
+.. nonce: kIczv7
+.. section: Library
+
+Closed socket on error in SysLogHandler.
+
+..
+
+.. bpo: 18015
+.. date: 9111
+.. nonce: 85_YuN
+.. section: Library
+
+Fix unpickling of 2.7.3 and 2.7.4 namedtuples.
+
+..
+
+.. bpo: 17754
+.. date: 9110
+.. nonce: xa6Bc3
+.. section: Library
+
+Make ctypes.util.find_library() independent of the locale.
+
+..
+
+.. bpo: 0
+.. date: 9109
+.. nonce: 9OGCJH
+.. section: Library
+
+Fix typos in the multiprocessing module.
+
+..
+
+.. bpo: 17269
+.. date: 9108
+.. nonce: 7LxyKz
+.. section: Library
+
+Workaround for socket.getaddrinfo crash on MacOS X with port None or "0" and
+flags AI_NUMERICSERV.
+
+..
+
+.. bpo: 18080
+.. date: 9107
+.. nonce: 8bMdE3
+.. section: Library
+
+When building a C extension module on OS X, if the compiler is overridden
+with the CC environment variable, use the new compiler as the default for
+linking if LDSHARED is not also overridden.  This restores Distutils
+behavior introduced in 2.7.3 and inadvertently dropped in 2.7.4.
+
+..
+
+.. bpo: 18071
+.. date: 9106
+.. nonce: 2FwU0S
+.. section: Library
+
+C extension module builds on OS X could fail with TypeError if the Xcode
+command line tools were not installed.
+
+..
+
+.. bpo: 18113
+.. date: 9105
+.. nonce: 7w81KJ
+.. section: Library
+
+Fixed a refcount leak in the curses.panel module's set_userptr() method.
+Reported by Atsuo Ishimoto.
+
+..
+
+.. bpo: 18849
+.. date: 9104
+.. nonce: Q0kF0R
+.. section: Library
+
+Fixed a Windows-specific tempfile bug where collision with an existing
+directory caused mkstemp and related APIs to fail instead of retrying.
+Report and fix by Vlad Shcherbina.
+
+..
+
+.. bpo: 19400
+.. date: 9103
+.. nonce: QAqpk5
+.. section: Library
+
+Prevent extension module build failures with Xcode 5 on OS X 10.8+ when
+using a universal Python that included a PPC architecture, such as with a
+python.org 32-bit-only binary installer.
+
+..
+
+.. bpo: 18873
+.. date: 9102
+.. nonce: i_1Tf_
+.. section: Tools/Demos
+
+2to3 and the findnocoding.py script now detect Python source code encoding
+only in comment lines.
+
+..
+
+.. bpo: 18817
+.. date: 9101
+.. nonce: yma3Gh
+.. section: Tools/Demos
+
+Fix a resource warning in Lib/aifc.py demo.
+
+..
+
+.. bpo: 18439
+.. date: 9100
+.. nonce: W9DxeL
+.. section: Tools/Demos
+
+Make patchcheck work on Windows for ACKS, NEWS.
+
+..
+
+.. bpo: 18448
+.. date: 9099
+.. nonce: gMA5pg
+.. section: Tools/Demos
+
+Fix a typo in Demo/newmetaclasses/Eiffel.py.
+
+..
+
+.. bpo: 12990
+.. date: 9098
+.. nonce: E1geL-
+.. section: Tools/Demos
+
+The "Python Launcher" on OSX could not launch python scripts that have paths
+that include wide characters.
+
+..
+
+.. bpo: 16067
+.. date: 9097
+.. nonce: xeYOfj
+.. section: Build
+
+Add description into MSI file to replace installer's temporary name.
+
+..
+
+.. bpo: 18256
+.. date: 9096
+.. nonce: PiEkYT
+.. section: Build
+
+Compilation fix for recent AIX releases.  Patch by David Edelsohn.
+
+..
+
+.. bpo: 18098
+.. date: 9095
+.. nonce: KZmfoE
+.. section: Build
+
+The deprecated OS X Build Applet.app fails to build on OS X 10.8 systems
+because the Apple-deprecated QuickDraw headers have been removed from Xcode
+4.  Skip building it in this case.
+
+..
+
+.. bpo: 1584
+.. date: 9094
+.. nonce: qjDxpR
+.. section: Build
+
+Provide options to override default search paths for Tcl and Tk when
+building _tkinter.
+
+..
+
+.. bpo: 15663
+.. date: 9093
+.. nonce: 9Da_Rj
+.. section: Build
+
+Tcl/Tk 8.5.15 is now included with the OS X 10.6+ 64-bit/32-bit installer
+for 10.6+.  It is no longer necessary to install a third-party version of
+Tcl/Tk 8.5 to work around the problems in the Apple-supplied Tcl/Tk 8.5
+shipped in OS X 10.6 and later releases.
+
+..
+
+.. bpo: 19019
+.. date: 9092
+.. nonce: 5W7lw_
+.. section: Build
+
+Change the OS X installer build script to use CFLAGS instead of OPT for
+special build options.  By setting OPT, some compiler-specific options like
+-fwrapv were overridden and thus not used, which could result in broken
+interpreters when building with clang.
+
+..
+
+.. bpo: 18873
+.. date: 9091
+.. nonce: dyLPY9
+.. section: IDLE
+
+IDLE now detects Python source code encoding only in comment lines.
+
+..
+
+.. bpo: 18988
+.. date: 9090
+.. nonce: 6CpesW
+.. section: IDLE
+
+The "Tab" key now works when a word is already autocompleted.
+
+..
+
+.. bpo: 18489
+.. date: 9089
+.. nonce: nOvxOH
+.. section: IDLE
+
+Add tests for SearchEngine. Original patch by Phil Webster.
+
+..
+
+.. bpo: 18429
+.. date: 9088
+.. nonce: F1lTq1
+.. section: IDLE
+
+Format / Format Paragraph, now works when comment blocks are selected. As
+with text blocks, this works best when the selection only includes complete
+lines.
+
+..
+
+.. bpo: 18226
+.. date: 9087
+.. nonce: 5HtrW1
+.. section: IDLE
+
+Add docstrings and unittests for FormatParagraph.py. Original patches by
+Todd Rovito and Phil Webster.
+
+..
+
+.. bpo: 18279
+.. date: 9086
+.. nonce: UoF-oR
+.. section: IDLE
+
+Format - Strip trailing whitespace no longer marks a file as changed when it
+has not been changed. This fix followed the addition of a test file
+originally written by Phil Webster (the issue's main goal).
+
+..
+
+.. bpo: 18539
+.. date: 9085
+.. nonce: _ddWOv
+.. section: IDLE
+
+Calltips now work for float default arguments.
+
+..
+
+.. bpo: 7136
+.. date: 9084
+.. nonce: 7horQf
+.. section: IDLE
+
+In the Idle File menu, "New Window" is renamed "New File". Patch by Tal
+Einat, Roget Serwy, and Todd Rovito.
+
+..
+
+.. bpo: 8515
+.. date: 9083
+.. nonce: wY13t0
+.. section: IDLE
+
+Set __file__ when run file in IDLE. Initial patch by Bruce Frederiksen.
+
+..
+
+.. bpo: 5492
+.. date: 9082
+.. nonce: LCx7lq
+.. section: IDLE
+
+Avoid traceback when exiting IDLE caused by a race condition.
+
+..
+
+.. bpo: 17511
+.. date: 9081
+.. nonce: 6XqdTH
+.. section: IDLE
+
+Keep IDLE find dialog open after clicking "Find Next". Original patch by
+Sarah K.
+
+..
+
+.. bpo: 15392
+.. date: 9080
+.. nonce: rB5VoV
+.. section: IDLE
+
+Create a unittest framework for IDLE. Preliminary patch by Rajagopalasarma
+Jayakrishnan See Lib/idlelib/idle_test/README.txt for how to run Idle tests.
+
+..
+
+.. bpo: 14146
+.. date: 9079
+.. nonce: -n5gzd
+.. section: IDLE
+
+Highlight source line while debugging on Windows.
+
+..
+
+.. bpo: 17532
+.. date: 9078
+.. nonce: wgA70Z
+.. section: IDLE
+
+Always include Options menu for IDLE on OS X. Patch by Guilherme Simões.
+
+..
+
+.. bpo: 18919
+.. date: 9077
+.. nonce: BOq1BY
+.. section: Tests
+
+Added tests for the sunau module.  Unified and extended tests for audio
+modules: aifc, sunau and wave.
+
+..
+
+.. bpo: 18792
+.. date: 9076
+.. nonce: 5RkYdK
+.. section: Tests
+
+Use "127.0.0.1" or "::1" instead of "localhost" as much as possible, since
+"localhost" goes through a DNS lookup under recent Windows versions.
+
+..
+
+.. bpo: 18357
+.. date: 9075
+.. nonce: jRiyQA
+.. section: Tests
+
+add tests for dictview set difference. Patch by Fraser Tweedale.
+
+..
+
+.. bpo: 11185
+.. date: 9074
+.. nonce: McIHeT
+.. section: Tests
+
+Fix test_wait4 under AIX.  Patch by Sébastien Sablé.
+
+..
+
+.. bpo: 18094
+.. date: 9073
+.. nonce: VeMh1H
+.. section: Tests
+
+test_uuid no more reports skipped tests as passed.
+
+..
+
+.. bpo: 11995
+.. date: 9072
+.. nonce: varfN1
+.. section: Tests
+
+test_pydoc doesn't import all sys.path modules anymore.
+
+..
+
+.. bpo: 18758
+.. date: 9071
+.. nonce: hMCi7Z
+.. section: Documentation
+
+Fixed and improved cross-references.
+
+..
+
+.. bpo: 18718
+.. date: 9070
+.. nonce: CtpK5H
+.. section: Documentation
+
+datetime documentation contradictory on leap second support.
+
+..
+
+.. bpo: 17701
+.. date: 9069
+.. nonce: FtTZ66
+.. section: Documentation
+
+Improving strftime documentation.
+
+..
+
+.. bpo: 17844
+.. date: 9068
+.. nonce: R4Gssa
+.. section: Documentation
+
+Refactor a documentation of Python specific encodings. Add links to encoders
+and decoders for binary-to-binary codecs.
diff --git a/Misc/NEWS.d/2.7.7.rst b/Misc/NEWS.d/2.7.7.rst
new file mode 100644
index 0000000..fbad9ad
--- /dev/null
+++ b/Misc/NEWS.d/2.7.7.rst
@@ -0,0 +1,16 @@
+.. bpo: 21462
+.. date: 9328
+.. nonce: Ee4oKH
+.. release date: 2014-05-31
+.. section: Build
+
+Build the Windows installers with OpenSSL 1.0.1g.
+
+..
+
+.. bpo: 19866
+.. date: 9327
+.. nonce: 15D08i
+.. section: Build
+
+Include some test data in the Windows installers, so tests don't fail.
diff --git a/Misc/NEWS.d/2.7.7rc1.rst b/Misc/NEWS.d/2.7.7rc1.rst
new file mode 100644
index 0000000..93ef569
--- /dev/null
+++ b/Misc/NEWS.d/2.7.7rc1.rst
@@ -0,0 +1,1376 @@
+.. bpo: 21350
+.. date: 9326
+.. nonce: jnq6gO
+.. release date: 2014-05-17
+.. section: Core and Builtins
+
+Fix file.writelines() to accept arbitrary buffer objects, as advertised.
+Patch by Brian Kearns.
+
+..
+
+.. bpo: 20437
+.. date: 9325
+.. nonce: 9Rsiua
+.. section: Core and Builtins
+
+Fixed 43 potential bugs when deleting object references.
+
+..
+
+.. bpo: 21134
+.. date: 9324
+.. nonce: ZL4SKo
+.. section: Core and Builtins
+
+Fix segfault when str is called on an uninitialized UnicodeEncodeError,
+UnicodeDecodeError, or UnicodeTranslateError object.
+
+..
+
+.. bpo: 20494
+.. date: 9323
+.. nonce: uGIFPX
+.. section: Core and Builtins
+
+Ensure that free()d memory arenas are really released on POSIX systems
+supporting anonymous memory mappings.  Patch by Charles-François Natali.
+
+..
+
+.. bpo: 17825
+.. date: 9322
+.. nonce: toRoZf
+.. section: Core and Builtins
+
+Cursor "^" is correctly positioned for SyntaxError and IndentationError.
+
+..
+
+.. bpo: 0
+.. date: 9321
+.. nonce: nfw3S8
+.. section: Core and Builtins
+
+Raise a better error when non-unicode codecs are used for a file's coding
+cookie.
+
+..
+
+.. bpo: 17976
+.. date: 9320
+.. nonce: w402Bf
+.. section: Core and Builtins
+
+Fixed potential problem with file.write() not detecting IO error by
+inspecting the return value of fwrite().  Based on patches by Jaakko Moisio
+and Victor Stinner.
+
+..
+
+.. bpo: 14432
+.. date: 9319
+.. nonce: kZ1mYr
+.. section: Core and Builtins
+
+Generator now clears the borrowed reference to the thread state. Fix a crash
+when a generator is created in a C thread that is destroyed while the
+generator is still used. The issue was that a generator contains a frame,
+and the frame kept a reference to the Python state of the destroyed C
+thread. The crash occurs when a trace function is setup.
+
+..
+
+.. bpo: 19932
+.. date: 9318
+.. nonce: ZU_tXW
+.. section: Core and Builtins
+
+Fix typo in import.h, missing whitespaces in function prototypes.
+
+..
+
+.. bpo: 19638
+.. date: 9317
+.. nonce: lh5Awt
+.. section: Core and Builtins
+
+Fix possible crash / undefined behaviour from huge (more than 2 billion
+characters) input strings in _Py_dg_strtod.
+
+..
+
+.. bpo: 12546
+.. date: 9316
+.. nonce: kDqF_s
+.. section: Core and Builtins
+
+Allow \x00 to be used as a fill character when using str, int, float, and
+complex __format__ methods.
+
+..
+
+.. bpo: 10744
+.. date: 9315
+.. nonce: kfV0wm
+.. section: Library
+
+Fix PEP 3118 format strings on ctypes objects with a nontrivial shape.
+
+..
+
+.. bpo: 7776
+.. date: 9314
+.. nonce: DFUgrv
+.. section: Library
+
+Backport Fix ``Host:'' header and reconnection when using
+http.client.HTTPConnection.set_tunnel() from Python 3.  Patch by Nikolaus
+Rath.
+
+..
+
+.. bpo: 21306
+.. date: 9313
+.. nonce: 8ABvGX
+.. section: Library
+
+Backport hmac.compare_digest from Python 3. This is part of PEP 466.
+
+..
+
+.. bpo: 21470
+.. date: 9312
+.. nonce: uH-yCD
+.. section: Library
+
+Do a better job seeding the random number generator by using enough bytes to
+span the full state space of the Mersenne Twister.
+
+..
+
+.. bpo: 21469
+.. date: 9311
+.. nonce: _fFGuq
+.. section: Library
+
+Reduced the risk of false positives in robotparser by checking to make sure
+that robots.txt has been read or does not exist prior to returning True in
+can_fetch().
+
+..
+
+.. bpo: 21321
+.. date: 9310
+.. nonce: wUkTON
+.. section: Library
+
+itertools.islice() now releases the reference to the source iterator when
+the slice is exhausted.  Patch by Anton Afanasyev.
+
+..
+
+.. bpo: 9291
+.. date: 9309
+.. nonce: QlHuPo
+.. section: Library
+
+Do not attempt to re-encode mimetype data read from registry in ANSI mode.
+Initial patches by Dmitry Jemerov & Vladimir Iofik.
+
+..
+
+.. bpo: 21349
+.. date: 9308
+.. nonce: G6dnGO
+.. section: Library
+
+Passing a memoryview to _winreg.SetValueEx now correctly raises a TypeError
+where it previously crashed the interpreter. Patch by Brian Kearns
+
+..
+
+.. bpo: 21529
+.. date: 9307
+.. nonce: 57R_Fc
+.. section: Library
+
+Fix arbitrary memory access in JSONDecoder.raw_decode with a negative second
+parameter. Bug reported by Guido Vranken. (See also: CVE-2014-4616)
+
+..
+
+.. bpo: 21172
+.. date: 9306
+.. nonce: dQ7yY7
+.. section: Library
+
+isinstance check relaxed from dict to collections.Mapping.
+
+..
+
+.. bpo: 21191
+.. date: 9305
+.. nonce: T8gLBH
+.. section: Library
+
+In os.fdopen, never close the file descriptor when an exception happens.
+
+..
+
+.. bpo: 21149
+.. date: 9304
+.. nonce: cnjwMR
+.. section: Library
+
+Improved thread-safety in logging cleanup during interpreter shutdown.
+Thanks to Devin Jeanpierre for the patch.
+
+..
+
+.. bpo: 0
+.. date: 9303
+.. nonce: WKcVnZ
+.. section: Library
+
+Fix possible overflow bug in strop.expandtabs. You shouldn't be using this
+module!
+
+..
+
+.. bpo: 20145
+.. date: 9302
+.. nonce: JeZoJn
+.. section: Library
+
+`assertRaisesRegex` now raises a TypeError if the second argument is not a
+string or compiled regex.
+
+..
+
+.. bpo: 21058
+.. date: 9301
+.. nonce: SqznP1
+.. section: Library
+
+Fix a leak of file descriptor in tempfile.NamedTemporaryFile(), close the
+file descriptor if os.fdopen() fails
+
+..
+
+.. bpo: 20283
+.. date: 9300
+.. nonce: v0Vs9V
+.. section: Library
+
+RE pattern methods now accept the string keyword parameters as documented.
+The pattern and source keyword parameters are left as deprecated aliases.
+
+..
+
+.. bpo: 11599
+.. date: 9299
+.. nonce: 9QOXf4
+.. section: Library
+
+When an external command (e.g. compiler) fails, distutils now prints out the
+whole command line (instead of just the command name) if the environment
+variable DISTUTILS_DEBUG is set.
+
+..
+
+.. bpo: 4931
+.. date: 9298
+.. nonce: uF10hr
+.. section: Library
+
+distutils should not produce unhelpful "error: None" messages anymore.
+distutils.util.grok_environment_error is kept but doc-deprecated.
+
+..
+
+.. bpo: 0
+.. date: 9297
+.. nonce: mdcWGA
+.. section: Library
+
+Improve the random module's default seeding to use 256 bits of entropy from
+os.urandom().  This was already done for Python 3, mildly improving security
+with a bigger seed space.
+
+..
+
+.. bpo: 15618
+.. date: 9296
+.. nonce: r5_ACR
+.. section: Library
+
+Make turtle.py compatible with 'from __future__ import unicode_literals'.
+Initial patch by Juancarlo Añez.
+
+..
+
+.. bpo: 20501
+.. date: 9295
+.. nonce: Jwfgph
+.. section: Library
+
+fileinput module no longer reads whole file into memory when using
+fileinput.hook_encoded.
+
+..
+
+.. bpo: 6815
+.. date: 9294
+.. nonce: poU-vm
+.. section: Library
+
+os.path.expandvars() now supports non-ASCII Unicode environment variables
+names and values.
+
+..
+
+.. bpo: 20635
+.. date: 9293
+.. nonce: ZKwOpn
+.. section: Library
+
+Fixed grid_columnconfigure() and grid_rowconfigure() methods of Tkinter
+widgets to work in wantobjects=True mode.
+
+..
+
+.. bpo: 17671
+.. date: 9292
+.. nonce: 8tHRKJ
+.. section: Library
+
+Fixed a crash when use non-initialized io.BufferedRWPair. Based on patch by
+Stephen Tu.
+
+..
+
+.. bpo: 8478
+.. date: 9291
+.. nonce: OS7q1h
+.. section: Library
+
+Untokenizer.compat processes first token from iterator input. Patch based on
+lines from Georg Brandl, Eric Snow, and Gareth Rees.
+
+..
+
+.. bpo: 20594
+.. date: 9290
+.. nonce: BVHxPd
+.. section: Library
+
+Avoid name clash with the libc function posix_close.
+
+..
+
+.. bpo: 19856
+.. date: 9289
+.. nonce: jFhYW_
+.. section: Library
+
+shutil.move() failed to move a directory to other directory on Windows if
+source name ends with os.altsep.
+
+..
+
+.. bpo: 14983
+.. date: 9288
+.. nonce: H_gs8w
+.. section: Library
+
+email.generator now always adds a line end after each MIME boundary marker,
+instead of doing so only when there is an epilogue.  This fixes an RFC
+compliance bug and solves an issue with signed MIME parts.
+
+..
+
+.. bpo: 20013
+.. date: 9287
+.. nonce: erNy8V
+.. section: Library
+
+Some imap servers disconnect if the current mailbox is deleted, and imaplib
+did not handle that case gracefully.  Now it handles the 'bye' correctly.
+
+..
+
+.. bpo: 20426
+.. date: 9286
+.. nonce: f0ozAP
+.. section: Library
+
+When passing the re.DEBUG flag, re.compile() displays the debug output every
+time it is called, regardless of the compilation cache.
+
+..
+
+.. bpo: 20368
+.. date: 9285
+.. nonce: BlXEFo
+.. section: Library
+
+The null character now correctly passed from Tcl to Python (in unicode
+strings only).  Improved error handling in variables-related commands.
+
+..
+
+.. bpo: 20435
+.. date: 9284
+.. nonce: _UNhlH
+.. section: Library
+
+Fix _pyio.StringIO.getvalue() to take into account newline translation
+settings.
+
+..
+
+.. bpo: 20288
+.. date: 9283
+.. nonce: 6zUZe3
+.. section: Library
+
+fix handling of invalid numeric charrefs in HTMLParser.
+
+..
+
+.. bpo: 19456
+.. date: 9282
+.. nonce: 6HhsFx
+.. section: Library
+
+ntpath.join() now joins relative paths correctly when a drive is present.
+
+..
+
+.. bpo: 8260
+.. date: 9281
+.. nonce: nf7gg9
+.. section: Library
+
+The read(), readline() and readlines() methods of codecs.StreamReader
+returned incomplete data when were called after readline() or read(size).
+Based on patch by Amaury Forgeot d'Arc.
+
+..
+
+.. bpo: 20374
+.. date: 9280
+.. nonce: EWofHb
+.. section: Library
+
+Fix build with GNU readline >= 6.3.
+
+..
+
+.. bpo: 14548
+.. date: 9279
+.. nonce: ClAkmE
+.. section: Library
+
+Make multiprocessing finalizers check pid before running to cope with
+possibility of gc running just after fork. (Backport from 3.x.)
+
+..
+
+.. bpo: 20262
+.. date: 9278
+.. nonce: co0t1R
+.. section: Library
+
+Warnings are raised now when duplicate names are added in the ZIP file or
+too long ZIP file comment is truncated.
+
+..
+
+.. bpo: 20270
+.. date: 9277
+.. nonce: hDccjr
+.. section: Library
+
+urllib and urlparse now support empty ports.
+
+..
+
+.. bpo: 20243
+.. date: 9276
+.. nonce: nApKCK
+.. section: Library
+
+TarFile no longer raise ReadError when opened in write mode.
+
+..
+
+.. bpo: 20245
+.. date: 9275
+.. nonce: 93kf_h
+.. section: Library
+
+The open functions in the tarfile module now correctly handle empty mode.
+
+..
+
+.. bpo: 20086
+.. date: 9274
+.. nonce: RV3SGi
+.. section: Library
+
+Restored the use of locale-independent mapping instead of locale-dependent
+str.lower() in locale.normalize().
+
+..
+
+.. bpo: 20246
+.. date: 9273
+.. nonce: CC8uTq
+.. section: Library
+
+Fix buffer overflow in socket.recvfrom_into.
+
+..
+
+.. bpo: 19082
+.. date: 9272
+.. nonce: Qv6W7t
+.. section: Library
+
+Working SimpleXMLRPCServer and xmlrpclib examples, both in modules and
+documentation.
+
+..
+
+.. bpo: 13107
+.. date: 9271
+.. nonce: YgEEME
+.. section: Library
+
+argparse and optparse no longer raises an exception when output a help on
+environment with too small COLUMNS.  Based on patch by Elazar Gershuni.
+
+..
+
+.. bpo: 20207
+.. date: 9270
+.. nonce: ziIyF1
+.. section: Library
+
+Always disable SSLv2 except when PROTOCOL_SSLv2 is explicitly asked for.
+
+..
+
+.. bpo: 20072
+.. date: 9269
+.. nonce: FzVG15
+.. section: Library
+
+Fixed multiple errors in tkinter with wantobjects is False.
+
+..
+
+.. bpo: 1065986
+.. date: 9268
+.. nonce: pSaw56
+.. section: Library
+
+pydoc can now handle unicode strings.
+
+..
+
+.. bpo: 16039
+.. date: 9267
+.. nonce: Cy3_BL
+.. section: Library
+
+CVE-2013-1752: Change use of readline in imaplib module to limit line
+length.  Patch by Emil Lind.
+
+..
+
+.. bpo: 19422
+.. date: 9266
+.. nonce: 1dRaPS
+.. section: Library
+
+Explicitly disallow non-SOCK_STREAM sockets in the ssl module, rather than
+silently let them emit clear text data.
+
+..
+
+.. bpo: 20027
+.. date: 9265
+.. nonce: dtB7OG
+.. section: Library
+
+Fixed locale aliases for devanagari locales.
+
+..
+
+.. bpo: 20067
+.. date: 9264
+.. nonce: MlnlYd
+.. section: Library
+
+Tkinter variables now work when wantobjects is false.
+
+..
+
+.. bpo: 19020
+.. date: 9263
+.. nonce: _16K__
+.. section: Library
+
+Tkinter now uses splitlist() instead of split() in configure methods.
+
+..
+
+.. bpo: 12226
+.. date: 9262
+.. nonce: -vXCBM
+.. section: Library
+
+HTTPS is now used by default when connecting to PyPI.
+
+..
+
+.. bpo: 20048
+.. date: 9261
+.. nonce: YvvUoW
+.. section: Library
+
+Fixed ZipExtFile.peek() when it is called on the boundary of the uncompress
+buffer and read() goes through more than one readbuffer.
+
+..
+
+.. bpo: 20034
+.. date: 9260
+.. nonce: GlYpNX
+.. section: Library
+
+Updated alias mapping to most recent locale.alias file from X.org
+distribution using makelocalealias.py.
+
+..
+
+.. bpo: 5815
+.. date: 9259
+.. nonce: FxSb0P
+.. section: Library
+
+Fixed support for locales with modifiers.  Fixed support for locale
+encodings with hyphens.
+
+..
+
+.. bpo: 20026
+.. date: 9258
+.. nonce: KO1jB6
+.. section: Library
+
+Fix the sqlite module to handle correctly invalid isolation level (wrong
+type).
+
+..
+
+.. bpo: 18829
+.. date: 9257
+.. nonce: QPwJFn
+.. section: Library
+
+csv.Dialect() now checks type for delimiter, escapechar and quotechar
+fields.  Original patch by Vajrasky Kok.
+
+..
+
+.. bpo: 19855
+.. date: 9256
+.. nonce: TtBUO6
+.. section: Library
+
+uuid.getnode() on Unix now looks on the PATH for the executables used to
+find the mac address, with /sbin and /usr/sbin as fallbacks.
+
+..
+
+.. bpo: 20007
+.. date: 9255
+.. nonce: IaSnPo
+.. section: Library
+
+HTTPResponse.read(0) no more prematurely closes connection. Original patch
+by Simon Sapin.
+
+..
+
+.. bpo: 19912
+.. date: 9254
+.. nonce: TviIPi
+.. section: Library
+
+Fixed numerous bugs in ntpath.splitunc().
+
+..
+
+.. bpo: 19623
+.. date: 9253
+.. nonce: cPL8XH
+.. section: Library
+
+Fixed writing to unseekable files in the aifc module. Fixed writing 'ulaw'
+(lower case) compressed AIFC files.
+
+..
+
+.. bpo: 17919
+.. date: 9252
+.. nonce: H5iGXv
+.. section: Library
+
+select.poll.register() again works with poll.POLLNVAL on AIX. Fixed integer
+overflow in the eventmask parameter.
+
+..
+
+.. bpo: 17200
+.. date: 9251
+.. nonce: y1euZh
+.. section: Library
+
+telnetlib's read_until and expect timeout was broken by the fix to Issue
+#14635 in Python 2.7.4 to be interpreted as milliseconds instead of seconds
+when the platform supports select.poll (ie: everywhere). It is now treated
+as seconds once again.
+
+..
+
+.. bpo: 19099
+.. date: 9250
+.. nonce: U4CHJk
+.. section: Library
+
+The struct module now supports Unicode format strings.
+
+..
+
+.. bpo: 19878
+.. date: 9249
+.. nonce: 7oVPCy
+.. section: Library
+
+Fix segfault in bz2 module after calling __init__ twice with non-existent
+filename. Initial patch by Vajrasky Kok.
+
+..
+
+.. bpo: 16373
+.. date: 9248
+.. nonce: 9drXFZ
+.. section: Library
+
+Prevent infinite recursion for ABC Set class comparisons.
+
+..
+
+.. bpo: 19138
+.. date: 9247
+.. nonce: xwKrX_
+.. section: Library
+
+doctest's IGNORE_EXCEPTION_DETAIL now allows a match when no exception
+detail exists (no colon following the exception's name, or a colon does
+follow but no text follows the colon).
+
+..
+
+.. bpo: 16231
+.. date: 9246
+.. nonce: BospTf
+.. section: Library
+
+Fixed pickle.Pickler to only fallback to its default pickling behaviour when
+Pickler.persistent_id returns None, but not for any other false values.
+This allows false values other than None to be used as persistent IDs.  This
+behaviour is consistent with cPickle.
+
+..
+
+.. bpo: 11508
+.. date: 9245
+.. nonce: fx7Abs
+.. section: Library
+
+Fixed uuid.getnode() and uuid.uuid1() on environment with virtual interface.
+Original patch by Kent Frazier.
+
+..
+
+.. bpo: 11489
+.. date: 9244
+.. nonce: 3ZQHi8
+.. section: Library
+
+JSON decoder now accepts lone surrogates.
+
+..
+
+.. bpo: 0
+.. date: 9243
+.. nonce: mrzJif
+.. section: Library
+
+Fix test.test_support.bind_port() to not cause an error when Python was
+compiled on a system with SO_REUSEPORT defined in the headers but run on a
+system with an OS kernel that does not support that new socket option.
+
+..
+
+.. bpo: 19633
+.. date: 9242
+.. nonce: XJNQit
+.. section: Library
+
+Fixed writing not compressed 16- and 32-bit wave files on big-endian
+platforms.
+
+..
+
+.. bpo: 19449
+.. date: 9241
+.. nonce: F2TbC_
+.. section: Library
+
+in csv's writerow, handle non-string keys when generating the error message
+that certain keys are not in the 'fieldnames' list.
+
+..
+
+.. bpo: 12853
+.. date: 9240
+.. nonce: Hf7EYH
+.. section: Library
+
+Fix NameError in distutils.command.upload.
+
+..
+
+.. bpo: 19523
+.. date: 9239
+.. nonce: tNiY9i
+.. section: Library
+
+Closed FileHandler leak which occurred when delay was set.
+
+..
+
+.. bpo: 1575020
+.. date: 9238
+.. nonce: skWyvl
+.. section: Library
+
+Fixed support of 24-bit wave files on big-endian platforms.
+
+..
+
+.. bpo: 19480
+.. date: 9237
+.. nonce: MY3dmW
+.. section: Library
+
+HTMLParser now accepts all valid start-tag names as defined by the HTML5
+standard.
+
+..
+
+.. bpo: 17827
+.. date: 9236
+.. nonce: HJGFDL
+.. section: Library
+
+Add the missing documentation for ``codecs.encode`` and ``codecs.decode``.
+
+..
+
+.. bpo: 6157
+.. date: 9235
+.. nonce: ZW67ae
+.. section: Library
+
+Fixed Tkinter.Text.debug().  Original patch by Guilherme Polo.
+
+..
+
+.. bpo: 6160
+.. date: 9234
+.. nonce: Mr5UuA
+.. section: Library
+
+The bbox() method of tkinter.Spinbox now returns a tuple of integers instead
+of a string.  Based on patch by Guilherme Polo.
+
+..
+
+.. bpo: 19286
+.. date: 9233
+.. nonce: TUZetF
+.. section: Library
+
+Directories in ``package_data`` are no longer added to the filelist,
+preventing failure outlined in the ticket.
+
+..
+
+.. bpo: 6676
+.. date: 9232
+.. nonce: CJu5On
+.. section: Library
+
+Ensure a meaningful exception is raised when attempting to parse more than
+one XML document per pyexpat xmlparser instance. (Original patches by
+Hirokazu Yamamoto and Amaury Forgeot d'Arc, with suggested wording by David
+Gutteridge)
+
+..
+
+.. bpo: 21311
+.. date: 9231
+.. nonce: JsDF8H
+.. section: Library
+
+Avoid exception in _osx_support with non-standard compiler configurations.
+Patch by John Szakmeister.
+
+..
+
+.. bpo: 3561
+.. date: 9230
+.. nonce: DuNr6C
+.. section: Tools/Demos
+
+The Windows installer now has an option, off by default, for placing the
+Python installation into the system "Path" environment variable. This was
+backported from Python 3.3.
+
+..
+
+.. bpo: 0
+.. date: 9229
+.. nonce: _-ge-g
+.. section: Tools/Demos
+
+Add support for ``yield from`` to 2to3.
+
+..
+
+.. bpo: 0
+.. date: 9228
+.. nonce: dpFbyZ
+.. section: Tools/Demos
+
+Add support for the PEP 465 matrix multiplication operator to 2to3.
+
+..
+
+.. bpo: 19936
+.. date: 9227
+.. nonce: moet1K
+.. section: Tools/Demos
+
+Added executable bits or shebang lines to Python scripts which requires
+them.  Disable executable bits and shebang lines in test and benchmark files
+in order to prevent using a random system python, and in source files of
+modules which don't provide command line interface.
+
+..
+
+.. bpo: 18104
+.. date: 9226
+.. nonce: 8Fj9Pf
+.. section: IDLE
+
+Add idlelib/idle_test/htest.py with a few sample tests to begin
+consolidating and improving human-validated tests of Idle. Change other
+files as needed to work with htest.  Running the module as __main__ runs all
+tests.
+
+..
+
+.. bpo: 21139
+.. date: 9225
+.. nonce: kqetng
+.. section: IDLE
+
+Change default paragraph width to 72, the PEP 8 recommendation.
+
+..
+
+.. bpo: 21284
+.. date: 9224
+.. nonce: KKJfmv
+.. section: IDLE
+
+Paragraph reformat test passes after user changes reformat width.
+
+..
+
+.. bpo: 20406
+.. date: 9223
+.. nonce: AgBe_5
+.. section: IDLE
+
+Use Python application icons for Idle window title bars. Patch mostly by
+Serhiy Storchaka.
+
+..
+
+.. bpo: 21029
+.. date: 9222
+.. nonce: JnlAAt
+.. section: IDLE
+
+Occurrences of "print" are now consistently colored as being a keyword (the
+colorizer doesn't know if print functions are enabled in the source).
+
+..
+
+.. bpo: 17721
+.. date: 9221
+.. nonce: 8Jh8C1
+.. section: IDLE
+
+Remove non-functional configuration dialog help button until we make it
+actually gives some help when clicked. Patch by Guilherme Simões.
+
+..
+
+.. bpo: 17390
+.. date: 9220
+.. nonce: 9m6ZhV
+.. section: IDLE
+
+Add Python version to Idle editor window title bar. Original patches by
+Edmond Burnett and Kent Johnson.
+
+..
+
+.. bpo: 20058
+.. date: 9219
+.. nonce: KnDlhH
+.. section: IDLE
+
+sys.stdin.readline() in IDLE now always returns only one line.
+
+..
+
+.. bpo: 19481
+.. date: 9218
+.. nonce: b5EHmn
+.. section: IDLE
+
+print() of unicode, str or bytearray subclass instance in IDLE no more
+hangs.
+
+..
+
+.. bpo: 18270
+.. date: 9217
+.. nonce: lu6dRW
+.. section: IDLE
+
+Prevent possible IDLE AttributeError on OS X when no initial shell window is
+present.
+
+..
+
+.. bpo: 17654
+.. date: 9216
+.. nonce: NbzhNS
+.. section: IDLE
+
+Ensure IDLE menus are customized properly on OS X for non-framework builds
+and for all variants of Tk.
+
+..
+
+.. bpo: 17752
+.. date: 9215
+.. nonce: P8iG44
+.. section: Tests
+
+Fix distutils tests when run from the installed location.
+
+..
+
+.. bpo: 18604
+.. date: 9214
+.. nonce: Q00Xrj
+.. section: Tests
+
+Consolidated checks for GUI availability.  All platforms now at least check
+whether Tk can be instantiated when the GUI resource is requested.
+
+..
+
+.. bpo: 20946
+.. date: 9213
+.. nonce: iI4MlK
+.. section: Tests
+
+Correct alignment assumptions of some ctypes tests.
+
+..
+
+.. bpo: 20743
+.. date: 9212
+.. nonce: hxZQUf
+.. section: Tests
+
+Fix a reference leak in test_tcl.
+
+..
+
+.. bpo: 20510
+.. date: 9211
+.. nonce: X9p_K2
+.. section: Tests
+
+Rewrote test_exit in test_sys to match existing comments, use modern
+unittest features, and use helpers from test.script_helper instead of using
+subprocess directly.  Initial patch by Gareth Rees.
+
+..
+
+.. bpo: 20532
+.. date: 9210
+.. nonce: qsOt4d
+.. section: Tests
+
+Tests which use _testcapi now are marked as CPython only.
+
+..
+
+.. bpo: 19920
+.. date: 9209
+.. nonce: suOIC7
+.. section: Tests
+
+Added tests for TarFile.list().  Based on patch by Vajrasky Kok.
+
+..
+
+.. bpo: 19990
+.. date: 9208
+.. nonce: Lp1MVj
+.. section: Tests
+
+Added tests for the imghdr module.  Based on patch by Claudiu Popa.
+
+..
+
+.. bpo: 19804
+.. date: 9207
+.. nonce: xIHIl7
+.. section: Tests
+
+The test_find_mac test in test_uuid is now skipped if the ifconfig
+executable is not available.
+
+..
+
+.. bpo: 19886
+.. date: 9206
+.. nonce: nqDFRC
+.. section: Tests
+
+Use better estimated memory requirements for bigmem tests.
+
+..
+
+.. bpo: 0
+.. date: 9205
+.. nonce: 6LQ8qX
+.. section: Tests
+
+Backported tests for Tkinter variables.
+
+..
+
+.. bpo: 19320
+.. date: 9204
+.. nonce: 9x_cw5
+.. section: Tests
+
+test_tcl no longer fails when wantobjects is false.
+
+..
+
+.. bpo: 19683
+.. date: 9203
+.. nonce: iD76Cq
+.. section: Tests
+
+Removed empty tests from test_minidom.  Initial patch by Ajitesh Gupta.
+
+..
+
+.. bpo: 19928
+.. date: 9202
+.. nonce: dwOQ95
+.. section: Tests
+
+Implemented a test for repr() of cell objects.
+
+..
+
+.. bpo: 19595
+.. date: 9201
+.. nonce: q5oNE_
+.. section: Tests
+
+Re-enabled a long-disabled test in test_winsound. (See also: bpo-19987)
+
+..
+
+.. bpo: 19588
+.. date: 9200
+.. nonce: EXKxpC
+.. section: Tests
+
+Fixed tests in test_random that were silently skipped most of the time.
+Patch by Julian Gindi.
+
+..
+
+.. bpo: 17883
+.. date: 9199
+.. nonce: rQfRpP
+.. section: Tests
+
+Tweak test_tcl testLoadWithUNC to skip the test in the event of a permission
+error on Windows and to properly report other skip conditions.
+
+..
+
+.. bpo: 17883
+.. date: 9198
+.. nonce: 12qN1i
+.. section: Tests
+
+Backported _is_gui_available() in test.test_support to avoid hanging Windows
+buildbots on test_ttk_guionly.
+
+..
+
+.. bpo: 18702
+.. date: 9197
+.. nonce: a2jP-V
+.. section: Tests
+
+All skipped tests now reported as skipped. (See also: bpo-19572)
+
+..
+
+.. bpo: 19085
+.. date: 9196
+.. nonce: Gcl9XX
+.. section: Tests
+
+Added basic tests for all tkinter widget options.
+
+..
+
+.. bpo: 20605
+.. date: 9195
+.. nonce: uef5pT
+.. section: Tests
+
+Make test_socket getaddrinfo OS X segfault test more robust.
+
+..
+
+.. bpo: 20939
+.. date: 9194
+.. nonce: x3KQ35
+.. section: Tests
+
+Avoid various network test failures due to new redirect of
+http://www.python.org/ to https://www.python.org: use http://www.example.com
+instead.
+
+..
+
+.. bpo: 21093
+.. date: 9193
+.. nonce: CcpRim
+.. section: Tests
+
+Prevent failures of ctypes test_macholib on OS X if a copy of libz exists in
+$HOME/lib or /usr/local/lib.
+
+..
+
+.. bpo: 21285
+.. date: 9192
+.. nonce: cU9p2E
+.. section: Build
+
+Refactor and fix curses configure check to always search in a ncursesw
+directory.
+
+..
+
+.. bpo: 20255
+.. date: 9191
+.. nonce: P9HfTR
+.. section: Documentation
+
+Update the about and bugs pages.
+
+..
+
+.. bpo: 18840
+.. date: 9190
+.. nonce: _2UItV
+.. section: Documentation
+
+Introduce the json module in the tutorial, and de-emphasize the pickle
+module.
+
+..
+
+.. bpo: 19795
+.. date: 9189
+.. nonce: z5sbe1
+.. section: Documentation
+
+Improved markup of True/False constants.
+
+..
+
+.. bpo: 21303
+.. date: 9188
+.. nonce: AHY5As
+.. section: Windows
+
+Updated the version of Tcl/Tk included in the installer from 8.5.2 to
+8.5.15. (See also: bpo-20565)
+
+..
+
+.. bpo: 0
+.. date: 9187
+.. nonce: FhpkVS
+.. section: macOS
+
+As of 2.7.8, the 32-bit-only installer will support OS X 10.5 and later
+systems as is currently done for Python 3.x installers. For 2.7.7 only, we
+will provide three installers: the legacy deprecated 10.3+ 32-bit-only
+format; the newer 10.5+ 32-bit-only format; and the unchanged 10.6+
+64-/32-bit format. Although binary installers will no longer be available
+from python.org as of 2.7.8, it will still be possible to build from source
+on 10.3.9 and 10.4 systems if necessary. See Mac/BuildScript/README.txt for
+more information.
diff --git a/Misc/NEWS.d/2.7.8.rst b/Misc/NEWS.d/2.7.8.rst
new file mode 100644
index 0000000..bd4462c
--- /dev/null
+++ b/Misc/NEWS.d/2.7.8.rst
@@ -0,0 +1,433 @@
+.. bpo: 4346
+.. date: 9373
+.. nonce: UASH7u
+.. release date: 2014-06-29
+.. section: Core and Builtins
+
+In PyObject_CallMethod and PyObject_CallMethodObjArgs, don't overwrite the
+error set in PyObject_GetAttr.
+
+..
+
+.. bpo: 21831
+.. date: 9372
+.. nonce: LMoAu3
+.. section: Core and Builtins
+
+Avoid integer overflow when large sizes and offsets are given to the buffer
+type. CVE-2014-7185.
+
+..
+
+.. bpo: 19656
+.. date: 9371
+.. nonce: H_jvEi
+.. section: Core and Builtins
+
+Running Python with the -3 option now also warns about non-ascii bytes
+literals.
+
+..
+
+.. bpo: 21642
+.. date: 9370
+.. nonce: CjIqaU
+.. section: Core and Builtins
+
+If the conditional if-else expression, allow an integer written with no
+space between itself and the ``else`` keyword (e.g. ``True if 42else
+False``) to be valid syntax.
+
+..
+
+.. bpo: 21523
+.. date: 9369
+.. nonce: f_PPYO
+.. section: Core and Builtins
+
+Fix over-pessimistic computation of the stack effect of some opcodes in the
+compiler.  This also fixes a quadratic compilation time issue noticeable
+when compiling code with a large number of "and" and "or" operators.
+
+..
+
+.. bpo: 21652
+.. date: 9368
+.. nonce: kCNkbE
+.. section: Library
+
+Prevent mimetypes.type_map from containing unicode keys on Windows.
+
+..
+
+.. bpo: 21729
+.. date: 9367
+.. nonce: oa2kD6
+.. section: Library
+
+Used the "with" statement in the dbm.dumb module to ensure files closing.
+
+..
+
+.. bpo: 21672
+.. date: 9366
+.. nonce: iMRNWM
+.. section: Library
+
+Fix the behavior of ntpath.join on UNC-style paths.
+
+..
+
+.. bpo: 19145
+.. date: 9365
+.. nonce: cRrKpW
+.. section: Library
+
+The times argument for itertools.repeat now handles negative values the same
+way for keyword arguments as it does for positional arguments.
+
+..
+
+.. bpo: 21832
+.. date: 9364
+.. nonce: PBA0Uu
+.. section: Library
+
+Require named tuple inputs to be exact strings.
+
+..
+
+.. bpo: 8343
+.. date: 9363
+.. nonce: 2KNnCH
+.. section: Library
+
+Named group error messages in the re module did not show the name of the
+erroneous group.
+
+..
+
+.. bpo: 21491
+.. date: 9362
+.. nonce: suNKZf
+.. section: Library
+
+SocketServer: Fix a race condition in child processes reaping.
+
+..
+
+.. bpo: 21635
+.. date: 9361
+.. nonce: ET3OJZ
+.. section: Library
+
+The difflib SequenceMatcher.get_matching_blocks() method cache didn't match
+the actual result.  The former was a list of tuples and the latter was a
+list of named tuples.
+
+..
+
+.. bpo: 21722
+.. date: 9360
+.. nonce: WTHuRy
+.. section: Library
+
+The distutils "upload" command now exits with a non-zero return code when
+uploading fails.  Patch by Martin Dengler.
+
+..
+
+.. bpo: 21766
+.. date: 9359
+.. nonce: 0xk_xC
+.. section: Library
+
+Prevent a security hole in CGIHTTPServer by URL unquoting paths before
+checking for a CGI script at that path.
+
+..
+
+.. bpo: 21310
+.. date: 9358
+.. nonce: 2mjByJ
+.. section: Library
+
+Fixed possible resource leak in failed open().
+
+..
+
+.. bpo: 21304
+.. date: 9357
+.. nonce: xXyySz
+.. section: Library
+
+Backport the key derivation function hashlib.pbkdf2_hmac from Python 3 per
+PEP 466.
+
+..
+
+.. bpo: 11709
+.. date: 9356
+.. nonce: JdObvL
+.. section: Library
+
+Fix the pydoc.help function to not fail when sys.stdin is not a valid file.
+
+..
+
+.. bpo: 13223
+.. date: 9355
+.. nonce: 9AzEbN
+.. section: Library
+
+Fix pydoc.writedoc so that the HTML documentation for methods that use
+'self' in the example code is generated correctly.
+
+..
+
+.. bpo: 21552
+.. date: 9354
+.. nonce: uVy4tM
+.. section: Library
+
+Fixed possible integer overflow of too long string lengths in the tkinter
+module on 64-bit platforms.
+
+..
+
+.. bpo: 14315
+.. date: 9353
+.. nonce: YzZzS8
+.. section: Library
+
+The zipfile module now ignores extra fields in the central directory that
+are too short to be parsed instead of letting a struct.unpack error bubble
+up as this "bad data" appears in many real world zip files in the wild and
+is ignored by other zip tools.
+
+..
+
+.. bpo: 21402
+.. date: 9352
+.. nonce: GuVy1L
+.. section: Library
+
+Tkinter.ttk now works when default root window is not set.
+
+..
+
+.. bpo: 10203
+.. date: 9351
+.. nonce: gERvVk
+.. section: Library
+
+sqlite3.Row now truly supports sequence protocol.  In particulr it supports
+reverse() and negative indices.  Original patch by Claudiu Popa.
+
+..
+
+.. bpo: 8743
+.. date: 9350
+.. nonce: I6_2r3
+.. section: Library
+
+Fix interoperability between set objects and the collections.Set() abstract
+base class.
+
+..
+
+.. bpo: 21481
+.. date: 9349
+.. nonce: YDrlf7
+.. section: Library
+
+Argparse equality and inequality tests now return NotImplemented when
+comparing to an unknown type.
+
+..
+
+.. bpo: 21940
+.. date: 9348
+.. nonce: VlIRz7
+.. section: IDLE
+
+Add unittest for WidgetRedirector. Initial patch by Saimadhav Heblikar.
+
+..
+
+.. bpo: 18592
+.. date: 9347
+.. nonce: sMG-SZ
+.. section: IDLE
+
+Add unittest for SearchDialogBase. Patch by Phil Webster.
+
+..
+
+.. bpo: 21694
+.. date: 9346
+.. nonce: 1oLmRo
+.. section: IDLE
+
+Add unittest for ParenMatch. Patch by Saimadhav Heblikar.
+
+..
+
+.. bpo: 21686
+.. date: 9345
+.. nonce: TAkFB0
+.. section: IDLE
+
+add unittest for HyperParser. Original patch by Saimadhav Heblikar.
+
+..
+
+.. bpo: 12387
+.. date: 9344
+.. nonce: XO7Ozk
+.. section: IDLE
+
+Add missing upper(lower)case versions of default Windows key bindings for
+Idle so Caps Lock does not disable them. Patch by Roger Serwy.
+
+..
+
+.. bpo: 21695
+.. date: 9343
+.. nonce: g-t0Tm
+.. section: IDLE
+
+Closing a Find-in-files output window while the search is still in progress
+no longer closes Idle.
+
+..
+
+.. bpo: 18910
+.. date: 9342
+.. nonce: ke8lMK
+.. section: IDLE
+
+Add unittest for textView. Patch by Phil Webster.
+
+..
+
+.. bpo: 18292
+.. date: 9341
+.. nonce: ks_3wm
+.. section: IDLE
+
+Add unittest for AutoExpand. Patch by Saihadhav Heblikar.
+
+..
+
+.. bpo: 18409
+.. date: 9340
+.. nonce: 7fe-aK
+.. section: IDLE
+
+Add unittest for AutoComplete. Patch by Phil Webster.
+
+..
+
+.. bpo: 20155
+.. date: 9339
+.. nonce: nphzS3
+.. section: Tests
+
+Changed HTTP method names in failing tests in test_httpservers so that
+packet filtering software (specifically Windows Base Filtering Engine) does
+not interfere with the transaction semantics expected by the tests.
+
+..
+
+.. bpo: 19493
+.. date: 9338
+.. nonce: SwbzLQ
+.. section: Tests
+
+Refactored the ctypes test package to skip tests explicitly rather than
+silently.
+
+..
+
+.. bpo: 18492
+.. date: 9337
+.. nonce: ylPRU7
+.. section: Tests
+
+All resources are now allowed when tests are not run by regrtest.py.
+
+..
+
+.. bpo: 21605
+.. date: 9336
+.. nonce: qsLV8d
+.. section: Tests
+
+Added tests for Tkinter images.
+
+..
+
+.. bpo: 21493
+.. date: 9335
+.. nonce: NqhRsy
+.. section: Tests
+
+Added test for ntpath.expanduser().  Original patch by Claudiu Popa.
+
+..
+
+.. bpo: 19925
+.. date: 9334
+.. nonce: dhMx08
+.. section: Tests
+
+Added tests for the spwd module. Original patch by Vajrasky Kok.
+
+..
+
+.. bpo: 13355
+.. date: 9333
+.. nonce: gCByXK
+.. section: Tests
+
+random.triangular() no longer fails with a ZeroDivisionError when low equals
+high.
+
+..
+
+.. bpo: 21522
+.. date: 9332
+.. nonce: b-VwFW
+.. section: Tests
+
+Added Tkinter tests for Listbox.itemconfigure(),
+PanedWindow.paneconfigure(), and Menu.entryconfigure().
+
+..
+
+.. bpo: 20635
+.. date: 9331
+.. nonce: mzWmoS
+.. section: Tests
+
+Added tests for Tk geometry managers.
+
+..
+
+.. bpo: 21811
+.. date: 9330
+.. nonce: 3_Xyr-
+.. section: Build
+
+Anticipated fixes to support OS X versions > 10.9.
+
+..
+
+.. bpo: 21671
+.. date: 9329
+.. nonce: sm-hhO
+.. section: Windows
+
+The bundled version of OpenSSL has been updated to 1.0.1h. (See also:
+CVE-2014-0224)
diff --git a/Misc/NEWS.d/2.7.9.rst b/Misc/NEWS.d/2.7.9.rst
new file mode 100644
index 0000000..15cbfe9
--- /dev/null
+++ b/Misc/NEWS.d/2.7.9.rst
@@ -0,0 +1,65 @@
+.. bpo: 22959
+.. date: 9494
+.. nonce: FioVGu
+.. release date: 2014-12-10
+.. section: Library
+
+Remove the *check_hostname* parameter of httplib.HTTPSConnection. The
+*context* parameter should be used instead.
+
+..
+
+.. bpo: 16043
+.. date: 9493
+.. nonce: TGIC7t
+.. section: Library
+
+Add a default limit for the amount of data xmlrpclib.gzip_decode will
+return. This resolves CVE-2013-1753.
+
+..
+
+.. bpo: 16042
+.. date: 9492
+.. nonce: 7I3FPy
+.. section: Library
+
+CVE-2013-1752: smtplib: Limit amount of data read by limiting the call to
+readline().  Original patch by Christian Heimes.
+
+..
+
+.. bpo: 16041
+.. date: 9491
+.. nonce: TyhfVi
+.. section: Library
+
+In poplib, limit maximum line length read from the server to prevent
+CVE-2013-1752.
+
+..
+
+.. bpo: 22960
+.. date: 9490
+.. nonce: J-KiZ3
+.. section: Library
+
+Add a context argument to xmlrpclib.ServerProxy.
+
+..
+
+.. bpo: 22935
+.. date: 9489
+.. nonce: -vY3lc
+.. section: Build
+
+Allow the ssl module to be compiled if openssl doesn't support SSL 3.
+
+..
+
+.. bpo: 17128
+.. date: 9488
+.. nonce: JMdOBP
+.. section: Build
+
+Use private version of OpenSSL for 2.7.9 OS X 10.5+ installer.
diff --git a/Misc/NEWS.d/2.7.9rc1.rst b/Misc/NEWS.d/2.7.9rc1.rst
new file mode 100644
index 0000000..fb58165
--- /dev/null
+++ b/Misc/NEWS.d/2.7.9rc1.rst
@@ -0,0 +1,1124 @@
+.. bpo: 21963
+.. date: 9487
+.. nonce: eUwKx1
+.. release date: 2014-11-25
+.. section: Core and Builtins
+
+backout issue #1856 patch (avoid crashes and lockups when daemon threads run
+while the interpreter is shutting down; instead, these threads are now
+killed when they try to take the GIL), as it seems to break some existing
+code.
+
+..
+
+.. bpo: 22604
+.. date: 9486
+.. nonce: yii-It
+.. section: Core and Builtins
+
+Fix assertion error in debug mode when dividing a complex number by
+(nan+0j).
+
+..
+
+.. bpo: 22470
+.. date: 9485
+.. nonce: Lc7ZPK
+.. section: Core and Builtins
+
+Fixed integer overflow issues in "backslashreplace" and "xmlcharrefreplace"
+error handlers.
+
+..
+
+.. bpo: 22526
+.. date: 9484
+.. nonce: Oc9lar
+.. section: Core and Builtins
+
+Fix iterating through files with lines longer than 2^31 bytes.
+
+..
+
+.. bpo: 22519
+.. date: 9483
+.. nonce: zTlQLy
+.. section: Core and Builtins
+
+Fix overflow checking in PyString_Repr.
+
+..
+
+.. bpo: 22518
+.. date: 9482
+.. nonce: C9T6ed
+.. section: Core and Builtins
+
+Fix integer overflow issues in latin-1 encoding.
+
+..
+
+.. bpo: 22379
+.. date: 9481
+.. nonce: 4_3Ge-
+.. section: Core and Builtins
+
+Fix empty exception message in a TypeError raised in ``str.join``.
+
+..
+
+.. bpo: 22221
+.. date: 9480
+.. nonce: t0BE8h
+.. section: Core and Builtins
+
+Now the source encoding declaration on the second line isn't effective if
+the first line contains anything except a comment.
+
+..
+
+.. bpo: 22023
+.. date: 9479
+.. nonce: id5Xei
+.. section: Core and Builtins
+
+Fix ``%S``, ``%R`` and ``%V`` formats of :c:func:`PyUnicode_FromFormat`.
+
+..
+
+.. bpo: 21591
+.. date: 9478
+.. nonce: hJVYlf
+.. section: Core and Builtins
+
+Correctly handle qualified exec statements in tuple form by moving
+compatibility layer from run-time to AST transformation.
+
+..
+
+.. bpo: 22417
+.. date: 9477
+.. nonce: To4b7U
+.. section: Library
+
+Verify certificates by default in httplib (PEP 476).
+
+..
+
+.. bpo: 22927
+.. date: 9476
+.. nonce: TKaKOP
+.. section: Library
+
+Allow urllib.urlopen to take a *context* parameter to control SSL settings
+for HTTPS connections.
+
+..
+
+.. bpo: 22921
+.. date: 9475
+.. nonce: a4wx1C
+.. section: Library
+
+Allow SSLContext to take the *hostname* parameter even if OpenSSL doesn't
+support SNI.
+
+..
+
+.. bpo: 9003
+.. date: 9474
+.. nonce: VCncsy
+.. section: Library
+
+httplib.HTTPSConnection, urllib2.HTTPSHandler and urllib2.urlopen now take
+optional arguments to allow for server certificate checking, as recommended
+in public uses of HTTPS. This backport is part of PEP 467. (See also:
+bpo-22366)
+
+..
+
+.. bpo: 12728
+.. date: 9473
+.. nonce: rHZmXO
+.. section: Library
+
+Different Unicode characters having the same uppercase but different
+lowercase are now matched in case-insensitive regular expressions.
+
+..
+
+.. bpo: 22821
+.. date: 9472
+.. nonce: 30cQ-U
+.. section: Library
+
+Fixed fcntl() with integer argument on 64-bit big-endian platforms.
+
+..
+
+.. bpo: 17293
+.. date: 9471
+.. nonce: Hk06bO
+.. section: Library
+
+uuid.getnode() now determines MAC address on AIX using netstat. Based on
+patch by Aivars Kalvāns.
+
+..
+
+.. bpo: 22769
+.. date: 9470
+.. nonce: PunnvQ
+.. section: Library
+
+Fixed ttk.Treeview.tag_has() when called without arguments.
+
+..
+
+.. bpo: 22787
+.. date: 9469
+.. nonce: QIzbnh
+.. section: Library
+
+Allow the keyfile argument of SSLContext.load_cert_chain to be None.
+
+..
+
+.. bpo: 22775
+.. date: 9468
+.. nonce: 9X-KKA
+.. section: Library
+
+Fixed unpickling of Cookie.SimpleCookie with protocol 2. Patch by Tim
+Graham.
+
+..
+
+.. bpo: 22776
+.. date: 9467
+.. nonce: xNcRse
+.. section: Library
+
+Brought excluded code into the scope of a try block in SysLogHandler.emit().
+
+..
+
+.. bpo: 17381
+.. date: 9466
+.. nonce: IrcC9I
+.. section: Library
+
+Fixed ranges handling in case-insensitive regular expressions.
+
+..
+
+.. bpo: 19329
+.. date: 9465
+.. nonce: f3o3tr
+.. section: Library
+
+Optimized compiling charsets in regular expressions.
+
+..
+
+.. bpo: 22410
+.. date: 9464
+.. nonce: 99YFdd
+.. section: Library
+
+Module level functions in the re module now cache compiled locale-dependent
+regular expressions taking into account the locale.
+
+..
+
+.. bpo: 8876
+.. date: 9463
+.. nonce: A83Av4
+.. section: Library
+
+distutils now falls back to copying files when hard linking doesn't work.
+This allows use with special filesystems such as VirtualBox shared folders.
+
+..
+
+.. bpo: 9351
+.. date: 9462
+.. nonce: u5UI-6
+.. section: Library
+
+Defaults set with set_defaults on an argparse subparser are no longer
+ignored when also set on the parent parser.
+
+..
+
+.. bpo: 20421
+.. date: 9461
+.. nonce: iR0S1s
+.. section: Library
+
+Add a .version() method to SSL sockets exposing the actual protocol version
+in use.
+
+..
+
+.. bpo: 22435
+.. date: 9460
+.. nonce: Mrmeio
+.. section: Library
+
+Fix a file descriptor leak when SocketServer bind fails.
+
+..
+
+.. bpo: 13664
+.. date: 9459
+.. nonce: tjVs9o
+.. section: Library
+
+GzipFile now supports non-ascii Unicode filenames.
+
+..
+
+.. bpo: 13096
+.. date: 9458
+.. nonce: rsailB
+.. section: Library
+
+Fixed segfault in CTypes POINTER handling of large values.
+
+..
+
+.. bpo: 11694
+.. date: 9457
+.. nonce: JuDrch
+.. section: Library
+
+Raise ConversionError in xdrlib as documented.  Patch by Filip Gruszczyński
+and Claudiu Popa.
+
+..
+
+.. bpo: 1686
+.. date: 9456
+.. nonce: -w9zEU
+.. section: Library
+
+Fix string.Template when overriding the pattern attribute.
+
+..
+
+.. bpo: 11866
+.. date: 9455
+.. nonce: xrvbIC
+.. section: Library
+
+Eliminated race condition in the computation of names for new threads.
+
+..
+
+.. bpo: 22219
+.. date: 9454
+.. nonce: l9Enh9
+.. section: Library
+
+The zipfile module CLI now adds entries for directories (including empty
+directories) in ZIP file.
+
+..
+
+.. bpo: 22449
+.. date: 9453
+.. nonce: nFW_Fl
+.. section: Library
+
+In the ssl.SSLContext.load_default_certs, consult the environmental
+variables SSL_CERT_DIR and SSL_CERT_FILE on Windows.
+
+..
+
+.. bpo: 8473
+.. date: 9452
+.. nonce: QcfDba
+.. section: Library
+
+doctest.testfile now uses universal newline mode to read the test file.
+
+..
+
+.. bpo: 20076
+.. date: 9451
+.. nonce: -7OIVB
+.. section: Library
+
+Added non derived UTF-8 aliases to locale aliases table.
+
+..
+
+.. bpo: 20079
+.. date: 9450
+.. nonce: qM949O
+.. section: Library
+
+Added locales supported in glibc 2.18 to locale alias table.
+
+..
+
+.. bpo: 22530
+.. date: 9449
+.. nonce: 4EcK4x
+.. section: Library
+
+Allow the ``group()`` method of regular expression match objects to take a
+``long`` as an index.
+
+..
+
+.. bpo: 22517
+.. date: 9448
+.. nonce: qT6-aB
+.. section: Library
+
+When an io.BufferedRWPair object is deallocated, clear its weakrefs.
+
+..
+
+.. bpo: 10510
+.. date: 9447
+.. nonce: N-ntcD
+.. section: Library
+
+distutils register and upload methods now use HTML standards compliant CRLF
+line endings.
+
+..
+
+.. bpo: 9850
+.. date: 9446
+.. nonce: D-UnVi
+.. section: Library
+
+Fixed macpath.join() for empty first component.  Patch by Oleg Oshmyan.
+
+..
+
+.. bpo: 20912
+.. date: 9445
+.. nonce: cAq3mZ
+.. section: Library
+
+Now directories added to ZIP file have correct Unix and MS-DOS directory
+attributes.
+
+..
+
+.. bpo: 21866
+.. date: 9444
+.. nonce: hSc4wM
+.. section: Library
+
+ZipFile.close() no longer writes ZIP64 central directory records if
+allowZip64 is false.
+
+..
+
+.. bpo: 22415
+.. date: 9443
+.. nonce: VKFghV
+.. section: Library
+
+Fixed debugging output of the GROUPREF_EXISTS opcode in the re module.
+
+..
+
+.. bpo: 22423
+.. date: 9442
+.. nonce: Rtb4oT
+.. section: Library
+
+Unhandled exception in thread no longer causes unhandled AttributeError when
+sys.stderr is None.
+
+..
+
+.. bpo: 22419
+.. date: 9441
+.. nonce: FqH4aC
+.. section: Library
+
+Limit the length of incoming HTTP request in wsgiref server to 65536 bytes
+and send a 414 error code for higher lengths. Patch contributed by Devin
+Cook.
+
+..
+
+.. bpo: 0
+.. date: 9440
+.. nonce: y7r3O2
+.. section: Library
+
+Lax cookie parsing in http.cookies could be a security issue when combined
+with non-standard cookie handling in some Web browsers.  Reported by Sergey
+Bobrov.
+
+..
+
+.. bpo: 21147
+.. date: 9439
+.. nonce: w9DE17
+.. section: Library
+
+sqlite3 now raises an exception if the request contains a null character
+instead of truncating it.  Based on patch by Victor Stinner.
+
+..
+
+.. bpo: 21951
+.. date: 9438
+.. nonce: 3vS4LK
+.. section: Library
+
+Fixed a crash in Tkinter on AIX when called Tcl command with empty string or
+tuple argument.
+
+..
+
+.. bpo: 21951
+.. date: 9437
+.. nonce: _CCC4v
+.. section: Library
+
+Tkinter now most likely raises MemoryError instead of crash if the memory
+allocation fails.
+
+..
+
+.. bpo: 22226
+.. date: 9436
+.. nonce: T1ZMPY
+.. section: Library
+
+First letter no longer is stripped from the "status" key in the result of
+Treeview.heading().
+
+..
+
+.. bpo: 22051
+.. date: 9435
+.. nonce: cUjFqL
+.. section: Library
+
+turtledemo no longer reloads examples to re-run them. Initialization of
+variables and gui setup should be done in main(), which is called each time
+a demo is run, but not on import.
+
+..
+
+.. bpo: 21597
+.. date: 9434
+.. nonce: aPTCWJ
+.. section: Library
+
+The separator between the turtledemo text pane and the drawing canvas can
+now be grabbed and dragged with a mouse.  The code text pane can be widened
+to easily view or copy the full width of the text.  The canvas can be
+widened on small screens.  Original patches by Jan Kanis and Lita Cho.
+
+..
+
+.. bpo: 18132
+.. date: 9433
+.. nonce: 2R2nwM
+.. section: Library
+
+Turtledemo buttons no longer disappear when the window is shrunk.  Original
+patches by Jan Kanis and Lita Cho.
+
+..
+
+.. bpo: 22312
+.. date: 9432
+.. nonce: WP13o8
+.. section: Library
+
+Fix ntpath.splitdrive IndexError.
+
+..
+
+.. bpo: 22216
+.. date: 9431
+.. nonce: Cmalu6
+.. section: Library
+
+smtplib now resets its state more completely after a quit.  The most obvious
+consequence of the previous behavior was a STARTTLS failure during a
+connect/starttls/quit/connect/starttls sequence.
+
+..
+
+.. bpo: 21305
+.. date: 9430
+.. nonce: Fl8I5B
+.. section: Library
+
+os.urandom now caches a fd to /dev/urandom. This is a PEP 466 backport from
+Python 3.
+
+..
+
+.. bpo: 21307
+.. date: 9429
+.. nonce: U7iiqX
+.. section: Library
+
+As part of PEP 466, backport hashlib.algorithms_guaranteed and
+hashlib.algorithms_available.
+
+..
+
+.. bpo: 22259
+.. date: 9428
+.. nonce: 6v9wLm
+.. section: Library
+
+Fix segfault when attempting to fopen a file descriptor corresponding to a
+directory.
+
+..
+
+.. bpo: 22236
+.. date: 9427
+.. nonce: 1utXkg
+.. section: Library
+
+Fixed Tkinter images copying operations in NoDefaultRoot mode.
+
+..
+
+.. bpo: 22191
+.. date: 9426
+.. nonce: 1K-CmD
+.. section: Library
+
+Fixed warnings.__all__.
+
+..
+
+.. bpo: 21308
+.. date: 9425
+.. nonce: _z9b8i
+.. section: Library
+
+Backport numerous features from Python's ssl module. This is part of PEP
+466.
+
+..
+
+.. bpo: 15696
+.. date: 9424
+.. nonce: PTwXYJ
+.. section: Library
+
+Add a __sizeof__ implementation for mmap objects on Windows.
+
+..
+
+.. bpo: 8797
+.. date: 9423
+.. nonce: aJcIPu
+.. section: Library
+
+Raise HTTPError on failed Basic Authentication immediately. Initial patch by
+Sam Bull.
+
+..
+
+.. bpo: 22068
+.. date: 9422
+.. nonce: wCdaW0
+.. section: Library
+
+Avoided reference loops with Variables and Fonts in Tkinter.
+
+..
+
+.. bpo: 21448
+.. date: 9421
+.. nonce: THJSYB
+.. section: Library
+
+Changed FeedParser feed() to avoid O(N**2) behavior when parsing long line.
+Original patch by Raymond Hettinger.
+
+..
+
+.. bpo: 17923
+.. date: 9420
+.. nonce: YI_QjG
+.. section: Library
+
+glob() patterns ending with a slash no longer match non-dirs on AIX.  Based
+on patch by Delhallt.
+
+..
+
+.. bpo: 21975
+.. date: 9419
+.. nonce: MI8ntO
+.. section: Library
+
+Fixed crash when using uninitialized sqlite3.Row (in particular when
+unpickling pickled sqlite3.Row).  sqlite3.Row is now initialized in the
+__new__() method.
+
+..
+
+.. bpo: 16037
+.. date: 9418
+.. nonce: q6A9-W
+.. section: Library
+
+HTTPMessage.readheaders() raises an HTTPException when more than 100 headers
+are read. Patch by Jyrki Pulliainen and Daniel Eriksson.
+
+..
+
+.. bpo: 21580
+.. date: 9417
+.. nonce: BUIf7o
+.. section: Library
+
+Now Tkinter correctly handles binary "data" and "maskdata" configure options
+of tkinter.PhotoImage.
+
+..
+
+.. bpo: 19612
+.. date: 9416
+.. nonce: xvU6AH
+.. section: Library
+
+subprocess.communicate() now also ignores EINVAL when using at least two
+pipes.
+
+..
+
+.. bpo: 0
+.. date: 9415
+.. nonce: aDlT3j
+.. section: Library
+
+Fix repr(_socket.socket) on Windows 64-bit: don't fail with OverflowError on
+closed socket.
+
+..
+
+.. bpo: 16133
+.. date: 9414
+.. nonce: 6cKWd2
+.. section: Library
+
+The asynchat.async_chat.handle_read() method now ignores socket.error()
+exceptions with blocking I/O errors: EAGAIN, EALREADY, EINPROGRESS, or
+EWOULDBLOCK.
+
+..
+
+.. bpo: 21990
+.. date: 9413
+.. nonce: _lujpf
+.. section: Library
+
+Clean-up unnecessary and slow inner class definition in saxutils
+(Contributed by Alex Gaynor).
+
+..
+
+.. bpo: 1730136
+.. date: 9412
+.. nonce: sqWp2M
+.. section: Library
+
+Fix the comparison between a tkFont.Font and an object of another kind.
+
+..
+
+.. bpo: 19884
+.. date: 9411
+.. nonce: 6cbo0V
+.. section: Library
+
+readline: Disable the meta modifier key if stdout is not a terminal to not
+write the ANSI sequence "\033[1034h" into stdout. This sequence is used on
+some terminal (ex: TERM=xterm-256color") to enable support of 8 bit
+characters.
+
+..
+
+.. bpo: 22017
+.. date: 9410
+.. nonce: BojGgr
+.. section: Library
+
+Correct reference counting error in the initialization of the _warnings
+module.
+
+..
+
+.. bpo: 21868
+.. date: 9409
+.. nonce: q_ZIvF
+.. section: Library
+
+Prevent turtle crash when undo buffer set to a value less than one.
+
+..
+
+.. bpo: 21151
+.. date: 9408
+.. nonce: T7tb9Q
+.. section: Library
+
+Fixed a segfault in the _winreg module when ``None`` is passed as a
+``REG_BINARY`` value to SetValueEx.  Patch by John Ehresman.
+
+..
+
+.. bpo: 21090
+.. date: 9407
+.. nonce: 20Ooif
+.. section: Library
+
+io.FileIO.readall() does not ignore I/O errors anymore. Before, it ignored
+I/O errors if at least the first C call read() succeed.
+
+..
+
+.. bpo: 19870
+.. date: 9406
+.. nonce: 3QBvmj
+.. section: Library
+
+BaseCookie now parses 'secure' and 'httponly' flags. Backport of issue
+#16611.
+
+..
+
+.. bpo: 21923
+.. date: 9405
+.. nonce: hXnoZa
+.. section: Library
+
+Prevent AttributeError in distutils.sysconfig.customize_compiler due to
+possible uninitialized _config_vars.
+
+..
+
+.. bpo: 21323
+.. date: 9404
+.. nonce: yRf1v6
+.. section: Library
+
+Fix CGIHTTPServer to again handle scripts in CGI subdirectories, broken by
+the fix for security issue #19435.  Patch by Zach Byrne.
+
+..
+
+.. bpo: 22199
+.. date: 9403
+.. nonce: SIwKds
+.. section: Library
+
+Make get_makefile_filename() available in Lib/sysconfig.py for 2.7 to match
+other versions of sysconfig.
+
+..
+
+.. bpo: 3068
+.. date: 9402
+.. nonce: TYjXTA
+.. section: IDLE
+
+Add Idle extension configuration dialog to Options menu. Changes are written
+to HOME/.idlerc/config-extensions.cfg. Original patch by Tal Einat.
+
+..
+
+.. bpo: 16233
+.. date: 9401
+.. nonce: sOadNo
+.. section: IDLE
+
+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 is entered and a
+module is opened, a corresponding browser is also opened.
+
+..
+
+.. bpo: 4832
+.. date: 9400
+.. nonce: GRKi9M
+.. section: IDLE
+
+Save As to type Python files automatically adds .py to the name you enter
+(even if your system does not display it).  Some systems automatically add
+.txt when type is Text files.
+
+..
+
+.. bpo: 21986
+.. date: 9399
+.. nonce: 04GUv2
+.. section: IDLE
+
+Code objects are not normally pickled by the pickle module. To match this,
+they are no longer pickled when running under Idle.
+
+..
+
+.. bpo: 22221
+.. date: 9398
+.. nonce: d87SuA
+.. section: IDLE
+
+IDLE now ignores the source encoding declaration on the second line if the
+first line contains anything except a comment.
+
+..
+
+.. bpo: 17390
+.. date: 9397
+.. nonce: I4vHFh
+.. section: IDLE
+
+Adjust Editor window title; remove 'Python', move version to end.
+
+..
+
+.. bpo: 14105
+.. date: 9396
+.. nonce: -FZwYH
+.. section: IDLE
+
+Idle debugger breakpoints no longer disappear when inserting or deleting
+lines.
+
+..
+
+.. bpo: 22381
+.. date: 9395
+.. nonce: 6ngdZW
+.. section: Library
+
+Update zlib to 1.2.8.
+
+..
+
+.. bpo: 22176
+.. date: 9394
+.. nonce: rgbRyg
+.. section: Library
+
+Update the ctypes module's libffi to v3.1.  This release adds support for
+the Linux AArch64 and POWERPC ELF ABIv2 little endian architectures.
+
+..
+
+.. bpo: 10712
+.. date: 9393
+.. nonce: rnd0oc
+.. section: Tools/Demos
+
+2to3 has a new "asserts" fixer that replaces deprecated names of unittest
+methods (e.g. failUnlessEqual -> assertEqual).
+
+..
+
+.. bpo: 22221
+.. date: 9392
+.. nonce: vONLqA
+.. section: Tools/Demos
+
+2to3 and the findnocoding.py script now ignore the source encoding
+declaration on the second line if the first line contains anything except a
+comment.
+
+..
+
+.. bpo: 22201
+.. date: 9391
+.. nonce: k1Awbh
+.. section: Tools/Demos
+
+Command-line interface of the zipfile module now correctly extracts ZIP
+files with directory entries.  Patch by Ryan Wilson.
+
+..
+
+.. bpo: 22236
+.. date: 9390
+.. nonce: ginJSI
+.. section: Tests
+
+Tkinter tests now don't reuse default root window.  New root window is
+created for every test class.
+
+..
+
+.. bpo: 18004
+.. date: 9389
+.. nonce: jPXten
+.. section: Tests
+
+test_overflow in test_list by mistake consumed 40 GiB of memory on 64-bit
+systems.
+
+..
+
+.. bpo: 21976
+.. date: 9388
+.. nonce: Slq6se
+.. section: Tests
+
+Fix test_ssl to accept LibreSSL version strings.  Thanks to William Orr.
+
+..
+
+.. bpo: 22770
+.. date: 9387
+.. nonce: FxAh91
+.. section: Tests
+
+Prevent some Tk segfaults on OS X when running gui tests.
+
+..
+
+.. bpo: 20221
+.. date: 9386
+.. nonce: _yAetK
+.. section: Build
+
+Removed conflicting (or circular) hypot definition when compiled with VS
+2010 or above.  Initial patch by Tabrez Mohammed.
+
+..
+
+.. bpo: 16537
+.. date: 9385
+.. nonce: llFo71
+.. section: Build
+
+Check whether self.extensions is empty in setup.py. Patch by Jonathan
+Hosmer.
+
+..
+
+.. bpo: 0
+.. date: 9384
+.. nonce: YZUllw
+.. section: Build
+
+The documentation Makefile no longer automatically downloads Sphinx. Users
+are now required to have Sphinx already installed to build the
+documentation.
+
+..
+
+.. bpo: 21958
+.. date: 9383
+.. nonce: 3rq4qR
+.. section: Build
+
+Define HAVE_ROUND when building with Visual Studio 2013 and above.  Patch by
+Zachary Turner.
+
+..
+
+.. bpo: 15759
+.. date: 9382
+.. nonce: iGLR6O
+.. section: Build
+
+"make suspicious", "make linkcheck" and "make doctest" in Doc/ now display
+special message when and only when there are failures.
+
+..
+
+.. bpo: 21166
+.. date: 9381
+.. nonce: KAl7aO
+.. section: Build
+
+Prevent possible segfaults and other random failures of python
+``--generate-posix-vars`` in pybuilddir.txt build target.
+
+..
+
+.. bpo: 18096
+.. date: 9380
+.. nonce: ELyAUJ
+.. section: Build
+
+Fix library order returned by python-config.
+
+..
+
+.. bpo: 17219
+.. date: 9379
+.. nonce: q8ueQ0
+.. section: Build
+
+Add library build dir for Python extension cross-builds.
+
+..
+
+.. bpo: 22877
+.. date: 9378
+.. nonce: nq_snR
+.. section: Build
+
+PEP 477 - OS X installer now installs pip.
+
+..
+
+.. bpo: 22878
+.. date: 9377
+.. nonce: y4UnOy
+.. section: Build
+
+PEP 477 - "make install" and "make altinstall" can now install or upgrade
+pip, using the bundled pip provided by the backported ensurepip module.  A
+configure option, --with-ensurepip[=upgrade|install|no], is available to set
+the option for subsequent installs; the default for Python 2 in "no" (do not
+install or upgrade pip).  The option can also be set with "make [alt]install
+ENSUREPIP=[upgrade|install|no]".
+
+..
+
+.. bpo: 17896
+.. date: 9376
+.. nonce: o79rHM
+.. section: Windows
+
+The Windows build scripts now expect external library sources to be in
+``PCbuild\..\externals`` rather than ``PCbuild\..\..``.
+
+..
+
+.. bpo: 17717
+.. date: 9375
+.. nonce: y1zoye
+.. section: Windows
+
+The Windows build scripts now use a copy of NASM pulled from svn.python.org
+to build OpenSSL.
+
+..
+
+.. bpo: 22644
+.. date: 9374
+.. nonce: gosBki
+.. section: Windows
+
+The bundled version of OpenSSL has been updated to 1.0.1j.
diff --git a/Misc/NEWS.d/2.7.rst b/Misc/NEWS.d/2.7.rst
new file mode 100644
index 0000000..fad0537
--- /dev/null
+++ b/Misc/NEWS.d/2.7.rst
@@ -0,0 +1,46 @@
+.. bpo: 0
+.. date: 8096
+.. nonce: HgSXMh
+.. release date: 2010-07-03
+.. section: Core and Builtins
+
+Prevent assignment to set literals.
+
+..
+
+.. bpo: 1868
+.. date: 8095
+.. nonce: 8rTkvC
+.. section: Library
+
+Eliminate subtle timing issues in thread-local objects by getting rid of the
+cached copy of thread-local attribute dictionary.
+
+..
+
+.. bpo: 9125
+.. date: 8094
+.. nonce: bm97Ws
+.. section: Library
+
+Add recognition of 'except ... as ...' syntax to parser module.
+
+..
+
+.. bpo: 7673
+.. date: 8093
+.. nonce: cDxsD2
+.. section: Library
+
+Fix security vulnerability (CVE-2010-2089) in the audioop module, ensure
+that the input string length is a multiple of the frame size.
+
+..
+
+.. bpo: 9075
+.. date: 8092
+.. nonce: kvxac2
+.. section: Library
+
+In the ssl module, remove the setting of a ``debug`` flag on an OpenSSL
+structure.
diff --git a/Misc/NEWS.d/2.7a1.rst b/Misc/NEWS.d/2.7a1.rst
new file mode 100644
index 0000000..e2a28e0
--- /dev/null
+++ b/Misc/NEWS.d/2.7a1.rst
@@ -0,0 +1,5751 @@
+.. bpo: 7419
+.. date: 7759
+.. nonce: k1cFGq
+.. release date: 2009-12-05
+.. section: Core and Builtins
+
+``locale.setlocale()`` could crash the interpreter on Windows when called
+with invalid values.
+
+..
+
+.. bpo: 3382
+.. date: 7758
+.. nonce: gtmT4T
+.. section: Core and Builtins
+
+'F' formatting for float and complex now convert the result to upper case.
+This only affects 'inf' and 'nan', since 'f' no longer converts to 'g' for
+large values.
+
+..
+
+.. bpo: 0
+.. date: 7757
+.. nonce: fw7KHO
+.. section: Core and Builtins
+
+Remove switch from "%f" formatting to "%g" formatting for floats larger than
+1e50 in absolute value.
+
+..
+
+.. bpo: 0
+.. date: 7756
+.. nonce: npJH0D
+.. section: Core and Builtins
+
+Remove restrictions on precision when formatting floats.  E.g., "%.120g" %
+1e-100 used to raise OverflowError, but now gives the requested 120
+significant digits instead.
+
+..
+
+.. bpo: 0
+.. date: 7755
+.. nonce: Z3-djS
+.. section: Core and Builtins
+
+Add Py3k warnings for parameter names in parentheses.
+
+..
+
+.. bpo: 7362
+.. date: 7754
+.. nonce: wy5JgV
+.. section: Core and Builtins
+
+Give a proper error message for ``def f((x)=3): pass``.
+
+..
+
+.. bpo: 7085
+.. date: 7753
+.. nonce: 1mo7hs
+.. section: Core and Builtins
+
+Fix crash when importing some extensions in a thread on MacOSX 10.6.
+
+..
+
+.. bpo: 7117
+.. date: 7752
+.. nonce: 3_1LKC
+.. section: Core and Builtins
+
+``repr(x)`` for a float x returns a result based on the shortest decimal
+string that's guaranteed to round back to x under correct rounding (with
+round-half-to-even rounding mode).  Previously it gave a string based on
+rounding x to 17 decimal digits.  repr(x) for a complex number behaves
+similarly.  On platforms where the correctly-rounded strtod and dtoa code is
+not supported (see below), repr is unchanged.
+
+..
+
+.. bpo: 7117
+.. date: 7751
+.. nonce: 6am3Rw
+.. section: Core and Builtins
+
+On almost all platforms: float-to-string and string-to-float conversions
+within Python are now correctly rounded.  Places these conversions occur
+include: str for floats and complex numbers; the float and complex
+constructors; old-style and new-style numeric formatting; serialization and
+deserialization of floats and complex numbers using marshal, pickle and
+json; parsing of float and imaginary literals in Python code;
+Decimal-to-float conversion.
+
+The conversions use a Python-adapted version of David Gay's well-known
+dtoa.c, providing correctly-rounded strtod and dtoa C functions.  This code
+is supported on Windows, and on Unix-like platforms using gcc, icc or suncc
+as the C compiler.  There may be a small number of platforms on which
+correct operation of this code cannot be guaranteed, so the code is not
+used: notably, this applies to platforms where the C double format is not
+IEEE 754 binary64, and to platforms on x86 hardware where the x87 FPU is set
+to 64-bit precision and Python's configure script is unable to determine how
+to change the FPU precision.  On these platforms conversions use the
+platform strtod and dtoa, as before.
+
+..
+
+.. bpo: 7117
+.. date: 7750
+.. nonce: 2KoEdA
+.. section: Core and Builtins
+
+Backport round implementation from Python 3.x.  ``round()`` now uses the
+correctly-rounded string <-> float conversions described above (when
+available), and so produces correctly rounded results that will display
+nicely under the float repr.  There are two related small changes: (1) round
+now accepts any class with an ``__index__()`` method for its second argument
+(but no longer accepts floats for the second argument), and (2) an
+excessively large second integer argument (e.g., ``round(1.234, 10**100)``)
+no longer raises an exception.
+
+..
+
+.. bpo: 1757126
+.. date: 7749
+.. nonce: W4QhUw
+.. section: Core and Builtins
+
+Fix the cyrillic-asian alias for the ptcp154 encoding.
+
+..
+
+.. bpo: 0
+.. date: 7748
+.. nonce: mZpsla
+.. section: Core and Builtins
+
+Fix several issues with ``compile()``.  The input can now contain Windows
+and Mac newlines and is no longer required to end in a newline.
+
+..
+
+.. bpo: 0
+.. date: 7747
+.. nonce: sUbwH3
+.. section: Core and Builtins
+
+Remove length limitation when constructing a complex number from a unicode
+string.
+
+..
+
+.. bpo: 7244
+.. date: 7746
+.. nonce: qAVavO
+.. section: Core and Builtins
+
+``itertools.izip_longest()`` no longer ignores exceptions raised during the
+formation of an output tuple.
+
+..
+
+.. bpo: 1087418
+.. date: 7745
+.. nonce: dyFZpg
+.. section: Core and Builtins
+
+Boost performance of bitwise operations for longs.
+
+..
+
+.. bpo: 1722344
+.. date: 7744
+.. nonce: QqabuR
+.. section: Core and Builtins
+
+``threading._shutdown()`` is now called in ``Py_Finalize()``, which fixes
+the problem of some exceptions being thrown at shutdown when the interpreter
+is killed.  Patch by Adam Olsen.
+
+..
+
+.. bpo: 7168
+.. date: 7743
+.. nonce: pYjKia
+.. section: Core and Builtins
+
+Document ``PyFloat_AsString()`` and ``PyFloat_AsReprString()``, and note
+that they are unsafe and deprecated.
+
+..
+
+.. bpo: 7120
+.. date: 7742
+.. nonce: Ft2RxW
+.. section: Core and Builtins
+
+logging: Remove import of multiprocessing which is causing crash in GAE.
+
+..
+
+.. bpo: 7140
+.. date: 7741
+.. nonce: KNTZLI
+.. section: Core and Builtins
+
+The ``__dict__`` of a module should not be cleared unless the module is the
+only object holding a reference to it.
+
+..
+
+.. bpo: 1754094
+.. date: 7740
+.. nonce: I0gQmd
+.. section: Core and Builtins
+
+Improve the stack depth calculation in the compiler.  There should be no
+other effect than a small decrease in memory use.  Patch by Christopher Tur
+Lesniewski-Laas.
+
+..
+
+.. bpo: 7084
+.. date: 7739
+.. nonce: kUk5-B
+.. section: Core and Builtins
+
+Fix a (very unlikely) crash when printing a list from one thread, and
+mutating it from another one.  Patch by Scott Dial.
+
+..
+
+.. bpo: 1571184
+.. date: 7738
+.. nonce: EqTH98
+.. section: Core and Builtins
+
+The Unicode database contains properties for more characters. The tables for
+code points representing numeric values, white spaces or line breaks are now
+generated from the official Unicode Character Database files, and include
+information from the Unihan.txt file.
+
+..
+
+.. bpo: 7050
+.. date: 7737
+.. nonce: DM5jYL
+.. section: Core and Builtins
+
+Fix a SystemError when trying to use unpacking and augmented assignment.
+
+..
+
+.. bpo: 5329
+.. date: 7736
+.. nonce: bkqqa-
+.. section: Core and Builtins
+
+Fix ``os.popen*`` regression from 2.5 with commands as a sequence running
+through the shell.  Patch by Jean-Paul Calderone and Jani Hakala.
+
+..
+
+.. bpo: 7019
+.. date: 7735
+.. nonce: sCk9wW
+.. section: Core and Builtins
+
+Raise ValueError when unmarshalling bad long data, instead of producing
+internally inconsistent Python longs.
+
+..
+
+.. bpo: 6990
+.. date: 7734
+.. nonce: 19LcUf
+.. section: Core and Builtins
+
+Fix ``threading.local`` subclasses leaving old state around after a
+reference cycle GC which could be recycled by new locals.
+
+..
+
+.. bpo: 6300
+.. date: 7733
+.. nonce: 6gPIDy
+.. section: Core and Builtins
+
+unicode.encode, unicode.decode, str.decode, and str.encode now take keyword
+arguments.
+
+..
+
+.. bpo: 6922
+.. date: 7732
+.. nonce: _MuLB9
+.. section: Core and Builtins
+
+Fix an infinite loop when trying to decode an invalid UTF-32 stream with a
+non-raising error handler like "replace" or "ignore".
+
+..
+
+.. bpo: 6713
+.. date: 7731
+.. nonce: 89EnqN
+.. section: Core and Builtins
+
+Improve performance of base 10 int -> string and long -> string conversions.
+
+..
+
+.. bpo: 1590864
+.. date: 7730
+.. nonce: 8aex1L
+.. section: Core and Builtins
+
+Fix potential deadlock when mixing threads and fork().
+
+..
+
+.. bpo: 6844
+.. date: 7729
+.. nonce: oWxRbN
+.. section: Core and Builtins
+
+Do not emit DeprecationWarnings when accessing a "message" attribute on
+exceptions that was set explicitly.
+
+..
+
+.. bpo: 6846
+.. date: 7728
+.. nonce: q7b-Oy
+.. section: Core and Builtins
+
+Fix bug where bytearray.pop() returns negative integers.
+
+..
+
+.. bpo: 0
+.. date: 7727
+.. nonce: GQUdwf
+.. section: Core and Builtins
+
+``classmethod()`` no longer checks if its argument is callable.
+
+..
+
+.. bpo: 6750
+.. date: 7726
+.. nonce: _Pln31
+.. section: Core and Builtins
+
+A text file opened with ``io.open()`` could duplicate its output when
+writing from multiple threads at the same time.
+
+..
+
+.. bpo: 6704
+.. date: 7725
+.. nonce: OpSyKo
+.. section: Core and Builtins
+
+Improve the col_offset in AST for "for" statements with a target of tuple
+unpacking.
+
+..
+
+.. bpo: 6707
+.. date: 7724
+.. nonce: DXTwpb
+.. section: Core and Builtins
+
+``dir()`` on an uninitialized module caused a crash.
+
+..
+
+.. bpo: 6540
+.. date: 7723
+.. nonce: NsoPR8
+.. section: Core and Builtins
+
+Fixed crash for ``bytearray.translate()`` with invalid parameters.
+
+..
+
+.. bpo: 6573
+.. date: 7722
+.. nonce: VBwjtf
+.. section: Core and Builtins
+
+``set.union()`` stopped processing inputs if an instance of self occurred in
+the argument chain.
+
+..
+
+.. bpo: 1616979
+.. date: 7721
+.. nonce: YHyBWF
+.. section: Core and Builtins
+
+Added the cp720 (Arabic DOS) encoding.
+
+..
+
+.. bpo: 6070
+.. date: 7720
+.. nonce: -wC7vb
+.. section: Core and Builtins
+
+On posix platforms import no longer copies the execute bit from the .py file
+to the .pyc file if it is set.  Patch by Marco N.
+
+..
+
+.. bpo: 4618
+.. date: 7719
+.. nonce: B-bSRk
+.. section: Core and Builtins
+
+When unicode arguments are passed to ``print()``, the default separator and
+end should be unicode also.
+
+..
+
+.. bpo: 6119
+.. date: 7718
+.. nonce: 94FrLZ
+.. section: Core and Builtins
+
+Fixed an incorrect Py3k warning about order comparisons of built-in
+functions and methods.
+
+..
+
+.. bpo: 6347
+.. date: 7717
+.. nonce: VBKK7h
+.. section: Core and Builtins
+
+Include inttypes.h as well as stdint.h in pyport.h.  This fixes a build
+failure on HP-UX: int32_t and uint32_t are defined in inttypes.h instead of
+stdint.h on that platform.
+
+..
+
+.. bpo: 4856
+.. date: 7716
+.. nonce: RhxQ0Y
+.. section: Core and Builtins
+
+Remove checks for win NT.
+
+..
+
+.. bpo: 2016
+.. date: 7715
+.. nonce: ZTf6oS
+.. section: Core and Builtins
+
+Fixed a crash in a corner case where the dictionary of keyword arguments
+could be modified during the function call setup.
+
+..
+
+.. bpo: 0
+.. date: 7714
+.. nonce: uhA2zk
+.. section: Core and Builtins
+
+Removed the ipaddr module.
+
+..
+
+.. bpo: 6329
+.. date: 7713
+.. nonce: j7fwCJ
+.. section: Core and Builtins
+
+Fixed iteration for memoryview objects (it was being blocked because it
+wasn't recognized as a sequence).
+
+..
+
+.. bpo: 6289
+.. date: 7712
+.. nonce: zQqm8L
+.. section: Core and Builtins
+
+Encoding errors from ``compile()`` were being masked.
+
+..
+
+.. bpo: 0
+.. date: 7711
+.. nonce: s6jnqm
+.. section: Core and Builtins
+
+When no module is given in a relative import, the module field of the
+ImportFrom AST node is now None instead of an empty string.
+
+..
+
+.. bpo: 0
+.. date: 7710
+.. nonce: dFzVxY
+.. section: Core and Builtins
+
+Assignment to None using import statements now raises a SyntaxError.
+
+..
+
+.. bpo: 4547
+.. date: 7709
+.. nonce: 4fI3tX
+.. section: Core and Builtins
+
+When debugging a very large function, it was not always possible to update
+the lineno attribute of the current frame.
+
+..
+
+.. bpo: 5330
+.. date: 7708
+.. nonce: HPvn6G
+.. section: Core and Builtins
+
+C functions called with keyword arguments were not reported by the various
+profiling modules (profile, cProfile).  Patch by Hagen Fürstenau.
+
+..
+
+.. bpo: 5982
+.. date: 7707
+.. nonce: c_mt6_
+.. section: Core and Builtins
+
+staticmethod and classmethod now expose the wrapped function with
+``__func__``.
+
+..
+
+.. bpo: 0
+.. date: 7706
+.. nonce: w77qV4
+.. section: Core and Builtins
+
+Added support for multiple context managers in the same with-statement.
+Deprecated ``contextlib.nested()`` which is no longer needed.
+
+..
+
+.. bpo: 6101
+.. date: 7705
+.. nonce: 4tQTZX
+.. section: Core and Builtins
+
+A new opcode, SETUP_WITH, has been added to speed up the with statement and
+correctly lookup the __enter__ and __exit__ special methods.
+
+..
+
+.. bpo: 5829
+.. date: 7704
+.. nonce: Zt7a5o
+.. section: Core and Builtins
+
+complex("1e500") no longer raises OverflowError.  This makes it consistent
+with float("1e500") and interpretation of real and imaginary literals.
+
+..
+
+.. bpo: 3527
+.. date: 7703
+.. nonce: Eyqquq
+.. section: Core and Builtins
+
+Removed Py_WIN_WIDE_FILENAMES which is not used any more.
+
+..
+
+.. bpo: 0
+.. date: 7702
+.. nonce: 2yrH_o
+.. section: Core and Builtins
+
+``__instancecheck__()`` and ``__subclasscheck__()`` are now completely
+ignored on classic classes and instances.
+
+..
+
+.. bpo: 5994
+.. date: 7701
+.. nonce: woNvhx
+.. section: Core and Builtins
+
+The marshal module now has docstrings.
+
+..
+
+.. bpo: 5981
+.. date: 7700
+.. nonce: LkapH9
+.. section: Core and Builtins
+
+Fix three minor inf/nan issues in float.fromhex:
+
+(1) inf and nan strings with trailing whitespace were incorrectly rejected;
+(2) parsing of strings representing infinities and nans was locale aware;
+and (3) the interpretation of fromhex('-nan') didn't match that of
+float('-nan').
+
+..
+
+.. bpo: 5920
+.. date: 7699
+.. nonce: ZoI1xB
+.. section: Core and Builtins
+
+For ``float.__format__()``, change the behavior with the empty presentation
+type (that is, not one of 'e', 'f', 'g', or 'n') to be like 'g' but with at
+least one decimal point and with a default precision of 12. Previously, the
+behavior the same but with a default precision of 6. This more closely
+matches ``str()``, and reduces surprises when adding alignment flags to the
+empty presentation type. This also affects the new complex.__format__ in the
+same way.
+
+..
+
+.. bpo: 5890
+.. date: 7698
+.. nonce: sbCAtW
+.. section: Core and Builtins
+
+In subclasses of 'property' the __doc__ attribute was shadowed by
+classtype's, even if it was None.  property now inserts the __doc__ into the
+subclass instance __dict__.
+
+..
+
+.. bpo: 4426
+.. date: 7697
+.. nonce: Ny5_Rg
+.. section: Core and Builtins
+
+The UTF-7 decoder was too strict and didn't accept some legal sequences.
+Patch by Nick Barnes and Victor Stinner.
+
+..
+
+.. bpo: 1588
+.. date: 7696
+.. nonce: 8-XCeQ
+.. section: Core and Builtins
+
+Add complex.__format__. For example, ``format(complex(1, 2./3), '.5')`` now
+produces a sensible result.
+
+..
+
+.. bpo: 5864
+.. date: 7695
+.. nonce: UElc0c
+.. section: Core and Builtins
+
+Fix empty format code formatting for floats so that it never gives more than
+the requested number of significant digits.
+
+..
+
+.. bpo: 5793
+.. date: 7694
+.. nonce: 0DjdQj
+.. section: Core and Builtins
+
+Rationalize isdigit / isalpha / tolower, etc. Includes new Py_ISDIGIT /
+Py_ISALPHA / Py_TOLOWER, etc. in pctypes.h.
+
+..
+
+.. bpo: 4971
+.. date: 7693
+.. nonce: G5AyFS
+.. section: Core and Builtins
+
+Fix titlecase for characters that are their own titlecase, but not their own
+uppercase.
+
+..
+
+.. bpo: 5835
+.. date: 7692
+.. nonce: SBkH58
+.. section: Core and Builtins
+
+Deprecate PyOS_ascii_formatd and replace it with _PyOS_double_to_string or
+PyOS_double_to_string.
+
+..
+
+.. bpo: 5283
+.. date: 7691
+.. nonce: p_vsQP
+.. section: Core and Builtins
+
+Setting __class__ in __del__ caused a segfault.
+
+..
+
+.. bpo: 5816
+.. date: 7690
+.. nonce: 5WDdX0
+.. section: Core and Builtins
+
+``complex(repr(z))`` now recovers z exactly, even when z involves nans, infs
+or negative zeros.
+
+..
+
+.. bpo: 0
+.. date: 7689
+.. nonce: ld0JdT
+.. section: Core and Builtins
+
+Implement PEP 378, Format Specifier for Thousands Separator, for floats,
+ints, and longs.
+
+..
+
+.. bpo: 5515
+.. date: 7688
+.. nonce: H1aLcI
+.. section: Core and Builtins
+
+'n' formatting for ints, longs, and floats handles leading zero formatting
+poorly.
+
+..
+
+.. bpo: 5772
+.. date: 7687
+.. nonce: tXqVft
+.. section: Core and Builtins
+
+For float.__format__, don't add a trailing ".0" if we're using no type code
+and we have an exponent.
+
+..
+
+.. bpo: 3166
+.. date: 7686
+.. nonce: oL_y0x
+.. section: Core and Builtins
+
+Make long -> float (and int -> float) conversions correctly rounded.
+
+..
+
+.. bpo: 5787
+.. date: 7685
+.. nonce: iV1WRE
+.. section: Core and Builtins
+
+``object.__getattribute__(some_type, "__bases__")`` segfaulted on some
+built-in types.
+
+..
+
+.. bpo: 1869
+.. date: 7684
+.. nonce: cQ4HTO
+.. section: Core and Builtins
+
+Fix a couple of minor round() issues.  ``round(5e15+1)`` was giving 5e15+2;
+``round(-0.0)`` was losing the sign of the zero.
+
+..
+
+.. bpo: 5759
+.. date: 7683
+.. nonce: j3dL9W
+.. section: Core and Builtins
+
+float() didn't call __float__ on str subclasses.
+
+..
+
+.. bpo: 5704
+.. date: 7682
+.. nonce: TDk8Ck
+.. section: Core and Builtins
+
+The "-3" command-line option now implies "-t".
+
+..
+
+.. bpo: 2170
+.. date: 7681
+.. nonce: 35irN6
+.. section: Core and Builtins
+
+Refactored ``xml.dom.minidom.normalize``, increasing both its clarity and
+its speed.
+
+..
+
+.. bpo: 2396
+.. date: 7680
+.. nonce: v-oJ0Q
+.. section: Core and Builtins
+
+The memoryview object was backported from Python 3.1.
+
+..
+
+.. bpo: 0
+.. date: 7679
+.. nonce: wxbCGj
+.. section: Core and Builtins
+
+Fix a problem in PyErr_NormalizeException that leads to "undetected errors"
+when hitting the recursion limit under certain circumstances.
+
+..
+
+.. bpo: 1665206
+.. date: 7678
+.. nonce: D9xyVJ
+.. section: Core and Builtins
+
+Remove the last eager import in _warnings.c and make it lazy.
+
+..
+
+.. bpo: 4865
+.. date: 7677
+.. nonce: 9T7IVK
+.. section: Core and Builtins
+
+On MacOSX /Library/Python/2.7/site-packages is added to the end sys.path,
+for compatibility with the system install of Python.
+
+..
+
+.. bpo: 4688
+.. date: 7676
+.. nonce: k7jSS9
+.. section: Core and Builtins
+
+Add a heuristic so that tuples and dicts containing only untrackable objects
+are not tracked by the garbage collector. This can reduce the size of
+collections and therefore the garbage collection overhead on long-running
+programs, depending on their particular use of datatypes.
+
+..
+
+.. bpo: 5512
+.. date: 7675
+.. nonce: 0akWHy
+.. section: Core and Builtins
+
+Rewrite PyLong long division algorithm (x_divrem) to improve its
+performance.  Long divisions and remainder operations are now between 50%
+and 150% faster.
+
+..
+
+.. bpo: 4258
+.. date: 7674
+.. nonce: VzQaoh
+.. section: Core and Builtins
+
+Make it possible to use base 2**30 instead of base 2**15 for the internal
+representation of integers, for performance reasons.  Base 2**30 is enabled
+by default on 64-bit machines.  Add --enable-big-digits option to configure,
+which overrides the default.  Add sys.long_info structseq to provide
+information about the internal format.
+
+..
+
+.. bpo: 4034
+.. date: 7673
+.. nonce: WdZVvE
+.. section: Core and Builtins
+
+Fix weird attribute error messages of the traceback object. (As a result
+traceback.__members__ no longer exists.)
+
+..
+
+.. bpo: 4474
+.. date: 7672
+.. nonce: d-gOFs
+.. section: Core and Builtins
+
+PyUnicode_FromWideChar now converts characters outside the BMP to surrogate
+pairs, on systems with sizeof(wchar_t) == 4 and sizeof(Py_UNICODE) == 2.
+
+..
+
+.. bpo: 5237
+.. date: 7671
+.. nonce: TC5vHj
+.. section: Core and Builtins
+
+Allow auto-numbered fields in str.format(). For example: ``'{} {}'.format(1,
+2) == '1 2'``.
+
+..
+
+.. bpo: 3652
+.. date: 7670
+.. nonce: LS7lbT
+.. section: Core and Builtins
+
+Make the 'line' argument for ``warnings.showwarning()`` a requirement.
+Means the DeprecationWarning from Python 2.6 can go away.
+
+..
+
+.. bpo: 5247
+.. date: 7669
+.. nonce: FherHz
+.. section: Core and Builtins
+
+Improve error message when unknown format codes are used when using
+``str.format()`` with str, unicode, long, int, and float arguments.
+
+..
+
+.. bpo: 0
+.. date: 7668
+.. nonce: UMEr-l
+.. section: Core and Builtins
+
+Running Python with the -3 option now also warns about classic division for
+ints and longs.
+
+..
+
+.. bpo: 5260
+.. date: 7667
+.. nonce: Em88-S
+.. section: Core and Builtins
+
+Long integers now consume less memory: average saving is 2 bytes per long on
+a 32-bit system and 6 bytes per long on a 64-bit system.
+
+..
+
+.. bpo: 5186
+.. date: 7666
+.. nonce: j1is78
+.. section: Core and Builtins
+
+Reduce hash collisions for objects with no __hash__ method by rotating the
+object pointer by 4 bits to the right.
+
+..
+
+.. bpo: 4575
+.. date: 7665
+.. nonce: kbytK5
+.. section: Core and Builtins
+
+Fix Py_IS_INFINITY macro to work correctly on x87 FPUs: it now forces its
+argument to double before testing for infinity.
+
+..
+
+.. bpo: 4978
+.. date: 7664
+.. nonce: 1CHApa
+.. section: Core and Builtins
+
+Passing keyword arguments as unicode strings is now allowed.
+
+..
+
+.. bpo: 1242657
+.. date: 7663
+.. nonce: XDCnZa
+.. section: Core and Builtins
+
+the __len__() and __length_hint__() calls in several tools were suppressing
+all exceptions.  These include list(), filter(), map(), zip(), and
+bytearray().
+
+..
+
+.. bpo: 0
+.. date: 7662
+.. nonce: cFart9
+.. section: Core and Builtins
+
+os.ftruncate raises OSErrors instead of IOErrors for consistency with other
+os functions.
+
+..
+
+.. bpo: 4991
+.. date: 7661
+.. nonce: ALUxl0
+.. section: Core and Builtins
+
+Passing invalid file descriptors to io.FileIO now raises an OSError.
+
+..
+
+.. bpo: 4807
+.. date: 7660
+.. nonce: zBKF-Y
+.. section: Core and Builtins
+
+Port the _winreg module to Windows CE.
+
+..
+
+.. bpo: 4935
+.. date: 7659
+.. nonce: FCRsi7
+.. section: Core and Builtins
+
+The overflow checking code in the expandtabs() method common to str, bytes
+and bytearray could be optimized away by the compiler, letting the
+interpreter segfault instead of raising an error.
+
+..
+
+.. bpo: 3720
+.. date: 7658
+.. nonce: AhqraF
+.. section: Core and Builtins
+
+Fix a crash when an iterator modifies its class and removes its __next__
+method.
+
+..
+
+.. bpo: 4893
+.. date: 7657
+.. nonce: 6cqBTr
+.. section: Core and Builtins
+
+Use NT threading on CE.
+
+..
+
+.. bpo: 4915
+.. date: 7656
+.. nonce: 687QYF
+.. section: Core and Builtins
+
+Port sysmodule to Windows CE.
+
+..
+
+.. bpo: 4074
+.. date: 7655
+.. nonce: P6W6AU
+.. section: Core and Builtins
+
+Change the criteria for doing a full garbage collection (i.e. collecting the
+oldest generation) so that allocating lots of objects without destroying
+them does not show quadratic performance. Based on a proposal by Martin von
+Löwis at http://mail.python.org/pipermail/python-dev/2008-June/080579.html.
+
+..
+
+.. bpo: 4850
+.. date: 7654
+.. nonce: I2rQxz
+.. section: Core and Builtins
+
+Change COUNT_ALLOCS variables to Py_ssize_t.
+
+..
+
+.. bpo: 1180193
+.. date: 7653
+.. nonce: pCkOCz
+.. section: Core and Builtins
+
+When importing a module from a .pyc (or .pyo) file with an existing .py
+counterpart, override the co_filename attributes of all code objects if the
+original filename is obsolete (which can happen if the file has been
+renamed, moved, or if it is accessed through different paths).  Patch by
+Ziga Seilnacht and Jean-Paul Calderone.
+
+..
+
+.. bpo: 4075
+.. date: 7652
+.. nonce: Ccn4nr
+.. section: Core and Builtins
+
+Use ``OutputDebugStringW()`` in Py_FatalError.
+
+..
+
+.. bpo: 4797
+.. date: 7651
+.. nonce: X8BGMK
+.. section: Core and Builtins
+
+IOError.filename was not set when _fileio.FileIO failed to open file with
+`str' filename on Windows.
+
+..
+
+.. bpo: 3680
+.. date: 7650
+.. nonce: sDYVgF
+.. section: Core and Builtins
+
+Reference cycles created through a dict, set or deque iterator did not get
+collected.
+
+..
+
+.. bpo: 4701
+.. date: 7649
+.. nonce: KCWdVt
+.. section: Core and Builtins
+
+PyObject_Hash now implicitly calls PyType_Ready on types where the tp_hash
+and tp_dict slots are both NULL.
+
+..
+
+.. bpo: 4764
+.. date: 7648
+.. nonce: 9uJcCX
+.. section: Core and Builtins
+
+With io.open, IOError.filename is set when trying to open a directory on
+POSIX systems.
+
+..
+
+.. bpo: 4764
+.. date: 7647
+.. nonce: m87cQp
+.. section: Core and Builtins
+
+IOError.filename is set when trying to open a directory on POSIX systems.
+
+..
+
+.. bpo: 4759
+.. date: 7646
+.. nonce: jS_IUc
+.. section: Core and Builtins
+
+None is now allowed as the first argument of ``bytearray.translate()``.  It
+was always allowed for ``bytes.translate()``.
+
+..
+
+.. bpo: 0
+.. date: 7645
+.. nonce: NJHPw5
+.. section: Core and Builtins
+
+Added test case to ensure attempts to read from a file opened for writing
+fail.
+
+..
+
+.. bpo: 2467
+.. date: 7644
+.. nonce: hTdCDO
+.. section: Core and Builtins
+
+gc.DEBUG_STATS reported invalid elapsed times. Also, always print elapsed
+times, not only when some objects are uncollectable/unreachable. Original
+patch by Neil Schemenauer.
+
+..
+
+.. bpo: 3439
+.. date: 7643
+.. nonce: FDqFob
+.. section: Core and Builtins
+
+Add a bit_length method to int and long.
+
+..
+
+.. bpo: 2183
+.. date: 7642
+.. nonce: N4TSpS
+.. section: Core and Builtins
+
+Simplify and optimize bytecode for list comprehensions.  Original patch by
+Neal Norwitz.
+
+..
+
+.. bpo: 4597
+.. date: 7641
+.. nonce: tAXQWn
+.. section: Core and Builtins
+
+Fixed exception handling when the __exit__ function of a context manager
+returns a value that cannot be converted to a bool.
+
+..
+
+.. bpo: 4597
+.. date: 7640
+.. nonce: nQOPGV
+.. section: Core and Builtins
+
+Fixed several opcodes that weren't always propagating exceptions.
+
+..
+
+.. bpo: 4445
+.. date: 7639
+.. nonce: irvsqZ
+.. section: Core and Builtins
+
+Replace ``sizeof(PyStringObject)`` with ``offsetof(PyStringObject, ob_sval)
++ 1`` when allocating memory for str instances.  On a typical machine this
+saves 3 bytes of memory (on average) per string allocation.
+
+..
+
+.. bpo: 3996
+.. date: 7638
+.. nonce: MarU4T
+.. section: Core and Builtins
+
+On Windows, the PyOS_CheckStack function would cause the interpreter to
+abort ("Fatal Python error: Could not reset the stack!") instead of throwing
+a MemoryError.
+
+..
+
+.. bpo: 3689
+.. date: 7637
+.. nonce: CNYxlz
+.. section: Core and Builtins
+
+The list reversed iterator now supports __length_hint__ instead of __len__.
+Behavior now matches other reversed iterators.
+
+..
+
+.. bpo: 4367
+.. date: 7636
+.. nonce: fmKFqn
+.. section: Core and Builtins
+
+Python would segfault during compiling when the unicodedata module couldn't
+be imported and \N escapes were present.
+
+..
+
+.. bpo: 4233
+.. date: 7635
+.. nonce: iQj976
+.. section: Core and Builtins
+
+Changed semantic of ``_fileio.FileIO``'s ``close()`` method on file objects
+with closefd=False. The file descriptor is still kept open but the file
+object behaves like a closed file. The ``FileIO`` object also got a new
+readonly attribute ``closefd``.
+
+..
+
+.. bpo: 4348
+.. date: 7634
+.. nonce: 8mh_bw
+.. section: Core and Builtins
+
+Some bytearray methods returned that didn't cause any change to the
+bytearray, returned the same bytearray instead of a copy.
+
+..
+
+.. bpo: 4317
+.. date: 7633
+.. nonce: GGUHMc
+.. section: Core and Builtins
+
+Fixed a crash in the ``imageop.rgb2rgb8()`` function.
+
+..
+
+.. bpo: 4230
+.. date: 7632
+.. nonce: Ndmrfx
+.. section: Core and Builtins
+
+If ``__getattr__`` is a descriptor, it now functions correctly.
+
+..
+
+.. bpo: 4048
+.. date: 7631
+.. nonce: KmD4Fy
+.. section: Core and Builtins
+
+The parser module now correctly validates relative imports.
+
+..
+
+.. bpo: 4225
+.. date: 7630
+.. nonce: 7zU-HH
+.. section: Core and Builtins
+
+``from __future__ import unicode_literals`` didn't work in an exec
+statement.
+
+..
+
+.. bpo: 4176
+.. date: 7629
+.. nonce: qhcxIs
+.. section: Core and Builtins
+
+Fixed a crash when pickling an object which ``__reduce__`` method does not
+return iterators for the 4th and 5th items.
+
+..
+
+.. bpo: 4209
+.. date: 7628
+.. nonce: iE6R1Z
+.. section: Core and Builtins
+
+Enabling unicode_literals and the print_function in the same __future__
+import didn't work.
+
+..
+
+.. bpo: 0
+.. date: 7627
+.. nonce: EZzjhE
+.. section: Core and Builtins
+
+Using ``nonlocal`` as a variable name will now raise a Py3k SyntaxWarning
+because it is a reserved word in 3.x.
+
+..
+
+.. bpo: 0
+.. date: 7626
+.. nonce: 6ugG-L
+.. section: Core and Builtins
+
+On windows, ``os.chdir()`` given unicode was not working if
+GetCurrentDirectoryW returned a path longer than MAX_PATH. (But It's
+doubtful this code path is really executed because I cannot move to such
+directory on win2k)
+
+..
+
+.. bpo: 4069
+.. date: 7625
+.. nonce: KZVhcT
+.. section: Core and Builtins
+
+When ``set.remove(element)`` is used with a set element, the element is
+temporarily replaced with an equivalent frozenset.  But the eventual
+KeyError would always report the empty ``frozenset()`` as the missing key.
+Now it correctly refers to the initial element.
+
+..
+
+.. bpo: 4509
+.. date: 7624
+.. nonce: s_M7sU
+.. section: Core and Builtins
+
+Various issues surrounding resize of bytearray objects to which there are
+buffer exports.
+
+..
+
+.. bpo: 4748
+.. date: 7623
+.. nonce: VdAMxK
+.. section: Core and Builtins
+
+Lambda generators no longer return a value.
+
+..
+
+.. bpo: 3582
+.. date: 7622
+.. nonce: lPZMhV
+.. section: Core and Builtins
+
+Use native TLS functions on Windows
+
+..
+
+.. bpo: 0
+.. date: 7621
+.. nonce: -7Es2G
+.. section: Core and Builtins
+
+The re.sub(), re.subn() and re.split() functions now accept a flags
+parameter.
+
+..
+
+.. bpo: 3845
+.. date: 7620
+.. nonce: 1zs3tX
+.. section: Core and Builtins
+
+In PyRun_SimpleFileExFlags avoid invalid memory access with short file
+names.
+
+..
+
+.. bpo: 1113244
+.. date: 7619
+.. nonce: 0youo-
+.. section: Core and Builtins
+
+Py_XINCREF, Py_DECREF, Py_XDECREF: Add `do { ... } while (0)' to avoid
+compiler warnings.
+
+..
+
+.. bpo: 5705
+.. date: 7618
+.. nonce: sV9axH
+.. section: Core and Builtins
+
+os.setuid() would not accept values > 2**31-1 but pwd.getpwnam() returned
+them on 64bit platforms.
+
+..
+
+.. bpo: 5108
+.. date: 7617
+.. nonce: dAFFuh
+.. section: Core and Builtins
+
+Handle %s like %S and %R in PyUnicode_FromFormatV(): Call
+PyUnicode_DecodeUTF8() once, remember the result and output it in a second
+step. This avoids problems with counting UTF-8 bytes that ignores the effect
+of using the replace error handler in PyUnicode_DecodeUTF8().
+
+..
+
+.. bpo: 3739
+.. date: 7616
+.. nonce: M2kAQq
+.. section: Core and Builtins
+
+The unicode-internal encoder now reports the number of characters consumed
+like any other encoder (instead of the number of bytes).
+
+..
+
+.. bpo: 2422
+.. date: 7615
+.. nonce: wzigzB
+.. section: Core and Builtins
+
+When compiled with the ``--with-valgrind`` option, the pymalloc allocator
+will be automatically disabled when running under Valgrind.  This gives
+improved memory leak detection when running under Valgrind, while taking
+advantage of pymalloc at other times.
+
+..
+
+.. bpo: 0
+.. date: 7614
+.. nonce: hEj501
+.. section: Library
+
+Add count() and reverse() methods to collections.deque().
+
+..
+
+.. bpo: 0
+.. date: 7613
+.. nonce: uRsKsO
+.. section: Library
+
+Fix variations of extending deques:  d.extend(d)  d.extendleft(d)  d+=d
+
+..
+
+.. bpo: 6986
+.. date: 7612
+.. nonce: SdGPr9
+.. section: Library
+
+Fix crash in the JSON C accelerator when called with the wrong parameter
+types.  Patch by Victor Stinner.
+
+..
+
+.. bpo: 0
+.. date: 7611
+.. nonce: NFsq2E
+.. section: Library
+
+logging: Added optional "secure" parameter to SMTPHandler, to enable use of
+TLS with authentication credentials.
+
+..
+
+.. bpo: 1923
+.. date: 7610
+.. nonce: knrn4i
+.. section: Library
+
+Fixed the removal of meaningful spaces when PKG-INFO is generated in
+Distutils. Patch by Stephen Emslie.
+
+..
+
+.. bpo: 4120
+.. date: 7609
+.. nonce: 3cH4Sr
+.. section: Library
+
+Drop reference to CRT from manifest when building extensions with
+msvc9compiler.
+
+..
+
+.. bpo: 7333
+.. date: 7608
+.. nonce: 2fKr4C
+.. section: Library
+
+The ``posix`` module gains an ``initgroups()`` function providing access to
+the initgroups(3) C library call on Unix systems which implement it. Patch
+by Jean-Paul Calderone.
+
+..
+
+.. bpo: 7408
+.. date: 7607
+.. nonce: rgPHXu
+.. section: Library
+
+Fixed distutils.tests.sdist so it doesn't check for group ownership when the
+group is not forced, because the group may be different from the user's
+group and inherit from its container when the test is run.
+
+..
+
+.. bpo: 1515
+.. date: 7606
+.. nonce: xkpoux
+.. section: Library
+
+Enable use of deepcopy() with instance methods.  Patch by Robert Collins.
+
+..
+
+.. bpo: 7403
+.. date: 7605
+.. nonce: FwNMdd
+.. section: Library
+
+logging: Fixed possible race condition in lock creation.
+
+..
+
+.. bpo: 6845
+.. date: 7604
+.. nonce: TrdLOB
+.. section: Library
+
+Add restart support for binary upload in ftplib.  The ``storbinary()``
+method of FTP and FTP_TLS objects gains an optional "rest" argument.  Patch
+by Pablo Mouzo.
+
+..
+
+.. bpo: 5788
+.. date: 7603
+.. nonce: eXZYrC
+.. section: Library
+
+``datetime.timedelta`` objects get a new ``total_seconds()`` method
+returning the total number of seconds in the duration.  Patch by Brian
+Quinlan.
+
+..
+
+.. bpo: 6615
+.. date: 7602
+.. nonce: L1bwX7
+.. section: Library
+
+logging: Used weakrefs in internal handler list.
+
+..
+
+.. bpo: 1488943
+.. date: 7601
+.. nonce: bGsZyB
+.. section: Library
+
+``difflib.Differ`` doesn't always add hints for tab characters.
+
+..
+
+.. bpo: 6123
+.. date: 7600
+.. nonce: 7jPAMR
+.. section: Library
+
+tarfile now opens empty archives correctly and consistently raises ReadError
+on empty files.
+
+..
+
+.. bpo: 7354
+.. date: 7599
+.. nonce: JiC3ff
+.. section: Library
+
+distutils.tests.test_msvc9compiler - dragfullwindows can be 2.
+
+..
+
+.. bpo: 5037
+.. date: 7598
+.. nonce: OuRtI7
+.. section: Library
+
+Proxy the __unicode__ special method to __unicode__ instead of __str__.
+
+..
+
+.. bpo: 7341
+.. date: 7597
+.. nonce: ePPgs_
+.. section: Library
+
+Close the internal file object in the TarFile constructor in case of an
+error.
+
+..
+
+.. bpo: 7293
+.. date: 7596
+.. nonce: O5Dcu2
+.. section: Library
+
+``distutils.test_msvc9compiler`` is fixed to work on any fresh Windows box.
+Help provided by David Bolen.
+
+..
+
+.. bpo: 7328
+.. date: 7595
+.. nonce: I7W1pc
+.. section: Library
+
+pydoc no longer corrupts sys.path when run with the '-m' switch.
+
+..
+
+.. bpo: 2054
+.. date: 7594
+.. nonce: CqsOHR
+.. section: Library
+
+ftplib now provides an FTP_TLS class to do secure FTP using TLS or SSL.
+Patch by Giampaolo Rodola'.
+
+..
+
+.. bpo: 4969
+.. date: 7593
+.. nonce: etEJDg
+.. section: Library
+
+The mimetypes module now reads the MIME database from the registry under
+Windows.  Patch by Gabriel Genellina.
+
+..
+
+.. bpo: 6816
+.. date: 7592
+.. nonce: FkQHgU
+.. section: Library
+
+runpy now provides a run_path function that allows Python code to execute
+file paths that refer to source or compiled Python files as well as
+zipfiles, directories and other valid sys.path entries that contain a
+__main__.py file. This allows applications that run other Python scripts to
+support the same flexibility as the CPython command line itself.
+
+..
+
+.. bpo: 7318
+.. date: 7591
+.. nonce: 5Q1hkQ
+.. section: Library
+
+multiprocessing now uses a timeout when it fails to establish a connection
+with another process, rather than looping endlessly. The default timeout is
+20 seconds, which should be amply sufficient for local connections.
+
+..
+
+.. bpo: 7197
+.. date: 7590
+.. nonce: 0cm1Qm
+.. section: Library
+
+Allow unittest.TextTestRunner objects to be pickled and unpickled.  This
+fixes crashes under Windows when trying to run test_multiprocessing in
+verbose mode.
+
+..
+
+.. bpo: 7282
+.. date: 7589
+.. nonce: PGSXX5
+.. section: Library
+
+Fix a memory leak when an RLock was used in a thread other than those
+started through ``threading.Thread`` (for example, using
+``thread.start_new_thread()``.
+
+..
+
+.. bpo: 7264
+.. date: 7588
+.. nonce: gXNBWt
+.. section: Library
+
+Fix a possible deadlock when deallocating thread-local objects which are
+part of a reference cycle.
+
+..
+
+.. bpo: 7211
+.. date: 7587
+.. nonce: wuvMbi
+.. section: Library
+
+Allow 64-bit values for the ``ident`` and ``data`` fields of kevent objects
+on 64-bit systems.  Patch by Michael Broghton.
+
+..
+
+.. bpo: 6896
+.. date: 7586
+.. nonce: rXqOUx
+.. section: Library
+
+``mailbox.Maildir`` now invalidates its internal cache each time a
+modification is done through it.  This fixes inconsistencies and test
+failures on systems with slightly bogus mtime behaviour.
+
+..
+
+.. bpo: 7246
+.. date: 7585
+.. nonce: vVWoc1
+.. section: Library
+
+getpass now properly flushes input before reading from stdin so that
+existing input does not confuse it and lead to incorrect entry or an
+IOError.  It also properly flushes it afterwards to avoid the terminal
+echoing the input afterwards on OSes such as Solaris. (See also: bpo-7208)
+
+..
+
+.. bpo: 7233
+.. date: 7584
+.. nonce: Bfx5J4
+.. section: Library
+
+Fix a number of two-argument Decimal methods to make sure that they accept
+an int or long as the second argument.  Also fix buggy handling of large
+arguments (those with coefficient longer than the current precision) in
+shift and rotate.
+
+..
+
+.. bpo: 4750
+.. date: 7583
+.. nonce: qsUXdQ
+.. section: Library
+
+Store the basename of the original filename in the gzip FNAME header as
+required by RFC 1952.
+
+..
+
+.. bpo: 1180
+.. date: 7582
+.. nonce: ajrI93
+.. section: Library
+
+Added a new global option to ignore ~/.pydistutils.cfg in Distutils.
+
+..
+
+.. bpo: 7218
+.. date: 7581
+.. nonce: _fm9R5
+.. section: Library
+
+Fix test_site for win32, the directory comparison was done with an
+uppercase.
+
+..
+
+.. bpo: 7205
+.. date: 7580
+.. nonce: QiP1X-
+.. section: Library
+
+Fix a possible deadlock when using a BZ2File object from several threads at
+once.
+
+..
+
+.. bpo: 7071
+.. date: 7579
+.. nonce: QFsV-G
+.. section: Library
+
+byte-compilation in Distutils is now done with respect to
+sys.dont_write_bytecode.
+
+..
+
+.. bpo: 7066
+.. date: 7578
+.. nonce: FQTn5e
+.. section: Library
+
+archive_util.make_archive now restores the cwd if an error is raised.
+Initial patch by Ezio Melotti.
+
+..
+
+.. bpo: 6218
+.. date: 7577
+.. nonce: GFU36I
+.. section: Library
+
+io.StringIO and io.BytesIO instances are now picklable with protocol 2.
+
+..
+
+.. bpo: 7077
+.. date: 7576
+.. nonce: NfTfRo
+.. section: Library
+
+logging: SysLogHandler now treats Unicode as per RFC 5424.
+
+..
+
+.. bpo: 7099
+.. date: 7575
+.. nonce: fxh-zw
+.. section: Library
+
+Decimal.is_normal now returns True for numbers with exponent larger than
+emax.
+
+..
+
+.. bpo: 5833
+.. date: 7574
+.. nonce: bCmU3a
+.. section: Library
+
+Fix extra space character in readline completion with the GNU readline
+library version 6.0.
+
+..
+
+.. bpo: 7133
+.. date: 7573
+.. nonce: m6rxoT
+.. section: Library
+
+SSL objects now support the new buffer API.
+
+..
+
+.. bpo: 7149
+.. date: 7572
+.. nonce: J_eq7B
+.. section: Library
+
+urllib fails on OSX in the proxy detection code.
+
+..
+
+.. bpo: 7069
+.. date: 7571
+.. nonce: v9P7a0
+.. section: Library
+
+Make inspect.isabstract() return a boolean.
+
+..
+
+.. bpo: 0
+.. date: 7570
+.. nonce: mxZpdI
+.. section: Library
+
+Add support to the ``ihooks`` module for relative imports.
+
+..
+
+.. bpo: 6894
+.. date: 7569
+.. nonce: 1peOts
+.. section: Library
+
+Fixed the issue urllib2 doesn't respect "no_proxy" environment.
+
+..
+
+.. bpo: 7086
+.. date: 7568
+.. nonce: mZidvN
+.. section: Library
+
+Added TCP support to SysLogHandler, and tidied up some anachronisms in the
+code which were a relic of 1.5.2 compatibility.
+
+..
+
+.. bpo: 7082
+.. date: 7567
+.. nonce: 0CSJXy
+.. section: Library
+
+When falling back to the MIME 'name' parameter, the correct place to look
+for it is the Content-Type header.
+
+..
+
+.. bpo: 7048
+.. date: 7566
+.. nonce: TXR5Xr
+.. section: Library
+
+Force Decimal.logb to round its result when that result is too large to fit
+in the current precision.
+
+..
+
+.. bpo: 6516
+.. date: 7565
+.. nonce: omgsNx
+.. section: Library
+
+Added owner/group support when creating tar archives in Distutils.
+
+..
+
+.. bpo: 7031
+.. date: 7564
+.. nonce: n09dXD
+.. section: Library
+
+Add ``TestCase.assert(Not)IsInstance()`` methods.
+
+..
+
+.. bpo: 6790
+.. date: 7563
+.. nonce: Z8U9rk
+.. section: Library
+
+Make it possible again to pass an ``array.array`` to
+``httplib.HTTPConnection.send``.  Patch by Kirk McDonald.
+
+..
+
+.. bpo: 6236
+.. date: 7562
+.. nonce: cfUWek
+.. section: Library
+
+Fix various failures in the `io` module under AIX and other platforms, when
+using a non-gcc compiler.  Patch by egreen. (See also: bpo-6348)
+
+..
+
+.. bpo: 6954
+.. date: 7561
+.. nonce: Xr-JVf
+.. section: Library
+
+Fixed crash when using DISTUTILS_DEBUG flag in Distutils.
+
+..
+
+.. bpo: 6851
+.. date: 7560
+.. nonce: Hvzfi2
+.. section: Library
+
+Fix urllib.urlopen crash on secondairy threads on OSX 10.6
+
+..
+
+.. bpo: 4606
+.. date: 7559
+.. nonce: mPxDNW
+.. section: Library
+
+Passing 'None' if ctypes argtype is set to POINTER(...) does now always
+result in NULL.
+
+..
+
+.. bpo: 5042
+.. date: 7558
+.. nonce: eHTDqZ
+.. section: Library
+
+ctypes Structure sub-subclass does now initialize correctly with base class
+positional arguments.
+
+..
+
+.. bpo: 6938
+.. date: 7557
+.. nonce: qq4x0H
+.. section: Library
+
+Fix a TypeError in string formatting of a multiprocessing debug message.
+
+..
+
+.. bpo: 6635
+.. date: 7556
+.. nonce: hMzo5g
+.. section: Library
+
+Fix profiler printing usage message.
+
+..
+
+.. bpo: 6856
+.. date: 7555
+.. nonce: pxRVCd
+.. section: Library
+
+Add a filter keyword argument to TarFile.add().
+
+..
+
+.. bpo: 6163
+.. date: 7554
+.. nonce: RIBPzi
+.. section: Library
+
+Fixed HP-UX runtime library dir options in distutils.unixcompiler.  Initial
+patch by Sridhar Ratnakumar and Michael Haubenwallner.
+
+..
+
+.. bpo: 6857
+.. date: 7553
+.. nonce: HdfUqZ
+.. section: Library
+
+Default format() alignment should be '>' for Decimal instances.
+
+..
+
+.. bpo: 6795
+.. date: 7552
+.. nonce: q74KXT
+.. section: Library
+
+int(Decimal('nan')) now raises ValueError instead of returning NaN or
+raising InvalidContext.  Also, fix infinite recursion in
+long(Decimal('nan')).
+
+..
+
+.. bpo: 6850
+.. date: 7551
+.. nonce: qs_7UF
+.. section: Library
+
+Fix bug in Decimal._parse_format_specifier for formats with no type
+specifier.
+
+..
+
+.. bpo: 4937
+.. date: 7550
+.. nonce: q3smbI
+.. section: Library
+
+plat-mac/bundlebuilder refers to non-existing version.plist.
+
+..
+
+.. bpo: 6838
+.. date: 7549
+.. nonce: OOrAC0
+.. section: Library
+
+Use a list to accumulate the value instead of repeatedly concatenating
+strings in httplib's HTTPResponse._read_chunked providing a significant
+speed increase when downloading large files servend with a Transfer-Encoding
+of 'chunked'.
+
+..
+
+.. bpo: 5275
+.. date: 7548
+.. nonce: -iW5eK
+.. section: Library
+
+In Cookie's Cookie.load(), properly handle non-string arguments as
+documented.
+
+..
+
+.. bpo: 2666
+.. date: 7547
+.. nonce: XO1rSx
+.. section: Library
+
+Handle BROWSER environment variable properly for unknown browser names in
+the webbrowser module.
+
+..
+
+.. bpo: 6054
+.. date: 7546
+.. nonce: 593-Mx
+.. section: Library
+
+Do not normalize stored pathnames in tarfile.
+
+..
+
+.. bpo: 6794
+.. date: 7545
+.. nonce: k5-rmk
+.. section: Library
+
+Fix Decimal.compare_total and Decimal.compare_total_mag: NaN payloads are
+now ordered by integer value rather than lexicographically.
+
+..
+
+.. bpo: 6693
+.. date: 7544
+.. nonce: _dWH_f
+.. section: Library
+
+New functions in site.py to get user/global site packages paths.
+
+..
+
+.. bpo: 0
+.. date: 7543
+.. nonce: tZF7Ai
+.. section: Library
+
+The thread.lock type now supports weak references.
+
+..
+
+.. bpo: 1356969
+.. date: 7542
+.. nonce: fTwnvR
+.. section: Library
+
+Add missing info methods in Tix.HList.
+
+..
+
+.. bpo: 1522587
+.. date: 7541
+.. nonce: z2n84F
+.. section: Library
+
+New constants and methods for the Tix.Grid widget.
+
+..
+
+.. bpo: 1250469
+.. date: 7540
+.. nonce: Mbak0x
+.. section: Library
+
+Fix the return value of Tix.PanedWindow.panes.
+
+..
+
+.. bpo: 1119673
+.. date: 7539
+.. nonce: rSCSoq
+.. section: Library
+
+Do not override Tkinter.Text methods when creating a ScrolledText.
+
+..
+
+.. bpo: 6665
+.. date: 7538
+.. nonce: 4ep0tD
+.. section: Library
+
+Fix fnmatch to properly match filenames with newlines in them.
+
+..
+
+.. bpo: 1135
+.. date: 7537
+.. nonce: 3A5Z-R
+.. section: Library
+
+Add the XView and YView mix-ins to avoid duplicating the xview* and yview*
+methods.
+
+..
+
+.. bpo: 6629
+.. date: 7536
+.. nonce: 095djT
+.. section: Library
+
+Fix a data corruption issue in the new `io` package, which could occur when
+writing to a BufferedRandom object (e.g. a file opened in "rb+" or "wb+"
+mode) after having buffered a certain amount of data for reading. This bug
+was not present in the pure Python implementation.
+
+..
+
+.. bpo: 4660
+.. date: 7535
+.. nonce: xyTC5J
+.. section: Library
+
+If a multiprocessing.JoinableQueue.put() was preempted, it was possible to
+get a spurious 'task_done() called too many times' error.
+
+..
+
+.. bpo: 1628205
+.. date: 7534
+.. nonce: Bkm9lB
+.. section: Library
+
+Socket file objects returned by socket.socket.makefile() now properly
+handles EINTR within the read, readline, write & flush methods.  The
+socket.sendall() method now properly handles interrupted system calls.
+
+..
+
+.. bpo: 6595
+.. date: 7533
+.. nonce: 5kBbXa
+.. section: Library
+
+The Decimal constructor now allows arbitrary Unicode decimal digits in
+input, as recommended by the standard.  Previously it was restricted to
+accepting [0-9].
+
+..
+
+.. bpo: 6511
+.. date: 7532
+.. nonce: Qzfkov
+.. section: Library
+
+ZipFile now raises BadZipfile (instead of an IOError) when opening an empty
+or very small file.
+
+..
+
+.. bpo: 6553
+.. date: 7531
+.. nonce: Tr4HDD
+.. section: Library
+
+Fixed a crash in cPickle.load(), when given a file-like object containing
+incomplete data.
+
+..
+
+.. bpo: 6545
+.. date: 7530
+.. nonce: q91_KL
+.. section: Library
+
+Removed assert statements in distutils.Extension, so the behavior is similar
+when used with -O.
+
+..
+
+.. bpo: 0
+.. date: 7529
+.. nonce: QiwXfr
+.. section: Library
+
+unittest has been split up into a package.  All old names should still work.
+
+..
+
+.. bpo: 6431
+.. date: 7528
+.. nonce: tKBkPb
+.. section: Library
+
+Make Fraction type return NotImplemented when it doesn't know how to handle
+a comparison without loss of precision.  Also add correct handling of
+infinities and nans for comparisons with float.
+
+..
+
+.. bpo: 6415
+.. date: 7527
+.. nonce: QOMg1q
+.. section: Library
+
+Fixed warnings.warn segfault on bad formatted string.
+
+..
+
+.. bpo: 6466
+.. date: 7526
+.. nonce: j5IKKm
+.. section: Library
+
+Now distutils.cygwinccompiler and distutils.emxccompiler uses the same
+refactored function to get gcc/ld/dllwrap versions numbers.  It's
+``distutils.util.get_compiler_versions()``.  Added deprecation warnings for
+the obsolete get_versions() functions.
+
+..
+
+.. bpo: 6433
+.. date: 7525
+.. nonce: FJUeBp
+.. section: Library
+
+Fixed issues with multiprocessing.pool.map hanging on empty list.
+
+..
+
+.. bpo: 6314
+.. date: 7524
+.. nonce: oq2Uzy
+.. section: Library
+
+logging: Extra checks on the "level" argument in more places.
+
+..
+
+.. bpo: 2622
+.. date: 7523
+.. nonce: khlgNf
+.. section: Library
+
+Fixed an ImportError when importing email.messsage from a standalone
+application built with py2exe or py2app.
+
+..
+
+.. bpo: 6455
+.. date: 7522
+.. nonce: xHz4mF
+.. section: Library
+
+Fixed test_build_ext under win32.
+
+..
+
+.. bpo: 6377
+.. date: 7521
+.. nonce: Or-Jam
+.. section: Library
+
+Enabled the compiler option, and deprecate its usage as an attribute.
+
+..
+
+.. bpo: 6413
+.. date: 7520
+.. nonce: dVuHyQ
+.. section: Library
+
+Fixed the log level in distutils.dist for announce.
+
+..
+
+.. bpo: 3392
+.. date: 7519
+.. nonce: M_DdFb
+.. section: Library
+
+The subprocess communicate() method no longer fails in select() when file
+descriptors are large; communicate() now uses poll() when possible.
+
+..
+
+.. bpo: 6403
+.. date: 7518
+.. nonce: kDwSzy
+.. section: Library
+
+Fixed package path usage in build_ext.
+
+..
+
+.. bpo: 5155
+.. date: 7517
+.. nonce: G_HFri
+.. section: Library
+
+multiprocessing.Process._bootstrap was unconditionally calling
+"os.close(sys.stdin.fileno())" resulting in file descriptor errors. (See
+also: bpo-5313, bpo-5331)
+
+..
+
+.. bpo: 6365
+.. date: 7516
+.. nonce: eWJ_Cl
+.. section: Library
+
+Distutils build_ext inplace mode was copying the compiled extension in a
+subdirectory if the extension name had dots.
+
+..
+
+.. bpo: 6344
+.. date: 7515
+.. nonce: l35xXH
+.. section: Library
+
+Fixed a crash of mmap.read() when passed a negative argument.
+
+..
+
+.. bpo: 5230
+.. date: 7514
+.. nonce: EhUbpW
+.. section: Library
+
+pydoc would report no documentation found if a module generated a 'not
+found' import error when loaded; it now reports the import errors. Thanks to
+Lucas Prado Melo for initial fix and collaboration on the tests.
+
+..
+
+.. bpo: 6314
+.. date: 7513
+.. nonce: g55uyy
+.. section: Library
+
+``logging.basicConfig()`` performs extra checks on the "level" argument.
+
+..
+
+.. bpo: 6164
+.. date: 7512
+.. nonce: 6QByEi
+.. section: Library
+
+Added an AIX specific linker argument in Distutils unixcompiler. Original
+patch by Sridhar Ratnakumar.
+
+..
+
+.. bpo: 6274
+.. date: 7511
+.. nonce: eQoMPr
+.. section: Library
+
+Fixed possible file descriptors leak in subprocess.py.
+
+..
+
+.. bpo: 6189
+.. date: 7510
+.. nonce: aY-0-v
+.. section: Library
+
+Restored compatibility of subprocess.py with Python 2.2.
+
+..
+
+.. bpo: 6287
+.. date: 7509
+.. nonce: i5loQG
+.. section: Library
+
+Added the license field in Distutils documentation.
+
+..
+
+.. bpo: 6286
+.. date: 7508
+.. nonce: j2u4Wn
+.. section: Library
+
+Now Distutils upload command is based on urllib2 instead of httplib,
+allowing the usage of http_proxy.
+
+..
+
+.. bpo: 6271
+.. date: 7507
+.. nonce: nMZxcE
+.. section: Library
+
+mmap tried to close invalid file handle (-1) for anonymous maps on Unix.
+
+..
+
+.. bpo: 6215
+.. date: 7506
+.. nonce: e-D-t7
+.. section: Library
+
+All bug fixes and enhancements from the Python 3.1 io library (including the
+fast C implementation) have been backported to the standard ``io`` module.
+
+..
+
+.. bpo: 6258
+.. date: 7505
+.. nonce: dwBSws
+.. section: Library
+
+Support AMD64 in bdist_msi.
+
+..
+
+.. bpo: 6252
+.. date: 7504
+.. nonce: sYTPyU
+.. section: Library
+
+Fixed bug in next rollover time computation in TimedRotatingFileHandler.
+
+..
+
+.. bpo: 6263
+.. date: 7503
+.. nonce: 5RhZzP
+.. section: Library
+
+Fixed syntax error in distutils.cygwincompiler.
+
+..
+
+.. bpo: 5201
+.. date: 7502
+.. nonce: Wt3Orj
+.. section: Library
+
+distutils.sysconfig.parse_makefile() now understands ``$$`` in Makefiles.
+This prevents compile errors when using syntax like:
+``LDFLAGS='-rpath=\$$LIB:/some/other/path'``.  Patch by Floris Bruynooghe.
+
+..
+
+.. bpo: 5767
+.. date: 7501
+.. nonce: N_vQVh
+.. section: Library
+
+Removed sgmlop support from xmlrpclib.
+
+..
+
+.. bpo: 6131
+.. date: 7500
+.. nonce: yV_s9j
+.. section: Library
+
+test_modulefinder leaked when run after test_distutils.  Patch by Hirokazu
+Yamamoto.
+
+..
+
+.. bpo: 6048
+.. date: 7499
+.. nonce: 8c4ttr
+.. section: Library
+
+Now Distutils uses the tarfile module in archive_util.
+
+..
+
+.. bpo: 6121
+.. date: 7498
+.. nonce: u-IDuG
+.. section: Library
+
+pydoc now ignores leading and trailing spaces in the argument to the 'help'
+function.
+
+..
+
+.. bpo: 0
+.. date: 7497
+.. nonce: zlEDRS
+.. section: Library
+
+In unittest, using a skipping decorator on a class is now equivalent to
+skipping every test on the class.  The ClassTestSuite class has been
+removed.
+
+..
+
+.. bpo: 6050
+.. date: 7496
+.. nonce: tl_8xc
+.. section: Library
+
+Don't fail extracting a directory from a zipfile if the directory already
+exists.
+
+..
+
+.. bpo: 5311
+.. date: 7495
+.. nonce: 0oOK6H
+.. section: Library
+
+bdist_msi can now build packages that do not depend on a specific Python
+version.
+
+..
+
+.. bpo: 1309352
+.. date: 7494
+.. nonce: WM3egI
+.. section: Library
+
+fcntl now converts its third arguments to a C `long` rather than an int,
+which makes some operations possible under 64-bit Linux (e.g. DN_MULTISHOT
+with F_NOTIFY).
+
+..
+
+.. bpo: 1424152
+.. date: 7493
+.. nonce: ajujge
+.. section: Library
+
+Fix for httplib, urllib2 to support SSL while working through proxy.
+Original patch by Christopher Li, changes made by Senthil Kumaran.
+
+..
+
+.. bpo: 1983
+.. date: 7492
+.. nonce: 4NQtSC
+.. section: Library
+
+Fix functions taking or returning a process identifier to use the dedicated
+C type ``pid_t`` instead of a C ``int``.  Some platforms have a process
+identifier type wider than the standard C integer type.
+
+..
+
+.. bpo: 4066
+.. date: 7491
+.. nonce: 2iOjZ9
+.. section: Library
+
+smtplib.SMTP_SSL._get_socket now correctly returns the socket. Patch by
+Farhan Ahmad, test by Marcin Bachry.
+
+..
+
+.. bpo: 6062
+.. date: 7490
+.. nonce: 9WLZ5z
+.. section: Library
+
+In distutils, fixed the package option of build_ext.  Feedback and tests on
+pywin32 by Tim Golden.
+
+..
+
+.. bpo: 6053
+.. date: 7489
+.. nonce: WvTL0w
+.. section: Library
+
+Fixed distutils tests on win32.  Patch by Hirokazu Yamamoto.
+
+..
+
+.. bpo: 6046
+.. date: 7488
+.. nonce: cMZ2Tc
+.. section: Library
+
+Fixed the library extension when distutils build_ext is used in place.
+Initial patch by Roumen Petrov.
+
+..
+
+.. bpo: 6041
+.. date: 7487
+.. nonce: sw57bD
+.. section: Library
+
+Now distutils `sdist` and `register` commands use `check` as a subcommand.
+
+..
+
+.. bpo: 2116
+.. date: 7486
+.. nonce: 8p8xN6
+.. section: Library
+
+Weak references and weak dictionaries now support copy()ing and
+deepcopy()ing.
+
+..
+
+.. bpo: 1655
+.. date: 7485
+.. nonce: M-5sGT
+.. section: Library
+
+Make imaplib IPv6-capable.  Patch by Derek Morr.
+
+..
+
+.. bpo: 5918
+.. date: 7484
+.. nonce: x-8Oxl
+.. section: Library
+
+Fix a crash in the parser module.
+
+..
+
+.. bpo: 1664
+.. date: 7483
+.. nonce: sRl46y
+.. section: Library
+
+Make nntplib IPv6-capable.  Patch by Derek Morr.
+
+..
+
+.. bpo: 6022
+.. date: 7482
+.. nonce: Y3dUhe
+.. section: Library
+
+A test file was created in the current working directory by test_get_outputs
+in Distutils.
+
+..
+
+.. bpo: 4050
+.. date: 7481
+.. nonce: mjHlfF
+.. section: Library
+
+inspect.findsource/getsource now raise an IOError if the 'source' file is a
+binary.  Patch by Brodie Rao, tests by Daniel Diniz.
+
+..
+
+.. bpo: 5977
+.. date: 7480
+.. nonce: xcP2Su
+.. section: Library
+
+distutils build_ext.get_outputs was not taking into account the inplace
+option.  Initial patch by kxroberto.
+
+..
+
+.. bpo: 5984
+.. date: 7479
+.. nonce: evqxbf
+.. section: Library
+
+distutils.command.build_ext.check_extensions_list checks were broken for
+old-style extensions.
+
+..
+
+.. bpo: 5971
+.. date: 7478
+.. nonce: IQW2NO
+.. section: Library
+
+StreamHandler.handleError now swallows IOErrors which occur when trying to
+print a traceback.
+
+..
+
+.. bpo: 5976
+.. date: 7477
+.. nonce: 01_dSR
+.. section: Library
+
+Fixed Distutils test_check_environ.
+
+..
+
+.. bpo: 5900
+.. date: 7476
+.. nonce: uMqjsO
+.. section: Library
+
+Ensure RUNPATH is added to extension modules with RPATH if GNU ld is used.
+Original patch by Floris Bruynooghe.
+
+..
+
+.. bpo: 5941
+.. date: 7475
+.. nonce: Xdk_6Y
+.. section: Library
+
+Distutils build_clib command was not working anymore because of an
+incomplete customization of the archiver command.  Added ARFLAGS in the
+Makefile besides AR and make Distutils use it.  Original patch by David
+Cournapeau.
+
+..
+
+.. bpo: 5955
+.. date: 7474
+.. nonce: rZM3XY
+.. section: Library
+
+aifc's close method did not close the file it wrapped, now it does.  This
+also means getfp method now returns the real fp.
+
+..
+
+.. bpo: 4875
+.. date: 7473
+.. nonce: lozHFb
+.. section: Library
+
+On win32, ctypes.util.find_library does no longer return directories.
+
+..
+
+.. bpo: 5142
+.. date: 7472
+.. nonce: XGXII1
+.. section: Library
+
+Add the ability to skip modules while stepping to pdb.
+
+..
+
+.. bpo: 1309567
+.. date: 7471
+.. nonce: wcqooN
+.. section: Library
+
+Fix linecache behavior of stripping subdirectories when looking for files
+given by a relative filename.
+
+..
+
+.. bpo: 5692
+.. date: 7470
+.. nonce: XbbGod
+.. section: Library
+
+In ``zipfile.Zipfile``, fix wrong path calculation when extracting a file to
+the root directory.
+
+..
+
+.. bpo: 5913
+.. date: 7469
+.. nonce: Gg7oAA
+.. section: Library
+
+``os.listdir()`` should fail for empty path on windows.
+
+..
+
+.. bpo: 5084
+.. date: 7468
+.. nonce: 28LIEg
+.. section: Library
+
+Unpickling now interns the attribute names of pickled objects, saving memory
+and avoiding growth in size of subsequent pickles.  Proposal and original
+patch by Jake McGuire.
+
+..
+
+.. bpo: 3002
+.. date: 7467
+.. nonce: Q2Bwlw
+.. section: Library
+
+``shutil.copyfile()`` and ``shutil.copytree()`` now raise an error when a
+named pipe is encountered, rather than blocking infinitely.
+
+..
+
+.. bpo: 3959
+.. date: 7466
+.. nonce: JOcNpv
+.. section: Library
+
+The ipaddr module has been added to the standard library. Contributed by
+Google.
+
+..
+
+.. bpo: 2245
+.. date: 7465
+.. nonce: wM6yIG
+.. section: Library
+
+aifc now skips chunk types it doesn't recognize, per spec.
+
+..
+
+.. bpo: 5874
+.. date: 7464
+.. nonce: Wrh4pp
+.. section: Library
+
+distutils.tests.test_config_cmd is not locale-sensitive anymore.
+
+..
+
+.. bpo: 4305
+.. date: 7463
+.. nonce: yHp6W2
+.. section: Library
+
+ctypes should now build again on mipsel-linux-gnu
+
+..
+
+.. bpo: 1734234
+.. date: 7462
+.. nonce: I3S_a6
+.. section: Library
+
+Massively speedup ``unicodedata.normalize()`` when the string is already in
+normalized form, by performing a quick check beforehand. Original patch by
+Rauli Ruohonen.
+
+..
+
+.. bpo: 5853
+.. date: 7461
+.. nonce: oKokIP
+.. section: Library
+
+Calling a function of the mimetypes module from several threads at once
+could hit the recursion limit if the mimetypes database hadn't been
+initialized before.
+
+..
+
+.. bpo: 5854
+.. date: 7460
+.. nonce: 8o0llM
+.. section: Library
+
+Updated __all__ to include some missing names and remove some names which
+should not be exported.
+
+..
+
+.. bpo: 5810
+.. date: 7459
+.. nonce: LFr2OK
+.. section: Library
+
+Fixed Distutils test_build_scripts so it uses
+``sysconfig.get_config_vars()``.
+
+..
+
+.. bpo: 4951
+.. date: 7458
+.. nonce: 9eKc7j
+.. section: Library
+
+Fixed failure in test_httpservers.
+
+..
+
+.. bpo: 3102
+.. date: 7457
+.. nonce: LDgk6Z
+.. section: Library
+
+All global symbols that the _ctypes extension defines are now prefixed with
+'Py' or '_ctypes'.
+
+..
+
+.. bpo: 5041
+.. date: 7456
+.. nonce: 8SM2Q6
+.. section: Library
+
+ctypes does now allow pickling wide character.
+
+..
+
+.. bpo: 5812
+.. date: 7455
+.. nonce: DG4u35
+.. section: Library
+
+For the two-argument form of the Fraction constructor, ``Fraction(m, n)``, m
+and n are permitted to be arbitrary Rational instances.
+
+..
+
+.. bpo: 5812
+.. date: 7454
+.. nonce: bdeIy6
+.. section: Library
+
+Fraction('1e6') is valid: more generally, any string that's valid for
+float() is now valid for Fraction(), with the exception of strings
+representing NaNs and infinities.
+
+..
+
+.. bpo: 5795
+.. date: 7453
+.. nonce: _5SXcu
+.. section: Library
+
+Fixed test_distutils failure on Debian ppc.
+
+..
+
+.. bpo: 5768
+.. date: 7452
+.. nonce: Lx3FBy
+.. section: Library
+
+Fixed bug in Unicode output logic and test case for same.
+
+..
+
+.. bpo: 1161031
+.. date: 7451
+.. nonce: vIHCeg
+.. section: Library
+
+Fix readwrite select flag handling: POLLPRI now results in a
+handle_expt_event call, not handle_read_event, and POLLERR and POLLNVAL now
+call handle_close, not handle_expt_event.  Also, dispatcher now has an
+'ignore_log_types' attribute for suppressing log messages, which is set to
+'warning' by default.
+
+..
+
+.. bpo: 5607
+.. date: 7450
+.. nonce: GlYpK6
+.. section: Library
+
+Fixed Distutils test_get_platform for Mac OS X fat binaries.
+
+..
+
+.. bpo: 5741
+.. date: 7449
+.. nonce: sKDQuN
+.. section: Library
+
+Don't disallow "%%" (which is an escape for "%") when setting a value in
+SafeConfigParser.
+
+..
+
+.. bpo: 5732
+.. date: 7448
+.. nonce: BxEaO_
+.. section: Library
+
+Added a new command in Distutils: check.
+
+..
+
+.. bpo: 5731
+.. date: 7447
+.. nonce: tCA4Qq
+.. section: Library
+
+Distutils bdist_wininst no longer worked on non-Windows platforms.  Initial
+patch by Paul Moore.
+
+..
+
+.. bpo: 2254
+.. date: 7446
+.. nonce: XwszLk
+.. section: Library
+
+Fix CGIHTTPServer information disclosure.  Relative paths are now collapsed
+within the url properly before looking in cgi_directories.
+
+..
+
+.. bpo: 5095
+.. date: 7445
+.. nonce: xiSRDz
+.. section: Library
+
+Added bdist_msi to the list of bdist supported formats.  Initial fix by
+Steven Bethard.
+
+..
+
+.. bpo: 1491431
+.. date: 7444
+.. nonce: aNp23F
+.. section: Library
+
+Fixed distutils.filelist.glob_to_re for edge cases.  Initial fix by Wayne
+Davison.
+
+..
+
+.. bpo: 5693
+.. date: 7443
+.. nonce: M0PEHJ
+.. section: Library
+
+TestSuite.__iter__ can now be consistently overridden in subclasses.
+
+..
+
+.. bpo: 5694
+.. date: 7442
+.. nonce: ZvKxFR
+.. section: Library
+
+Removed spurious test output in Distutils (test_clean).
+
+..
+
+.. bpo: 5471
+.. date: 7441
+.. nonce: BKf7Q4
+.. section: Library
+
+Fix os.path.expanduser() for $HOME set to '/'.
+
+..
+
+.. bpo: 1326077
+.. date: 7440
+.. nonce: if0OW2
+.. section: Library
+
+Fix the formatting of SyntaxErrors by the traceback module.
+
+..
+
+.. bpo: 1726172
+.. date: 7439
+.. nonce: e2vy9u
+.. section: Library
+
+Fix IndexError in the case of and empty response in ftplib.
+
+..
+
+.. bpo: 2625
+.. date: 7438
+.. nonce: _XRRkk
+.. section: Library
+
+Added missing iteritems() call to the for loop in mailbox.MH.get_message().
+
+..
+
+.. bpo: 5585
+.. date: 7437
+.. nonce: YAZXyy
+.. section: Library
+
+Add the ability to call an initializer to multiprocessing.manager so that
+users can install custom handlers/etc.
+
+..
+
+.. bpo: 3551
+.. date: 7436
+.. nonce: Cu6Cul
+.. section: Library
+
+Patch multiprocessing to raise a proper exception if the size of the object
+when writefile is called causes an ERROR_NO_SYSTEM_RESOURCES.  Added docs to
+note the limitation.
+
+..
+
+.. bpo: 0
+.. date: 7435
+.. nonce: xAXTK2
+.. section: Library
+
+unittest.assertNotEqual() now uses the inequality operator (!=) instead of
+the equality operator.
+
+..
+
+.. bpo: 6001
+.. date: 7434
+.. nonce: oWiMFG
+.. section: Library
+
+Test discovery for unittest. Implemented in unittest.TestLoader.discover and
+from the command line.
+
+..
+
+.. bpo: 5679
+.. date: 7433
+.. nonce: GDbJ3F
+.. section: Library
+
+The methods unittest.TestCase.addCleanup and doCleanups were added.
+addCleanup allows you to add cleanup functions that will be called
+unconditionally (after setUp if setUp fails, otherwise after tearDown). This
+allows for much simpler resource allocation and deallocation during tests.
+
+..
+
+.. bpo: 3379
+.. date: 7432
+.. nonce: yfUkbC
+.. section: Library
+
+unittest.main now takes an optional exit argument. If False main doesn't
+call sys.exit allowing it to be used from the interactive interpreter.
+
+..
+
+.. bpo: 5995
+.. date: 7431
+.. nonce: S0agLh
+.. section: Library
+
+unittest.main now takes an optional verbosity argument allowing test modules
+to be run with a higher than default verbosity.
+
+..
+
+.. bpo: 5995
+.. date: 7430
+.. nonce: zjk0GI
+.. section: Library
+
+A fix to allow you to run "python -m unittest test_module" or "python -m
+unittest test_module.TestClass" from the command line.
+
+..
+
+.. bpo: 5728
+.. date: 7429
+.. nonce: wPx88T
+.. section: Library
+
+unittest.TestResult has new startTestRun and stopTestRun methods; called
+immediately before and after a test run.
+
+..
+
+.. bpo: 5663
+.. date: 7428
+.. nonce: FdiDuS
+.. section: Library
+
+Better failure messages for unittest asserts. Default assertTrue and
+assertFalse messages are now useful. TestCase has a longMessage attribute.
+This defaults to False, but if set to True useful error messages are shown
+in addition to explicit messages passed to assert methods.
+
+..
+
+.. bpo: 3110
+.. date: 7427
+.. nonce: ybmLDs
+.. section: Library
+
+Add additional protect around SEM_VALUE_MAX for multiprocessing.
+
+..
+
+.. bpo: 0
+.. date: 7426
+.. nonce: PTlc4y
+.. section: Library
+
+In Pdb, prevent the reassignment of __builtin__._ by sys.displayhook on
+printing out values.
+
+..
+
+.. bpo: 4572
+.. date: 7425
+.. nonce: yh5ziP
+.. section: Library
+
+Added SEEK_* symbolic constants to io module.
+
+..
+
+.. bpo: 1665206
+.. date: 7424
+.. nonce: 8AhGz1
+.. section: Library
+
+Move imports in cgitb to the top of the module instead of performing them in
+functions. Helps prevent import deadlocking in threads.
+
+..
+
+.. bpo: 5647
+.. date: 7423
+.. nonce: KPmSmW
+.. section: Library
+
+MutableSet.__iand__() no longer mutates self during iteration.
+
+..
+
+.. bpo: 0
+.. date: 7422
+.. nonce: t0Sm7D
+.. section: Library
+
+Actually make the SimpleXMLRPCServer CGI handler work.
+
+..
+
+.. bpo: 2522
+.. date: 7421
+.. nonce: TTa0fi
+.. section: Library
+
+locale.format() now checks its first argument to ensure it has been passed
+only one pattern, avoiding mysterious errors where it appeared that it was
+failing to do localization.
+
+..
+
+.. bpo: 5583
+.. date: 7420
+.. nonce: GNjR3y
+.. section: Library
+
+Added optional extensions in Distutils.  Initial patch by Georg Brandl.
+
+..
+
+.. bpo: 5619
+.. date: 7419
+.. nonce: IkF1og
+.. section: Library
+
+Multiprocessing children disobey the debug flag and causes popups on windows
+buildbots.  Patch applied to work around this issue.
+
+..
+
+.. bpo: 5632
+.. date: 7418
+.. nonce: OcociP
+.. section: Library
+
+Thread.ident was None for the main thread and threads not created with the
+threading module.
+
+..
+
+.. bpo: 5400
+.. date: 7417
+.. nonce: zmbm0t
+.. section: Library
+
+Added patch for multiprocessing on netbsd compilation/support.
+
+..
+
+.. bpo: 5387
+.. date: 7416
+.. nonce: uvZ11E
+.. section: Library
+
+Fixed mmap.move crash by integer overflow.
+
+..
+
+.. bpo: 5261
+.. date: 7415
+.. nonce: py6jc9
+.. section: Library
+
+Patch multiprocessing's semaphore.c to support context manager use: "with
+multiprocessing.Lock()" works now.
+
+..
+
+.. bpo: 5177
+.. date: 7414
+.. nonce: eRUMiM
+.. section: Library
+
+Multiprocessing's SocketListener class now uses socket.SO_REUSEADDR on all
+connections so that the user no longer needs to wait 120 seconds for the
+socket to expire.
+
+..
+
+.. bpo: 0
+.. date: 7413
+.. nonce: pFfCqO
+.. section: Library
+
+Adjusted _tkinter to compile without warnings when WITH_THREAD is not
+defined (part of issue #5035).
+
+..
+
+.. bpo: 5561
+.. date: 7412
+.. nonce: 11jxV4
+.. section: Library
+
+Removed the sys.version_info shortcuts from platform's python_version() and
+python_version_tuple() since they produced different output compared to
+previous Python versions.
+
+..
+
+.. bpo: 1034053
+.. date: 7411
+.. nonce: kAn84D
+.. section: Library
+
+unittest now supports skipping tests and expected failures.
+
+..
+
+.. bpo: 0
+.. date: 7410
+.. nonce: GHZyr1
+.. section: Library
+
+The unittest.TestCase.assertRaises() method now returns a context manager
+when not given a callable so that code to be tested can be written inline
+using a with statement.
+
+..
+
+.. bpo: 2578
+.. date: 7409
+.. nonce: JvL31E
+.. section: Library
+
+The unittest.TestCase.assertEqual() now displays the differences in lists,
+tuples, dicts and sets on failure.  Many new handy type and comparison
+specific assert* methods have been added that fail with error messages
+actually useful for debugging.  Contributed in part by Google.
+
+..
+
+.. bpo: 5068
+.. date: 7408
+.. nonce: MXgCgm
+.. section: Library
+
+Fixed the tarfile._BZ2Proxy.read() method that would loop forever on
+incomplete input.  That caused tarfile.open() to hang when used with mode
+'r' or 'r:bz2' and a fileobj argument that contained no data or partial
+bzip2 compressed data.
+
+..
+
+.. bpo: 5536
+.. date: 7407
+.. nonce: 9f--jv
+.. section: Library
+
+urllib.urlretrieve makes sure to close the file it's writing to even if an
+exception occurs.
+
+..
+
+.. bpo: 5381
+.. date: 7406
+.. nonce: qzMSVP
+.. section: Library
+
+Added object_pairs_hook to the json module.  This allows OrderedDicts to be
+built by the decoder.
+
+..
+
+.. bpo: 2110
+.. date: 7405
+.. nonce: VVQTv0
+.. section: Library
+
+Add support for thousands separator and 'n' type specifier to
+``Decimal.__format__()``.
+
+..
+
+.. bpo: 0
+.. date: 7404
+.. nonce: E4kk25
+.. section: Library
+
+Fix Decimal.__format__ bug that swapped the meanings of the '<' and '>'
+alignment characters.
+
+..
+
+.. bpo: 1222
+.. date: 7403
+.. nonce: o6ET8T
+.. section: Library
+
+``locale.format()`` bug when the thousands separator is a space character.
+
+..
+
+.. bpo: 5472
+.. date: 7402
+.. nonce: y52FYs
+.. section: Library
+
+Fixed distutils.test_util tear down. Original patch by Tim Golden.
+
+..
+
+.. bpo: 0
+.. date: 7401
+.. nonce: 353Xjd
+.. section: Library
+
+collections.deque objects now have a read-only attribute called maxlen.
+
+..
+
+.. bpo: 2638
+.. date: 7400
+.. nonce: NX9HHb
+.. section: Library
+
+Show a window constructed with tkSimpleDialog.Dialog only after it is has
+been populated and properly configured in order to prevent window flashing.
+
+..
+
+.. bpo: 4792
+.. date: 7399
+.. nonce: jK4Q6l
+.. section: Library
+
+Prevent a segfault in _tkinter by using the guaranteed to be safe interp
+argument given to the PythonCmd in place of the Tcl interpreter taken from a
+PythonCmd_ClientData.
+
+..
+
+.. bpo: 5193
+.. date: 7398
+.. nonce: cT2tgG
+.. section: Library
+
+Guarantee that Tkinter.Text.search returns a string.
+
+..
+
+.. bpo: 5394
+.. date: 7397
+.. nonce: i2Ffk-
+.. section: Library
+
+Removed > 2.3 syntax from distutils.msvc9compiler. Original patch by Akira
+Kitada.
+
+..
+
+.. bpo: 5385
+.. date: 7396
+.. nonce: I6RMU3
+.. section: Library
+
+Fixed mmap crash after resize failure on windows.
+
+..
+
+.. bpo: 5179
+.. date: 7395
+.. nonce: J-DtY4
+.. section: Library
+
+Fixed subprocess handle leak on failure on windows.
+
+..
+
+.. bpo: 0
+.. date: 7394
+.. nonce: 7zHVyM
+.. section: Library
+
+PEP 372: Added collections.OrderedDict().
+
+..
+
+.. bpo: 0
+.. date: 7393
+.. nonce: 7DzM2Y
+.. section: Library
+
+The _asdict() for method for namedtuples now returns an OrderedDict().
+
+..
+
+.. bpo: 0
+.. date: 7392
+.. nonce: 4id7jq
+.. section: Library
+
+The configparser module now defaults to using an ordered dictionary.
+
+..
+
+.. bpo: 4308
+.. date: 7391
+.. nonce: 7O6QSe
+.. section: Library
+
+httplib.IncompleteRead's repr doesn't include all of the data all ready
+received.
+
+..
+
+.. bpo: 5401
+.. date: 7390
+.. nonce: L67vEY
+.. section: Library
+
+Fixed a performance problem in mimetypes when ``from mimetypes import
+guess_extension`` was used.
+
+..
+
+.. bpo: 1733986
+.. date: 7389
+.. nonce: v6ClaV
+.. section: Library
+
+Fixed mmap crash on Windows in accessing elements of second map object with
+same tagname but larger size than first map.
+
+..
+
+.. bpo: 5386
+.. date: 7388
+.. nonce: Mfoc4E
+.. section: Library
+
+mmap.write_byte didn't check map size, so it could cause buffer overrun.
+
+..
+
+.. bpo: 1533164
+.. date: 7387
+.. nonce: oSDeo2
+.. section: Library
+
+Installed but not listed *.pyo was breaking Distutils bdist_rpm command.
+
+..
+
+.. bpo: 5378
+.. date: 7386
+.. nonce: Nu7yhK
+.. section: Library
+
+Added --quiet option to Distutils bdist_rpm command.
+
+..
+
+.. bpo: 5052
+.. date: 7385
+.. nonce: tuRmM7
+.. section: Library
+
+Make Distutils compatible with 2.3 again.
+
+..
+
+.. bpo: 0
+.. date: 7384
+.. nonce: i4QWFU
+.. section: Library
+
+Deprecated methods of symtable.Symbol have been removed: is_keywordarg(),
+is_vararg(), and is_in_tuple().
+
+..
+
+.. bpo: 5316
+.. date: 7383
+.. nonce: gdWjbL
+.. section: Library
+
+Fixed buildbot failures introduced by multiple inheritance in Distutils
+tests.
+
+..
+
+.. bpo: 5287
+.. date: 7382
+.. nonce: m3xQet
+.. section: Library
+
+Add exception handling around findCaller() call to help out IronPython.
+
+..
+
+.. bpo: 5282
+.. date: 7381
+.. nonce: oc64yd
+.. section: Library
+
+Fixed mmap resize on 32bit Windows and Unix.  When ``offset > 0``, the file
+was resized to wrong size.
+
+..
+
+.. bpo: 5292
+.. date: 7380
+.. nonce: K-iKkZ
+.. section: Library
+
+Fixed mmap crash on its boundary access m[len(m)].
+
+..
+
+.. bpo: 2279
+.. date: 7379
+.. nonce: T7t8d0
+.. section: Library
+
+distutils.sdist.add_defaults now add files from the package_data and the
+data_files metadata.
+
+..
+
+.. bpo: 5257
+.. date: 7378
+.. nonce: asNrGx
+.. section: Library
+
+Refactored all tests in distutils, so they use support.TempdirManager, to
+avoid writing in the tests directory.
+
+..
+
+.. bpo: 4524
+.. date: 7377
+.. nonce: Y3L_fh
+.. section: Library
+
+distutils build_script command failed with --with-suffix=3. Initial patch by
+Amaury Forgeot d'Arc.
+
+..
+
+.. bpo: 2461
+.. date: 7376
+.. nonce: RD653P
+.. section: Library
+
+Added tests for distutils.util.
+
+..
+
+.. bpo: 1008086
+.. date: 7375
+.. nonce: BbViq-
+.. section: Library
+
+Fixed socket.inet_aton() to always return 4 bytes even on LP64 platforms
+(most 64-bit Linux, bsd, unix systems).
+
+..
+
+.. bpo: 5203
+.. date: 7374
+.. nonce: _dsCYh
+.. section: Library
+
+Fixed ctypes segfaults when passing a unicode string to a function without
+argtypes (only occurs if HAVE_USABLE_WCHAR_T is false).
+
+..
+
+.. bpo: 3386
+.. date: 7373
+.. nonce: KG-Ru5
+.. section: Library
+
+distutils.sysconfig.get_python_lib prefix argument was ignored under NT and
+OS2. Patch by Philip Jenvey.
+
+..
+
+.. bpo: 5128
+.. date: 7372
+.. nonce: RLP-Ij
+.. section: Library
+
+Make compileall properly inspect bytecode to determine if needs to be
+recreated.  This avoids a timing hole thanks to the old reliance on the
+ctime of the files involved.
+
+..
+
+.. bpo: 5122
+.. date: 7371
+.. nonce: 45BIdZ
+.. section: Library
+
+Synchronize tk load failure check to prevent a potential deadlock.
+
+..
+
+.. bpo: 1818
+.. date: 7370
+.. nonce: _i2lg8
+.. section: Library
+
+collections.namedtuple() now supports a keyword argument 'rename' which lets
+invalid fieldnames be automatically converted to positional names in the
+form, _1, _2, ...
+
+..
+
+.. bpo: 4890
+.. date: 7369
+.. nonce: frM5Ou
+.. section: Library
+
+Handle empty text search pattern in Tkinter.Text.search.
+
+..
+
+.. bpo: 5170
+.. date: 7368
+.. nonce: qiqrbO
+.. section: Library
+
+Fixed Unicode output bug in logging and added test case.  This is a
+regression which did not occur in 2.5.
+
+..
+
+.. bpo: 4512
+.. date: 7367
+.. nonce: WCcn7w
+.. section: Library
+
+Promote ``ZipImporter._get_filename()`` to be a public documented method
+``ZipImporter.get_filename()``.
+
+..
+
+.. bpo: 4195
+.. date: 7366
+.. nonce: 462RKE
+.. section: Library
+
+The ``runpy`` module (and the ``-m`` switch) now support the execution of
+packages by looking for and executing a ``__main__`` submodule when a
+package name is supplied. Initial patch by Andi Vajda.
+
+..
+
+.. bpo: 1731706
+.. date: 7365
+.. nonce: WZ5WX5
+.. section: Library
+
+Call Tcl_ConditionFinalize for Tcl_Conditions that will not be used again
+(this requires Tcl/Tk 8.3.1), also fix a memory leak in Tkapp_Call when
+calling from a thread different than the one that created the Tcl
+interpreter.  Patch by Robert Hancock.
+
+..
+
+.. bpo: 1520877
+.. date: 7364
+.. nonce: 8L5pMp
+.. section: Library
+
+Now distutils.sysconfig reads $AR from the environment/Makefile. Patch by
+Douglas Greiman.
+
+..
+
+.. bpo: 4285
+.. date: 7363
+.. nonce: 3vlvS6
+.. section: Library
+
+Change sys.version_info to be a named tuple.  Patch by Ross Light.
+
+..
+
+.. bpo: 1276768
+.. date: 7362
+.. nonce: xGRlK_
+.. section: Library
+
+The verbose option was not used in the code of distutils.file_util and
+distutils.dir_util.
+
+..
+
+.. bpo: 5132
+.. date: 7361
+.. nonce: lYsgxj
+.. section: Library
+
+Fixed trouble building extensions under Solaris with --enabled-shared
+activated. Initial patch by Dave Peterson.
+
+..
+
+.. bpo: 1581476
+.. date: 7360
+.. nonce: 8PPtxr
+.. section: Library
+
+Always use the Tcl global namespace when calling into Tcl.
+
+..
+
+.. bpo: 2047
+.. date: 7359
+.. nonce: W29q2y
+.. section: Library
+
+shutil.move() could believe that its destination path was inside its source
+path if it began with the same letters (e.g. "src" vs.  "src.new").
+
+..
+
+.. bpo: 4920
+.. date: 7358
+.. nonce: 4C6Tka
+.. section: Library
+
+Fixed .next() vs .__next__() issues in the ABCs for Iterator and MutableSet.
+
+..
+
+.. bpo: 0
+.. date: 7357
+.. nonce: St1AK1
+.. section: Library
+
+Added the ttk module. See issue #2983: Ttk support for Tkinter.
+
+..
+
+.. bpo: 5021
+.. date: 7356
+.. nonce: w66Gt4
+.. section: Library
+
+doctest.testfile() did not create __name__ and collections.namedtuple()
+relied on __name__ being defined.
+
+..
+
+.. bpo: 0
+.. date: 7355
+.. nonce: iqhL-t
+.. section: Library
+
+Backport importlib from Python 3.1. Only the import_module() function has
+been backported to help facilitate transitions from 2.7 to 3.1.
+
+..
+
+.. bpo: 1885
+.. date: 7354
+.. nonce: PtaVKd
+.. section: Library
+
+distutils: When running sdist with --formats=tar,gztar the tar file was
+overridden by the gztar one.
+
+..
+
+.. bpo: 4863
+.. date: 7353
+.. nonce: WAd1yO
+.. section: Library
+
+distutils.mwerkscompiler has been removed.
+
+..
+
+.. bpo: 0
+.. date: 7352
+.. nonce: N87zoU
+.. section: Library
+
+Added new itertools functions: combinations_with_replacement() and
+compress().
+
+..
+
+.. bpo: 5032
+.. date: 7351
+.. nonce: Hc_HF9
+.. section: Library
+
+Added a step argument to itertools.count() and allowed non-integer
+arguments.
+
+..
+
+.. bpo: 0
+.. date: 7350
+.. nonce: htGT5q
+.. section: Library
+
+Fix and properly document the multiprocessing module's logging support,
+expose the internal levels and provide proper usage examples.
+
+..
+
+.. bpo: 1672332
+.. date: 7349
+.. nonce: PilXzF
+.. section: Library
+
+Fix unpickling of subnormal floats, which was producing a ValueError on some
+platforms.
+
+..
+
+.. bpo: 3881
+.. date: 7348
+.. nonce: bIWN64
+.. section: Library
+
+Help Tcl to load even when started through the unreadable local symlink to
+"Program Files" on Vista.
+
+..
+
+.. bpo: 4710
+.. date: 7347
+.. nonce: ZjbAFp
+.. section: Library
+
+Extract directories properly in the zipfile module; allow adding directories
+to a zipfile.
+
+..
+
+.. bpo: 3807
+.. date: 7346
+.. nonce: E4I458
+.. section: Library
+
+_multiprocessing build fails when configure is passed --without-threads
+argument. When this occurs, _multiprocessing will be disabled, and not
+compiled.
+
+..
+
+.. bpo: 5008
+.. date: 7345
+.. nonce: n1uR4V
+.. section: Library
+
+When a file is opened in append mode with the new IO library, do an explicit
+seek to the end of file (so that e.g. tell() returns the file size rather
+than 0). This is consistent with the behaviour of the traditional 2.x file
+object.
+
+..
+
+.. bpo: 5013
+.. date: 7344
+.. nonce: AZ9WNo
+.. section: Library
+
+Fixed a bug in FileHandler which occurred when the delay parameter was set.
+
+..
+
+.. bpo: 4998
+.. date: 7343
+.. nonce: AomdSw
+.. section: Library
+
+The memory saving effect of __slots__ had been lost on Fractions which
+inherited from numbers.py which did not have __slots__ defined.  The numbers
+hierarchy now has its own __slots__ declarations.
+
+..
+
+.. bpo: 3321
+.. date: 7342
+.. nonce: 4gfMOk
+.. section: Library
+
+_multiprocessing.Connection() doesn't check handle; added checks for *nix
+machines for negative handles and large int handles.  Without this check it
+is possible to segfault the interpreter.
+
+..
+
+.. bpo: 4449
+.. date: 7341
+.. nonce: O4I8D7
+.. section: Library
+
+AssertionError in mp_benchmarks.py, caused by an underlying issue in
+sharedctypes.py.
+
+..
+
+.. bpo: 1225107
+.. date: 7340
+.. nonce: p6wro7
+.. section: Library
+
+inspect.isclass() returned True for instances with a custom __getattr__.
+
+..
+
+.. bpo: 3997
+.. date: 7339
+.. nonce: kDqtnQ
+.. section: Library
+
+Zipfiles generated with more than 65536 files could not be opened with other
+applications.
+
+..
+
+.. bpo: 1162154
+.. date: 7338
+.. nonce: QHeSnh
+.. section: Library
+
+``inspect.getmembers()`` now skips attributes that raise AttributeError,
+e.g. a __slots__ attribute which has not been set.
+
+..
+
+.. bpo: 1696199
+.. date: 7337
+.. nonce: cR113m
+.. section: Library
+
+Add collections.Counter() for rapid and convenient counting.
+
+..
+
+.. bpo: 3860
+.. date: 7336
+.. nonce: f8AZsh
+.. section: Library
+
+GzipFile and BZ2File now support the context management protocol.
+
+..
+
+.. bpo: 4272
+.. date: 7335
+.. nonce: auf_M0
+.. section: Library
+
+Add an optional argument to the GzipFile constructor to override the
+timestamp in the gzip stream.  The default value remains the current time.
+The information can be used by e.g. gunzip when decompressing.  Patch by
+Jacques Frechet.
+
+..
+
+.. bpo: 0
+.. date: 7334
+.. nonce: 7sDs9W
+.. section: Library
+
+Restore Python 2.3 compatibility for decimal.py.
+
+..
+
+.. bpo: 1702551
+.. date: 7333
+.. nonce: If0hpw
+.. section: Library
+
+distutils sdist was not excluding VCS directories under Windows. Initial
+solution by Guy Dalberto.
+
+..
+
+.. bpo: 0
+.. date: 7332
+.. nonce: exKvPN
+.. section: Library
+
+The _tkinter module functions "createfilehandler", "deletefilehandler",
+"createtimerhandler", "mainloop", "dooneevent" and "quit" have been
+deprecated for removal in 3.x
+
+..
+
+.. bpo: 4796
+.. date: 7331
+.. nonce: UBKEyz
+.. section: Library
+
+Added Decimal.from_float() and Context.create_decimal_from_float() to the
+decimal module.
+
+..
+
+.. bpo: 4812
+.. date: 7330
+.. nonce: 2hPczw
+.. section: Library
+
+Add missing underscore prefix to some internal-use-only constants in the
+decimal module.  (Dec_0 becomes _Dec_0, etc.)
+
+..
+
+.. bpo: 4795
+.. date: 7329
+.. nonce: _vA-Zf
+.. section: Library
+
+inspect.isgeneratorfunction() returns False instead of None when the
+function is not a generator.
+
+..
+
+.. bpo: 4702
+.. date: 7328
+.. nonce: ybmQBP
+.. section: Library
+
+Throwing a DistutilsPlatformError instead of IOError in case no MSVC
+compiler is found under Windows.  Original patch by Philip Jenvey.
+
+..
+
+.. bpo: 4646
+.. date: 7327
+.. nonce: 7wQSEv
+.. section: Library
+
+distutils was choking on empty options arg in the setup function. Original
+patch by Thomas Heller.
+
+..
+
+.. bpo: 0
+.. date: 7326
+.. nonce: cAjOp1
+.. section: Library
+
+Fractions.from_float() no longer loses precision for integers too big to
+cast as floats.
+
+..
+
+.. bpo: 4790
+.. date: 7325
+.. nonce: aKNjhn
+.. section: Library
+
+The nsmallest() and nlargest() functions in the heapq module did unnecessary
+work in the common case where no key function was specified.
+
+..
+
+.. bpo: 3767
+.. date: 7324
+.. nonce: sY2Wyh
+.. section: Library
+
+Convert Tk object to string in tkColorChooser.
+
+..
+
+.. bpo: 3248
+.. date: 7323
+.. nonce: 6UId_r
+.. section: Library
+
+Allow placing ScrolledText in a PanedWindow.
+
+..
+
+.. bpo: 4444
+.. date: 7322
+.. nonce: oBxx2k
+.. section: Library
+
+Allow assertRaises() to be used as a context handler, so that the code under
+test can be written inline if more practical.
+
+..
+
+.. bpo: 4739
+.. date: 7321
+.. nonce: VoYRrw
+.. section: Library
+
+Add pydoc help topics for symbols, so that e.g. help('@') works as expected
+in the interactive environment.
+
+..
+
+.. bpo: 4756
+.. date: 7320
+.. nonce: pscfIt
+.. section: Library
+
+zipfile.is_zipfile() now supports file-like objects. Patch by Gabriel
+Genellina.
+
+..
+
+.. bpo: 4400
+.. date: 7319
+.. nonce: CSFvcN
+.. section: Library
+
+.pypirc default generated file was broken in distutils.
+
+..
+
+.. bpo: 4736
+.. date: 7318
+.. nonce: qftNAR
+.. section: Library
+
+io.BufferedRWPair's closed property now functions properly.
+
+..
+
+.. bpo: 3954
+.. date: 7317
+.. nonce: vPsfgT
+.. section: Library
+
+Fix a potential SystemError in _hotshot.logreader error handling.
+
+..
+
+.. bpo: 4574
+.. date: 7316
+.. nonce: CXYnzF
+.. section: Library
+
+Fix a crash in io.IncrementalNewlineDecoder when a carriage return encodes
+to more than one byte in the source encoding (e.g. UTF-16) and gets split on
+a chunk boundary.
+
+..
+
+.. bpo: 4223
+.. date: 7315
+.. nonce: UCATW5
+.. section: Library
+
+inspect.getsource() will now correctly display source code for packages
+loaded via zipimport (or any other conformant PEP 302 loader). Original
+patch by Alexander Belopolsky.
+
+..
+
+.. bpo: 4201
+.. date: 7314
+.. nonce: hdQbIQ
+.. section: Library
+
+pdb can now access and display source code loaded via zipimport (or any
+other conformant PEP 302 loader).  Original patch by Alexander Belopolsky.
+
+..
+
+.. bpo: 4197
+.. date: 7313
+.. nonce: IA6tPh
+.. section: Library
+
+Doctests in modules loaded via zipimport (or any other PEP 302 conformant
+loader) will now work correctly in most cases (they are still subject to the
+constraints that exist for all code running from inside a module loaded via
+a PEP 302 loader and attempting to perform IO operations based on __file__).
+Original patch by Alexander Belopolsky.
+
+..
+
+.. bpo: 4082
+.. date: 7312
+.. nonce: jpnXzi
+.. section: Library
+
+Add runpy support to zipimport in a manner that allows backporting to
+maintenance branches.  Original patch by Alexander Belopolsky. (See also:
+bpo-4512)
+
+..
+
+.. bpo: 4163
+.. date: 7311
+.. nonce: r4afWs
+.. section: Library
+
+Use unicode-friendly word splitting in the textwrap functions when given a
+Unicode string.
+
+..
+
+.. bpo: 4616
+.. date: 7310
+.. nonce: EfehU4
+.. section: Library
+
+TarFile.utime(): Restore directory times on Windows.
+
+..
+
+.. bpo: 4084
+.. date: 7309
+.. nonce: CgsU1v
+.. section: Library
+
+Fix max, min, max_mag and min_mag Decimal methods to give correct results in
+the case where one argument is a quiet NaN and the other is a finite number
+that requires rounding.
+
+..
+
+.. bpo: 1030250
+.. date: 7308
+.. nonce: s-KbFX
+.. section: Library
+
+Distutils created directories even when run with the --dry-run option.
+
+..
+
+.. bpo: 4483
+.. date: 7307
+.. nonce: H2pFWf
+.. section: Library
+
+_dbm module now builds on systems with gdbm & gdbm_compat libs.
+
+..
+
+.. bpo: 4529
+.. date: 7306
+.. nonce: J-M1ot
+.. section: Library
+
+Fix the parser module's validation of try-except-finally statements.
+
+..
+
+.. bpo: 4458
+.. date: 7305
+.. nonce: d68Oc-
+.. section: Library
+
+getopt.gnu_getopt() now recognizes a single "-" as an argument, not a
+malformed option.
+
+..
+
+.. bpo: 0
+.. date: 7304
+.. nonce: JcSDah
+.. section: Library
+
+Added the subprocess.check_output() convenience function to get output from
+a subprocess on success or raise an exception on error.
+
+..
+
+.. bpo: 1055234
+.. date: 7303
+.. nonce: PJDWMZ
+.. section: Library
+
+cgi.parse_header(): Fixed parsing of header parameters to support unusual
+filenames (such as those containing semi-colons) in Content-Disposition
+headers.
+
+..
+
+.. bpo: 4384
+.. date: 7302
+.. nonce: 5W6yrD
+.. section: Library
+
+Added logging integration with warnings module using captureWarnings().
+This change includes a NullHandler which does nothing; it will be of use to
+library developers who want to avoid the "No handlers could be found for
+logger XXX" message which can appear if the library user doesn't configure
+logging.
+
+..
+
+.. bpo: 3741
+.. date: 7301
+.. nonce: ugW7ZS
+.. section: Library
+
+DISTUTILS_USE_SDK set causes msvc9compiler.py to raise an exception.
+
+..
+
+.. bpo: 4363
+.. date: 7300
+.. nonce: zbP2s9
+.. section: Library
+
+The uuid.uuid1() and uuid.uuid4() functions now work even if the ctypes
+module is not present.
+
+..
+
+.. bpo: 0
+.. date: 7299
+.. nonce: 9ohu2f
+.. section: Library
+
+FileIO's mode attribute now always includes ``"b"``.
+
+..
+
+.. bpo: 4116
+.. date: 7298
+.. nonce: CD_MP7
+.. section: Library
+
+Resolve member name conflict in ScrolledCanvas.__init__.
+
+..
+
+.. bpo: 0
+.. date: 7297
+.. nonce: QmONdW
+.. section: Library
+
+httplib.HTTPConnection.putheader() now accepts an arbitrary number of values
+for any header, matching what the documentation has claimed for a while.
+
+..
+
+.. bpo: 3774
+.. date: 7296
+.. nonce: qhBNNQ
+.. section: Library
+
+Fixed an error when create a Tkinter menu item without command and then
+remove it.
+
+..
+
+.. bpo: 0
+.. date: 7295
+.. nonce: NbETIR
+.. section: Library
+
+Fixed a modulefinder crash on certain relative imports.
+
+..
+
+.. bpo: 4150
+.. date: 7294
+.. nonce: Q8jnkP
+.. section: Library
+
+Pdb's "up" command now works for generator frames in post-mortem debugging.
+
+..
+
+.. bpo: 4092
+.. date: 7293
+.. nonce: cgu8U7
+.. section: Library
+
+Return ArgInfo as promised in the documentation from inspect.getargvalues.
+
+..
+
+.. bpo: 3935
+.. date: 7292
+.. nonce: xo6LXH
+.. section: Library
+
+Properly support list subclasses in bisect's C implementation.
+
+..
+
+.. bpo: 4014
+.. date: 7291
+.. nonce: VPepZh
+.. section: Library
+
+Don't claim that Python has an Alpha release status, in addition to claiming
+it is Mature.
+
+..
+
+.. bpo: 4730
+.. date: 7290
+.. nonce: Gb-t2A
+.. section: Library
+
+Fixed the cPickle module to handle correctly astral characters when protocol
+0 is used.
+
+..
+
+.. bpo: 1594
+.. date: 7289
+.. nonce: HEsHsF
+.. section: Library
+
+MacOS.GetCreatorAndType now always returns a big-endian result, to be
+consistent with Apple tools.
+
+..
+
+.. bpo: 900949
+.. date: 7288
+.. nonce: WLxHoH
+.. section: Library
+
+plat-mac/videoreader.py no longer relies on a non-existing module.
+
+..
+
+.. bpo: 16278952
+.. date: 7287
+.. nonce: lzPQW7
+.. section: Library
+
+plat-mac/videoreader.py now correctly imports MediaDescr
+
+..
+
+.. bpo: 1737832
+.. date: 7286
+.. nonce: cQdLju
+.. section: Library
+
+plat-mac/EasyDialog.py no longer uses the broken aepack module.
+
+..
+
+.. bpo: 1149804
+.. date: 7285
+.. nonce: -5eLwa
+.. section: Library
+
+macostools.mkdirs now even works when another process creates one of the
+needed subdirectories.
+
+..
+
+.. bpo: 900506
+.. date: 7284
+.. nonce: kVZAZL
+.. section: Library
+
+added --no-zipimport flag to the bundlebuilder script.
+
+..
+
+.. bpo: 841800
+.. date: 7283
+.. nonce: XCnSdr
+.. section: Library
+
+bundlebuilder now works with 'python -O'.
+
+..
+
+.. bpo: 4861
+.. date: 7282
+.. nonce: sIt_9h
+.. section: Library
+
+ctypes.util.find_library(): Robustify. Fix library detection on biarch
+systems.  Try to rely on ldconfig only, without using objdump and gcc.
+
+..
+
+.. bpo: 5104
+.. date: 7281
+.. nonce: YzzKtZ
+.. section: Library
+
+The socket module now raises OverflowError when 16-bit port and protocol
+numbers are supplied outside the allowed 0-65536 range on bind() and
+getservbyport().
+
+..
+
+.. bpo: 999042
+.. date: 7280
+.. nonce: cVohJD
+.. section: Library
+
+The Python compiler now handles explict global statements correctly (should
+be assigned using STORE_GLOBAL opcode).
+
+..
+
+.. bpo: 2703
+.. date: 7279
+.. nonce: nHzm3m
+.. section: Library
+
+SimpleXMLRPCDispatcher.__init__: Provide default values for new arguments
+introduced in 2.5.
+
+..
+
+.. bpo: 5828
+.. date: 7278
+.. nonce: vKsQ82
+.. section: Library
+
+Fixed bogus logic in makeunicodedata.py and regenerated the Unicode database
+(This fixes u'\u1d79'.lower() == '\x00').
+
+..
+
+.. bpo: 0
+.. date: 7277
+.. nonce: aOxIb2
+.. section: Library
+
+Windows locale mapping updated to Vista.
+
+..
+
+.. bpo: 5150
+.. date: 7276
+.. nonce: ROvOEC
+.. section: IDLE
+
+IDLE's format menu now has an option to strip trailing whitespace.
+
+..
+
+.. bpo: 5847
+.. date: 7275
+.. nonce: XwEpMA
+.. section: IDLE
+
+Remove -n switch on "Edit with IDLE" menu item.
+
+..
+
+.. bpo: 0
+.. date: 7274
+.. nonce: 0fQMGL
+.. section: IDLE
+
+idle.py modified and simplified to better support developing experimental
+versions of IDLE which are not installed in the standard location.
+
+..
+
+.. bpo: 5559
+.. date: 7273
+.. nonce: GKhgt1
+.. section: IDLE
+
+OutputWindow/PyShell right click menu "Go to file/line" wasn't working with
+file paths containing spaces.
+
+..
+
+.. bpo: 5783
+.. date: 7272
+.. nonce: oZFpQE
+.. section: IDLE
+
+Windows: Version string for the .chm help file changed, file not being
+accessed.  Patch by Guilherme Polo/
+
+..
+
+.. bpo: 1529142
+.. date: 7271
+.. nonce: _7kvP5
+.. section: IDLE
+
+Allow multiple IDLE GUI/subprocess pairs to exist simultaneously. Thanks to
+David Scherer for suggesting the use of an ephemeral port for the GUI.
+Patch by Weeble.
+
+..
+
+.. bpo: 0
+.. date: 7270
+.. nonce: D4DReJ
+.. section: IDLE
+
+Remove port spec from run.py and fix bug where subprocess fails to extract
+port from command line when warnings are present.
+
+..
+
+.. bpo: 5129
+.. date: 7269
+.. nonce: eVAJqn
+.. section: IDLE
+
+Tk 8.5 Text widget requires 'wordprocessor' tabstyle attr to handle mixed
+space/tab properly. Patch by Guilherme Polo.
+
+..
+
+.. bpo: 3549
+.. date: 7268
+.. nonce: nZ7He6
+.. section: IDLE
+
+On MacOS the preferences menu was not present
+
+..
+
+.. bpo: 0
+.. date: 7267
+.. nonce: fyANj_
+.. section: Tools/Demos
+
+Ttk demos added in Demo/tkinter/ttk/.
+
+..
+
+.. bpo: 4677
+.. date: 7266
+.. nonce: 4BCeec
+.. section: Tools/Demos
+
+Add two list comprehension tests to pybench.
+
+..
+
+.. bpo: 6603
+.. date: 7265
+.. nonce: I-Evb7
+.. section: Build
+
+Change READ_TIMESTAMP macro in ceval.c so that it compiles correctly under
+gcc on x86-64.  This fixes a reported problem with the --with-tsc build on
+x86-64.
+
+..
+
+.. bpo: 0
+.. date: 7264
+.. nonce: fOuNOF
+.. section: Build
+
+Add 2 new options to ``--with-universal-archs`` on MacOSX: ``intel`` builds
+a distribution with ``i386`` and ``x86_64`` architectures, while ``3-way``
+builds a distribution with the ``ppc``, ``i386`` and ``x86_64``
+architectures.
+
+..
+
+.. bpo: 6802
+.. date: 7263
+.. nonce: I0PGjW
+.. section: Build
+
+Fix build issues on MacOSX 10.6.
+
+..
+
+.. bpo: 6244
+.. date: 7262
+.. nonce: hQGLlr
+.. section: Build
+
+Allow detect_tkinter to look for Tcl/Tk 8.6.
+
+..
+
+.. bpo: 5390
+.. date: 7261
+.. nonce: ZnkJkB
+.. section: Build
+
+Add uninstall icon independent of whether file extensions are installed.
+
+..
+
+.. bpo: 5809
+.. date: 7260
+.. nonce: WMK90h
+.. section: Build
+
+Specifying both --enable-framework and --enable-shared is an error.
+Configure now explicitly tells you about this.
+
+..
+
+.. bpo: 3585
+.. date: 7259
+.. nonce: eB4RFU
+.. section: Build
+
+Add pkg-config support.  It creates a python-2.7.pc file and a python.pc
+symlink in the $(LIBDIR)/pkgconfig directory.  Patch by Clinton Roy.
+
+..
+
+.. bpo: 6094
+.. date: 7258
+.. nonce: shJUAU
+.. section: Build
+
+Build correctly with Subversion 1.7.
+
+..
+
+.. bpo: 5726
+.. date: 7257
+.. nonce: nHrlsd
+.. section: Build
+
+Make Modules/ld_so_aix return the actual exit code of the linker, rather
+than always exit successfully.  Patch by Floris Bruynooghe.
+
+..
+
+.. bpo: 4587
+.. date: 7256
+.. nonce: nnNweB
+.. section: Build
+
+Add configure option --with-dbmliborder=db1:db2:... to specify the order
+that backends for the dbm extension are checked.
+
+..
+
+.. bpo: 0
+.. date: 7255
+.. nonce: 9K_NPs
+.. section: Build
+
+Link the shared python library with $(MODLIBS).
+
+..
+
+.. bpo: 5134
+.. date: 7254
+.. nonce: JmNLWO
+.. section: Build
+
+Silence compiler warnings when compiling sqlite with VC++.
+
+..
+
+.. bpo: 4494
+.. date: 7253
+.. nonce: IGajo-
+.. section: Build
+
+Fix build with Py_NO_ENABLE_SHARED on Windows.
+
+..
+
+.. bpo: 4895
+.. date: 7252
+.. nonce: S-3ytm
+.. section: Build
+
+Use _strdup on Windows CE.
+
+..
+
+.. bpo: 4472
+.. date: 7251
+.. nonce: UbvbZD
+.. section: Build
+
+``configure --enable-shared`` now works on OSX.
+
+..
+
+.. bpo: 4728
+.. date: 7250
+.. nonce: FPe7Wi
+.. section: Build
+
+WORDS_BIGEDIAN is now correct in Universal builds. (See also: bpo-4060)
+
+..
+
+.. bpo: 4389
+.. date: 7249
+.. nonce: UrR3rH
+.. section: Build
+
+Add icon to the uninstall entry in "add-and-remove-programs".
+
+..
+
+.. bpo: 4289
+.. date: 7248
+.. nonce: xDo3LW
+.. section: Build
+
+Remove Cancel button from AdvancedDlg.
+
+..
+
+.. bpo: 1656675
+.. date: 7247
+.. nonce: yhrY5M
+.. section: Build
+
+Register a drop handler for .py* files on Windows.
+
+..
+
+.. bpo: 4120
+.. date: 7246
+.. nonce: AJJ_Yg
+.. section: Build
+
+Exclude manifest from extension modules in VS2008.
+
+..
+
+.. bpo: 4091
+.. date: 7245
+.. nonce: j3E4hq
+.. section: Build
+
+Install pythonxy.dll in system32 again.
+
+..
+
+.. bpo: 4018
+.. date: 7244
+.. nonce: UVtBMQ
+.. section: Build
+
+Disable "for me" installations on Vista.
+
+..
+
+.. bpo: 3758
+.. date: 7243
+.. nonce: cBcoI8
+.. section: Build
+
+Add ``patchcheck`` build target to ``.PHONY``.
+
+..
+
+.. bpo: 4204
+.. date: 7242
+.. nonce: NQswDc
+.. section: Build
+
+Fixed module build errors on FreeBSD 4.
+
+..
+
+.. bpo: 6556
+.. date: 7241
+.. nonce: Qn6fFV
+.. section: Documentation
+
+Fixed the Distutils configuration files location explanation for Windows.
+
+..
+
+.. bpo: 6801
+.. date: 7240
+.. nonce: yMIrow
+.. section: Documentation
+
+symmetric_difference_update also accepts ``|``.  Thanks to Carl Chenet.
+
+..
+
+.. bpo: 7528
+.. date: 7239
+.. nonce: CxgEcB
+.. section: C API
+
+Add PyLong_AsLongAndOverflow (backported from py3k).
+
+..
+
+.. bpo: 7228
+.. date: 7238
+.. nonce: Kj3IXX
+.. section: C API
+
+Add '%lld' and '%llu' support to PyString_FromFormat(V) and PyErr_Format, on
+machines with HAVE_LONG_LONG defined.
+
+..
+
+.. bpo: 0
+.. date: 7237
+.. nonce: XqzKYC
+.. section: C API
+
+Add new C-API function PyOS_string_to_double, and deprecated PyOS_ascii_atof
+and PyOS_ascii_strtod.
+
+..
+
+.. bpo: 0
+.. date: 7236
+.. nonce: EzTAcl
+.. section: C API
+
+Removed _PyOS_double_to_string. Use PyOS_double_to_string instead.  This is
+in preparation for (but not strictly related to) issue #7117, short float
+repr.
+
+..
+
+.. bpo: 6624
+.. date: 7235
+.. nonce: qPXO6F
+.. section: C API
+
+PyArg_ParseTuple with "s" format when parsing argument with NULL: Bogus
+TypeError detail string.
+
+..
+
+.. bpo: 5954
+.. date: 7234
+.. nonce: bl2-P2
+.. section: C API
+
+Add a PyFrame_GetLineNumber() function to replace most uses of
+PyCode_Addr2Line().
+
+..
+
+.. bpo: 5959
+.. date: 7233
+.. nonce: wmWB5t
+.. section: C API
+
+Add a PyCode_NewEmpty() function to create a new empty code object at a
+specified file, function, and line number.
+
+..
+
+.. bpo: 1419652
+.. date: 7232
+.. nonce: Q6BERX
+.. section: C API
+
+Change the first argument to PyImport_AppendInittab() to ``const char *`` as
+the string is stored beyond the call.
+
+..
+
+.. bpo: 0
+.. date: 7231
+.. nonce: hva90Q
+.. section: C API
+
+Some PyBytes_* aliases have been removed because they don't exist in 3.x.
+
+..
+
+.. bpo: 5175
+.. date: 7230
+.. nonce: r1a8Ms
+.. section: C API
+
+PyLong_AsUnsignedLongLong now raises OverflowError for negative arguments.
+Previously, it raised TypeError.
+
+..
+
+.. bpo: 4720
+.. date: 7229
+.. nonce: Mb6W01
+.. section: C API
+
+The format for PyArg_ParseTupleAndKeywords can begin with '|'.
+
+..
+
+.. bpo: 3632
+.. date: 7228
+.. nonce: upPC86
+.. section: C API
+
+From the gdb debugger, the 'pyo' macro can now be called when the GIL is
+released, or owned by another thread.
+
+..
+
+.. bpo: 4122
+.. date: 7227
+.. nonce: fhMq7A
+.. section: C API
+
+On Windows, fix a compilation error when using the Py_UNICODE_ISSPACE macro
+in an extension module.
+
+..
+
+.. bpo: 4293
+.. date: 7226
+.. nonce: QdarHx
+.. section: C API
+
+Py_AddPendingCall() is now thread safe and can be used for asynchronous
+notifications to python from any thread.  Documentation added.
+
+..
+
+.. bpo: 6508
+.. date: 7225
+.. nonce: R3EvXY
+.. section: Library
+
+Add posix.{getresuid,getresgid,setresuid,setresgid}.
+
+..
+
+.. bpo: 7078
+.. date: 7224
+.. nonce: 90Z604
+.. section: Library
+
+Set struct.__doc__ from _struct.__doc__.
+
+..
+
+.. bpo: 3366
+.. date: 7223
+.. nonce: U1DfAJ
+.. section: Library
+
+Add erf, erfc, expm1, gamma, lgamma functions to math module.
+
+..
+
+.. bpo: 6823
+.. date: 7222
+.. nonce: m4cwqj
+.. section: Library
+
+Allow time.strftime() to accept a tuple with a isdst field outside of the
+range of [-1, 1] by normalizing the value to within that range.
+
+..
+
+.. bpo: 6877
+.. date: 7221
+.. nonce: CMXt7p
+.. section: Library
+
+Make it possible to link the readline extension to libedit on OSX.
+
+..
+
+.. bpo: 6944
+.. date: 7220
+.. nonce: A9aMl7
+.. section: Library
+
+Fix a SystemError when socket.getnameinfo() was called with something other
+than a tuple as first argument.
+
+..
+
+.. bpo: 6865
+.. date: 7219
+.. nonce: 8EKGt5
+.. section: Library
+
+Fix reference counting issue in the initialization of the pwd module.
+
+..
+
+.. bpo: 6848
+.. date: 7218
+.. nonce: yoWK1A
+.. section: Library
+
+Fix curses module build failure on OS X 10.6.
+
+..
+
+.. bpo: 0
+.. date: 7217
+.. nonce: k2iXEM
+.. section: Library
+
+Fix a segfault in expat when given a specially crafted input lead to the
+tokenizer not stopping. CVE-2009-3720.
+
+..
+
+.. bpo: 6561
+.. date: 7216
+.. nonce: tJwGr-
+.. section: Library
+
+'\d' in a regex now matches only characters with Unicode category 'Nd'
+(Number, Decimal Digit).  Previously it also matched characters with
+category 'No'.
+
+..
+
+.. bpo: 1523
+.. date: 7215
+.. nonce: GYRz49
+.. section: Library
+
+Remove deprecated overflow wrapping for struct.pack with an integer format
+code ('bBhHiIlLqQ').  Packing an out-of-range integer now consistently
+raises struct.error.
+
+..
+
+.. bpo: 1530559
+.. date: 7214
+.. nonce: 0TjrtL
+.. section: Library
+
+Fix various struct.pack inconsistencies for the integer formats
+('bBhHiIlLqQ').  In the following, '*' represents any of '=', '<', '>'.
+
+- Packing a float now always gives a Deprecation Warning.  Previously it
+only warned for 'I', 'L', '*B', '*H', '*I', '*L'.
+
+- If x is not an int, long or float, then packing x will always result in
+struct.error.  Previously an x with an __int__ method could be packed by
+'b', 'B', 'h', 'H', 'i', 'l', '*b', '*h' ,'*i', '*l', and an x with a
+__long__ method could be packed by 'q', 'Q', '*q', '*Q'; for x with
+neither __int__ nor __long__, TypeError used to be raised (with a
+confusing error message) for 'I', 'L', '*B', '*H', '*I', '*L', and
+struct.error in other cases.
+
+Note: as of Python 2.7 beta 1, the above is out of date.  In 2.7 beta 1, any
+argument with an __int__ method can be packed, but use of this feature
+triggers a DeprecationWarning. (See also: bpo-1741130)
+
+..
+
+.. bpo: 4873
+.. date: 7213
+.. nonce: X6xp5Z
+.. section: Library
+
+Fix resource leaks in error cases of pwd and grp.
+
+..
+
+.. bpo: 4751
+.. date: 7212
+.. nonce: 6sPqcu
+.. section: Library
+
+For hashlib algorithms provided by OpenSSL, the Python GIL is now released
+during computation on data lengths >= 2048 bytes.
+
+..
+
+.. bpo: 3745
+.. date: 7211
+.. nonce: UWvSDY
+.. section: Library
+
+Fix hashlib to always reject unicode and non buffer-api supporting objects
+as input no matter how it was compiled (built in implementations or external
+openssl library).  NOTE: Undone in 2.7a2.
+
+..
+
+.. bpo: 4397
+.. date: 7210
+.. nonce: v3SDSI
+.. section: Library
+
+Fix occasional test_socket failure on OS X.
+
+..
+
+.. bpo: 4279
+.. date: 7209
+.. nonce: 4RY6FX
+.. section: Library
+
+Fix build of parsermodule under Cygwin.
+
+..
+
+.. bpo: 4051
+.. date: 7208
+.. nonce: CWy5So
+.. section: Library
+
+Prevent conflict of UNICODE macros in cPickle.
+
+..
+
+.. bpo: 4228
+.. date: 7207
+.. nonce: 6AP3nQ
+.. section: Library
+
+Pack negative values the same way as 2.4 in struct's L format.
+
+..
+
+.. bpo: 1040026
+.. date: 7206
+.. nonce: f_lNlD
+.. section: Library
+
+Fix os.times result on systems where HZ is incorrect.
+
+..
+
+.. bpo: 3167
+.. date: 7205
+.. nonce: Wq3nLl
+.. section: Library
+
+Fix test_math failures for log, log10 on Solaris, OpenBSD. (See also:
+bpo-3682)
+
+..
+
+.. bpo: 4365
+.. date: 7204
+.. nonce: 1v_32N
+.. section: Library
+
+Add crtassem.h constants to the msvcrt module.
+
+..
+
+.. bpo: 4396
+.. date: 7203
+.. nonce: 3vmXT4
+.. section: Library
+
+The parser module now correctly validates the with statement.
+
+..
+
+.. bpo: 5228
+.. date: 7202
+.. nonce: lDpzrP
+.. section: Library
+
+Make functools.partial objects can now be pickled.
+
+..
+
+.. bpo: 7431
+.. date: 7201
+.. nonce: gQvWFz
+.. section: Tests
+
+Use TESTFN in test_linecache instead of trying to create a file in the
+Lib/test directory, which might be read-only for the user running the tests.
+
+..
+
+.. bpo: 7324
+.. date: 7200
+.. nonce: qx7wYQ
+.. section: Tests
+
+Add a sanity check to regrtest argument parsing to catch the case of an
+option with no handler.
+
+..
+
+.. bpo: 7312
+.. date: 7199
+.. nonce: owJk3R
+.. section: Tests
+
+Add a -F flag to run the selected tests in a loop until a test fails.  Can
+be combined with -j.
+
+..
+
+.. bpo: 7295
+.. date: 7198
+.. nonce: ukZhHi
+.. section: Tests
+
+Do not use a hardcoded file name in test_tarfile.
+
+..
+
+.. bpo: 7270
+.. date: 7197
+.. nonce: am_b1S
+.. section: Tests
+
+Add some dedicated unit tests for multi-thread synchronization primitives
+such as Lock, RLock, Condition, Event and Semaphore.
+
+..
+
+.. bpo: 7222
+.. date: 7196
+.. nonce: iKJspN
+.. section: Tests
+
+Make thread "reaping" more reliable so that reference leak-chasing test runs
+give sensible results.  The previous method of reaping threads could return
+successfully while some Thread objects were still referenced.  This also
+introduces a new private function: ``thread._count()``.
+
+..
+
+.. bpo: 7151
+.. date: 7195
+.. nonce: U07hpR
+.. section: Tests
+
+Fixed regrtest -j so that output to stderr from a test no longer runs the
+risk of causing the worker thread to fail.
+
+..
+
+.. bpo: 7055
+.. date: 7194
+.. nonce: 3okJ5l
+.. section: Tests
+
+test___all__ now greedily detects all modules which have an __all__
+attribute, rather than using a hardcoded and incomplete list.
+
+..
+
+.. bpo: 7058
+.. date: 7193
+.. nonce: 3DkUXi
+.. section: Tests
+
+Added save/restore for things like sys.argv and cwd to runtest_inner in
+regrtest, with warnings if the called test modifies them, and a new section
+in the summary report at the end.
+
+..
+
+.. bpo: 7042
+.. date: 7192
+.. nonce: b8v3FJ
+.. section: Tests
+
+Fix test_signal (test_itimer_virtual) failure on OS X 10.6.
+
+..
+
+.. bpo: 6806
+.. date: 7191
+.. nonce: hS_Ys4
+.. section: Tests
+
+test_platform failed under OS X 10.6.0 because ``sw_ver`` leaves off the
+trailing 0 in the version number.
+
+..
+
+.. bpo: 5450
+.. date: 7190
+.. nonce: c2vdqn
+.. section: Tests
+
+Moved tests involving loading tk from Lib/test/test_tcl to
+Lib/lib-tk/test/test_tkinter/test_loadtk. With this, these tests demonstrate the
+same behaviour as test_ttkguionly (and now also test_tk) which is to skip
+the tests if DISPLAY is defined but can't be used.
+
+..
+
+.. bpo: 6152
+.. date: 7189
+.. nonce: EkeKpL
+.. section: Tests
+
+New option '-j'/'--multiprocess' for regrtest allows running regression
+tests in parallel, shortening the total runtime.
+
+..
+
+.. bpo: 5354
+.. date: 7188
+.. nonce: vIbbLT
+.. section: Tests
+
+New test support function import_fresh_module() makes it easy to import both
+normal and optimised versions of modules.  test_heapq and test_warnings have
+been adjusted to use it, tests for other modules with both C and Python
+implementations in the stdlib can be adjusted to use it over time.
+
+..
+
+.. bpo: 0
+.. date: 7187
+.. nonce: bTuQvV
+.. section: Tests
+
+Fix test_warnings to no longer reset the warnings filter.
+
+..
+
+.. bpo: 0
+.. date: 7186
+.. nonce: Mmlolu
+.. section: Tests
+
+Fix test_logging to no longer reset the warnings filter.
+
+..
+
+.. bpo: 5635
+.. date: 7185
+.. nonce: 8Yq1dn
+.. section: Tests
+
+Fix running test_sys with tracing enabled.
+
+..
+
+.. bpo: 0
+.. date: 7184
+.. nonce: t8Gnx4
+.. section: Tests
+
+regrtest no longer treats ImportError as equivalent to SkipTest.  Imports
+that should cause a test to be skipped are now done using import_module from
+test support, which does the conversion.
+
+..
+
+.. bpo: 5083
+.. date: 7183
+.. nonce: imHnrP
+.. section: Tests
+
+New 'gui' resource for regrtest.
+
+..
+
+.. bpo: 5837
+.. date: 7182
+.. nonce: s1idZB
+.. section: Tests
+
+Certain sequences of calls to set() and unset() for
+support.EnvironmentVarGuard objects restored the environment variables
+incorrectly on __exit__.
+
+..
+
+.. bpo: 2389
+.. date: 7181
+.. nonce: w0L9Yb
+.. section: Tests
+
+Array objects are now pickled in a portable manner.
+
+..
+
+.. bpo: 5611
+.. date: 7180
+.. nonce: UOPr-Q
+.. section: Windows
+
+Auto-detect whether a C file uses tabs or spaces in Vim.
diff --git a/Misc/NEWS.d/2.7a2.rst b/Misc/NEWS.d/2.7a2.rst
new file mode 100644
index 0000000..d453e96
--- /dev/null
+++ b/Misc/NEWS.d/2.7a2.rst
@@ -0,0 +1,457 @@
+.. bpo: 0
+.. date: 7804
+.. nonce: jherxT
+.. release date: 2010-01-09
+.. section: Core and Builtins
+
+The ``__complex__()`` method is now looked up on the class of instances to
+make it consistent with other special methods.
+
+..
+
+.. bpo: 7462
+.. date: 7803
+.. nonce: E1r1bi
+.. section: Core and Builtins
+
+Implement the stringlib fast search algorithm for the `rfind`, `rindex`,
+`rsplit` and `rpartition` methods.  Patch by Florent Xicluna.
+
+..
+
+.. bpo: 5080
+.. date: 7802
+.. nonce: Wb4q9j
+.. section: Core and Builtins
+
+A number of functions and methods previously produced a DeprecationWarning
+when passed a float argument where an integer was expected. These functions
+and methods now raise TypeError instead.  The majority of the effects of
+this change are in the extension modules, but some core functions and
+methods are affected: notably the 'chr', 'range' and 'xrange' builtins, and
+many unicode/str methods.
+
+..
+
+.. bpo: 7604
+.. date: 7801
+.. nonce: tTzdbD
+.. section: Core and Builtins
+
+Deleting an unset slotted attribute did not raise an AttributeError.
+
+..
+
+.. bpo: 7534
+.. date: 7800
+.. nonce: UJiEZi
+.. section: Core and Builtins
+
+Fix handling of IEEE specials (infinities, nans, negative zero) in **
+operator.  The behaviour now conforms to that described in C99 Annex F.
+
+..
+
+.. bpo: 7579
+.. date: 7799
+.. nonce: cmOrYb
+.. section: Core and Builtins
+
+The msvcrt module now has docstrings for all its functions.
+
+..
+
+.. bpo: 7413
+.. date: 7798
+.. nonce: g6Euap
+.. section: Core and Builtins
+
+Passing '\0' as the separator to datetime.datetime.isoformat() used to drop
+the time part of the result.
+
+..
+
+.. bpo: 1811
+.. date: 7797
+.. nonce: e1nd7g
+.. section: Core and Builtins
+
+Improve accuracy and cross-platform consistency for true division of
+integers: the result of a/b is now correctly rounded for ints a and b (at
+least on IEEE 754 platforms), and in particular does not depend on the
+internal representation of a long.
+
+..
+
+.. bpo: 6108
+.. date: 7796
+.. nonce: j3A6pp
+.. section: Core and Builtins
+
+``unicode(exception)`` and ``str(exception)`` should return the same message
+when only ``__str__()`` (and not ``__unicode__()``) is overridden in the
+subclass.
+
+..
+
+.. bpo: 6834
+.. date: 7795
+.. nonce: iPCAPI
+.. section: Core and Builtins
+
+Replace the implementation for the 'python' and 'pythonw' executables on
+OSX.
+
+These executables now work properly with the arch(1) command: ``arch -ppc
+python`` will start a universal binary version of python in PPC mode (unlike
+previous releases).
+
+..
+
+.. bpo: 1680159
+.. date: 7794
+.. nonce: zCoubo
+.. section: Core and Builtins
+
+Unicode coercion during an 'in' operation no longer masks the underlying
+error when the coercion fails for the left hand operand.
+
+..
+
+.. bpo: 7491
+.. date: 7793
+.. nonce: bGallI
+.. section: Core and Builtins
+
+Metaclass's __cmp__ method was ignored.
+
+..
+
+.. bpo: 7466
+.. date: 7792
+.. nonce: zrhYS4
+.. section: Core and Builtins
+
+Segmentation fault when the garbage collector is called in the middle of
+populating a tuple.  Patch by Florent Xicluna.
+
+..
+
+.. bpo: 6963
+.. date: 7791
+.. nonce: TJvFT0
+.. section: Library
+
+Added "maxtasksperchild" argument to ``multiprocessing.Pool``, allowing for
+a maximum number of tasks within the pool to be completed by the worker
+before that worker is terminated, and a new one created to replace it.
+
+..
+
+.. bpo: 7617
+.. date: 7790
+.. nonce: duSdpP
+.. section: Library
+
+Make sure distutils.unixccompiler.UnixCCompiler recognizes gcc when it has a
+fully qualified configuration prefix.  Initial patch by Arfrever.
+
+..
+
+.. bpo: 7092
+.. date: 7789
+.. nonce: 8Bxjpz
+.. section: Library
+
+Remove py3k warning when importing cPickle.  2to3 handles renaming of
+`cPickle` to `pickle`.  The warning was annoying since there's no
+alternative to cPickle if you care about performance.  Patch by Florent
+Xicluna.
+
+..
+
+.. bpo: 7455
+.. date: 7788
+.. nonce: 4QZ2RC
+.. section: Library
+
+Fix possible crash in cPickle on invalid input.  Patch by Victor Stinner.
+
+..
+
+.. bpo: 7092
+.. date: 7787
+.. nonce: z80fv1
+.. section: Library
+
+Fix the DeprecationWarnings emitted by the standard library when using the
+-3 flag.  Patch by Florent Xicluna.
+
+..
+
+.. bpo: 7471
+.. date: 7786
+.. nonce: Flh7OS
+.. section: Library
+
+Improve the performance of GzipFile's buffering mechanism, and make it
+implement the ``io.BufferedIOBase`` ABC to allow for further speedups by
+wrapping it in an ``io.BufferedReader``.  Patch by Nir Aides.
+
+..
+
+.. bpo: 3972
+.. date: 7785
+.. nonce: T0AsF9
+.. section: Library
+
+``httplib.HTTPConnection`` now accepts an optional source_address parameter
+to allow specifying where your connections come from.
+
+..
+
+.. bpo: 0
+.. date: 7784
+.. nonce: VuT7xt
+.. section: Library
+
+``socket.create_connection()`` now accepts an optional source_address
+parameter.
+
+..
+
+.. bpo: 5511
+.. date: 7783
+.. nonce: qXXb66
+.. section: Library
+
+``zipfile.ZipFile`` can now be used as a context manager. Initial patch by
+Brian Curtin.
+
+..
+
+.. bpo: 0
+.. date: 7782
+.. nonce: jVBfGB
+.. section: Library
+
+Distutils now correctly identifies the build architecture as "x86_64" when
+building on OSX 10.6 without "-arch" flags.
+
+..
+
+.. bpo: 7556
+.. date: 7781
+.. nonce: 9TArd4
+.. section: Library
+
+Distutils' msvc9compiler now opens the MSVC Manifest file in text mode.
+
+..
+
+.. bpo: 7552
+.. date: 7780
+.. nonce: cuagLV
+.. section: Library
+
+Removed line feed in the base64 Authorization header in the Distutils upload
+command to avoid an error when PyPI reads it.  This occurs on long
+passwords.  Initial patch by JP St. Pierre.
+
+..
+
+.. bpo: 7231
+.. date: 7779
+.. nonce: PtW-pZ
+.. section: Library
+
+urllib2 cannot handle https with proxy requiring auth.  Patch by Tatsuhiro
+Tsujikawa.
+
+..
+
+.. bpo: 7349
+.. date: 7778
+.. nonce: qwbHfI
+.. section: Library
+
+Make methods of file objects in the io module accept None as an argument
+where file-like objects (ie StringIO and BytesIO) accept them to mean the
+same as passing no argument.
+
+..
+
+.. bpo: 7348
+.. date: 7777
+.. nonce: 47KswH
+.. section: Library
+
+``StringIO.StringIO.readline(-1)`` now acts as if it got no argument like
+other file objects.
+
+..
+
+.. bpo: 7357
+.. date: 7776
+.. nonce: EteBpH
+.. section: Library
+
+tarfile no longer suppresses fatal extraction errors by default.
+
+..
+
+.. bpo: 7470
+.. date: 7775
+.. nonce: IW_7wI
+.. section: Library
+
+logging: Fix bug in Unicode encoding fallback.
+
+..
+
+.. bpo: 5949
+.. date: 7774
+.. nonce: oAWtv2
+.. section: Library
+
+Fixed IMAP4_SSL hang when the IMAP server response is missing proper
+end-of-line termination.
+
+..
+
+.. bpo: 7457
+.. date: 7773
+.. nonce: n8Bkqb
+.. section: Library
+
+Added a read_pkg_file method to ``distutils.dist.DistributionMetadata``.
+
+..
+
+.. bpo: 3745
+.. date: 7772
+.. nonce: 1on7AT
+.. section: Library
+
+Undo the 2.7a1 change to have hashlib to reject unicode and non buffer API
+supporting objects as input.  That behavior is for 3.x only.
+
+..
+
+.. bpo: 7767
+.. date: 7771
+.. nonce: XmNIZJ
+.. section: C API
+
+New function ``PyLong_AsLongLongAndOverflow()`` added, analogous to
+``PyLong_AsLongAndOverflow()``.
+
+..
+
+.. bpo: 5080
+.. date: 7770
+.. nonce: bMlEGy
+.. section: C API
+
+The argument parsing functions ``PyArg_ParseTuple()``,
+``PyArg_ParseTupleAndKeywords()``, ``PyArg_VaParse()``,
+``PyArg_VaParseTupleAndKeywords()`` and ``PyArg_Parse()`` no longer accept
+float arguments for integer format codes (other than 'L'): previously an
+attempt to pass a float resulted in a DeprecationWarning; now it gives a
+TypeError.  For the 'L' format code (which previously had no warning) there
+is now a DeprecationWarning.
+
+..
+
+.. bpo: 7033
+.. date: 7769
+.. nonce: koLSHo
+.. section: C API
+
+Function ``PyErr_NewExceptionWithDoc()`` added.
+
+..
+
+.. bpo: 6491
+.. date: 7768
+.. nonce: mDJ_mR
+.. section: Build
+
+Allow --with-dbmliborder to specify that no dbms will be built.
+
+..
+
+.. bpo: 6943
+.. date: 7767
+.. nonce: HhHPsy
+.. section: Build
+
+Use pkg-config to find the libffi headers when the ``--with-system-ffi``
+flag is used.
+
+..
+
+.. bpo: 7609
+.. date: 7766
+.. nonce: w1witS
+.. section: Build
+
+Add a ``--with-system-expat`` option that causes the system's expat library
+to be used for the pyexpat module instead of the one included with Python.
+
+..
+
+.. bpo: 7589
+.. date: 7765
+.. nonce: uh9YyY
+.. section: Build
+
+Only build the nis module when the correct header files are found.
+
+..
+
+.. bpo: 0
+.. date: 7764
+.. nonce: 6WvEdi
+.. section: Build
+
+Switch to OpenSSL 0.9.8l and sqlite 3.6.21 on Windows.
+
+..
+
+.. bpo: 7541
+.. date: 7763
+.. nonce: V8g0W6
+.. section: Build
+
+when using ``python-config`` with a framework install the compiler might use
+the wrong library.
+
+..
+
+.. bpo: 7376
+.. date: 7762
+.. nonce: Y0Cani
+.. section: Tests
+
+Instead of running a self-test (which was failing) when called with no
+arguments, doctest.py now gives a usage message.
+
+..
+
+.. bpo: 7396
+.. date: 7761
+.. nonce: WRRHMZ
+.. section: Tests
+
+Fix regrtest -s, which was broken by the -j enhancement.
+
+..
+
+.. bpo: 7498
+.. date: 7760
+.. nonce: Cpaz-t
+.. section: Tests
+
+test_multiprocessing now uses test_support.find_unused_port instead of a
+hardcoded port number in test_rapid_restart.
diff --git a/Misc/NEWS.d/2.7a3.rst b/Misc/NEWS.d/2.7a3.rst
new file mode 100644
index 0000000..02c0778
--- /dev/null
+++ b/Misc/NEWS.d/2.7a3.rst
@@ -0,0 +1,442 @@
+.. bpo: 5677
+.. date: 7847
+.. nonce: b0Qejz
+.. release date: 2010-02-06
+.. section: Core and Builtins
+
+Explicitly forbid write operations on read-only file objects, and read
+operations on write-only file objects.  On Windows, the system C library
+would return a bogus result; on Solaris, it was possible to crash the
+interpreter.  Patch by Stefan Krah.
+
+..
+
+.. bpo: 7853
+.. date: 7846
+.. nonce: 7BnJKC
+.. section: Core and Builtins
+
+Normalize exceptions before they are passed to a context manager's
+``__exit__()`` method.
+
+..
+
+.. bpo: 7385
+.. date: 7845
+.. nonce: OVCbWd
+.. section: Core and Builtins
+
+Fix a crash in ``PyMemoryView_FromObject()`` when ``PyObject_GetBuffer()``
+fails.  Patch by Florent Xicluna.
+
+..
+
+.. bpo: 7819
+.. date: 7844
+.. nonce: tGsOrJ
+.. section: Core and Builtins
+
+Check ``sys.call_tracing()`` arguments types.
+
+..
+
+.. bpo: 7788
+.. date: 7843
+.. nonce: 4T4M13
+.. section: Core and Builtins
+
+Fix an interpreter crash produced by deleting a list slice with very large
+step value.
+
+..
+
+.. bpo: 7766
+.. date: 7842
+.. nonce: aejr9M
+.. section: Core and Builtins
+
+Change ``sys.getwindowsversion()`` return value to a named tuple and add the
+additional members returned in an OSVERSIONINFOEX structure.  The new
+members are service_pack_major, service_pack_minor, suite_mask, and
+product_type.
+
+..
+
+.. bpo: 7561
+.. date: 7841
+.. nonce: dYmand
+.. section: Core and Builtins
+
+Operations on empty bytearrays (such as ``int(bytearray())``) could crash in
+many places because of the ``PyByteArray_AS_STRING()`` macro returning NULL.
+The macro now returns a statically allocated empty string instead.
+
+..
+
+.. bpo: 7622
+.. date: 7840
+.. nonce: yL5cXb
+.. section: Core and Builtins
+
+Improve the split(), rsplit(), splitlines() and replace() methods of bytes,
+bytearray and unicode objects by using a common implementation based on
+stringlib's fast search.  Patch by Florent Xicluna.
+
+..
+
+.. bpo: 7632
+.. date: 7839
+.. nonce: djAkIG
+.. section: Core and Builtins
+
+Fix various str -> float conversion bugs present in 2.7 alpha 2, including:
+
+(1) a serious 'wrong output' bug that could occur for long (> 40 digit)
+input     strings, (2) a crash in dtoa.c that occurred in debug builds when
+parsing certain long     numeric strings corresponding to subnormal values,
+(3) a memory leak for some values large enough to cause overflow, and (4) a
+number of flaws that could lead to incorrectly rounded results.
+
+..
+
+.. bpo: 7319
+.. date: 7838
+.. nonce: CIP64d
+.. section: Core and Builtins
+
+Silence ``DeprecationWarning`` by default when the -3 option is not used.
+(See also: bpo-7770)
+
+..
+
+.. bpo: 2335
+.. date: 7837
+.. nonce: NB-Xpf
+.. section: Core and Builtins
+
+Backport set literals syntax from Python 3.x.
+
+..
+
+.. bpo: 2333
+.. date: 7836
+.. nonce: yWLBy3
+.. section: Core and Builtins
+
+Backport set and dict comprehensions syntax from Python 3.x.
+
+..
+
+.. bpo: 1967
+.. date: 7835
+.. nonce: RryGx3
+.. section: Core and Builtins
+
+Backport dictionary views from Python 3.x.
+
+..
+
+.. bpo: 9137
+.. date: 7834
+.. nonce: DgWODo
+.. section: Library
+
+Fix issue in MutableMapping.update, which incorrectly treated keyword
+arguments called 'self' or 'other' specially.
+
+..
+
+.. bpo: 7835
+.. date: 7833
+.. nonce: jlbrK8
+.. section: Library
+
+shelve should no longer produce mysterious warnings during interpreter
+shutdown.
+
+..
+
+.. bpo: 2746
+.. date: 7832
+.. nonce: F6UqCX
+.. section: Library
+
+Don't escape ampersands and angle brackets ("&", "<", ">") in XML processing
+instructions and comments.  These raw characters are allowed by the XML
+specification, and are necessary when outputting e.g.  PHP code in a
+processing instruction.  Patch by Neil Muller.
+
+..
+
+.. bpo: 7869
+.. date: 7831
+.. nonce: 1QS851
+.. section: Library
+
+logging: Improved diagnostic for format-time errors.
+
+..
+
+.. bpo: 7868
+.. date: 7830
+.. nonce: PXTr9t
+.. section: Library
+
+logging: Added loggerClass attribute to Manager.
+
+..
+
+.. bpo: 7851
+.. date: 7829
+.. nonce: 7OtUnx
+.. section: Library
+
+logging: Clarification on logging configuration files.
+
+..
+
+.. bpo: 4772
+.. date: 7828
+.. nonce: 9_Y3av
+.. section: Library
+
+Raise a ValueError when an unknown Bluetooth protocol is specified, rather
+than fall through to AF_PACKET (in the ``socket`` module). Also, raise
+ValueError rather than TypeError when an unknown TIPC address type is
+specified.  Patch by Brian Curtin.
+
+..
+
+.. bpo: 0
+.. date: 7827
+.. nonce: DG4Srd
+.. section: Library
+
+logging: Implemented PEP 391.
+
+..
+
+.. bpo: 6939
+.. date: 7826
+.. nonce: 8fBhhK
+.. section: Library
+
+Fix file I/O objects in the `io` module to keep the original file position
+when calling `truncate()`.  It would previously change the file position to
+the given argument, which goes against the tradition of ftruncate() and
+other truncation APIs.  Patch by Pascal Chambon.
+
+..
+
+.. bpo: 7610
+.. date: 7825
+.. nonce: 2DXmYZ
+.. section: Library
+
+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 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.
+
+..
+
+.. bpo: 7792
+.. date: 7824
+.. nonce: ncH8BS
+.. section: Library
+
+Registering non-classes to ABCs raised an obscure error.
+
+..
+
+.. bpo: 0
+.. date: 7823
+.. nonce: RpNACh
+.. section: Library
+
+Removed the deprecated functions ``verify()`` and ``vereq()`` from
+Lib/test/test_support.py.
+
+..
+
+.. bpo: 7773
+.. date: 7822
+.. nonce: x2tWld
+.. section: Library
+
+Fix an UnboundLocalError in ``platform.linux_distribution()`` when the
+release file is empty.
+
+..
+
+.. bpo: 7748
+.. date: 7821
+.. nonce: YlAgV-
+.. section: Library
+
+Since unicode values are supported for some metadata options in Distutils,
+the DistributionMetadata get_* methods will now return a utf-8 encoded
+string for them.  This ensures that the upload and register commands send
+the correct values to PyPI without any error.
+
+..
+
+.. bpo: 1670765
+.. date: 7820
+.. nonce: 9eCqJl
+.. section: Library
+
+Prevent ``email.generator.Generator`` from re-wrapping headers in
+multipart/signed MIME parts, which fixes one of the sources of invalid
+modifications to such parts by Generator.
+
+..
+
+.. bpo: 7701
+.. date: 7819
+.. nonce: e9a5VO
+.. section: Library
+
+Fix crash in ``binascii.b2a_uu()`` in debug mode when given a 1-byte
+argument.  Patch by Victor Stinner.
+
+..
+
+.. bpo: 3299
+.. date: 7818
+.. nonce: AzzK85
+.. section: Library
+
+Fix possible crash in the _sre module when given bad argument values in
+debug mode.  Patch by Victor Stinner.
+
+..
+
+.. bpo: 7703
+.. date: 7817
+.. nonce: FNoqUO
+.. section: Library
+
+Add support for the new buffer API to functions of the binascii module.
+Backported from py3k by Florent Xicluna, with some additional tests.
+
+..
+
+.. bpo: 2846
+.. date: 7816
+.. nonce: 1yXo1U
+.. section: Library
+
+Add support for gzip.GzipFile reading zero-padded files.  Patch by Brian
+Curtin.
+
+..
+
+.. bpo: 5827
+.. date: 7815
+.. nonce: HqdXuX
+.. section: Library
+
+Make sure that normpath preserves unicode.  Initial patch by Matt Giuca.
+
+..
+
+.. bpo: 5372
+.. date: 7814
+.. nonce: t3pYj8
+.. section: Library
+
+Drop the reuse of .o files in Distutils' ccompiler (since Extension extra
+options may change the output without changing the .c file). Initial patch
+by Collin Winter.
+
+..
+
+.. bpo: 0
+.. date: 7813
+.. nonce: nL49In
+.. section: Library
+
+Expat: Fix DoS via XML document with malformed UTF-8 sequences
+(CVE_2009_3560).
+
+..
+
+.. bpo: 7632
+.. date: 7812
+.. nonce: AWDxJU
+.. section: Build
+
+When Py_USING_MEMORY_DEBUGGER is defined, disable the private memory
+allocation scheme in dtoa.c and use PyMem_Malloc and PyMem_Free instead.
+Also disable caching of powers of 5.
+
+..
+
+.. bpo: 7658
+.. date: 7811
+.. nonce: oUBbSZ
+.. section: Build
+
+Ensure that the new pythonw executable works on OSX 10.4
+
+..
+
+.. bpo: 7714
+.. date: 7810
+.. nonce: 27wQ2M
+.. section: Build
+
+Use ``gcc -dumpversion`` to detect the version of GCC on MacOSX.
+
+..
+
+.. bpo: 7661
+.. date: 7809
+.. nonce: ggMDHr
+.. section: Build
+
+Allow ctypes to be built from a non-ASCII directory path. Patch by Florent
+Xicluna.
+
+..
+
+.. bpo: 0
+.. date: 7808
+.. nonce: KgUrLn
+.. section: Tools/Demos
+
+iobench (a file I/O benchmark) and ccbench (a concurrency benchmark) were
+added to the ``Tools`` directory.  They were previously living in the
+sandbox.
+
+..
+
+.. bpo: 7728
+.. date: 7807
+.. nonce: f9wo4c
+.. section: Tests
+
+test_timeout was changed to use ``test_support.bind_port()`` instead of a
+hard coded port.
+
+..
+
+.. bpo: 0
+.. date: 7806
+.. nonce: Dx9g36
+.. section: Documentation
+
+Updated "Using Python" documentation to include description of CPython's -J,
+-U and -X options.
+
+..
+
+.. bpo: 0
+.. date: 7805
+.. nonce: vllYdR
+.. section: Documentation
+
+Updated Python manual page (options -B, -O0, -s, environment variables
+PYTHONDONTWRITEBYTECODE, PYTHONNOUSERSITE).
diff --git a/Misc/NEWS.d/2.7a4.rst b/Misc/NEWS.d/2.7a4.rst
new file mode 100644
index 0000000..08a0518
--- /dev/null
+++ b/Misc/NEWS.d/2.7a4.rst
@@ -0,0 +1,440 @@
+.. bpo: 7544
+.. date: 7892
+.. nonce: TTDd8s
+.. release date: 2010-03-06
+.. section: Core and Builtins
+
+Preallocate thread memory before creating the thread to avoid a fatal error
+in low memory condition.
+
+..
+
+.. bpo: 7820
+.. date: 7891
+.. nonce: hEaQ9f
+.. section: Core and Builtins
+
+The parser tokenizer restores all bytes in the right if the BOM check fails.
+
+..
+
+.. bpo: 7309
+.. date: 7890
+.. nonce: pAF_KB
+.. section: Core and Builtins
+
+Fix unchecked attribute access when converting UnicodeEncodeError,
+UnicodeDecodeError, and UnicodeTranslateError to strings.
+
+..
+
+.. bpo: 7649
+.. date: 7889
+.. nonce: KS0hoy
+.. section: Core and Builtins
+
+"u'%c' % char" now behaves like "u'%s' % char" and raises a
+UnicodeDecodeError if 'char' is a byte string that can't be decoded using
+the default encoding.
+
+..
+
+.. bpo: 6902
+.. date: 7888
+.. nonce: RDRX1R
+.. section: Core and Builtins
+
+Fix problem with built-in types format incorrectly with 0 padding.
+
+..
+
+.. bpo: 2560
+.. date: 7887
+.. nonce: kdK-75
+.. section: Core and Builtins
+
+Remove an unnecessary 'for' loop from ``my_fgets()`` in Parser/myreadline.c.
+
+..
+
+.. bpo: 7988
+.. date: 7886
+.. nonce: 9h758B
+.. section: Core and Builtins
+
+Fix default alignment to be right aligned for ``complex.__format__``.  Now
+it matches other numeric types.
+
+..
+
+.. bpo: 5211
+.. date: 7885
+.. nonce: bktLaF
+.. section: Core and Builtins
+
+The complex type no longer uses implicit coercion in mixed-type binary
+arithmetic operations.
+
+..
+
+.. bpo: 7904
+.. date: 7884
+.. nonce: fiQRfj
+.. section: Library
+
+Changes to urllib.parse.urlsplit to handle schemes as defined by RFC3986.
+Anything before :// is considered a scheme and is followed by an authority
+(or netloc) and by '/' led path, which is optional.
+
+..
+
+.. bpo: 1555570
+.. date: 7883
+.. nonce: ruR9CS
+.. section: Library
+
+email no longer inserts extra blank lines when a \r\n combo crosses an 8192
+byte boundary.
+
+..
+
+.. bpo: 6906
+.. date: 7882
+.. nonce: BJTdHl
+.. section: Library
+
+Tk should not set Unicode environment variables on Windows.
+
+..
+
+.. bpo: 1054943
+.. date: 7881
+.. nonce: uHWve2
+.. section: Library
+
+Fix ``unicodedata.normalize('NFC', text)`` for the Public Review Issue #29
+(http://unicode.org/review/pr-29.html).
+
+..
+
+.. bpo: 7494
+.. date: 7880
+.. nonce: ZnUIo2
+.. section: Library
+
+Fix a crash in ``_lsprof`` (cProfile) after clearing the profiler, reset
+also the pointer to the current pointer context.
+
+..
+
+.. bpo: 7232
+.. date: 7879
+.. nonce: dD983K
+.. section: Library
+
+Add support for the context management protocol to the ``tarfile.TarFile``
+class.
+
+..
+
+.. bpo: 7250
+.. date: 7878
+.. nonce: SqXm2h
+.. section: Library
+
+Fix info leak of os.environ across multi-run uses of
+``wsgiref.handlers.CGIHandler``.
+
+..
+
+.. bpo: 1729305
+.. date: 7877
+.. nonce: pRiKEW
+.. section: Library
+
+Fix doctest to handle encode error with "backslashreplace".
+
+..
+
+.. bpo: 691291
+.. date: 7876
+.. nonce: SkVfbl
+.. section: Library
+
+``codecs.open()`` should not convert end of lines on reading and writing.
+
+..
+
+.. bpo: 7975
+.. date: 7875
+.. nonce: lm8Hlp
+.. section: Library
+
+Correct regression in dict methods supported by bsddb.dbshelve.
+
+..
+
+.. bpo: 7959
+.. date: 7874
+.. nonce: 0Si0xg
+.. section: Library
+
+ctypes callback functions are now registered correctly with the cycle
+garbage collector.
+
+..
+
+.. bpo: 7970
+.. date: 7873
+.. nonce: zsdvhZ
+.. section: Library
+
+``email.Generator.flatten`` now correctly flattens message/rfc822 messages
+parsed by ``email.Parser.HeaderParser``.
+
+..
+
+.. bpo: 3426
+.. date: 7872
+.. nonce: bunX9f
+.. section: Library
+
+``os.path.abspath`` now returns unicode when its arg is unicode.
+
+..
+
+.. bpo: 7633
+.. date: 7871
+.. nonce: kpPZYL
+.. section: Library
+
+In the decimal module, ``Context`` class methods (with the exception of
+canonical and is_canonical) now accept instances of int and long wherever a
+Decimal instance is accepted, and implicitly convert that argument to
+Decimal.  Previously only some arguments were converted.
+
+..
+
+.. bpo: 6003
+.. date: 7870
+.. nonce: TAoZ-e
+.. section: Library
+
+Add an argument to ``zipfile.Zipfile.writestr`` to specify the compression
+type.
+
+..
+
+.. bpo: 7893
+.. date: 7869
+.. nonce: IFB3BV
+.. section: Library
+
+``unittest.TextTestResult`` is made public and a ``resultclass`` argument
+added to the TextTestRunner constructor allowing a different result class to
+be used without having to subclass.
+
+..
+
+.. bpo: 7588
+.. date: 7868
+.. nonce: rOCPeT
+.. section: Library
+
+``unittest.TextTestResult.getDescription`` now includes the test name in
+failure reports even if the test has a docstring.
+
+..
+
+.. bpo: 5801
+.. date: 7867
+.. nonce: eOropo
+.. section: Library
+
+Remove spurious empty lines in wsgiref.
+
+..
+
+.. bpo: 1537721
+.. date: 7866
+.. nonce: cM7u3p
+.. section: Library
+
+Add a ``writeheader()`` method to ``csv.DictWriter``.
+
+..
+
+.. bpo: 7427
+.. date: 7865
+.. nonce: c1z170
+.. section: Library
+
+Improve the representation of httplib.BadStatusLine exceptions.
+
+..
+
+.. bpo: 7481
+.. date: 7864
+.. nonce: FOM-ZK
+.. section: Library
+
+When a ``threading.Thread`` failed to start it would leave the instance
+stuck in initial state and present in ``threading.enumerate()``.
+
+..
+
+.. bpo: 1068268
+.. date: 7863
+.. nonce: GTy8EE
+.. section: Library
+
+The subprocess module now handles EINTR in internal ``os.waitpid()`` and
+``os.read()`` system calls where appropriate.
+
+..
+
+.. bpo: 6729
+.. date: 7862
+.. nonce: WSzBED
+.. section: Library
+
+Add ``ctypes.c_ssize_t`` to represent ssize_t.
+
+..
+
+.. bpo: 6247
+.. date: 7861
+.. nonce: qqe0rR
+.. section: Library
+
+The argparse module has been added to the standard library.
+
+..
+
+.. bpo: 0
+.. date: 7860
+.. nonce: sY1Wyi
+.. section: Library
+
+The sqlite3 module was updated to pysqlite 2.6.0.  This fixes several
+obscure bugs and allows loading SQLite extensions from shared libraries.
+
+..
+
+.. bpo: 7808
+.. date: 7859
+.. nonce: Onia6y
+.. section: Library
+
+Fix reference leaks in _bsddb and related tests.
+
+..
+
+.. bpo: 6544
+.. date: 7858
+.. nonce: NLvwqS
+.. section: Library
+
+Fix a reference leak in the kqueue implementation's error handling.
+
+..
+
+.. bpo: 0
+.. date: 7857
+.. nonce: yVX0tF
+.. section: Library
+
+Stop providing crtassem.h symbols when compiling with Visual Studio 2010, as
+msvcr100.dll is not a platform assembly anymore.
+
+..
+
+.. bpo: 7242
+.. date: 7856
+.. nonce: VzdbKI
+.. section: Library
+
+On Solaris 9 and earlier calling ``os.fork()`` from within a thread could
+raise an incorrect RuntimeError about not holding the import lock.  The
+import lock is now reinitialized after fork.
+
+..
+
+.. bpo: 7999
+.. date: 7855
+.. nonce: -6kN7B
+.. section: Library
+
+``os.setreuid()`` and ``os.setregid()`` would refuse to accept a -1
+parameter on some platforms such as OS X.
+
+..
+
+.. bpo: 7849
+.. date: 7854
+.. nonce: XQLva6
+.. section: Tests
+
+The utility ``test.test_support.check_warnings()`` verifies if warnings are
+effectively raised.  A new utility ``check_py3k_warnings()`` is available.
+
+..
+
+.. bpo: 0
+.. date: 7853
+.. nonce: iFGi5W
+.. section: Tests
+
+The four path modules (genericpath, macpath, ntpath, posixpath) share a
+common TestCase for some tests: test_genericpath.CommonTest.
+
+..
+
+.. bpo: 0
+.. date: 7852
+.. nonce: xd6x8Q
+.. section: Tests
+
+Print platform information when running the whole test suite, or using the
+``--verbose`` flag.
+
+..
+
+.. bpo: 767675
+.. date: 7851
+.. nonce: cR-mRY
+.. section: Tests
+
+Enable test_pep277 on POSIX platforms with Unicode-friendly filesystem
+encoding.
+
+..
+
+.. bpo: 6292
+.. date: 7850
+.. nonce: RJOYAi
+.. section: Tests
+
+For the moment at least, the test suite runs cleanly if python is run with
+the -OO flag.  Tests requiring docstrings are skipped.
+
+..
+
+.. bpo: 7712
+.. date: 7849
+.. nonce: Co5Xm7
+.. section: Tests
+
+test_support gained a new ``temp_cwd`` context manager which is now also
+used by regrtest to run all the tests in a temporary directory.  The
+original CWD is saved in ``test.test_support.SAVEDCWD``.  Thanks to Florent
+Xicluna who helped with the patch.
+
+..
+
+.. bpo: 3920
+.. date: 7848
+.. nonce: 5cWPGY
+.. section: Build
+
+Define _BSD_SOURCE on OpenBSD 4.4 through 4.9. (See also: bpo-7903)
diff --git a/Misc/NEWS.d/2.7b1.rst b/Misc/NEWS.d/2.7b1.rst
new file mode 100644
index 0000000..9e096ec
--- /dev/null
+++ b/Misc/NEWS.d/2.7b1.rst
@@ -0,0 +1,802 @@
+.. bpo: 7301
+.. date: 7972
+.. nonce: dlecRg
+.. release date: 2010-04-10
+.. section: Core and Builtins
+
+Add environment variable $PYTHONWARNINGS.
+
+..
+
+.. bpo: 8329
+.. date: 7971
+.. nonce: ZUTObm
+.. section: Core and Builtins
+
+Don't return the same lists from select.select when no fds are changed.
+
+..
+
+.. bpo: 8259
+.. date: 7970
+.. nonce: NNoD66
+.. section: Core and Builtins
+
+``1L << (2**31)`` no longer produces an 'outrageous shift error' on 64-bit
+machines.  The shift count for either left or right shift is permitted to be
+up to sys.maxsize.
+
+..
+
+.. bpo: 0
+.. date: 7969
+.. nonce: iwBvru
+.. section: Core and Builtins
+
+Ensure that tokenization of identifiers is not affected by locale.
+
+..
+
+.. bpo: 1222585
+.. date: 7968
+.. nonce: emqFT3
+.. section: Core and Builtins
+
+Added LDCXXSHARED for C++ support.  Patch by Arfrever.
+
+..
+
+.. bpo: 0
+.. date: 7967
+.. nonce: jCkZ20
+.. section: Core and Builtins
+
+Raise a TypeError when trying to delete a T_STRING_INPLACE struct member.
+
+..
+
+.. bpo: 7994
+.. date: 7966
+.. nonce: ZEBSAJ
+.. section: Core and Builtins
+
+Issue a PendingDeprecationWarning if object.__format__ is called with a
+non-empty format string. This is an effort to future-proof user code. If a
+derived class does not currently implement __format__ but later adds its own
+__format__, it would most likely break user code that had supplied a format
+string. This will be changed to a DeprecationWarning in Python 3.3 and it
+will be an error in Python 3.4.
+
+..
+
+.. bpo: 8268
+.. date: 7965
+.. nonce: usS51U
+.. section: Core and Builtins
+
+Old-style classes (not just instances) now support weak references.
+
+..
+
+.. bpo: 8211
+.. date: 7964
+.. nonce: InhXpq
+.. section: Core and Builtins
+
+Save/restore CFLAGS around AC_PROG_CC in configure.in, in case it is set.
+
+..
+
+.. bpo: 1583863
+.. date: 7963
+.. nonce: tSkjxk
+.. section: Core and Builtins
+
+A unicode subclass can now override the __unicode__ method
+
+..
+
+.. bpo: 6474
+.. date: 7962
+.. nonce: yFxVuM
+.. section: Core and Builtins
+
+Make error message from passing an inadequate number of keyword arguments to
+a function correct.
+
+..
+
+.. bpo: 8164
+.. date: 7961
+.. nonce: uRYEY5
+.. section: Core and Builtins
+
+Don't allow lambda functions to have a docstring.
+
+..
+
+.. bpo: 3137
+.. date: 7960
+.. nonce: Em70dh
+.. section: Core and Builtins
+
+Don't ignore errors at startup, especially a keyboard interrupt (SIGINT).
+If an error occurs while importing the site module, the error is printed and
+Python exits.  Initialize the GIL before importing the site module.
+
+..
+
+.. bpo: 0
+.. date: 7959
+.. nonce: kIQmnN
+.. section: Core and Builtins
+
+Code objects now support weak references.
+
+..
+
+.. bpo: 5277
+.. date: 7958
+.. nonce: CQ8CXN
+.. section: Library
+
+Fix quote counting when parsing RFC 2231 encoded parameters.
+
+..
+
+.. bpo: 8321
+.. date: 7957
+.. nonce: Tul_aA
+.. section: Library
+
+Give access to OpenSSL version numbers from the `ssl` module, using the new
+attributes `ssl.OPENSSL_VERSION`, `ssl.OPENSSL_VERSION_INFO` and
+`ssl.OPENSSL_VERSION_NUMBER`.
+
+..
+
+.. bpo: 8310
+.. date: 7956
+.. nonce: 6fu8uc
+.. section: Library
+
+Allow dis to examine new style classes.
+
+..
+
+.. bpo: 8257
+.. date: 7955
+.. nonce: PzabSZ
+.. section: Library
+
+The Decimal construct now accepts a float instance directly, converting that
+float to a Decimal of equal value:
+
+>>> Decimal(1.1)
+Decimal('1.100000000000000088817841970012523233890533447265625')
+
+..
+
+.. bpo: 0
+.. date: 7954
+.. nonce: 02C1gn
+.. section: Library
+
+collections.Counter() now supports a subtract() method.
+
+..
+
+.. bpo: 0
+.. date: 7953
+.. nonce: or8thG
+.. section: Library
+
+The functools module now has a total_ordering() class decorator to simplify
+the specification of rich comparisons.
+
+..
+
+.. bpo: 0
+.. date: 7952
+.. nonce: nshtA2
+.. section: Library
+
+The functools module also adds cmp_to_key() as a tool to transition
+old-style comparison functions to new-style key-functions.
+
+..
+
+.. bpo: 8294
+.. date: 7951
+.. nonce: 42HIIC
+.. section: Library
+
+The Fraction constructor now accepts Decimal and float instances directly.
+
+..
+
+.. bpo: 7279
+.. date: 7950
+.. nonce: v1uyoh
+.. section: Library
+
+Comparisons involving a Decimal signaling NaN now signal InvalidOperation
+instead of returning False.  (Comparisons involving a quiet NaN are
+unchanged.)  Also, Decimal quiet NaNs are now hashable; Decimal signaling
+NaNs remain unhashable.
+
+..
+
+.. bpo: 2531
+.. date: 7949
+.. nonce: ELCENf
+.. section: Library
+
+Comparison operations between floats and Decimal instances now return a
+result based on the numeric values of the operands; previously they returned
+an arbitrary result based on the relative ordering of id(float) and
+id(Decimal).
+
+..
+
+.. bpo: 8233
+.. date: 7948
+.. nonce: xJkVL4
+.. section: Library
+
+When run as a script, py_compile.py optionally takes a single argument `-`
+which tells it to read files to compile from stdin.  Each line is read on
+demand and the named file is compiled immediately.  (Original patch by Piotr
+Ożarowski).
+
+..
+
+.. bpo: 3135
+.. date: 7947
+.. nonce: 5u_w3h
+.. section: Library
+
+Add ``inspect.getcallargs()``, which binds arguments to a function like a
+normal call.
+
+..
+
+.. bpo: 0
+.. date: 7946
+.. nonce: CTbVhT
+.. section: Library
+
+Backwards incompatible change: Unicode codepoints line tabulation (0x0B) and
+form feed (0x0C) are now considered linebreaks, as specified in Unicode
+Standard Annex #14.  See issue #7643.  http://www.unicode.org/reports/tr14/
+
+..
+
+.. bpo: 0
+.. date: 7945
+.. nonce: Y0P_8n
+.. section: Library
+
+Comparisons using one of <, <=, >, >= between a complex instance and a
+Fractions instance now raise TypeError instead of returning True/False.
+This makes Fraction <=> complex comparisons consistent with int <=> complex,
+float <=> complex, and complex <=> complex comparisons.
+
+..
+
+.. bpo: 0
+.. date: 7944
+.. nonce: POrUTx
+.. section: Library
+
+Addition of ``WeakSet`` to the ``weakref`` module.
+
+..
+
+.. bpo: 0
+.. date: 7943
+.. nonce: 6xyUXj
+.. section: Library
+
+logging: Added LOG_FTP to SysLogHandler and updated documentation.
+
+..
+
+.. bpo: 8205
+.. date: 7942
+.. nonce: GK6syz
+.. section: Library
+
+Remove the "Modules" directory from sys.path when Python is running from the
+build directory (POSIX only).
+
+..
+
+.. bpo: 7667
+.. date: 7941
+.. nonce: 581UIL
+.. section: Library
+
+Fix doctest failures with non-ASCII paths.
+
+..
+
+.. bpo: 7512
+.. date: 7940
+.. nonce: 3tQWru
+.. section: Library
+
+shutil.copystat() could raise an OSError when the filesystem didn't support
+chflags() (for example ZFS under FreeBSD).  The error is now silenced.
+
+..
+
+.. bpo: 7703
+.. date: 7939
+.. nonce: _QnWbZ
+.. section: Library
+
+ctypes supports both buffer() and memoryview().  The former is deprecated.
+
+..
+
+.. bpo: 7860
+.. date: 7938
+.. nonce: DV2Y4E
+.. section: Library
+
+platform.uname now reports the correct 'machine' type when Python is running
+in WOW64 mode on 64 bit Windows.
+
+..
+
+.. bpo: 0
+.. date: 7937
+.. nonce: ZMh4CS
+.. section: Library
+
+logging: Added getChild utility method to Logger and added isEnabledFor
+method to LoggerAdapter.
+
+..
+
+.. bpo: 8201
+.. date: 7936
+.. nonce: Zsfq9o
+.. section: Library
+
+logging: Handle situation of non-ASCII and Unicode logger names existing at
+the same time, causing a Unicode error when configuration code attempted to
+sort the existing loggers.
+
+..
+
+.. bpo: 8200
+.. date: 7935
+.. nonce: QhAmka
+.. section: Library
+
+logging: Handle errors when multiprocessing is not fully loaded when logging
+occurs.
+
+..
+
+.. bpo: 3890
+.. date: 7934
+.. nonce: LxiC0p
+.. section: Library
+
+Fix recv() and recv_into() on non-blocking SSL sockets. Also, enable the
+SSL_MODE_AUTO_RETRY flag on SSL sockets, so that blocking reads and writes
+are always retried by OpenSSL itself. (See also: bpo-8222)
+
+..
+
+.. bpo: 8179
+.. date: 7933
+.. nonce: 8H5ich
+.. section: Library
+
+Fix macpath.realpath() on a non-existing path.
+
+..
+
+.. bpo: 8024
+.. date: 7932
+.. nonce: OWylMQ
+.. section: Library
+
+Update the Unicode database to 5.2.
+
+..
+
+.. bpo: 8104
+.. date: 7931
+.. nonce: sE4WnG
+.. section: Library
+
+socket.recv_into() and socket.recvfrom_into() now support writing into
+objects supporting the new buffer API, for example bytearrays or
+memoryviews.
+
+..
+
+.. bpo: 4961
+.. date: 7930
+.. nonce: WDc-2x
+.. section: Library
+
+Inconsistent/wrong result of askyesno function in tkMessageBox with
+Tcl/Tk-8.5.
+
+..
+
+.. bpo: 8140
+.. date: 7929
+.. nonce: GfkB7_
+.. section: Library
+
+Extend compileall to compile single files.  Add -i option.
+
+..
+
+.. bpo: 7774
+.. date: 7928
+.. nonce: BddO6b
+.. section: Library
+
+Set sys.executable to an empty string if ``argv[0]`` has been set to a non
+existent program name and Python is unable to retrieve the real program
+name.
+
+..
+
+.. bpo: 8117
+.. date: 7927
+.. nonce: CFgyRD
+.. section: Library
+
+logging: Improved algorithm for computing initial rollover time for
+``TimedRotatingFileHandler`` by using the modification time of an existing
+log file to compute the next rollover time.  If the log file does not exist,
+the current time is used as the basis for the computation.
+
+..
+
+.. bpo: 6472
+.. date: 7926
+.. nonce: c0VR0M
+.. section: Library
+
+The ``xml.etree`` package is updated to ElementTree 1.3.  The cElementTree
+module is updated too.
+
+..
+
+.. bpo: 7880
+.. date: 7925
+.. nonce: oSpS50
+.. section: Library
+
+Fix sysconfig when the python executable is a symbolic link.
+
+..
+
+.. bpo: 7624
+.. date: 7924
+.. nonce: P9QTki
+.. section: Library
+
+Fix ``isinstance(foo(), collections.Callable)`` for old-style classes.
+
+..
+
+.. bpo: 7143
+.. date: 7923
+.. nonce: A30Qss
+.. section: Library
+
+email: ``get_payload()`` used to strip any trailing newline from a base64
+transfer-encoded payload *after* decoding it; it no longer does. This is a
+behavior change, so email's minor version number is now bumped, to version
+4.0.2, for the 2.7 release.
+
+..
+
+.. bpo: 8235
+.. date: 7922
+.. nonce: 7txk3-
+.. section: Library
+
+_socket: Add the constant ``SO_SETFIB``.  SO_SETFIB is a socket option
+available on FreeBSD 7.1 and newer.
+
+..
+
+.. bpo: 8038
+.. date: 7921
+.. nonce: GrZDC3
+.. section: Library
+
+unittest.TestCase.assertNotRegexpMatches
+
+..
+
+.. bpo: 0
+.. date: 7920
+.. nonce: V2kHuO
+.. section: Library
+
+Addition of -b command line option to unittest for buffering stdout / stderr
+during test runs.
+
+..
+
+.. bpo: 1220212
+.. date: 7919
+.. nonce: GqZ0L4
+.. section: Library
+
+Added os.kill support for Windows, including support for sending CTRL+C and
+CTRL+BREAK events to console subprocesses.
+
+..
+
+.. bpo: 8314
+.. date: 7918
+.. nonce: s45vVC
+.. section: Library
+
+Fix unsigned long long bug in libffi on Sparc v8.
+
+..
+
+.. bpo: 1039
+.. date: 7917
+.. nonce: BQUTJH
+.. section: Library
+
+Fix os.execlp() crash with missing 2nd argument. (See also: bpo-8154)
+
+..
+
+.. bpo: 8156
+.. date: 7916
+.. nonce: 5LG8uP
+.. section: Library
+
+bsddb module updated to version 4.8.4.
+http://www.jcea.es/programacion/pybsddb.htm#bsddb3-4.8.4.  This update drops
+support for Berkeley DB 4.0, and adds support for 4.8.
+
+..
+
+.. bpo: 3928
+.. date: 7915
+.. nonce: kY8ENm
+.. section: Library
+
+os.mknod() now available in Solaris, also.
+
+..
+
+.. bpo: 8142
+.. date: 7914
+.. nonce: ArTkHw
+.. section: Library
+
+Update libffi to the 3.0.9 release.
+
+..
+
+.. bpo: 8300
+.. date: 7913
+.. nonce: fAkvVk
+.. section: Library
+
+When passing a non-integer argument to struct.pack with any integer format
+code, struct.pack first attempts to convert the non-integer using its
+__index__ method.  If that method is non-existent or raises TypeError it
+goes on to try the __int__ method, as described below.
+
+..
+
+.. bpo: 1530559
+.. date: 7912
+.. nonce: KXF5m2
+.. section: Library
+
+When passing a non-integer argument to struct.pack with *any* integer format
+code (one of 'bBhHiIlLqQ'), struct.pack attempts to use the argument's
+__int__ method to convert to an integer before packing.  It also produces a
+DeprecationWarning in this case.  (In Python 2.6, the behaviour was
+inconsistent: __int__ was used for some integer codes but not for others,
+and the set of integer codes for which it was used differed between native
+packing and standard packing.)
+
+..
+
+.. bpo: 7347
+.. date: 7911
+.. nonce: RdqRiz
+.. section: Library
+
+_winreg: Add CreateKeyEx and DeleteKeyEx, as well as fix a bug in the return
+value of QueryReflectionKey.
+
+..
+
+.. bpo: 7993
+.. date: 7910
+.. nonce: M7oNRJ
+.. section: Tools/Demos
+
+Add a test of IO packet processing bandwidth to ccbench.  It measures the
+number of UDP packets processed per second depending on the number of
+background CPU-bound Python threads.
+
+..
+
+.. bpo: 0
+.. date: 7909
+.. nonce: KeNbfw
+.. section: Tools/Demos
+
+python-config now supports multiple options on the same command line.
+
+..
+
+.. bpo: 8032
+.. date: 7908
+.. nonce: gv-Du9
+.. section: Build
+
+For gdb7, a python-gdb.py file is added to the build, allowing to use
+advanced gdb features when debugging Python.
+
+..
+
+.. bpo: 1628484
+.. date: 7907
+.. nonce: wcrSr1
+.. section: Build
+
+The Makefile doesn't ignore the CFLAGS environment variable anymore.  It
+also forwards the LDFLAGS settings to the linker when building a shared
+library.
+
+..
+
+.. bpo: 6716
+.. date: 7906
+.. nonce: tQLBdR
+.. section: Build
+
+Quote -x arguments of compileall in MSI installer.
+
+..
+
+.. bpo: 7705
+.. date: 7905
+.. nonce: sw6ifg
+.. section: Build
+
+Fix linking on FreeBSD.
+
+..
+
+.. bpo: 0
+.. date: 7904
+.. nonce: Dm_ncE
+.. section: Build
+
+Make sure that the FreeBSD build of the included libffi uses the proper
+assembly file.
+
+..
+
+.. bpo: 8276
+.. date: 7903
+.. nonce: 40pgLF
+.. section: C API
+
+PyEval_CallObject() is now only available in macro form.  The function
+declaration, which was kept for backwards compatibility reasons, is now
+removed (the macro was introduced in 1997!).
+
+..
+
+.. bpo: 7992
+.. date: 7902
+.. nonce: 2eLlya
+.. section: C API
+
+A replacement PyCObject API, PyCapsule, has been backported from Python 3.1.
+All existing Python CObjects in the main distribution have been converted to
+capsules.  To address backwards-compatibility concerns,
+PyCObject_AsVoidPtr() was changed to understand capsules.
+
+..
+
+.. bpo: 3864
+.. date: 7901
+.. nonce: bkbNiO
+.. section: Tests
+
+Skip three test_signal tests on freebsd6 because they fail if any thread was
+previously started, most likely due to a platform bug.
+
+..
+
+.. bpo: 8348
+.. date: 7900
+.. nonce: Nygf2t
+.. section: Tests
+
+Fix test ftp url in test_urllib2net.
+
+..
+
+.. bpo: 8204
+.. date: 7899
+.. nonce: iYMJ7_
+.. section: Tests
+
+Fix test_ttk notebook test by forcing focus.
+
+..
+
+.. bpo: 8344
+.. date: 7898
+.. nonce: kt2Sq_
+.. section: Tests
+
+Fix test_ttk bug on FreeBSD.
+
+..
+
+.. bpo: 8193
+.. date: 7897
+.. nonce: T8MbIc
+.. section: Tests
+
+Fix test_zlib failure with zlib 1.2.4.
+
+..
+
+.. bpo: 8248
+.. date: 7896
+.. nonce: pBx5bT
+.. section: Tests
+
+Add some tests for the bool type.  Patch by Gregory Nofi.
+
+..
+
+.. bpo: 8263
+.. date: 7895
+.. nonce: zNUf-5
+.. section: Tests
+
+Now regrtest.py will report a failure if it receives a KeyboardInterrupt
+(SIGINT).
+
+..
+
+.. bpo: 8180
+.. date: 7894
+.. nonce: yyLvZY
+.. section: Tests
+
+Fix test_pep277 on OS X and add more tests for special Unicode normalization
+cases. (See also: bpo-8207)
+
+..
+
+.. bpo: 7783
+.. date: 7893
+.. nonce: K20ttO
+.. section: Tests
+
+test.test_support.open_urlresource invalidates the outdated files from the
+local cache.
diff --git a/Misc/NEWS.d/2.7b2.rst b/Misc/NEWS.d/2.7b2.rst
new file mode 100644
index 0000000..acc395b
--- /dev/null
+++ b/Misc/NEWS.d/2.7b2.rst
@@ -0,0 +1,666 @@
+.. bpo: 0
+.. date: 8039
+.. nonce: 8aqNKP
+.. release date: 2010-05-08
+.. section: Core and Builtins
+
+Run Clang 2.7's static analyzer for ``Objects/`` and ``Python/``.
+
+..
+
+.. bpo: 1533
+.. date: 8038
+.. nonce: 6FLjC9
+.. section: Core and Builtins
+
+Fix inconsistency in range function argument processing: any non-float
+non-integer argument is now converted to an integer (if possible) using its
+__int__ method.  Previously, only small arguments were treated this way;
+larger arguments (those whose __int__ was outside the range of a C long)
+would produce a TypeError.
+
+..
+
+.. bpo: 8202
+.. date: 8037
+.. nonce: UvqmQ2
+.. section: Core and Builtins
+
+``sys.argv[0]`` is now set to '-m' instead of '-c' when searching for the
+module file to be executed with the -m command line option.
+
+..
+
+.. bpo: 7319
+.. date: 8036
+.. nonce: Ry0QuX
+.. section: Core and Builtins
+
+When -Q is used, do not silence DeprecationWarning.
+
+..
+
+.. bpo: 7332
+.. date: 8035
+.. nonce: mCUzwz
+.. section: Core and Builtins
+
+Remove the 16KB stack-based buffer in ``PyMarshal_ReadLastObjectFromFile``,
+which doesn't bring any noticeable benefit compared to the dynamic memory
+allocation fallback.  Patch by Charles-François Natali.
+
+..
+
+.. bpo: 8417
+.. date: 8034
+.. nonce: qcRfh8
+.. section: Core and Builtins
+
+Raise an OverflowError when an integer larger than sys.maxsize is passed to
+bytearray.
+
+..
+
+.. bpo: 7072
+.. date: 8033
+.. nonce: YGHQG7
+.. section: Core and Builtins
+
+``isspace(0xa0)`` is true on Mac OS X.
+
+..
+
+.. bpo: 8404
+.. date: 8032
+.. nonce: 0krGPF
+.. section: Core and Builtins
+
+Fix set operations on dictionary views.
+
+..
+
+.. bpo: 8084
+.. date: 8031
+.. nonce: uiAFoS
+.. section: Core and Builtins
+
+PEP 370 now conforms to system conventions for framework builds on MacOS X.
+That is, ``python setup.py install --user`` will install into
+``~/Library/Python/2.7`` instead of ``~/.local``.
+
+..
+
+.. bpo: 8681
+.. date: 8030
+.. nonce: bnD2Mi
+.. section: Library
+
+Make the zlib module's error messages more informative when the zlib itself
+doesn't give any detailed explanation.
+
+..
+
+.. bpo: 8571
+.. date: 8029
+.. nonce: BGxcud
+.. section: Library
+
+Fix an internal error when compressing or decompressing a chunk larger than
+1GB with the zlib module's compressor and decompressor objects.
+
+..
+
+.. bpo: 8573
+.. date: 8028
+.. nonce: PZTYKm
+.. section: Library
+
+asyncore ``_strerror()`` function might throw ValueError.
+
+..
+
+.. bpo: 8483
+.. date: 8027
+.. nonce: gWRwCr
+.. section: Library
+
+asyncore.dispatcher's __getattr__ method produced confusing error messages
+when accessing undefined class attributes because of the cheap inheritance
+with the underlying socket object.  The cheap inheritance has been
+deprecated.
+
+..
+
+.. bpo: 4265
+.. date: 8026
+.. nonce: gtcR-h
+.. section: Library
+
+``shutil.copyfile()`` was leaking file descriptors when disk fills.  Patch
+by Tres Seaver.
+
+..
+
+.. bpo: 7755
+.. date: 8025
+.. nonce: k5FaAX
+.. section: Library
+
+Use an unencumbered audio file for tests.
+
+..
+
+.. bpo: 8621
+.. date: 8024
+.. nonce: 64sJJn
+.. section: Library
+
+``uuid.uuid4()`` returned the same sequence of values in the parent and any
+children created using ``os.fork`` on Mac OS X 10.6.
+
+..
+
+.. bpo: 8313
+.. date: 8023
+.. nonce: lE868K
+.. section: Library
+
+``traceback.format_exception_only()`` encodes unicode message to ASCII with
+backslashreplace error handler if ``str(value)`` failed.
+
+..
+
+.. bpo: 8567
+.. date: 8022
+.. nonce: agGfsd
+.. section: Library
+
+Fix precedence of signals in Decimal module: when a Decimal operation raises
+multiple signals and more than one of those signals is trapped, the
+specification determines the order in which the signals should be handled.
+In many cases this order wasn't being followed, leading to the wrong Python
+exception being raised.
+
+..
+
+.. bpo: 7865
+.. date: 8021
+.. nonce: YF-RSw
+.. section: Library
+
+The close() method of :mod:`io` objects should not swallow exceptions raised
+by the implicit flush().  Also ensure that calling close() several times is
+supported.  Patch by Pascal Chambon.
+
+..
+
+.. bpo: 8576
+.. date: 8020
+.. nonce: P-vn7s
+.. section: Library
+
+logging updated to remove usage of find_unused_port().
+
+..
+
+.. bpo: 4687
+.. date: 8019
+.. nonce: WuWPAI
+.. section: Library
+
+Fix accuracy of garbage collection runtimes displayed with gc.DEBUG_STATS.
+
+..
+
+.. bpo: 8354
+.. date: 8018
+.. nonce: ihPpD8
+.. section: Library
+
+The siginterrupt setting is now preserved for all signals, not just SIGCHLD.
+
+..
+
+.. bpo: 7192
+.. date: 8017
+.. nonce: crfmVq
+.. section: Library
+
+``webbrowser.get("firefox")`` now works on Mac OS X, as does
+``webbrowser.get("safari")``.
+
+..
+
+.. bpo: 8577
+.. date: 8016
+.. nonce: aNmUf8
+.. section: Library
+
+``distutils.sysconfig.get_python_inc()`` now makes a difference between the
+build dir and the source dir when looking for "python.h" or "Include".
+
+..
+
+.. bpo: 8464
+.. date: 8015
+.. nonce: dckIPz
+.. section: Library
+
+tarfile no longer creates files with execute permissions set when mode="w|"
+is used.
+
+..
+
+.. bpo: 7834
+.. date: 8014
+.. nonce: 6FWkzA
+.. section: Library
+
+Fix connect() of Bluetooth L2CAP sockets with recent versions of the Linux
+kernel.  Patch by Yaniv Aknin.
+
+..
+
+.. bpo: 6312
+.. date: 8013
+.. nonce: ZgHCwc
+.. section: Library
+
+Fix http HEAD request when the transfer encoding is chunked.  It should
+correctly return an empty response now.
+
+..
+
+.. bpo: 7490
+.. date: 8012
+.. nonce: hT8uzG
+.. section: Library
+
+To facilitate sharing of doctests between 2.x and 3.x test suites, the
+``IGNORE_EXCEPTION_DETAIL`` directive now also ignores the module location
+of the raised exception.  Based on initial patch by Lennart Regebro.
+
+..
+
+.. bpo: 8086
+.. date: 8011
+.. nonce: Nn01DF
+.. section: Library
+
+In :func:`ssl.DER_cert_to_PEM_cert()`, fix missing newline before the
+certificate footer.  Patch by Kyle VanderBeek.
+
+..
+
+.. bpo: 8546
+.. date: 8010
+.. nonce: ZJV_Z2
+.. section: Library
+
+Reject None given as the buffering argument to ``_pyio.open()``.
+
+..
+
+.. bpo: 8549
+.. date: 8009
+.. nonce: 9m7vbm
+.. section: Library
+
+Fix compiling the _ssl extension under AIX.  Patch by Sridhar Ratnakumar.
+
+..
+
+.. bpo: 6656
+.. date: 8008
+.. nonce: oU6_NU
+.. section: Library
+
+Fix locale.format_string to handle escaped percents and mappings.
+
+..
+
+.. bpo: 2302
+.. date: 8007
+.. nonce: KqJUA8
+.. section: Library
+
+Fix a race condition in SocketServer.BaseServer.shutdown, where the method
+could block indefinitely if called just before the event loop started
+running.  This also fixes the occasional freezes witnessed in
+test_httpservers.
+
+..
+
+.. bpo: 5103
+.. date: 8006
+.. nonce: mBe0-l
+.. section: Library
+
+SSL handshake would ignore the socket timeout and block indefinitely if the
+other end didn't respond.
+
+..
+
+.. bpo: 0
+.. date: 8005
+.. nonce: XlQAbN
+.. section: Library
+
+The do_handshake() method of SSL objects now adjusts the blocking mode of
+the SSL structure if necessary (as other methods already do).
+
+..
+
+.. bpo: 7507
+.. date: 8004
+.. nonce: PPZWiA
+.. section: Library
+
+Quote "!" in pipes.quote(); it is special to some shells.
+
+..
+
+.. bpo: 5238
+.. date: 8003
+.. nonce: HjIVqr
+.. section: Library
+
+Calling makefile() on an SSL object would prevent the underlying socket from
+being closed until all objects get truely destroyed.
+
+..
+
+.. bpo: 7943
+.. date: 8002
+.. nonce: 0wcepT
+.. section: Library
+
+Fix circular reference created when instantiating an SSL socket. Initial
+patch by Péter Szabó.
+
+..
+
+.. bpo: 8451
+.. date: 8001
+.. nonce: vWZKfu
+.. section: Library
+
+Syslog module now uses basename(sys.argv[0]) instead of the string "python"
+as the *ident*.  openlog() arguments are all optional and keywords.
+
+..
+
+.. bpo: 8108
+.. date: 8000
+.. nonce: gw3ghC
+.. section: Library
+
+Fix the unwrap() method of SSL objects when the socket has a non-infinite
+timeout.  Also make that method friendlier with applications wanting to
+continue using the socket in clear-text mode, by disabling OpenSSL's
+internal readahead.  Thanks to Darryl Miles for guidance.
+
+..
+
+.. bpo: 8484
+.. date: 7999
+.. nonce: b9zFsh
+.. section: Library
+
+Load all ciphers and digest algorithms when initializing the _ssl extension,
+such that verification of some SSL certificates doesn't fail because of an
+"unknown algorithm".
+
+..
+
+.. bpo: 8437
+.. date: 7998
+.. nonce: iGGyX3
+.. section: Library
+
+Fix test_gdb failures, patch written by Dave Malcolm
+
+..
+
+.. bpo: 4814
+.. date: 7997
+.. nonce: kc5m59
+.. section: Library
+
+The timeout parameter is now applied also for connections resulting from
+PORT/EPRT commands.
+
+..
+
+.. bpo: 8463
+.. date: 7996
+.. nonce: slxxrW
+.. section: Library
+
+Add missing reference to bztar in shutil's documentation.
+
+..
+
+.. bpo: 8438
+.. date: 7995
+.. nonce: TUjaAU
+.. section: Library
+
+Remove reference to the missing "surrogateescape" encoding error handler
+from the new IO library.
+
+..
+
+.. bpo: 3817
+.. date: 7994
+.. nonce: 6zjb85
+.. section: Library
+
+ftplib.FTP.abort() method now considers 225 a valid response code as stated
+in RFC-959 at chapter 5.4.
+
+..
+
+.. bpo: 8279
+.. date: 7993
+.. nonce: MubiOg
+.. section: Library
+
+Fix test_gdb failures.
+
+..
+
+.. bpo: 8322
+.. date: 7992
+.. nonce: XVocgc
+.. section: Library
+
+Add a *ciphers* argument to SSL sockets, so as to change the available
+cipher list.  Helps fix test_ssl with OpenSSL 1.0.0.
+
+..
+
+.. bpo: 2987
+.. date: 7991
+.. nonce: FbxT-M
+.. section: Library
+
+RFC 2732 support for urlparse (IPv6 addresses).  Patch by Tony Locke and
+Hans Ulrich Niedermann.
+
+..
+
+.. bpo: 7585
+.. date: 7990
+.. nonce: stGadz
+.. section: Library
+
+difflib context and unified diffs now place a tab between filename and date,
+conforming to the 'standards' they were originally designed to follow.  This
+improves compatibility with patch tools.
+
+..
+
+.. bpo: 7472
+.. date: 7989
+.. nonce: IghBPp
+.. section: Library
+
+Fixed typo in email.encoders module; messages using ISO-2022 character sets
+will now consistently use a Content-Transfer-Encoding of 7bit rather than
+sometimes being marked as 8bit.
+
+..
+
+.. bpo: 8330
+.. date: 7988
+.. nonce: LPDqBG
+.. section: Library
+
+Fix expected output in test_gdb.
+
+..
+
+.. bpo: 8374
+.. date: 7987
+.. nonce: bWoGdD
+.. section: Library
+
+Update the internal alias table in the :mod:`locale` module to cover recent
+locale changes and additions.
+
+..
+
+.. bpo: 8644
+.. date: 7986
+.. nonce: JWO_61
+.. section: Library
+
+Improved accuracy of ``timedelta.total_seconds()``.
+
+..
+
+.. bpo: 0
+.. date: 7985
+.. nonce: LYHXVb
+.. section: Library
+
+Use Clang 2.7's static analyzer to find places to clean up some code.
+
+..
+
+.. bpo: 0
+.. date: 7984
+.. nonce: jbiDIM
+.. section: Library
+
+Build the ossaudio extension on GNU/kFreeBSD.
+
+..
+
+.. bpo: 0
+.. date: 7983
+.. nonce: NCKMWo
+.. section: Library
+
+On Windows, ctypes no longer checks the stack before and after calling a
+foreign function.  This allows using the unmodified libffi library.
+
+..
+
+.. bpo: 8672
+.. date: 7982
+.. nonce: hs9Ync
+.. section: Tests
+
+Add a zlib test ensuring that an incomplete stream can be handled by a
+decompressor object without errors (it returns incomplete uncompressed
+data).
+
+..
+
+.. bpo: 8490
+.. date: 7981
+.. nonce: yG1Xr0
+.. section: Tests
+
+asyncore now has a more solid test suite which actually tests its API.
+
+..
+
+.. bpo: 8576
+.. date: 7980
+.. nonce: Up6MTB
+.. section: Tests
+
+Remove use of find_unused_port() in test_smtplib and test_multiprocessing.
+Patch by Paul Moore.
+
+..
+
+.. bpo: 7449
+.. date: 7979
+.. nonce: as77J5
+.. section: Tests
+
+Fix many tests to support Python compiled without thread support. Patches
+written by Jerry Seutter.
+
+..
+
+.. bpo: 8108
+.. date: 7978
+.. nonce: -PlMAS
+.. section: Tests
+
+test_ftplib's non-blocking SSL server now has proper handling of SSL
+shutdowns.
+
+..
+
+.. bpo: 8625
+.. date: 7977
+.. nonce: E4dSUW
+.. section: Build
+
+Turn off optimization in ``--with-pydebug`` builds with gcc. (Optimization
+was unintentionally turned on in gcc --with-pydebug builds in 2.7 beta1 as a
+result of the issue #1628484 fix, combined with autoconf's strange choice of
+default CFLAGS produced by AC_PROG_CC for gcc.)
+
+..
+
+.. bpo: 8509
+.. date: 7976
+.. nonce: N8vHHZ
+.. section: Build
+
+Fix quoting in help strings and code snippets in configure.in.
+
+..
+
+.. bpo: 3646
+.. date: 7975
+.. nonce: UyNDbm
+.. section: Build
+
+It is now easily possible to install a Python framework into your home
+directory on Mac OS X, see Mac/README for more information.
+
+..
+
+.. bpo: 8510
+.. date: 7974
+.. nonce: 8MiUfR
+.. section: Build
+
+Update to autoconf 2.65.
+
+..
+
+.. bpo: 0
+.. date: 7973
+.. nonce: 18HloG
+.. section: Windows
+
+Update the Vim syntax highlight file.
diff --git a/Misc/NEWS.d/2.7rc1.rst b/Misc/NEWS.d/2.7rc1.rst
new file mode 100644
index 0000000..18578b5
--- /dev/null
+++ b/Misc/NEWS.d/2.7rc1.rst
@@ -0,0 +1,395 @@
+.. bpo: 8271
+.. date: 8078
+.. nonce: HKwc-i
+.. release date: 2010-06-05
+.. section: Core and Builtins
+
+during the decoding of an invalid UTF-8 byte sequence, only the start byte
+and the continuation byte(s) are now considered invalid, instead of the
+number of bytes specified by the start byte. E.g.:
+'\xf1\x80AB'.decode('utf-8', 'replace') now returns u'\ufffdAB' and replaces
+with U+FFFD only the start byte ('\xf1') and the continuation byte ('\x80')
+even if '\xf1' is the start byte of a 4-bytes sequence. Previous versions
+returned a single u'\ufffd'.
+
+..
+
+.. bpo: 8627
+.. date: 8077
+.. nonce: l2l6Zs
+.. section: Core and Builtins
+
+Remove bogus "Overriding __cmp__ blocks inheritance of __hash__ in 3.x"
+warning.  Also fix "XXX undetected error" that arises from the "Overriding
+__eq__ blocks inheritance ..." warning when turned into an exception: in
+this case the exception simply gets ignored.
+
+..
+
+.. bpo: 8748
+.. date: 8076
+.. nonce: bKymOB
+.. section: Core and Builtins
+
+Fix two issues with comparisons between complex and integer objects.  (1)
+The comparison could incorrectly return True in some cases (2**53+1 ==
+complex(2**53) == 2**53), breaking transivity of equality. (2) The
+comparison raised an OverflowError for large integers, leading to
+unpredictable exceptions when combining integers and complex objects in sets
+or dicts.
+
+..
+
+.. bpo: 5211
+.. date: 8075
+.. nonce: BNwm54
+.. section: Core and Builtins
+
+Implicit coercion for the complex type is now completely removed.  (Coercion
+for arithmetic operations was already removed in 2.7 alpha 4, but coercion
+for rich comparisons was accidentally left in.)
+
+..
+
+.. bpo: 3798
+.. date: 8074
+.. nonce: L9n27k
+.. section: Core and Builtins
+
+Write sys.exit() message to sys.stderr to use stderr encoding and error
+handler, instead of writing to the C stderr file in utf-8
+
+..
+
+.. bpo: 7902
+.. date: 8073
+.. nonce: K75Ezw
+.. section: Core and Builtins
+
+When using explicit relative import syntax, don't try implicit relative
+import semantics.
+
+..
+
+.. bpo: 7079
+.. date: 8072
+.. nonce: wEGBdB
+.. section: Core and Builtins
+
+Fix a possible crash when closing a file object while using it from another
+thread.  Patch by Daniel Stutzbach.
+
+..
+
+.. bpo: 8868
+.. date: 8071
+.. nonce: rg3J-W
+.. section: Core and Builtins
+
+Fix that ensures that python scripts have access to the Window Server again
+in a framework build on MacOSX 10.5 or earlier.
+
+..
+
+.. bpo: 5753
+.. date: 8070
+.. nonce: 205374
+.. section: C API
+
+A new C API function, :cfunc:`PySys_SetArgvEx`, allows embedders of the
+interpreter to set sys.argv without also modifying sys.path.  This helps fix
+`CVE-2008-5983
+<http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-5983>`_.
+
+..
+
+.. bpo: 8302
+.. date: 8069
+.. nonce: U5tZ_l
+.. section: Library
+
+SkipTest in unittest.TestCase.setUpClass or setUpModule is now reported as a
+skip rather than an error.
+
+..
+
+.. bpo: 8351
+.. date: 8068
+.. nonce: 8I5oO-
+.. section: Library
+
+Excessively large diffs due to unittest.TestCase.assertSequenceEqual are no
+longer included in failure reports.
+
+..
+
+.. bpo: 8899
+.. date: 8067
+.. nonce: Q6oIpy
+.. section: Library
+
+time.struct_time now has class and attribute docstrings.
+
+..
+
+.. bpo: 4487
+.. date: 8066
+.. nonce: WdV86e
+.. section: Library
+
+email now accepts as charset aliases all codec aliases accepted by the
+codecs module.
+
+..
+
+.. bpo: 6470
+.. date: 8065
+.. nonce: eVTlgU
+.. section: Library
+
+Drop UNC prefix in FixTk.
+
+..
+
+.. bpo: 5610
+.. date: 8064
+.. nonce: 3x0O2c
+.. section: Library
+
+feedparser no longer eats extra characters at the end of a body part if the
+body part ends with a \r\n.
+
+..
+
+.. bpo: 8833
+.. date: 8063
+.. nonce: R9JBZA
+.. section: Library
+
+tarfile created hard link entries with a size field != 0 by mistake.
+
+..
+
+.. bpo: 1368247
+.. date: 8062
+.. nonce: OVD5zb
+.. section: Library
+
+set_charset (and therefore MIMEText) now automatically encodes a unicode
+_payload to the output_charset.
+
+..
+
+.. bpo: 7150
+.. date: 8061
+.. nonce: kBTznJ
+.. section: Library
+
+Raise OverflowError if the result of adding or subtracting timedelta from
+date or datetime falls outside of the MINYEAR:MAXYEAR range.
+
+..
+
+.. bpo: 6662
+.. date: 8060
+.. nonce: jpO1QX
+.. section: Library
+
+Fix parsing of malformatted charref (&#bad;), patch written by Fredrik Håård
+
+..
+
+.. bpo: 8016
+.. date: 8059
+.. nonce: vAmdrz
+.. section: Library
+
+Add the CP858 codec.
+
+..
+
+.. bpo: 3924
+.. date: 8058
+.. nonce: -W1f1B
+.. section: Library
+
+Ignore cookies with invalid "version" field in cookielib.
+
+..
+
+.. bpo: 6268
+.. date: 8057
+.. nonce: fQgJxL
+.. section: Library
+
+Fix seek() method of codecs.open(), don't read or write the BOM twice after
+seek(0). Fix also reset() method of codecs, UTF-16, UTF-32 and StreamWriter
+classes.
+
+..
+
+.. bpo: 5640
+.. date: 8056
+.. nonce: dpc6TZ
+.. section: Library
+
+Fix Shift-JIS incremental encoder for error handlers different than
+'strict'.
+
+..
+
+.. bpo: 8782
+.. date: 8055
+.. nonce: asLuOV
+.. section: Library
+
+Add a trailing newline in linecache.updatecache to the last line of files
+without one.
+
+..
+
+.. bpo: 8729
+.. date: 8054
+.. nonce: Nq_Uhf
+.. section: Library
+
+Return NotImplemented from ``collections.Mapping.__eq__()`` when comparing
+to a non-mapping.
+
+..
+
+.. bpo: 8759
+.. date: 8053
+.. nonce: 0yDlu7
+.. section: Library
+
+Fix user paths in sysconfig for posix and os2 schemes.
+
+..
+
+.. bpo: 1285086
+.. date: 8052
+.. nonce: U8BtXR
+.. section: Library
+
+Speed up ``urllib.quote()`` and urllib.unquote for simple cases.
+
+..
+
+.. bpo: 8688
+.. date: 8051
+.. nonce: gUJqmI
+.. section: Library
+
+Distutils now recalculates MANIFEST every time.
+
+..
+
+.. bpo: 5099
+.. date: 8050
+.. nonce: kmjFaU
+.. section: Library
+
+The ``__del__()`` method of ``subprocess.Popen`` (and the methods it calls)
+referenced global objects, causing errors to pop up during interpreter
+shutdown.
+
+..
+
+.. bpo: 7384
+.. date: 8049
+.. nonce: E16zrc
+.. section: Library
+
+If the system readline library is linked against ncurses, the curses module
+must be linked against ncurses as well. Otherwise it is not safe to load
+both the readline and curses modules in an application.
+
+..
+
+.. bpo: 2810
+.. date: 8048
+.. nonce: FSt0Y0
+.. section: Library
+
+Fix cases where the Windows registry API returns ERROR_MORE_DATA, requiring
+a re-try in order to get the complete result.
+
+..
+
+.. bpo: 8674
+.. date: 8047
+.. nonce: Q2kfWX
+.. section: Library
+
+Fixed a number of incorrect or undefined-behaviour-inducing overflow checks
+in the ``audioop`` module.
+
+..
+
+.. bpo: 8889
+.. date: 8046
+.. nonce: 9IoVzA
+.. section: Tests
+
+test_support.transient_internet rewritten so that the new checks also work
+on FreeBSD, which lacks EAI_NODATA.
+
+..
+
+.. bpo: 8835
+.. date: 8045
+.. nonce: FJzJvJ
+.. section: Tests
+
+test_support.transient_internet() catches gaierror(EAI_NONAME) and
+gaierror(EAI_NODATA)
+
+..
+
+.. bpo: 7449
+.. date: 8044
+.. nonce: LeKyd_
+.. section: Tests
+
+Skip test_socketserver if threading support is disabled
+
+..
+
+.. bpo: 0
+.. date: 8043
+.. nonce: b_na1a
+.. section: Tests
+
+On darwin, ``test_site`` assumed that a framework build was being used,
+leading to a failure where four directories were expected for site-packages
+instead of two in a non-framework build.
+
+..
+
+.. bpo: 0
+.. date: 8042
+.. nonce: g-v7fs
+.. section: Build
+
+Display installer warning that Windows 2000 won't be supported in future
+releases.
+
+..
+
+.. bpo: 1759169
+.. date: 8041
+.. nonce: NW035m
+.. section: Build
+
+Drop _XOPEN_SOURCE on Solaris, define it for multiprocessing only. (See
+also: bpo-8864)
+
+..
+
+.. bpo: 5464
+.. date: 8040
+.. nonce: R1pj9Y
+.. section: Tools/Demos
+
+Implement plural forms in msgfmt.py.
diff --git a/Misc/NEWS.d/2.7rc2.rst b/Misc/NEWS.d/2.7rc2.rst
new file mode 100644
index 0000000..6ad8075
--- /dev/null
+++ b/Misc/NEWS.d/2.7rc2.rst
@@ -0,0 +1,125 @@
+.. bpo: 9058
+.. date: 8091
+.. nonce: l34Hmg
+.. release date: 2010-06-20
+.. section: Core and Builtins
+
+Remove assertions about INT_MAX in UnicodeDecodeError.
+
+..
+
+.. bpo: 8202
+.. date: 8090
+.. nonce: D-a4-i
+.. section: Core and Builtins
+
+Previous change to ``sys.argv[0]`` handling for -m command line option
+reverted due to unintended side effects on handling of ``sys.path``. See
+tracker issue for details.
+
+..
+
+.. bpo: 8941
+.. date: 8089
+.. nonce: p6MUoO
+.. section: Core and Builtins
+
+decoding big endian UTF-32 data in UCS-2 builds could crash the interpreter
+with characters outside the Basic Multilingual Plane (higher than 0x10000).
+
+..
+
+.. bpo: 0
+.. date: 8088
+.. nonce: diKrLc
+.. section: Core and Builtins
+
+In the unicode/str.format(), raise a ValueError when indexes to arguments
+are too large.
+
+..
+
+.. bpo: 8854
+.. date: 8087
+.. nonce: gOjstX
+.. section: Build
+
+Fix finding Visual Studio 2008 on Windows x64.
+
+..
+
+.. bpo: 6589
+.. date: 8086
+.. nonce: nEjgGc
+.. section: Library
+
+cleanup asyncore.socket_map in case smtpd.SMTPServer constructor raises an
+exception.
+
+..
+
+.. bpo: 8959
+.. date: 8085
+.. nonce: lO7u2O
+.. section: Library
+
+fix regression caused by using unmodified libffi library on Windows.  ctypes
+does now again check the stack before and after calling foreign functions.
+
+..
+
+.. bpo: 8720
+.. date: 8084
+.. nonce: rgLhvU
+.. section: Library
+
+fix regression caused by fix for #4050 by making getsourcefile smart enough
+to find source files in the linecache.
+
+..
+
+.. bpo: 8986
+.. date: 8083
+.. nonce: f31LM5
+.. section: Library
+
+math.erfc was incorrectly raising OverflowError for values between -27.3 and
+-30.0 on some platforms.
+
+..
+
+.. bpo: 8924
+.. date: 8082
+.. nonce: ENI5YP
+.. section: Library
+
+logging: Improved error handling for Unicode in exception text.
+
+..
+
+.. bpo: 8948
+.. date: 8081
+.. nonce: BIIiQc
+.. section: Library
+
+cleanup functions and class / module setups and teardowns are now honored in
+unittest debug methods.
+
+..
+
+.. bpo: 8909
+.. date: 8080
+.. nonce: OfU6lI
+.. section: Documentation
+
+Added the size of the bitmap used in the installer created by distutils'
+bdist_wininst. Patch by Anatoly Techtonik.
+
+..
+
+.. bpo: 8362
+.. date: 8079
+.. nonce: KsG-3E
+.. section: Windows
+
+Add maintainers.rst: list of module maintainers
diff --git a/Misc/NEWS.d/next/Build/2018-06-15-18-18-16.bpo-30345.j-xRE1.rst b/Misc/NEWS.d/next/Build/2018-06-15-18-18-16.bpo-30345.j-xRE1.rst
new file mode 100644
index 0000000..f8db09b
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2018-06-15-18-18-16.bpo-30345.j-xRE1.rst
@@ -0,0 +1 @@
+Add -g to LDFLAGS when compiling with LTO to get debug symbols.
diff --git a/Misc/NEWS.d/next/Build/README.rst b/Misc/NEWS.d/next/Build/README.rst
new file mode 100644
index 0000000..0d2d2c1
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/README.rst
@@ -0,0 +1 @@
+Put news entry ``blurb`` files for the *Build* section in this directory.
diff --git a/Misc/NEWS.d/next/C API/2018-07-09-11-39-54.bpo-23927.pDFkxb.rst b/Misc/NEWS.d/next/C API/2018-07-09-11-39-54.bpo-23927.pDFkxb.rst
new file mode 100644
index 0000000..3e2ac6c
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2018-07-09-11-39-54.bpo-23927.pDFkxb.rst
@@ -0,0 +1,2 @@
+Fixed :exc:`SystemError` in :c:func:`PyArg_ParseTupleAndKeywords` when the
+``w*`` format unit is used for optional parameter.
diff --git a/Misc/NEWS.d/next/C API/2018-07-26-12-24-29.bpo-34229.SupCZK.rst b/Misc/NEWS.d/next/C API/2018-07-26-12-24-29.bpo-34229.SupCZK.rst
new file mode 100644
index 0000000..df5b34b
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2018-07-26-12-24-29.bpo-34229.SupCZK.rst
@@ -0,0 +1,2 @@
+Check start and stop of slice object to be long when they are not int in
+:c:func:`PySlice_GetIndices`.
diff --git a/Misc/NEWS.d/next/C API/README.rst b/Misc/NEWS.d/next/C API/README.rst
new file mode 100644
index 0000000..5a04f76
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/README.rst
@@ -0,0 +1 @@
+Put news entry ``blurb`` files for the *C API* section in this directory.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2017-10-07-10-13-15.bpo-25862.FPYBA5.rst b/Misc/NEWS.d/next/Core and Builtins/2017-10-07-10-13-15.bpo-25862.FPYBA5.rst
new file mode 100644
index 0000000..7871636
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2017-10-07-10-13-15.bpo-25862.FPYBA5.rst
@@ -0,0 +1,2 @@
+Fix assertion failures in the ``tell()`` method of ``io.TextIOWrapper``.
+Patch by Zackery Spytz.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-03-14-21-42-17.bpo-25750.lxgkQz.rst b/Misc/NEWS.d/next/Core and Builtins/2018-03-14-21-42-17.bpo-25750.lxgkQz.rst
new file mode 100644
index 0000000..09ffb36
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-03-14-21-42-17.bpo-25750.lxgkQz.rst
@@ -0,0 +1,2 @@
+Fix rare Python crash due to bad refcounting in ``type_getattro()`` if a
+descriptor deletes itself from the class. Patch by Jeroen Demeyer.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-05-02-08-36-03.bpo-33391.z4a7rb.rst b/Misc/NEWS.d/next/Core and Builtins/2018-05-02-08-36-03.bpo-33391.z4a7rb.rst
new file mode 100644
index 0000000..ab17aa4
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-05-02-08-36-03.bpo-33391.z4a7rb.rst
@@ -0,0 +1 @@
+Fix a leak in set_symmetric_difference().
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-05-23-20-46-14.bpo-33622.xPucO9.rst b/Misc/NEWS.d/next/Core and Builtins/2018-05-23-20-46-14.bpo-33622.xPucO9.rst
new file mode 100644
index 0000000..e589b45
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-05-23-20-46-14.bpo-33622.xPucO9.rst
@@ -0,0 +1,4 @@
+Fixed a leak when the garbage collector fails to add an object with the
+``__del__`` method or referenced by it into the :data:`gc.garbage` list.
+:c:func:`PyGC_Collect` can now be called when an exception is set and
+preserves it.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-05-25-18-20-04.bpo-33645.GYGIPH.rst b/Misc/NEWS.d/next/Core and Builtins/2018-05-25-18-20-04.bpo-33645.GYGIPH.rst
new file mode 100644
index 0000000..5cc47f1
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-05-25-18-20-04.bpo-33645.GYGIPH.rst
@@ -0,0 +1,2 @@
+Fixed an "unknown parsing error" on parsing the "<>" operator when run
+Python with both options ``-3`` and ``-We``.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-05-28-12-28-53.bpo-30654.9fDJye.rst b/Misc/NEWS.d/next/Core and Builtins/2018-05-28-12-28-53.bpo-30654.9fDJye.rst
new file mode 100644
index 0000000..01c27daa
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-05-28-12-28-53.bpo-30654.9fDJye.rst
@@ -0,0 +1,2 @@
+Fixed reset of the SIGINT handler to SIG_DFL on interpreter shutdown even
+when there was a custom handler set previously. Patch by Philipp Kerling.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-06-25-20-42-44.bpo-33956.1qoTwD.rst b/Misc/NEWS.d/next/Core and Builtins/2018-06-25-20-42-44.bpo-33956.1qoTwD.rst
new file mode 100644
index 0000000..f8140e1
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-06-25-20-42-44.bpo-33956.1qoTwD.rst
@@ -0,0 +1 @@
+Update vendored Expat library copy to version 2.2.5.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-07-10-11-24-16.bpo-34080.8t7PtO.rst b/Misc/NEWS.d/next/Core and Builtins/2018-07-10-11-24-16.bpo-34080.8t7PtO.rst
new file mode 100644
index 0000000..cfc53cc
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-07-10-11-24-16.bpo-34080.8t7PtO.rst
@@ -0,0 +1,2 @@
+Fixed a memory leak in the compiler when it raised some uncommon errors
+during tokenizing.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-07-14-08-58-46.bpo-34068.9xfM55.rst b/Misc/NEWS.d/next/Core and Builtins/2018-07-14-08-58-46.bpo-34068.9xfM55.rst
new file mode 100644
index 0000000..0ed8ff9
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-07-14-08-58-46.bpo-34068.9xfM55.rst
@@ -0,0 +1,3 @@
+In :meth:`io.IOBase.close`, ensure that the :attr:`~io.IOBase.closed`
+attribute is not set with a live exception.  Patch by Zackery Spytz and Serhiy
+Storchaka.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-07-18-23-40-32.bpo-25943.Zgf99y.rst b/Misc/NEWS.d/next/Core and Builtins/2018-07-18-23-40-32.bpo-25943.Zgf99y.rst
new file mode 100644
index 0000000..264e65c
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-07-18-23-40-32.bpo-25943.Zgf99y.rst
@@ -0,0 +1,2 @@
+Fix potential heap corruption in the :mod:`bsddb` module.  Patch by Zackery
+Spytz.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-07-25-22-47-19.bpo-25083.HT_hXh.rst b/Misc/NEWS.d/next/Core and Builtins/2018-07-25-22-47-19.bpo-25083.HT_hXh.rst
new file mode 100644
index 0000000..0dc44c4
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-07-25-22-47-19.bpo-25083.HT_hXh.rst
@@ -0,0 +1,2 @@
+Adding I/O error checking when reading .py files and aborting importing on
+error.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-08-14-03-52-43.bpo-34400.AJD0bz.rst b/Misc/NEWS.d/next/Core and Builtins/2018-08-14-03-52-43.bpo-34400.AJD0bz.rst
new file mode 100644
index 0000000..768f5a2
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-08-14-03-52-43.bpo-34400.AJD0bz.rst
@@ -0,0 +1 @@
+Fix undefined behavior in parsetok.c.  Patch by Zackery Spytz.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-08-23-21-32-27.bpo-18560.5q_c1C.rst b/Misc/NEWS.d/next/Core and Builtins/2018-08-23-21-32-27.bpo-18560.5q_c1C.rst
new file mode 100644
index 0000000..4c1f060
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-08-23-21-32-27.bpo-18560.5q_c1C.rst
@@ -0,0 +1 @@
+Fix potential NULL pointer dereference in sum().
diff --git a/Misc/NEWS.d/next/Core and Builtins/README.rst b/Misc/NEWS.d/next/Core and Builtins/README.rst
new file mode 100644
index 0000000..52b8c3e
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/README.rst
@@ -0,0 +1 @@
+Put news entry ``blurb`` files for the *Core and Builtins* section in this directory.
diff --git a/Misc/NEWS.d/next/Documentation/2018-05-14-20-08-58.bpo-33503.Wvt0qg.rst b/Misc/NEWS.d/next/Documentation/2018-05-14-20-08-58.bpo-33503.Wvt0qg.rst
new file mode 100644
index 0000000..27025c3
--- /dev/null
+++ b/Misc/NEWS.d/next/Documentation/2018-05-14-20-08-58.bpo-33503.Wvt0qg.rst
@@ -0,0 +1 @@
+Fix broken pypi link
diff --git a/Misc/NEWS.d/next/Documentation/README.rst b/Misc/NEWS.d/next/Documentation/README.rst
new file mode 100644
index 0000000..405f0ac
--- /dev/null
+++ b/Misc/NEWS.d/next/Documentation/README.rst
@@ -0,0 +1 @@
+Put news entry ``blurb`` files for the *Documentation* section in this directory.
diff --git a/Misc/NEWS.d/next/IDLE/2018-06-16-21-54-45.bpo-33856.TH8WHU.rst b/Misc/NEWS.d/next/IDLE/2018-06-16-21-54-45.bpo-33856.TH8WHU.rst
new file mode 100644
index 0000000..058f96e
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2018-06-16-21-54-45.bpo-33856.TH8WHU.rst
@@ -0,0 +1 @@
+Add "help" in the welcome message of IDLE
diff --git a/Misc/NEWS.d/next/IDLE/2018-08-01-23-25-38.bpo-34120.HgsIz-.rst b/Misc/NEWS.d/next/IDLE/2018-08-01-23-25-38.bpo-34120.HgsIz-.rst
new file mode 100644
index 0000000..f9954f7
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2018-08-01-23-25-38.bpo-34120.HgsIz-.rst
@@ -0,0 +1 @@
+Fix unresponsiveness after closing certain windows and dialogs.
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/IDLE/2018-08-02-22-16-42.bpo-34275.Iu0d7t.rst b/Misc/NEWS.d/next/IDLE/2018-08-02-22-16-42.bpo-34275.Iu0d7t.rst
new file mode 100644
index 0000000..d7eba7a
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2018-08-02-22-16-42.bpo-34275.Iu0d7t.rst
@@ -0,0 +1,2 @@
+Make IDLE calltips always visible on Mac. Some MacOS-tk combinations need
+.update_idletasks(). Patch by Kevin Walzer.
diff --git a/Misc/NEWS.d/next/IDLE/README.rst b/Misc/NEWS.d/next/IDLE/README.rst
new file mode 100644
index 0000000..5475f7b
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/README.rst
@@ -0,0 +1 @@
+Put news entry ``blurb`` files for the *IDLE* section in this directory.
diff --git a/Misc/NEWS.d/next/Library/2017-08-24-17-55-39.bpo-29456.XaB3MP.rst b/Misc/NEWS.d/next/Library/2017-08-24-17-55-39.bpo-29456.XaB3MP.rst
new file mode 100644
index 0000000..9b30bf6
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2017-08-24-17-55-39.bpo-29456.XaB3MP.rst
@@ -0,0 +1 @@
+Fix bugs in hangul normalization: u1176, u11a7 and u11c3
diff --git a/Misc/NEWS.d/next/Library/2017-10-29-10-37-55.bpo-31608.wkp8Nw.rst b/Misc/NEWS.d/next/Library/2017-10-29-10-37-55.bpo-31608.wkp8Nw.rst
new file mode 100644
index 0000000..d657a86
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2017-10-29-10-37-55.bpo-31608.wkp8Nw.rst
@@ -0,0 +1,2 @@
+Raise a ``TypeError`` instead of crashing if a ``collections.deque`` subclass
+returns a non-deque from ``__new__``. Patch by Oren Milman.
diff --git a/Misc/NEWS.d/next/Library/2018-01-20-17-15-34.bpo-32502.OXJfn7.rst b/Misc/NEWS.d/next/Library/2018-01-20-17-15-34.bpo-32502.OXJfn7.rst
new file mode 100644
index 0000000..8338632
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-01-20-17-15-34.bpo-32502.OXJfn7.rst
@@ -0,0 +1,2 @@
+uuid.uuid1 no longer raises an exception if a 64-bit hardware address is
+encountered.
diff --git a/Misc/NEWS.d/next/Library/2018-02-16-14-37-14.bpo-32857.-XljAx.rst b/Misc/NEWS.d/next/Library/2018-02-16-14-37-14.bpo-32857.-XljAx.rst
new file mode 100644
index 0000000..4ebbde4
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-02-16-14-37-14.bpo-32857.-XljAx.rst
@@ -0,0 +1 @@
+In :mod:`tkinter`, ``after_cancel(None)`` now raises a :exc:`ValueError` instead of canceling the first scheduled function.  Patch by Cheryl Sabella.
diff --git a/Misc/NEWS.d/next/Library/2018-03-10-20-14-36.bpo-33038.yA6CP5.rst b/Misc/NEWS.d/next/Library/2018-03-10-20-14-36.bpo-33038.yA6CP5.rst
new file mode 100644
index 0000000..22d394b
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-03-10-20-14-36.bpo-33038.yA6CP5.rst
@@ -0,0 +1,2 @@
+gzip.GzipFile no longer produces an AttributeError exception when used with
+a file object with a non-string name attribute. Patch by Bo Bayles.
diff --git a/Misc/NEWS.d/next/Library/2018-04-02-20-44-54.bpo-32861.HeBjzN.rst b/Misc/NEWS.d/next/Library/2018-04-02-20-44-54.bpo-32861.HeBjzN.rst
new file mode 100644
index 0000000..13defbb
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-04-02-20-44-54.bpo-32861.HeBjzN.rst
@@ -0,0 +1,3 @@
+The urllib.robotparser's ``__str__`` representation now includes wildcard
+entries and the "Crawl-delay" and "Request-rate" fields. Patch by
+Michael Lazar.
diff --git a/Misc/NEWS.d/next/Library/2018-04-10-20-57-14.bpo-33256.ndHkqu.rst b/Misc/NEWS.d/next/Library/2018-04-10-20-57-14.bpo-33256.ndHkqu.rst
new file mode 100644
index 0000000..a0605c0
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-04-10-20-57-14.bpo-33256.ndHkqu.rst
@@ -0,0 +1 @@
+Fix display of ``<module>`` call in the html produced by ``cgitb.html()``. Patch by Stéphane Blondon.
diff --git a/Misc/NEWS.d/next/Library/2018-04-18-19-12-25.bpo-33308.fW75xi.rst b/Misc/NEWS.d/next/Library/2018-04-18-19-12-25.bpo-33308.fW75xi.rst
new file mode 100644
index 0000000..586004a
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-04-18-19-12-25.bpo-33308.fW75xi.rst
@@ -0,0 +1,2 @@
+Fixed a crash in the :mod:`parser` module when converting an ST object to a
+tree of tuples or lists with ``line_info=False`` and ``col_info=True``.
diff --git a/Misc/NEWS.d/next/Library/2018-04-20-10-43-17.bpo-33131.L2E977.rst b/Misc/NEWS.d/next/Library/2018-04-20-10-43-17.bpo-33131.L2E977.rst
new file mode 100644
index 0000000..875c6ac
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-04-20-10-43-17.bpo-33131.L2E977.rst
@@ -0,0 +1 @@
+Upgrade bundled version of pip to 10.0.1.
diff --git a/Misc/NEWS.d/next/Library/2018-04-25-22-41-04.bpo-33359.Nr4CzK.rst b/Misc/NEWS.d/next/Library/2018-04-25-22-41-04.bpo-33359.Nr4CzK.rst
new file mode 100644
index 0000000..5a90f2f
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-04-25-22-41-04.bpo-33359.Nr4CzK.rst
@@ -0,0 +1 @@
+Fix running ``python -m curses.has_key``.
diff --git a/Misc/NEWS.d/next/Library/2018-04-27-22-18-38.bpo-33336.T8rxn0.rst b/Misc/NEWS.d/next/Library/2018-04-27-22-18-38.bpo-33336.T8rxn0.rst
new file mode 100644
index 0000000..d205c68
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-04-27-22-18-38.bpo-33336.T8rxn0.rst
@@ -0,0 +1,3 @@
+``imaplib`` now allows ``MOVE`` command in ``IMAP4.uid()`` (RFC 
+6851: IMAP MOVE Extension) and potentially as a name of supported 
+method of ``IMAP4`` object.
diff --git a/Misc/NEWS.d/next/Library/2018-05-05-09-53-05.bpo-33422.4FtQ0q.rst b/Misc/NEWS.d/next/Library/2018-05-05-09-53-05.bpo-33422.4FtQ0q.rst
new file mode 100644
index 0000000..0d284d5
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-05-05-09-53-05.bpo-33422.4FtQ0q.rst
@@ -0,0 +1,2 @@
+Fix trailing quotation marks getting deleted when looking up byte/string
+literals on pydoc. Patch by Andrés Delfino.
diff --git a/Misc/NEWS.d/next/Library/2018-05-05-18-02-24.bpo-20087.lJrvXL.rst b/Misc/NEWS.d/next/Library/2018-05-05-18-02-24.bpo-20087.lJrvXL.rst
new file mode 100644
index 0000000..2342cb7
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-05-05-18-02-24.bpo-20087.lJrvXL.rst
@@ -0,0 +1 @@
+Updated alias mapping with glibc 2.27 supported locales.
diff --git a/Misc/NEWS.d/next/Library/2018-05-08-08-03-34.bpo-33096.0hsFhL.rst b/Misc/NEWS.d/next/Library/2018-05-08-08-03-34.bpo-33096.0hsFhL.rst
new file mode 100644
index 0000000..2fd23c7
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-05-08-08-03-34.bpo-33096.0hsFhL.rst
@@ -0,0 +1 @@
+Removed unintentionally backported from Python 3 Tkinter files.
diff --git a/Misc/NEWS.d/next/Library/2018-05-16-09-30-27.bpo-33542.idNAcs.rst b/Misc/NEWS.d/next/Library/2018-05-16-09-30-27.bpo-33542.idNAcs.rst
new file mode 100644
index 0000000..16ba799
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-05-16-09-30-27.bpo-33542.idNAcs.rst
@@ -0,0 +1,2 @@
+Prevent ``uuid.get_node`` from using a DUID instead of a MAC on Windows.
+Patch by Zvi Effron
diff --git a/Misc/NEWS.d/next/Library/2018-05-23-00-26-27.bpo-11874.glK5iP.rst b/Misc/NEWS.d/next/Library/2018-05-23-00-26-27.bpo-11874.glK5iP.rst
new file mode 100644
index 0000000..6c75f14
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-05-23-00-26-27.bpo-11874.glK5iP.rst
@@ -0,0 +1,2 @@
+Use a better regex when breaking usage into wrappable parts. Avoids bogus
+assertion errors from custom metavar strings.
diff --git a/Misc/NEWS.d/next/Library/2018-06-03-22-41-59.bpo-33767.2e82g3.rst b/Misc/NEWS.d/next/Library/2018-06-03-22-41-59.bpo-33767.2e82g3.rst
new file mode 100644
index 0000000..3483301
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-06-03-22-41-59.bpo-33767.2e82g3.rst
@@ -0,0 +1,3 @@
+The concatenation (``+``) and repetition (``*``) sequence operations now
+raise :exc:`TypeError` instead of :exc:`SystemError` when performed on
+:class:`mmap.mmap` objects.  Patch by Zackery Spytz.
diff --git a/Misc/NEWS.d/next/Library/2018-06-13-20-33-29.bpo-26544.hQ1oMt.rst b/Misc/NEWS.d/next/Library/2018-06-13-20-33-29.bpo-26544.hQ1oMt.rst
new file mode 100644
index 0000000..e2cd0ba
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-06-13-20-33-29.bpo-26544.hQ1oMt.rst
@@ -0,0 +1,2 @@
+Fixed implementation of :func:`platform.libc_ver`. It almost always returned
+version '2.9' for glibc.
diff --git a/Misc/NEWS.d/next/Library/2018-06-24-01-57-14.bpo-33899.IaOcAr.rst b/Misc/NEWS.d/next/Library/2018-06-24-01-57-14.bpo-33899.IaOcAr.rst
new file mode 100644
index 0000000..21c9095
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-06-24-01-57-14.bpo-33899.IaOcAr.rst
@@ -0,0 +1,3 @@
+Tokenize module now implicitly emits a NEWLINE when provided with input that
+does not have a trailing new line.  This behavior now matches what the C
+tokenizer does internally.  Contributed by Ammar Askar.
diff --git a/Misc/NEWS.d/next/Library/2018-06-28-14-56-44.bpo-33974.SA8nNP.rst b/Misc/NEWS.d/next/Library/2018-06-28-14-56-44.bpo-33974.SA8nNP.rst
new file mode 100644
index 0000000..8c03bab
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-06-28-14-56-44.bpo-33974.SA8nNP.rst
@@ -0,0 +1,3 @@
+Fixed passing lists and tuples of strings containing special characters
+``"``, ``\``, ``{``, ``}`` and ``\n`` as options to :mod:`~tkinter.ttk`
+widgets.
diff --git a/Misc/NEWS.d/next/Library/2018-07-02-05-59-11.bpo-34019.ZXJIife.rst b/Misc/NEWS.d/next/Library/2018-07-02-05-59-11.bpo-34019.ZXJIife.rst
new file mode 100644
index 0000000..8a9fe79
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-07-02-05-59-11.bpo-34019.ZXJIife.rst
@@ -0,0 +1,2 @@
+webbrowser: Correct the arguments passed to Opera Browser when opening a new URL
+using the ``webbrowser`` module. Patch by Bumsik Kim.
diff --git a/Misc/NEWS.d/next/Library/2018-08-22-17-43-52.bpo-6700.hp7C4B.rst b/Misc/NEWS.d/next/Library/2018-08-22-17-43-52.bpo-6700.hp7C4B.rst
new file mode 100644
index 0000000..d95c737
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-08-22-17-43-52.bpo-6700.hp7C4B.rst
@@ -0,0 +1,2 @@
+Fix inspect.getsourcelines for module level frames/tracebacks.
+Patch by Vladimir Matveev.
diff --git a/Misc/NEWS.d/next/Library/2018-09-03-23-23-32.bpo-34530.h_Xsu7.rst b/Misc/NEWS.d/next/Library/2018-09-03-23-23-32.bpo-34530.h_Xsu7.rst
new file mode 100644
index 0000000..064de73
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-09-03-23-23-32.bpo-34530.h_Xsu7.rst
@@ -0,0 +1,2 @@
+``distutils.spawn.find_executable()`` now falls back on :data:`os.defpath`
+if the ``PATH`` environment variable is not set.
diff --git a/Misc/NEWS.d/next/Library/2018-09-10-17-46-51.bpo-34625.D2YfDz.rst b/Misc/NEWS.d/next/Library/2018-09-10-17-46-51.bpo-34625.D2YfDz.rst
new file mode 100644
index 0000000..0747ec5
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-09-10-17-46-51.bpo-34625.D2YfDz.rst
@@ -0,0 +1 @@
+Update vendorized expat library version to 2.2.6.
diff --git a/Misc/NEWS.d/next/Library/2018-09-12-14-46-51.bpo-34652.Rt1m1b.rst b/Misc/NEWS.d/next/Library/2018-09-12-14-46-51.bpo-34652.Rt1m1b.rst
new file mode 100644
index 0000000..cbdd7e0
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-09-12-14-46-51.bpo-34652.Rt1m1b.rst
@@ -0,0 +1 @@
+Ensure :func:`os.lchmod` is never defined on Linux.
diff --git a/Misc/NEWS.d/next/Library/README.rst b/Misc/NEWS.d/next/Library/README.rst
new file mode 100644
index 0000000..6d2d30e
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/README.rst
@@ -0,0 +1 @@
+Put news entry ``blurb`` files for the *Library* section in this directory.
diff --git a/Misc/NEWS.d/next/Security/2018-08-15-12-14-03.bpo-34405.R4IZGw.rst b/Misc/NEWS.d/next/Security/2018-08-15-12-14-03.bpo-34405.R4IZGw.rst
new file mode 100644
index 0000000..b79eddb
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2018-08-15-12-14-03.bpo-34405.R4IZGw.rst
@@ -0,0 +1 @@
+Updated to OpenSSL 1.0.2p for Windows builds.
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/Security/2018-08-28-22-11-54.bpo-34540.gfQ0TM.rst b/Misc/NEWS.d/next/Security/2018-08-28-22-11-54.bpo-34540.gfQ0TM.rst
new file mode 100644
index 0000000..4f68696
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2018-08-28-22-11-54.bpo-34540.gfQ0TM.rst
@@ -0,0 +1,3 @@
+When ``shutil.make_archive`` falls back to the external ``zip`` problem, it
+uses :mod:`subprocess` to invoke it rather than :mod:`distutils.spawn`. This
+closes a possible shell injection vector.
diff --git a/Misc/NEWS.d/next/Security/README.rst b/Misc/NEWS.d/next/Security/README.rst
new file mode 100644
index 0000000..84c1a3a
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/README.rst
@@ -0,0 +1 @@
+Put news entry ``blurb`` files for the *Security* section in this directory.
diff --git a/Misc/NEWS.d/next/Tests/2018-04-26-22-39-17.bpo-33354.g35-44.rst b/Misc/NEWS.d/next/Tests/2018-04-26-22-39-17.bpo-33354.g35-44.rst
new file mode 100644
index 0000000..c66ceca
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2018-04-26-22-39-17.bpo-33354.g35-44.rst
@@ -0,0 +1,2 @@
+Skip ``test_ssl.test_load_dh_params`` when Python filesystem encoding cannot encode the
+provided path.
diff --git a/Misc/NEWS.d/next/Tests/2018-05-30-00-39-57.bpo-29512.EHrDzs.rst b/Misc/NEWS.d/next/Tests/2018-05-30-00-39-57.bpo-29512.EHrDzs.rst
new file mode 100644
index 0000000..aa5dc64
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2018-05-30-00-39-57.bpo-29512.EHrDzs.rst
@@ -0,0 +1,3 @@
+Rename Lib/test/bisect.py to Lib/test/bisect_cmd.py. The old name was in
+conflict with Lib/bisect.py, causing test failures, depending how tests
+were run.
diff --git a/Misc/NEWS.d/next/Tests/2018-06-16-01-37-31.bpo-33873.d86vab.rst b/Misc/NEWS.d/next/Tests/2018-06-16-01-37-31.bpo-33873.d86vab.rst
new file mode 100644
index 0000000..f4f4255
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2018-06-16-01-37-31.bpo-33873.d86vab.rst
@@ -0,0 +1,4 @@
+Fix a bug in ``regrtest`` that caused an extra test to run if
+--huntrleaks/-R was used. Exit with error in case that invalid
+parameters are specified to --huntrleaks/-R (at least one warmup
+run and one repetition must be used).
diff --git a/Misc/NEWS.d/next/Tests/2018-06-19-14-04-21.bpo-33901.OFW1Sr.rst b/Misc/NEWS.d/next/Tests/2018-06-19-14-04-21.bpo-33901.OFW1Sr.rst
new file mode 100644
index 0000000..78244bb
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2018-06-19-14-04-21.bpo-33901.OFW1Sr.rst
@@ -0,0 +1,2 @@
+Fix test_gdbm on macOS with gdbm 1.15: add a larger value to make sure that
+the file size changes.
diff --git a/Misc/NEWS.d/next/Tests/2018-08-14-10-47-44.bpo-34399.D_jd1G.rst b/Misc/NEWS.d/next/Tests/2018-08-14-10-47-44.bpo-34399.D_jd1G.rst
new file mode 100644
index 0000000..8c5458f
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2018-08-14-10-47-44.bpo-34399.D_jd1G.rst
@@ -0,0 +1 @@
+Update all RSA keys and DH params to use at least 2048 bits.
diff --git a/Misc/NEWS.d/next/Tests/2018-08-16-18-48-47.bpo-34391.ouNfxC.rst b/Misc/NEWS.d/next/Tests/2018-08-16-18-48-47.bpo-34391.ouNfxC.rst
new file mode 100644
index 0000000..18702cb
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2018-08-16-18-48-47.bpo-34391.ouNfxC.rst
@@ -0,0 +1 @@
+Fix ftplib test for TLS 1.3 by reading from data socket.
diff --git a/Misc/NEWS.d/next/Tests/2018-09-13-09-53-15.bpo-34661.bdTamP.rst b/Misc/NEWS.d/next/Tests/2018-09-13-09-53-15.bpo-34661.bdTamP.rst
new file mode 100644
index 0000000..fc2b8e9
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2018-09-13-09-53-15.bpo-34661.bdTamP.rst
@@ -0,0 +1 @@
+Fix test_shutil if unzip doesn't support -t.
diff --git a/Misc/NEWS.d/next/Tests/README.rst b/Misc/NEWS.d/next/Tests/README.rst
new file mode 100644
index 0000000..d2e50e4
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/README.rst
@@ -0,0 +1 @@
+Put news entry ``blurb`` files for the *Tests* section in this directory.
diff --git a/Misc/NEWS.d/next/Tools-Demos/2018-06-14-16-16-53.bpo-32962.2YfdwI.rst b/Misc/NEWS.d/next/Tools-Demos/2018-06-14-16-16-53.bpo-32962.2YfdwI.rst
new file mode 100644
index 0000000..de40070
--- /dev/null
+++ b/Misc/NEWS.d/next/Tools-Demos/2018-06-14-16-16-53.bpo-32962.2YfdwI.rst
@@ -0,0 +1,2 @@
+python-gdb now catchs ValueError on read_var(): when Python has no debug
+symbols for example.
diff --git a/Misc/NEWS.d/next/Tools-Demos/2018-06-14-16-23-07.bpo-32962.Q3Dwns.rst b/Misc/NEWS.d/next/Tools-Demos/2018-06-14-16-23-07.bpo-32962.Q3Dwns.rst
new file mode 100644
index 0000000..fc14261
--- /dev/null
+++ b/Misc/NEWS.d/next/Tools-Demos/2018-06-14-16-23-07.bpo-32962.Q3Dwns.rst
@@ -0,0 +1,2 @@
+python-gdb now catchs ``UnicodeDecodeError`` exceptions when calling
+``string()``.
diff --git a/Misc/NEWS.d/next/Tools-Demos/2018-06-15-23-07-50.bpo-29367.52w9Uq.rst b/Misc/NEWS.d/next/Tools-Demos/2018-06-15-23-07-50.bpo-29367.52w9Uq.rst
new file mode 100644
index 0000000..48e4124
--- /dev/null
+++ b/Misc/NEWS.d/next/Tools-Demos/2018-06-15-23-07-50.bpo-29367.52w9Uq.rst
@@ -0,0 +1 @@
+python-gdb.py now supports also method-wrapper (wrapperobject) objects.
diff --git a/Misc/NEWS.d/next/Tools-Demos/2018-08-25-17-13-24.bpo-34500.Edz41x.rst b/Misc/NEWS.d/next/Tools-Demos/2018-08-25-17-13-24.bpo-34500.Edz41x.rst
new file mode 100644
index 0000000..27ca06f
--- /dev/null
+++ b/Misc/NEWS.d/next/Tools-Demos/2018-08-25-17-13-24.bpo-34500.Edz41x.rst
@@ -0,0 +1 @@
+Fix 2 ResourceWarning in difflib.py. Patch by Mickaël Schoentgen.
diff --git a/Misc/NEWS.d/next/Tools-Demos/README.rst b/Misc/NEWS.d/next/Tools-Demos/README.rst
new file mode 100644
index 0000000..357f8286
--- /dev/null
+++ b/Misc/NEWS.d/next/Tools-Demos/README.rst
@@ -0,0 +1 @@
+Put news entry ``blurb`` files for the *Tools/Demos* section in this directory.
diff --git a/Misc/NEWS.d/next/Windows/2018-06-24-12-09-23.bpo-33711.LpO0s1.rst b/Misc/NEWS.d/next/Windows/2018-06-24-12-09-23.bpo-33711.LpO0s1.rst
new file mode 100644
index 0000000..e97b811
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2018-06-24-12-09-23.bpo-33711.LpO0s1.rst
@@ -0,0 +1 @@
+Fixed licence generation error when building the installer.
diff --git a/Misc/NEWS.d/next/Windows/README.rst b/Misc/NEWS.d/next/Windows/README.rst
new file mode 100644
index 0000000..1e65de3
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/README.rst
@@ -0,0 +1 @@
+Put news entry ``blurb`` files for the *Windows* section in this directory.
diff --git a/Misc/NEWS.d/next/macOS/2018-09-11-08-47-50.bpo-34405.f1-fT5.rst b/Misc/NEWS.d/next/macOS/2018-09-11-08-47-50.bpo-34405.f1-fT5.rst
new file mode 100644
index 0000000..e923700
--- /dev/null
+++ b/Misc/NEWS.d/next/macOS/2018-09-11-08-47-50.bpo-34405.f1-fT5.rst
@@ -0,0 +1 @@
+Update to OpenSSL 1.0.2p for macOS installer builds.
diff --git a/Misc/NEWS.d/next/macOS/README.rst b/Misc/NEWS.d/next/macOS/README.rst
new file mode 100644
index 0000000..a3adb59
--- /dev/null
+++ b/Misc/NEWS.d/next/macOS/README.rst
@@ -0,0 +1 @@
+Put news entry ``blurb`` files for the *macOS* section in this directory.
diff --git a/Modules/Setup.dist b/Modules/Setup.dist
index 523e05a..bd8b52e 100644
--- a/Modules/Setup.dist
+++ b/Modules/Setup.dist
@@ -467,14 +467,6 @@
 #zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
 
 # Interface to the Expat XML parser
-#
-# Expat was written by James Clark and is now maintained by a group of
-# developers on SourceForge; see www.libexpat.org for more
-# information.  The pyexpat module was written by Paul Prescod after a
-# prototype by Jack Jansen.  Source of Expat 1.95.2 is included in
-# Modules/expat/.  Usage of a system shared libexpat.so/expat.dll is
-# not advised.
-#
 # More information on Expat can be found at www.libexpat.org.
 #
 #pyexpat expat/xmlparse.c expat/xmlrole.c expat/xmltok.c pyexpat.c -I$(srcdir)/Modules/expat -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI
diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c
index ed17d39..cee447b 100644
--- a/Modules/_bsddb.c
+++ b/Modules/_bsddb.c
@@ -931,11 +931,13 @@
     self->sibling_prev_p_txn=NULL;
     self->sibling_next_txn=NULL;
 
-    if (self->myenvobj)
+    if (self->myenvobj) {
         self->moduleFlags = self->myenvobj->moduleFlags;
-    else
+    }
+    else {
         self->moduleFlags.getReturnsNone = DEFAULT_GET_RETURNS_NONE;
         self->moduleFlags.cursorSetReturnsNone = DEFAULT_CURSOR_SET_RETURNS_NONE;
+    }
 
     MYDB_BEGIN_ALLOW_THREADS;
     err = db_create(&self->db, db_env, flags);
@@ -1501,56 +1503,71 @@
         else if (PyList_Check(result))
         {
             char* data;
-            Py_ssize_t size;
-            int i, listlen;
+            Py_ssize_t size, listlen, i;
             DBT* dbts;
 
             listlen = PyList_Size(result);
 
-            dbts = (DBT *)malloc(sizeof(DBT) * listlen);
-
-            for (i=0; i<listlen; i++)
-            {
-                if (!PyBytes_Check(PyList_GetItem(result, i)))
-                {
-                    PyErr_SetString(
-                       PyExc_TypeError,
+            if (listlen > PY_SIZE_MAX / sizeof(DBT)) {
+                PyErr_NoMemory();
+                PyErr_Print();
+            }
+            else {
+                dbts = (DBT *)malloc(sizeof(DBT) * listlen);
+                if (dbts == NULL) {
+                    PyErr_NoMemory();
+                    PyErr_Print();
+                }
+                else {
+                    for (i = 0; i < listlen; i++) {
+                        if (!PyBytes_Check(PyList_GetItem(result, i))) {
+                            PyErr_SetString(PyExc_TypeError,
 #if (PY_VERSION_HEX < 0x03000000)
 "The list returned by DB->associate callback should be a list of strings.");
 #else
 "The list returned by DB->associate callback should be a list of bytes.");
 #endif
-                    PyErr_Print();
-                }
+                            break;
+                        }
 
-                PyBytes_AsStringAndSize(
-                    PyList_GetItem(result, i),
-                    &data, &size);
+                        if (PyBytes_AsStringAndSize(PyList_GetItem(result, i),
+                                                    &data, &size) < 0) {
+                            break;
+                        }
 
-                CLEAR_DBT(dbts[i]);
-                dbts[i].data = malloc(size);          /* TODO, check this */
+                        CLEAR_DBT(dbts[i]);
+                        dbts[i].data = malloc(size);
+                        if (dbts[i].data) {
+                            memcpy(dbts[i].data, data, size);
+                            dbts[i].size = size;
+                            dbts[i].ulen = dbts[i].size;
+                            /* DB will free. */
+                            dbts[i].flags = DB_DBT_APPMALLOC;
+                        }
+                        else {
+                            PyErr_SetString(PyExc_MemoryError,
+                                            "malloc failed in "
+                                            "_db_associateCallback (list)");
+                            break;
+                        }
+                    }
+                    if (PyErr_Occurred()) {
+                        PyErr_Print();
+                        while (i--) {
+                            free(dbts[i].data);
+                        }
+                        free(dbts);
+                    }
+                    else {
+                        CLEAR_DBT(*secKey);
 
-                if (dbts[i].data)
-                {
-                    memcpy(dbts[i].data, data, size);
-                    dbts[i].size = size;
-                    dbts[i].ulen = dbts[i].size;
-                    dbts[i].flags = DB_DBT_APPMALLOC;  /* DB will free */
-                }
-                else
-                {
-                    PyErr_SetString(PyExc_MemoryError,
-                        "malloc failed in _db_associateCallback (list)");
-                    PyErr_Print();
+                        secKey->data = dbts;
+                        secKey->size = listlen;
+                        secKey->flags = DB_DBT_APPMALLOC | DB_DBT_MULTIPLE;
+                        retval = 0;
+                    }
                 }
             }
-
-            CLEAR_DBT(*secKey);
-
-            secKey->data = dbts;
-            secKey->size = listlen;
-            secKey->flags = DB_DBT_APPMALLOC | DB_DBT_MULTIPLE;
-            retval = 0;
         }
 #endif
         else {
@@ -2240,7 +2257,7 @@
 DB_join(DBObject* self, PyObject* args)
 {
     int err, flags=0;
-    int length, x;
+    Py_ssize_t length, x;
     PyObject* cursorsObj;
     DBC** cursors;
     DBC*  dbc;
@@ -2257,6 +2274,12 @@
     }
 
     length = PyObject_Length(cursorsObj);
+    if (length == -1) {
+        return NULL;
+    }
+    if (length >= PY_SSIZE_T_MAX / sizeof(DBC*)) {
+        return PyErr_NoMemory();
+    }
     cursors = malloc((length+1) * sizeof(DBC*));
     if (!cursors) {
         PyErr_NoMemory();
@@ -2274,6 +2297,7 @@
             PyErr_SetString(PyExc_TypeError,
                             "Sequence of DBCursor objects expected");
             free(cursors);
+            Py_DECREF(item);
             return NULL;
         }
         cursors[x] = ((DBCursorObject*)item)->dbc;
diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
index 1dd4b99..3ca3930 100644
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -639,7 +639,7 @@
 PyDoc_STRVAR(remove_doc,
 "D.remove(value) -- remove first occurrence of value.");
 
-static void
+static int
 deque_clear(dequeobject *deque)
 {
     block *b;
@@ -650,7 +650,7 @@
     PyObject *item;
 
     if (deque->len == 0)
-        return;
+        return 0;
 
     /* During the process of clearing a deque, decrefs can cause the
        deque to mutate.  To avoid fatal confusion, we have to make the
@@ -701,7 +701,7 @@
     }
     assert(leftblock->rightlink == NULL);
     freeblock(leftblock);
-    return;
+    return 0;
 
   alternate_method:
     while (deque->len) {
@@ -709,6 +709,7 @@
         assert (item != NULL);
         Py_DECREF(item);
     }
+    return 0;
 }
 
 static PyObject *
@@ -858,11 +859,20 @@
 static PyObject *
 deque_copy(PyObject *deque)
 {
+    PyObject *result;
     if (((dequeobject *)deque)->maxlen == -1)
-        return PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "O", deque, NULL);
+        result = PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "O", deque, NULL);
     else
-        return PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "Oi",
+        result = PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "Oi",
             deque, ((dequeobject *)deque)->maxlen, NULL);
+    if (result != NULL && !PyObject_TypeCheck(result, &deque_type)) {
+        PyErr_Format(PyExc_TypeError,
+                     "%.200s() must return a deque, not %.200s",
+                     Py_TYPE(deque)->tp_name, Py_TYPE(result)->tp_name);
+        Py_DECREF(result);
+        return NULL;
+    }
+    return result;
 }
 
 PyDoc_STRVAR(copy_doc, "Return a shallow copy of a deque.");
@@ -1271,6 +1281,8 @@
 static void
 dequeiter_dealloc(dequeiterobject *dio)
 {
+    /* bpo-31095: UnTrack is needed before calling any callbacks */
+    PyObject_GC_UnTrack(dio);
     Py_XDECREF(dio->deque);
     PyObject_GC_Del(dio);
 }
@@ -1556,6 +1568,8 @@
 static void
 defdict_dealloc(defdictobject *dd)
 {
+    /* bpo-31095: UnTrack is needed before calling any callbacks */
+    PyObject_GC_UnTrack(dd);
     Py_CLEAR(dd->default_factory);
     PyDict_Type.tp_dealloc((PyObject *)dd);
 }
diff --git a/Modules/_csv.c b/Modules/_csv.c
index 4589f06..88e3e90 100644
--- a/Modules/_csv.c
+++ b/Modules/_csv.c
@@ -220,15 +220,19 @@
 static int
 _set_int(const char *name, int *target, PyObject *src, int dflt)
 {
+    int value;
     if (src == NULL)
         *target = dflt;
     else {
-        if (!PyInt_Check(src)) {
+        if (!_PyAnyInt_Check(src)) {
             PyErr_Format(PyExc_TypeError,
                          "\"%s\" must be an integer", name);
             return -1;
         }
-        *target = PyInt_AsLong(src);
+        value = PyInt_AsLong(src);
+        if (value == -1 && PyErr_Occurred())
+            return -1;
+        *target = value;
     }
     return 0;
 }
@@ -561,24 +565,23 @@
 static int
 parse_grow_buff(ReaderObj *self)
 {
-    if (self->field_size == 0) {
-        self->field_size = 4096;
-        if (self->field != NULL)
-            PyMem_Free(self->field);
-        self->field = PyMem_Malloc(self->field_size);
-    }
-    else {
-        if (self->field_size > INT_MAX / 2) {
-            PyErr_NoMemory();
-            return 0;
-        }
-        self->field_size *= 2;
-        self->field = PyMem_Realloc(self->field, self->field_size);
-    }
-    if (self->field == NULL) {
+    unsigned field_size_new;
+    char *field_new;
+
+    assert((unsigned)self->field_size <= INT_MAX);
+
+    field_size_new = self->field_size ? 2 * (unsigned)self->field_size : 4096;
+    if (field_size_new > INT_MAX) {
         PyErr_NoMemory();
         return 0;
     }
+    field_new = (char *)PyMem_Realloc(self->field, field_size_new);
+    if (field_new == NULL) {
+        PyErr_NoMemory();
+        return 0;
+    }
+    self->field = field_new;
+    self->field_size = (int)field_size_new;
     return 1;
 }
 
@@ -1084,31 +1087,24 @@
 static int
 join_check_rec_size(WriterObj *self, int rec_len)
 {
+    unsigned rec_size_new;
+    char *rec_new;
 
-    if (rec_len < 0 || rec_len > INT_MAX - MEM_INCR) {
-        PyErr_NoMemory();
-        return 0;
-    }
+    assert(rec_len >= 0);
 
     if (rec_len > self->rec_size) {
-        if (self->rec_size == 0) {
-            self->rec_size = (rec_len / MEM_INCR + 1) * MEM_INCR;
-            if (self->rec != NULL)
-                PyMem_Free(self->rec);
-            self->rec = PyMem_Malloc(self->rec_size);
-        }
-        else {
-            char *old_rec = self->rec;
-
-            self->rec_size = (rec_len / MEM_INCR + 1) * MEM_INCR;
-            self->rec = PyMem_Realloc(self->rec, self->rec_size);
-            if (self->rec == NULL)
-                PyMem_Free(old_rec);
-        }
-        if (self->rec == NULL) {
+        rec_size_new = (unsigned)(rec_len / MEM_INCR + 1) * MEM_INCR;
+        if (rec_size_new > INT_MAX) {
             PyErr_NoMemory();
             return 0;
         }
+        rec_new = (char *)PyMem_Realloc(self->rec, rec_size_new);
+        if (rec_new == NULL) {
+            PyErr_NoMemory();
+            return 0;
+        }
+        self->rec = rec_new;
+        self->rec_size = (int)rec_size_new;
     }
     return 1;
 }
@@ -1443,17 +1439,20 @@
 csv_field_size_limit(PyObject *module, PyObject *args)
 {
     PyObject *new_limit = NULL;
-    long old_limit = field_limit;
+    long old_limit = field_limit, limit;
 
     if (!PyArg_UnpackTuple(args, "field_size_limit", 0, 1, &new_limit))
         return NULL;
     if (new_limit != NULL) {
-        if (!PyInt_Check(new_limit)) {
+        if (!_PyAnyInt_Check(new_limit)) {
             PyErr_Format(PyExc_TypeError,
                          "limit must be an integer");
             return NULL;
         }
-        field_limit = PyInt_AsLong(new_limit);
+        limit = PyInt_AsLong(new_limit);
+        if (limit == -1 && PyErr_Occurred())
+            return NULL;
+        field_limit = limit;
     }
     return PyInt_FromLong(old_limit);
 }
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index f301b13..fabbdf1 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -128,6 +128,12 @@
 #endif
 #include "ctypes.h"
 
+/* Definition matching cfield.c:724 */
+#ifndef HAVE_C99_BOOL
+#undef SIZEOF__BOOL
+#define SIZEOF__BOOL 1
+#endif
+
 PyObject *PyExc_ArgError;
 
 /* This dict maps ctypes types to POINTER types */
@@ -292,6 +298,71 @@
 }
 
 /******************************************************************/
+
+/*
+  Allocate a memory block for a pep3118 format string, filled with
+  a suitable PEP 3118 type code corresponding to the given ctypes
+  type. Returns NULL on failure, with the error indicator set.
+
+  This produces type codes in the standard size mode (cf. struct module),
+  since the endianness may need to be swapped to a non-native one
+  later on.
+ */
+static char *
+_ctypes_alloc_format_string_for_type(char code, int big_endian)
+{
+    char *result;
+    char pep_code = '\0';
+
+    switch (code) {
+#if SIZEOF_INT == 2
+    case 'i': pep_code = 'h'; break;
+    case 'I': pep_code = 'H'; break;
+#elif SIZEOF_INT == 4
+    case 'i': pep_code = 'i'; break;
+    case 'I': pep_code = 'I'; break;
+#elif SIZEOF_INT == 8
+    case 'i': pep_code = 'q'; break;
+    case 'I': pep_code = 'Q'; break;
+#else
+# error SIZEOF_INT has an unexpected value
+#endif /* SIZEOF_INT */
+#if SIZEOF_LONG == 4
+    case 'l': pep_code = 'l'; break;
+    case 'L': pep_code = 'L'; break;
+#elif SIZEOF_LONG == 8
+    case 'l': pep_code = 'q'; break;
+    case 'L': pep_code = 'Q'; break;
+#else
+# error SIZEOF_LONG has an unexpected value
+#endif /* SIZEOF_LONG */
+#if SIZEOF__BOOL == 1
+    case '?': pep_code = '?'; break;
+#elif SIZEOF__BOOL == 2
+    case '?': pep_code = 'H'; break;
+#elif SIZEOF__BOOL == 4
+    case '?': pep_code = 'L'; break;
+#elif SIZEOF__BOOL == 8
+    case '?': pep_code = 'Q'; break;
+#else
+# error SIZEOF__BOOL has an unexpected value
+#endif /* SIZEOF__BOOL */
+    default:
+        /* The standard-size code is the same as the ctypes one */
+        pep_code = code;
+        break;
+    }
+
+    result = PyMem_Malloc(3);
+    if (result == NULL)
+        return NULL;
+
+    result[0] = big_endian ? '>' : '<';
+    result[1] = pep_code;
+    result[2] = '\0';
+    return result;
+}
+
 /*
   Allocate a memory block for a pep3118 format string, copy prefix (if
   non-null) and suffix into it.  Returns NULL on failure, with the error
@@ -476,7 +547,7 @@
 CDataType_from_address(PyObject *type, PyObject *value)
 {
     void *buf;
-    if (!PyInt_Check(value) && !PyLong_Check(value)) {
+    if (!_PyAnyInt_Check(value)) {
         PyErr_SetString(PyExc_TypeError,
                         "integer expected");
         return NULL;
@@ -620,7 +691,7 @@
     obj = PyObject_GetAttrString(dll, "_handle");
     if (!obj)
         return NULL;
-    if (!PyInt_Check(obj) && !PyLong_Check(obj)) {
+    if (!_PyAnyInt_Check(obj)) {
         PyErr_SetString(PyExc_TypeError,
                         "the _handle attribute of the second argument must be an integer");
         Py_DECREF(obj);
@@ -965,6 +1036,7 @@
     if (proto) {
         StgDictObject *itemdict = PyType_stgdict(proto);
         const char *current_format;
+        /* PyCPointerType_SetProto has verified proto has a stgdict. */
         assert(itemdict);
         /* If itemdict->format is NULL, then this is a pointer to an
            incomplete type.  We create a generic format string
@@ -1011,7 +1083,11 @@
     StgDictObject *dict;
 
     dict = PyType_stgdict((PyObject *)self);
-    assert(dict);
+    if (!dict) {
+        PyErr_SetString(PyExc_TypeError,
+                        "abstract class");
+        return NULL;
+    }
 
     if (-1 == PyCPointerType_SetProto(dict, type))
         return NULL;
@@ -1037,7 +1113,11 @@
     }
 
     typedict = PyType_stgdict(type);
-    assert(typedict); /* Cannot be NULL for pointer types */
+    if (!typedict) {
+        PyErr_SetString(PyExc_TypeError,
+                        "abstract class");
+        return NULL;
+    }
 
     /* If we expect POINTER(<type>), but receive a <type> instance, accept
        it by calling byref(<type>).
@@ -1699,7 +1779,7 @@
     }
     /* Should probably allow buffer interface as well */
 /* int, long */
-    if (PyInt_Check(value) || PyLong_Check(value)) {
+    if (_PyAnyInt_Check(value)) {
         PyCArgObject *parg;
         struct fielddesc *fd = _ctypes_get_fielddesc("P");
 
@@ -1999,9 +2079,9 @@
     stgdict->setfunc = fmt->setfunc;
     stgdict->getfunc = fmt->getfunc;
 #ifdef WORDS_BIGENDIAN
-    stgdict->format = _ctypes_alloc_format_string(">", proto_str);
+    stgdict->format = _ctypes_alloc_format_string_for_type(proto_str[0], 1);
 #else
-    stgdict->format = _ctypes_alloc_format_string("<", proto_str);
+    stgdict->format = _ctypes_alloc_format_string_for_type(proto_str[0], 0);
 #endif
     if (stgdict->format == NULL) {
         Py_DECREF(result);
@@ -2155,7 +2235,11 @@
     }
 
     dict = PyType_stgdict(type);
-    assert(dict);
+    if (!dict) {
+        PyErr_SetString(PyExc_TypeError,
+                        "abstract class");
+        return NULL;
+    }
 
     /* I think we can rely on this being a one-character string */
     fmt = PyString_AsString(dict->proto);
@@ -2715,6 +2799,16 @@
         len = self->b_size;
     memmove(self->b_ptr, data, len);
     mydict = PyObject_GetAttrString(_self, "__dict__");
+    if (mydict == NULL) {
+        return NULL;
+    }
+    if (!PyDict_Check(mydict)) {
+        PyErr_Format(PyExc_TypeError,
+                     "%.200s.__dict__ must be a dictionary, not %.200s",
+                     Py_TYPE(_self)->tp_name, Py_TYPE(mydict)->tp_name);
+        Py_DECREF(mydict);
+        return NULL;
+    }
     res = PyDict_Update(mydict, dict);
     Py_DECREF(mydict);
     if (res == -1)
@@ -3266,7 +3360,11 @@
     PyObject *argtypes;
 
     dict = PyType_stgdict((PyObject *)type);
-    assert(dict); /* Cannot be NULL. 'type' is a PyCFuncPtr type. */
+    if (!dict) {
+        PyErr_SetString(PyExc_TypeError,
+                        "abstract class");
+        return 0;
+    }
     argtypes = dict->argtypes;
 
     if (paramflags == NULL || dict->argtypes == NULL)
@@ -3321,7 +3419,7 @@
 _get_name(PyObject *obj, char **pname)
 {
 #ifdef MS_WIN32
-    if (PyInt_Check(obj) || PyLong_Check(obj)) {
+    if (_PyAnyInt_Check(obj)) {
         /* We have to use MAKEINTRESOURCEA for Windows CE.
            Works on Windows as well, of course.
         */
@@ -3371,7 +3469,7 @@
         Py_DECREF(ftuple);
         return NULL;
     }
-    if (!PyInt_Check(obj) && !PyLong_Check(obj)) {
+    if (!_PyAnyInt_Check(obj)) {
         PyErr_SetString(PyExc_TypeError,
                         "the _handle attribute of the second argument must be an integer");
         Py_DECREF(ftuple);
@@ -3502,8 +3600,7 @@
 #endif
 
     if (1 == PyTuple_GET_SIZE(args)
-        && (PyInt_Check(PyTuple_GET_ITEM(args, 0))
-        || PyLong_Check(PyTuple_GET_ITEM(args, 0)))) {
+        && _PyAnyInt_Check(PyTuple_GET_ITEM(args, 0))) {
         CDataObject *ob;
         void *ptr = PyLong_AsVoidPtr(PyTuple_GET_ITEM(args, 0));
         if (ptr == NULL && PyErr_Occurred())
@@ -4434,9 +4531,7 @@
         PyObject *np;
         Py_ssize_t start, stop, step, slicelen, cur, i;
 
-        if (PySlice_GetIndicesEx((PySliceObject *)item,
-                                 self->b_length, &start, &stop,
-                                 &step, &slicelen) < 0) {
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0) {
             return NULL;
         }
 
@@ -4447,6 +4542,7 @@
         assert(itemdict); /* proto is the item type of the array, a
                              ctypes type, so this cannot be NULL */
 
+        slicelen = _PySlice_AdjustIndices(self->b_length, &start, &stop, step);
         if (itemdict->getfunc == _ctypes_get_fielddesc("c")->getfunc) {
             char *ptr = (char *)self->b_ptr;
             char *dest;
@@ -4613,11 +4709,10 @@
     else if (PySlice_Check(item)) {
         Py_ssize_t start, stop, step, slicelen, otherlen, i, cur;
 
-        if (PySlice_GetIndicesEx((PySliceObject *)item,
-                                 self->b_length, &start, &stop,
-                                 &step, &slicelen) < 0) {
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0) {
             return -1;
         }
+        slicelen = _PySlice_AdjustIndices(self->b_length, &start, &stop, step);
         if ((step < 0 && start < stop) ||
             (step > 0 && start > stop))
             stop = start;
@@ -5011,7 +5106,7 @@
     }
 
     stgdict = PyObject_stgdict((PyObject *)self);
-    assert(stgdict); /* Cannot be NULL fr pointer instances */
+    assert(stgdict); /* Cannot be NULL for pointer instances */
 
     proto = stgdict->proto;
     assert(proto);
@@ -5039,7 +5134,7 @@
     }
 
     stgdict = PyObject_stgdict((PyObject *)self);
-    assert(stgdict); /* Cannot be NULL fr pointer instances */
+    assert(stgdict); /* Cannot be NULL for pointer instances */
     return PyCData_FromBaseObj(stgdict->proto,
                              (PyObject *)self, 0,
                              *(void **)self->b_ptr);
@@ -5058,7 +5153,7 @@
         return -1;
     }
     stgdict = PyObject_stgdict((PyObject *)self);
-    assert(stgdict); /* Cannot be NULL fr pointer instances */
+    assert(stgdict); /* Cannot be NULL for pointer instances */
     assert(stgdict->proto);
     if (!CDataObject_Check(value)) {
         int res = PyObject_IsInstance(value, stgdict->proto);
diff --git a/Modules/_ctypes/_ctypes_test.c b/Modules/_ctypes/_ctypes_test.c
index f295c6f..94678f3 100644
--- a/Modules/_ctypes/_ctypes_test.c
+++ b/Modules/_ctypes/_ctypes_test.c
@@ -52,6 +52,19 @@
     func(in);
 }
 
+/*
+ * See issue 29565. Update a structure passed by value;
+ * the caller should not see any change.
+ */
+
+EXPORT(void)
+_testfunc_large_struct_update_value(Test in)
+{
+    in.first = 0x0badf00d;
+    in.second = 0x0badf00d;
+    in.third = 0x0badf00d;
+}
+
 EXPORT(void)testfunc_array(int values[4])
 {
     printf("testfunc_array %d %d %d %d\n",
diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
index 3a12eb6..91233d5 100644
--- a/Modules/_ctypes/callproc.c
+++ b/Modules/_ctypes/callproc.c
@@ -1281,7 +1281,7 @@
     PyObject *nameobj;
     PyObject *ignored;
     HMODULE hMod;
-    if (!PyArg_ParseTuple(args, "S|O:LoadLibrary", &nameobj, &ignored))
+    if (!PyArg_ParseTuple(args, "O|O:LoadLibrary", &nameobj, &ignored))
         return NULL;
 #ifdef _UNICODE
     name = alloca((PyString_Size(nameobj) + 1) * sizeof(WCHAR));
diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c
index e033cd5..46f041b 100644
--- a/Modules/_ctypes/cfield.c
+++ b/Modules/_ctypes/cfield.c
@@ -205,7 +205,11 @@
 {
     CDataObject *dst;
     char *ptr;
-    assert(CDataObject_Check(inst));
+    if (!CDataObject_Check(inst)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "not a ctype instance");
+        return -1;
+    }
     dst = (CDataObject *)inst;
     ptr = dst->b_ptr + self->offset;
     if (value == NULL) {
@@ -225,7 +229,11 @@
         Py_INCREF(self);
         return (PyObject *)self;
     }
-    assert(CDataObject_Check(inst));
+    if (!CDataObject_Check(inst)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "not a ctype instance");
+        return NULL;
+    }
     src = (CDataObject *)inst;
     return PyCData_get(self->proto, self->getfunc, inst,
                      self->index, self->size, src->b_ptr + self->offset);
@@ -1353,7 +1361,7 @@
             return NULL;
         *(char **)ptr = PyString_AS_STRING(str);
         return str;
-    } else if (PyInt_Check(value) || PyLong_Check(value)) {
+    } else if (_PyAnyInt_Check(value)) {
 #if SIZEOF_VOID_P == SIZEOF_LONG_LONG
         *(char **)ptr = (char *)PyInt_AsUnsignedLongLongMask(value);
 #else
@@ -1402,7 +1410,7 @@
                                             _ctypes_conversion_errors);
         if (!value)
             return NULL;
-    } else if (PyInt_Check(value) || PyLong_Check(value)) {
+    } else if (_PyAnyInt_Check(value)) {
 #if SIZEOF_VOID_P == SIZEOF_LONG_LONG
         *(wchar_t **)ptr = (wchar_t *)PyInt_AsUnsignedLongLongMask(value);
 #else
@@ -1557,7 +1565,7 @@
         _RET(value);
     }
 
-    if (!PyInt_Check(value) && !PyLong_Check(value)) {
+    if (!_PyAnyInt_Check(value)) {
         PyErr_SetString(PyExc_TypeError,
                         "cannot be converted to pointer");
         return NULL;
diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h
index b21fe92..12b56c4 100644
--- a/Modules/_ctypes/ctypes.h
+++ b/Modules/_ctypes/ctypes.h
@@ -108,7 +108,7 @@
     ffi_type *atypes[1];
 } CThunkObject;
 extern PyTypeObject PyCThunk_Type;
-#define CThunk_CheckExact(v)        ((v)->ob_type == &PyCThunk_Type)
+#define CThunk_CheckExact(v)        (Py_TYPE(v) == &PyCThunk_Type)
 
 typedef struct {
     /* First part identical to tagCDataObject */
diff --git a/Modules/_ctypes/libffi_msvc/ffi.c b/Modules/_ctypes/libffi_msvc/ffi.c
index 515d802..587c94b 100644
--- a/Modules/_ctypes/libffi_msvc/ffi.c
+++ b/Modules/_ctypes/libffi_msvc/ffi.c
@@ -119,7 +119,7 @@
       argp += z;
     }
 
-  if (argp - stack > ecif->cif->bytes) 
+  if (argp >= stack && (unsigned)(argp - stack) > ecif->cif->bytes)
     {
       Py_FatalError("FFI BUG: not enough stack space for arguments");
     }
@@ -220,6 +220,20 @@
       break;
 #else
     case FFI_SYSV:
+      /* use a local scope for the 'i' variable */
+      {
+          unsigned i;
+          /* If a single argument takes more than 8 bytes,
+             then a copy is passed by reference. */
+          for (i = 0; i < cif->nargs; i++) {
+              size_t z = cif->arg_types[i]->size;
+              if (z > 8) {
+                  void *temp = alloca(z);
+                  memcpy(temp, avalue[i], z);
+                  avalue[i] = temp;
+              }
+          }
+      }
       /*@-usedef@*/
       return ffi_call_AMD64(ffi_prep_args, &ecif, cif->bytes,
 			   cif->flags, ecif.rvalue, fn);
diff --git a/Modules/_ctypes/stgdict.c b/Modules/_ctypes/stgdict.c
index 90ce3e5..d1be3ca 100644
--- a/Modules/_ctypes/stgdict.c
+++ b/Modules/_ctypes/stgdict.c
@@ -286,7 +286,15 @@
             Py_DECREF(anon_names);
             return -1;
         }
-        assert(Py_TYPE(descr) == &PyCField_Type);
+        if (Py_TYPE(descr) != &PyCField_Type) {
+            PyErr_Format(PyExc_AttributeError,
+                         "an item in _anonymous_ (index %zd) is not "
+                         "specified in _fields_",
+                         i);
+            Py_DECREF(anon_names);
+            Py_DECREF(descr);
+            return -1;
+        }
         descr->anonymous = 1;
 
         /* descr is in the field descriptor. */
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index e478a57..0ec4ee1 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -113,13 +113,13 @@
 #define CURSES_MODULE
 #include "py_curses.h"
 
-/*  These prototypes are in <term.h>, but including this header
-    #defines many common symbols (such as "lines") which breaks the
-    curses module in other ways.  So the code will just specify
-    explicit prototypes here. */
-extern int setupterm(char *,int,int *);
-#ifdef __sgi
+#if defined(HAVE_TERM_H) || defined(__sgi)
+/* For termname, longname, putp, tigetflag, tigetnum, tigetstr, tparm
+   which are not declared in SysV curses and for setupterm. */
 #include <term.h>
+/* Including <term.h> #defines many common symbols. */
+#undef lines
+#undef columns
 #endif
 
 #if !defined(HAVE_NCURSES_H) && (defined(sgi) || defined(__sun) || defined(SCO5))
@@ -194,8 +194,10 @@
 static int
 PyCurses_ConvertToChtype(PyObject *obj, chtype *ch)
 {
-    if (PyInt_Check(obj)) {
+    if (_PyAnyInt_Check(obj)) {
         *ch = (chtype) PyInt_AsLong(obj);
+        if (*ch == (chtype) -1 && PyErr_Occurred())
+            return 0;
     } else if(PyString_Check(obj)
               && (PyString_Size(obj) == 1)) {
         *ch = (chtype) *PyString_AsString(obj);
@@ -312,7 +314,9 @@
 Window_NoArgNoReturnVoidFunction(wclear)
 
 Window_OneArgNoReturnVoidFunction(idcok, int, "i;True(1) or False(0)")
+#ifdef HAVE_CURSES_IMMEDOK
 Window_OneArgNoReturnVoidFunction(immedok, int, "i;True(1) or False(0)")
+#endif
 Window_OneArgNoReturnVoidFunction(wtimeout, int, "i;delay")
 
 Window_NoArg2TupleReturnFunction(getyx, int, "ii")
@@ -322,21 +326,15 @@
 
 Window_OneArgNoReturnFunction(clearok, int, "i;True(1) or False(0)")
 Window_OneArgNoReturnFunction(idlok, int, "i;True(1) or False(0)")
-#if defined(__NetBSD__)
-Window_OneArgNoReturnVoidFunction(keypad, int, "i;True(1) or False(0)")
-#else
 Window_OneArgNoReturnFunction(keypad, int, "i;True(1) or False(0)")
-#endif
 Window_OneArgNoReturnFunction(leaveok, int, "i;True(1) or False(0)")
-#if defined(__NetBSD__)
-Window_OneArgNoReturnVoidFunction(nodelay, int, "i;True(1) or False(0)")
-#else
 Window_OneArgNoReturnFunction(nodelay, int, "i;True(1) or False(0)")
-#endif
 Window_OneArgNoReturnFunction(notimeout, int, "i;True(1) or False(0)")
 Window_OneArgNoReturnFunction(scrollok, int, "i;True(1) or False(0)")
 Window_OneArgNoReturnFunction(winsdelln, int, "i;nlines")
+#ifdef HAVE_CURSES_SYNCOK
 Window_OneArgNoReturnFunction(syncok, int, "i;True(1) or False(0)")
+#endif
 
 Window_TwoArgNoReturnFunction(mvwin, int, "ii;y,x")
 Window_TwoArgNoReturnFunction(mvderwin, int, "ii;y,x")
@@ -641,12 +639,19 @@
 static PyObject *
 PyCursesWindow_Box(PyCursesWindowObject *self, PyObject *args)
 {
+    PyObject *temp1, *temp2;
     chtype ch1=0,ch2=0;
     switch(PyTuple_Size(args)){
     case 0: break;
     default:
-        if (!PyArg_ParseTuple(args,"ll;vertint,horint", &ch1, &ch2))
+        if (!PyArg_ParseTuple(args,"OO;verch,horch", &temp1, &temp2))
             return NULL;
+        if (!PyCurses_ConvertToChtype(temp1, &ch1)) {
+            return NULL;
+        }
+        if (!PyCurses_ConvertToChtype(temp2, &ch2)) {
+            return NULL;
+        }
     }
     box(self->win,ch1,ch2);
     Py_INCREF(Py_None);
@@ -665,8 +670,14 @@
 }
 #endif
 
-/* chgat, added by Fabian Kreutz <fabian.kreutz at gmx.net> */
+#if defined(HAVE_CURSES_IS_PAD)
+#define py_is_pad(win)      is_pad(win)
+#elif defined(WINDOW_HAS_FLAGS)
+#define py_is_pad(win)      ((win) ? ((win)->_flags & _ISPAD) != 0 : FALSE)
+#endif
 
+/* chgat, added by Fabian Kreutz <fabian.kreutz at gmx.net> */
+#ifdef HAVE_CURSES_WCHGAT
 static PyObject *
 PyCursesWindow_ChgAt(PyCursesWindowObject *self, PyObject *args)
 {
@@ -719,7 +730,7 @@
     }
     return PyCursesCheckERR(rtn, "chgat");
 }
-
+#endif
 
 static PyObject *
 PyCursesWindow_DelCh(PyCursesWindowObject *self, PyObject *args)
@@ -806,10 +817,11 @@
         return NULL;
     }
 
-#ifdef WINDOW_HAS_FLAGS
-    if (self->win->_flags & _ISPAD)
+#ifdef py_is_pad
+    if (py_is_pad(self->win)) {
         return PyCursesCheckERR(pechochar(self->win, ch | attr),
                                 "echochar");
+    }
     else
 #endif
         return PyCursesCheckERR(wechochar(self->win, ch | attr),
@@ -892,12 +904,7 @@
     } else if (rtn<=255) {
         return Py_BuildValue("c", rtn);
     } else {
-        const char *knp;
-#if defined(__NetBSD__)
-        knp = unctrl(rtn);
-#else
-        knp = keyname(rtn);
-#endif
+        const char *knp = keyname(rtn);
         return PyString_FromString((knp == NULL) ? "" : knp);
     }
 }
@@ -1042,7 +1049,7 @@
         use_xy = TRUE;
         break;
     default:
-        PyErr_SetString(PyExc_TypeError, "insch requires 1 or 4 arguments");
+        PyErr_SetString(PyExc_TypeError, "insch requires 1 to 4 arguments");
         return NULL;
     }
 
@@ -1075,7 +1082,7 @@
         rtn = mvwinch(self->win,y,x);
         break;
     default:
-        PyErr_SetString(PyExc_TypeError, "inch requires 0 or 2 arguments");
+        PyErr_SetString(PyExc_TypeError, "inch requires 0 to 2 arguments");
         return NULL;
     }
     return PyInt_FromLong((long) rtn);
@@ -1250,10 +1257,10 @@
     int pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol;
     int rtn;
 
-#ifndef WINDOW_HAS_FLAGS
+#ifndef py_is_pad
     if (0)
 #else
-        if (self->win->_flags & _ISPAD)
+        if (py_is_pad(self->win))
 #endif
         {
             switch(PyTuple_Size(args)) {
@@ -1393,10 +1400,10 @@
     int pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol;
     int rtn;
 
-#ifndef WINDOW_HAS_FLAGS
+#ifndef py_is_pad
     if (0)
 #else
-        if (self->win->_flags & _ISPAD)
+        if (py_is_pad(self->win))
 #endif
         {
             switch(PyTuple_Size(args)) {
@@ -1462,9 +1469,10 @@
     }
 
     /* printf("Subwin: %i %i %i %i   \n", nlines, ncols, begin_y, begin_x); */
-#ifdef WINDOW_HAS_FLAGS
-    if (self->win->_flags & _ISPAD)
+#ifdef py_is_pad
+    if (py_is_pad(self->win)) {
         win = subpad(self->win, nlines, ncols, begin_y, begin_x);
+    }
     else
 #endif
         win = subwin(self->win, nlines, ncols, begin_y, begin_x);
@@ -1568,7 +1576,9 @@
     {"attron",          (PyCFunction)PyCursesWindow_AttrOn, METH_VARARGS},
     {"attrset",         (PyCFunction)PyCursesWindow_AttrSet, METH_VARARGS},
     {"bkgd",            (PyCFunction)PyCursesWindow_Bkgd, METH_VARARGS},
+#ifdef HAVE_CURSES_WCHGAT
     {"chgat",           (PyCFunction)PyCursesWindow_ChgAt, METH_VARARGS},
+#endif
     {"bkgdset",         (PyCFunction)PyCursesWindow_BkgdSet, METH_VARARGS},
     {"border",          (PyCFunction)PyCursesWindow_Border, METH_VARARGS},
     {"box",             (PyCFunction)PyCursesWindow_Box, METH_VARARGS},
@@ -1596,7 +1606,9 @@
     {"hline",           (PyCFunction)PyCursesWindow_Hline, METH_VARARGS},
     {"idcok",           (PyCFunction)PyCursesWindow_idcok, METH_VARARGS},
     {"idlok",           (PyCFunction)PyCursesWindow_idlok, METH_VARARGS},
+#ifdef HAVE_CURSES_IMMEDOK
     {"immedok",         (PyCFunction)PyCursesWindow_immedok, METH_VARARGS},
+#endif
     {"inch",            (PyCFunction)PyCursesWindow_InCh, METH_VARARGS},
     {"insch",           (PyCFunction)PyCursesWindow_InsCh, METH_VARARGS},
     {"insdelln",        (PyCFunction)PyCursesWindow_winsdelln, METH_VARARGS},
@@ -1634,7 +1646,9 @@
     {"subpad",          (PyCFunction)PyCursesWindow_SubWin, METH_VARARGS},
     {"subwin",          (PyCFunction)PyCursesWindow_SubWin, METH_VARARGS},
     {"syncdown",        (PyCFunction)PyCursesWindow_wsyncdown, METH_NOARGS},
+#ifdef HAVE_CURSES_SYNCOK
     {"syncok",          (PyCFunction)PyCursesWindow_syncok, METH_VARARGS},
+#endif
     {"syncup",          (PyCFunction)PyCursesWindow_wsyncup, METH_NOARGS},
     {"timeout",         (PyCFunction)PyCursesWindow_wtimeout, METH_VARARGS},
     {"touchline",       (PyCFunction)PyCursesWindow_TouchLine, METH_VARARGS},
@@ -1708,6 +1722,7 @@
 NoArgNoReturnVoidFunction(flushinp)
 NoArgNoReturnVoidFunction(noqiflush)
 
+#ifdef HAVE_CURSES_FILTER
 static PyObject *
 PyCurses_filter(PyObject *self)
 {
@@ -1717,6 +1732,7 @@
     Py_INCREF(Py_None);
     return Py_None;
 }
+#endif
 
 static PyObject *
 PyCurses_Color_Content(PyObject *self, PyObject *args)
@@ -1788,6 +1804,7 @@
     return PyString_FromStringAndSize(&ch, 1);
 }
 
+#ifdef getsyx
 static PyObject *
 PyCurses_getsyx(PyObject *self)
 {
@@ -1800,6 +1817,7 @@
 
     return Py_BuildValue("(ii)", y, x);
 }
+#endif
 
 #ifdef NCURSES_MOUSE_VERSION
 static PyObject *
@@ -1815,24 +1833,30 @@
         PyErr_SetString(PyCursesError, "getmouse() returned ERR");
         return NULL;
     }
-    return Py_BuildValue("(hiiil)",
+    return Py_BuildValue("(hiiik)",
                          (short)event.id,
-                         event.x, event.y, event.z,
-                         (long) event.bstate);
+                         (int)event.x, (int)event.y, (int)event.z,
+                         (unsigned long) event.bstate);
 }
 
 static PyObject *
 PyCurses_UngetMouse(PyObject *self, PyObject *args)
 {
     MEVENT event;
+    short id;
+    int x, y, z;
+    unsigned long bstate;
 
     PyCursesInitialised;
-    if (!PyArg_ParseTuple(args, "hiiil",
-                          &event.id,
-                          &event.x, &event.y, &event.z,
-                          (int *) &event.bstate))
+    if (!PyArg_ParseTuple(args, "hiiik",
+                          &id, &x, &y, &z, &bstate))
         return NULL;
 
+    event.id = id;
+    event.x = x;
+    event.y = y;
+    event.z = z;
+    event.bstate = bstate;
     return PyCursesCheckERR(ungetmouse(&event), "ungetmouse");
 }
 #endif
@@ -1871,9 +1895,9 @@
     return PyCursesCheckERR(halfdelay(tenths), "halfdelay");
 }
 
-#ifndef STRICT_SYSV_CURSES
-/* No has_key! */
-static PyObject * PyCurses_has_key(PyObject *self, PyObject *args)
+#ifdef HAVE_CURSES_HAS_KEY
+static PyObject *
+PyCurses_has_key(PyObject *self, PyObject *args)
 {
     int ch;
 
@@ -1888,7 +1912,7 @@
     Py_INCREF(Py_True);
     return Py_True;
 }
-#endif /* STRICT_SYSV_CURSES */
+#endif
 
 static PyObject *
 PyCurses_Init_Color(PyObject *self, PyObject *args)
@@ -2126,7 +2150,6 @@
 }
 #endif /* HAVE_CURSES_IS_TERM_RESIZED */
 
-#if !defined(__NetBSD__)
 static PyObject *
 PyCurses_KeyName(PyObject *self, PyObject *args)
 {
@@ -2145,7 +2168,6 @@
 
     return PyString_FromString((knp == NULL) ? "" : (char *)knp);
 }
-#endif
 
 static PyObject *
 PyCurses_KillChar(PyObject *self)
@@ -2191,14 +2213,15 @@
 static PyObject *
 PyCurses_MouseMask(PyObject *self, PyObject *args)
 {
-    int newmask;
+    unsigned long newmask;
     mmask_t oldmask, availmask;
 
     PyCursesInitialised;
-    if (!PyArg_ParseTuple(args,"i;mousemask",&newmask))
+    if (!PyArg_ParseTuple(args,"k;mousemask",&newmask))
         return NULL;
-    availmask = mousemask(newmask, &oldmask);
-    return Py_BuildValue("(ll)", (long)availmask, (long)oldmask);
+    availmask = mousemask((mmask_t)newmask, &oldmask);
+    return Py_BuildValue("(kk)",
+                         (unsigned long)availmask, (unsigned long)oldmask);
 }
 #endif
 
@@ -2441,6 +2464,7 @@
 }
 #endif /* HAVE_CURSES_RESIZE_TERM */
 
+#ifdef getsyx
 static PyObject *
 PyCurses_setsyx(PyObject *self, PyObject *args)
 {
@@ -2460,6 +2484,7 @@
     Py_INCREF(Py_None);
     return Py_None;
 }
+#endif
 
 static PyObject *
 PyCurses_Start_Color(PyObject *self)
@@ -2554,6 +2579,7 @@
     return PyString_FromString(result);
 }
 
+#ifdef HAVE_CURSES_TYPEAHEAD
 static PyObject *
 PyCurses_TypeAhead(PyObject *self, PyObject *args)
 {
@@ -2565,6 +2591,7 @@
 
     return PyCursesCheckERR(typeahead( fd ), "typeahead");
 }
+#endif
 
 static PyObject *
 PyCurses_UnCtrl(PyObject *self, PyObject *args)
@@ -2576,8 +2603,11 @@
 
     if (!PyArg_ParseTuple(args,"O;ch or int",&temp)) return NULL;
 
-    if (PyInt_Check(temp))
+    if (_PyAnyInt_Check(temp)) {
         ch = (chtype) PyInt_AsLong(temp);
+        if (ch == (chtype) -1 && PyErr_Occurred())
+            return NULL;
+    }
     else if (PyString_Check(temp))
         ch = (chtype) *PyString_AsString(temp);
     else {
@@ -2598,8 +2628,11 @@
 
     if (!PyArg_ParseTuple(args,"O;ch or int",&temp)) return NULL;
 
-    if (PyInt_Check(temp))
+    if (_PyAnyInt_Check(temp)) {
         ch = (int) PyInt_AsLong(temp);
+        if (ch == -1 && PyErr_Occurred())
+            return NULL;
+    }
     else if (PyString_Check(temp))
         ch = (int) *PyString_AsString(temp);
     else {
@@ -2610,6 +2643,7 @@
     return PyCursesCheckERR(ungetch(ch), "ungetch");
 }
 
+#ifdef HAVE_CURSES_TYPEAHEAD
 static PyObject *
 PyCurses_Use_Env(PyObject *self, PyObject *args)
 {
@@ -2628,6 +2662,7 @@
     Py_INCREF(Py_None);
     return Py_None;
 }
+#endif
 
 #ifndef STRICT_SYSV_CURSES
 static PyObject *
@@ -2666,19 +2701,23 @@
     {"echo",                (PyCFunction)PyCurses_echo, METH_VARARGS},
     {"endwin",              (PyCFunction)PyCurses_endwin, METH_NOARGS},
     {"erasechar",           (PyCFunction)PyCurses_EraseChar, METH_NOARGS},
+#ifdef HAVE_CURSES_FILTER
     {"filter",              (PyCFunction)PyCurses_filter, METH_NOARGS},
+#endif
     {"flash",               (PyCFunction)PyCurses_flash, METH_NOARGS},
     {"flushinp",            (PyCFunction)PyCurses_flushinp, METH_NOARGS},
 #ifdef NCURSES_MOUSE_VERSION
     {"getmouse",            (PyCFunction)PyCurses_GetMouse, METH_NOARGS},
     {"ungetmouse",          (PyCFunction)PyCurses_UngetMouse, METH_VARARGS},
 #endif
+#ifdef getsyx
     {"getsyx",              (PyCFunction)PyCurses_getsyx, METH_NOARGS},
+#endif
     {"getwin",              (PyCFunction)PyCurses_GetWin, METH_O},
     {"has_colors",          (PyCFunction)PyCurses_has_colors, METH_NOARGS},
     {"has_ic",              (PyCFunction)PyCurses_has_ic, METH_NOARGS},
     {"has_il",              (PyCFunction)PyCurses_has_il, METH_NOARGS},
-#ifndef STRICT_SYSV_CURSES
+#ifdef HAVE_CURSES_HAS_KEY
     {"has_key",             (PyCFunction)PyCurses_has_key, METH_VARARGS},
 #endif
     {"halfdelay",           (PyCFunction)PyCurses_HalfDelay, METH_VARARGS},
@@ -2690,9 +2729,7 @@
 #ifdef HAVE_CURSES_IS_TERM_RESIZED
     {"is_term_resized",     (PyCFunction)PyCurses_Is_Term_Resized, METH_VARARGS},
 #endif
-#if !defined(__NetBSD__)
     {"keyname",             (PyCFunction)PyCurses_KeyName, METH_VARARGS},
-#endif
     {"killchar",            (PyCFunction)PyCurses_KillChar, METH_NOARGS},
     {"longname",            (PyCFunction)PyCurses_longname, METH_NOARGS},
     {"meta",                (PyCFunction)PyCurses_Meta, METH_VARARGS},
@@ -2724,7 +2761,9 @@
     {"resize_term",         (PyCFunction)PyCurses_Resize_Term, METH_VARARGS},
 #endif
     {"savetty",             (PyCFunction)PyCurses_savetty, METH_NOARGS},
+#ifdef getsyx
     {"setsyx",              (PyCFunction)PyCurses_setsyx, METH_VARARGS},
+#endif
     {"setupterm",           (PyCFunction)PyCurses_setupterm,
      METH_VARARGS|METH_KEYWORDS},
     {"start_color",         (PyCFunction)PyCurses_Start_Color, METH_NOARGS},
@@ -2734,10 +2773,14 @@
     {"tigetnum",            (PyCFunction)PyCurses_tigetnum, METH_VARARGS},
     {"tigetstr",            (PyCFunction)PyCurses_tigetstr, METH_VARARGS},
     {"tparm",               (PyCFunction)PyCurses_tparm, METH_VARARGS},
+#ifdef HAVE_CURSES_TYPEAHEAD
     {"typeahead",           (PyCFunction)PyCurses_TypeAhead, METH_VARARGS},
+#endif
     {"unctrl",              (PyCFunction)PyCurses_UnCtrl, METH_VARARGS},
     {"ungetch",             (PyCFunction)PyCurses_UngetCh, METH_VARARGS},
+#ifdef HAVE_CURSES_USE_ENV
     {"use_env",             (PyCFunction)PyCurses_Use_Env, METH_VARARGS},
+#endif
 #ifndef STRICT_SYSV_CURSES
     {"use_default_colors",  (PyCFunction)PyCurses_Use_Default_Colors, METH_NOARGS},
 #endif
@@ -2801,9 +2844,7 @@
     SetDictInt("A_DIM",                 A_DIM);
     SetDictInt("A_BOLD",                A_BOLD);
     SetDictInt("A_ALTCHARSET",          A_ALTCHARSET);
-#if !defined(__NetBSD__)
     SetDictInt("A_INVIS",           A_INVIS);
-#endif
     SetDictInt("A_PROTECT",         A_PROTECT);
     SetDictInt("A_CHARTEXT",        A_CHARTEXT);
     SetDictInt("A_COLOR",           A_COLOR);
@@ -2875,7 +2916,6 @@
         int key;
         char *key_n;
         char *key_n2;
-#if !defined(__NetBSD__)
         for (key=KEY_MIN;key < KEY_MAX; key++) {
             key_n = (char *)keyname(key);
             if (key_n == NULL || strcmp(key_n,"UNKNOWN KEY")==0)
@@ -2903,7 +2943,6 @@
             if (key_n2 != key_n)
                 free(key_n2);
         }
-#endif
         SetDictInt("KEY_MIN", KEY_MIN);
         SetDictInt("KEY_MAX", KEY_MAX);
     }
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index b01167b..f7f992d 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -131,6 +131,15 @@
 
 /* helpers */
 
+/* Py_SETREF for a PyObject* that uses a join flag. */
+Py_LOCAL_INLINE(void)
+_set_joined_ptr(PyObject **p, PyObject *new_joined_ptr)
+{
+    PyObject *tmp = JOIN_OBJ(*p);
+    *p = new_joined_ptr;
+    Py_DECREF(tmp);
+}
+
 LOCAL(PyObject*)
 deepcopy(PyObject* object, PyObject* memo)
 {
@@ -164,8 +173,7 @@
 LOCAL(PyObject*)
 list_join(PyObject* list)
 {
-    /* join list elements (destroying the list in the process) */
-
+    /* join list elements */
     PyObject* joiner;
     PyObject* function;
     PyObject* args;
@@ -173,12 +181,10 @@
 
     switch (PyList_GET_SIZE(list)) {
     case 0:
-        Py_DECREF(list);
         return PyString_FromString("");
     case 1:
         result = PyList_GET_ITEM(list, 0);
         Py_INCREF(result);
-        Py_DECREF(list);
         return result;
     }
 
@@ -196,9 +202,13 @@
     }
 
     args = PyTuple_New(1);
-    if (!args)
+    if (!args) {
+        Py_DECREF(function);
+        Py_DECREF(joiner);
         return NULL;
+    }
 
+    Py_INCREF(list);
     PyTuple_SET_ITEM(args, 0, list);
 
     result = PyObject_CallObject(function, args);
@@ -435,15 +445,17 @@
 {
     /* return borrowed reference to text attribute */
 
-    PyObject* res = self->text;
+    PyObject *res = self->text;
 
     if (JOIN_GET(res)) {
         res = JOIN_OBJ(res);
         if (PyList_CheckExact(res)) {
-            res = list_join(res);
-            if (!res)
+            PyObject *tmp = list_join(res);
+            if (!tmp)
                 return NULL;
-            self->text = res;
+            self->text = tmp;
+            Py_DECREF(res);
+            res = tmp;
         }
     }
 
@@ -455,15 +467,17 @@
 {
     /* return borrowed reference to text attribute */
 
-    PyObject* res = self->tail;
+    PyObject *res = self->tail;
 
     if (JOIN_GET(res)) {
         res = JOIN_OBJ(res);
         if (PyList_CheckExact(res)) {
-            res = list_join(res);
-            if (!res)
+            PyObject *tmp = list_join(res);
+            if (!tmp)
                 return NULL;
-            self->tail = res;
+            self->tail = tmp;
+            Py_DECREF(res);
+            res = tmp;
         }
     }
 
@@ -524,8 +538,9 @@
     }
 
     elem = element_new(tag, attrib);
-
     Py_DECREF(attrib);
+    if (elem == NULL)
+        return NULL;
 
     if (element_add_subelement(parent, elem) < 0) {
         Py_DECREF(elem);
@@ -579,12 +594,10 @@
     }
 
     Py_INCREF(Py_None);
-    Py_DECREF(JOIN_OBJ(self->text));
-    self->text = Py_None;
+    _set_joined_ptr(&self->text, Py_None);
 
     Py_INCREF(Py_None);
-    Py_DECREF(JOIN_OBJ(self->tail));
-    self->tail = Py_None;
+    _set_joined_ptr(&self->tail, Py_None);
 
     Py_RETURN_NONE;
 }
@@ -604,13 +617,11 @@
     if (!element)
         return NULL;
 
-    Py_DECREF(JOIN_OBJ(element->text));
-    element->text = self->text;
-    Py_INCREF(JOIN_OBJ(element->text));
+    Py_INCREF(JOIN_OBJ(self->text));
+    _set_joined_ptr(&element->text, self->text);
 
-    Py_DECREF(JOIN_OBJ(element->tail));
-    element->tail = self->tail;
-    Py_INCREF(JOIN_OBJ(element->tail));
+    Py_INCREF(JOIN_OBJ(self->tail));
+    _set_joined_ptr(&element->tail, self->tail);
 
     if (self->extra) {
         
@@ -672,14 +683,12 @@
     text = deepcopy(JOIN_OBJ(self->text), memo);
     if (!text)
         goto error;
-    Py_DECREF(element->text);
-    element->text = JOIN_SET(text, JOIN_GET(self->text));
+    _set_joined_ptr(&element->text, JOIN_SET(text, JOIN_GET(self->text)));
 
     tail = deepcopy(JOIN_OBJ(self->tail), memo);
     if (!tail)
         goto error;
-    Py_DECREF(element->tail);
-    element->tail = JOIN_SET(tail, JOIN_GET(self->tail));
+    _set_joined_ptr(&element->tail, JOIN_SET(tail, JOIN_GET(self->tail)));
 
     if (self->extra) {
         
@@ -956,7 +965,11 @@
     int i;
     PyObject* list;
 
-    /* FIXME: report as deprecated? */
+    if (PyErr_WarnPy3k("This method will be removed in future versions.  "
+                       "Use 'list(elem)' or iteration over elem instead.",
+                       1) < 0) {
+        return NULL;
+    }
 
     if (!PyArg_ParseTuple(args, ":getchildren"))
         return NULL;
@@ -978,13 +991,10 @@
 }
 
 static PyObject*
-element_iter(ElementObject* self, PyObject* args)
+element_iter_impl(ElementObject* self, PyObject* tag)
 {
+    PyObject* args;
     PyObject* result;
-    
-    PyObject* tag = Py_None;
-    if (!PyArg_ParseTuple(args, "|O:iter", &tag))
-        return NULL;
 
     if (!elementtree_iter_obj) {
         PyErr_SetString(
@@ -1008,6 +1018,34 @@
     return result;
 }
 
+static PyObject*
+element_iter(ElementObject* self, PyObject* args)
+{
+    PyObject* tag = Py_None;
+    if (!PyArg_ParseTuple(args, "|O:iter", &tag))
+        return NULL;
+
+    return element_iter_impl(self, tag);
+}
+
+static PyObject*
+element_getiterator(ElementObject* self, PyObject* args)
+{
+    PyObject* tag = Py_None;
+    if (!PyArg_ParseTuple(args, "|O:getiterator", &tag))
+        return NULL;
+
+    /* Change for a DeprecationWarning in 1.4 */
+    if (Py_Py3kWarningFlag &&
+        PyErr_WarnEx(PyExc_PendingDeprecationWarning,
+                     "This method will be removed in future versions.  "
+                     "Use 'tree.iter()' or 'list(tree.iter())' instead.",
+                     1) < 0) {
+        return NULL;
+    }
+    return element_iter_impl(self, tag);
+}
+
 
 static PyObject*
 element_itertext(ElementObject* self, PyObject* args)
@@ -1231,8 +1269,10 @@
     if (status == 0) {
         PyObject *repr, *tag;
         tag = PyObject_Repr(self->tag);
-        if (!tag)
+        if (!tag) {
+            Py_ReprLeave((PyObject *)self);
             return NULL;
+        }
 
         repr = PyString_FromFormat("<Element %s at %p>",
                                    PyString_AS_STRING(tag), self);
@@ -1307,7 +1347,7 @@
     ElementObject* self = (ElementObject*) self_;
 
 #if (PY_VERSION_HEX < 0x02050000)
-    if (PyInt_Check(item) || PyLong_Check(item)) {
+    if (_PyAnyInt_Check(item)) {
         long i = PyInt_AsLong(item);
 #else
     if (PyIndex_Check(item)) {
@@ -1328,11 +1368,11 @@
         if (!self->extra)
             return PyList_New(0);
 
-        if (PySlice_GetIndicesEx((PySliceObject *)item,
-                self->extra->length,
-                &start, &stop, &step, &slicelen) < 0) {
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0) {
             return NULL;
         }
+        slicelen = _PySlice_AdjustIndices(self->extra->length, &start, &stop,
+                                         step);
 
         if (slicelen <= 0)
             return PyList_New(0);
@@ -1364,7 +1404,7 @@
     ElementObject* self = (ElementObject*) self_;
 
 #if (PY_VERSION_HEX < 0x02050000)
-    if (PyInt_Check(item) || PyLong_Check(item)) {
+    if (_PyAnyInt_Check(item)) {
         long i = PyInt_AsLong(item);
 #else
     if (PyIndex_Check(item)) {
@@ -1387,11 +1427,11 @@
         if (!self->extra)
             element_new_extra(self, NULL);
 
-        if (PySlice_GetIndicesEx((PySliceObject *)item,
-                self->extra->length,
-                &start, &stop, &step, &slicelen) < 0) {
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0) {
             return -1;
         }
+        slicelen = _PySlice_AdjustIndices(self->extra->length, &start, &stop,
+                                         step);
         assert(slicelen <= self->extra->length);
 
         if (value == NULL)
@@ -1504,7 +1544,7 @@
     {"itertext", (PyCFunction) element_itertext, METH_VARARGS},
     {"iterfind", (PyCFunction) element_iterfind, METH_VARARGS},
 
-    {"getiterator", (PyCFunction) element_iter, METH_VARARGS},
+    {"getiterator", (PyCFunction) element_getiterator, METH_VARARGS},
     {"getchildren", (PyCFunction) element_getchildren, METH_VARARGS},
 
     {"items", (PyCFunction) element_items, METH_VARARGS},
@@ -1542,7 +1582,7 @@
         return res;
     } else if (strcmp(name, "text") == 0) {
         res = element_get_text(self);
-        Py_INCREF(res);
+        Py_XINCREF(res);
         return res;
     }
 
@@ -1587,13 +1627,11 @@
         Py_INCREF(value);
         Py_SETREF(self->tag, value);
     } else if (strcmp(name, "text") == 0) {
-        Py_DECREF(JOIN_OBJ(self->text));
-        self->text = value;
-        Py_INCREF(self->text);
+        Py_INCREF(value);
+        _set_joined_ptr(&self->text, value);
     } else if (strcmp(name, "tail") == 0) {
-        Py_DECREF(JOIN_OBJ(self->tail));
-        self->tail = value;
-        Py_INCREF(self->tail);
+        Py_INCREF(value);
+        _set_joined_ptr(&self->tail, value);
     } else if (strcmp(name, "attrib") == 0) {
         if (!self->extra)
             element_new_extra(self, NULL);
@@ -1624,8 +1662,8 @@
 };
 
 statichere PyTypeObject Element_Type = {
-    PyObject_HEAD_INIT(NULL)
-    0, "Element", sizeof(ElementObject), 0,
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "Element", sizeof(ElementObject), 0,
     /* methods */
     (destructor)element_dealloc, /* tp_dealloc */
     0, /* tp_print */
@@ -1729,6 +1767,37 @@
     PyObject_Del(self);
 }
 
+/* -------------------------------------------------------------------- */
+/* helpers for handling of arbitrary element-like objects */
+
+static void
+treebuilder_set_element_text_or_tail(PyObject **data, PyObject **dest)
+{
+    PyObject *tmp = JOIN_OBJ(*dest);
+    *dest = JOIN_SET(*data, PyList_CheckExact(*data));
+    *data = NULL;
+    Py_DECREF(tmp);
+}
+
+LOCAL(void)
+treebuilder_flush_data(TreeBuilderObject* self)
+{
+    ElementObject *element = self->last;
+
+    if (self->data) {
+        if (self->this == element) {
+            treebuilder_set_element_text_or_tail(
+                &self->data,
+                &element->text);
+        }
+        else {
+            treebuilder_set_element_text_or_tail(
+                &self->data,
+                &element->tail);
+        }
+    }
+}
+
 LOCAL(int)
 treebuilder_append_event(TreeBuilderObject *self, PyObject *action,
                          PyObject *node)
@@ -1763,20 +1832,7 @@
     PyObject* node;
     PyObject* this;
 
-    if (self->data) {
-        if (self->this == self->last) {
-            Py_DECREF(JOIN_OBJ(self->last->text));
-            self->last->text = JOIN_SET(
-                self->data, PyList_CheckExact(self->data)
-                );
-        } else {
-            Py_DECREF(JOIN_OBJ(self->last->tail));
-            self->last->tail = JOIN_SET(
-                self->data, PyList_CheckExact(self->data)
-                );
-        }
-        self->data = NULL;
-    }
+    treebuilder_flush_data(self);
 
     node = element_new(tag, attrib);
     if (!node)
@@ -1866,20 +1922,7 @@
 {
     ElementObject *item;
 
-    if (self->data) {
-        if (self->this == self->last) {
-            Py_DECREF(JOIN_OBJ(self->last->text));
-            self->last->text = JOIN_SET(
-                self->data, PyList_CheckExact(self->data)
-                );
-        } else {
-            Py_DECREF(JOIN_OBJ(self->last->tail));
-            self->last->tail = JOIN_SET(
-                self->data, PyList_CheckExact(self->data)
-                );
-        }
-        self->data = NULL;
-    }
+    treebuilder_flush_data(self);
 
     if (self->index == 0) {
         PyErr_SetString(
@@ -1989,8 +2032,8 @@
 }
 
 statichere PyTypeObject TreeBuilder_Type = {
-    PyObject_HEAD_INIT(NULL)
-    0, "TreeBuilder", sizeof(TreeBuilderObject), 0,
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "TreeBuilder", sizeof(TreeBuilderObject), 0,
     /* methods */
     (destructor)treebuilder_dealloc, /* tp_dealloc */
     0, /* tp_print */
@@ -2467,6 +2510,18 @@
 /* -------------------------------------------------------------------- */
 /* constructor and destructor */
 
+static int
+ignore_attribute_error(PyObject *value)
+{
+    if (value == NULL) {
+        if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
+            return -1;
+        }
+        PyErr_Clear();
+    }
+    return 0;
+}
+
 static PyObject*
 xmlparser(PyObject* self_, PyObject* args, PyObject* kw)
 {
@@ -2520,14 +2575,24 @@
         return NULL;
     }
 
+    ALLOC(sizeof(XMLParserObject), "create expatparser");
+
+    /* Init to NULL to keep the error handling below manageable. */
+    self->target =
+        self->handle_xml =
+        self->handle_start =
+        self->handle_data =
+        self->handle_end =
+        self->handle_comment =
+        self->handle_pi =
+        self->handle_close =
+        NULL;
+
     /* setup target handlers */
     if (!target) {
         target = treebuilder_new();
         if (!target) {
-            EXPAT(ParserFree)(self->parser);
-            PyObject_Del(self->names);
-            PyObject_Del(self->entity);
-            PyObject_Del(self);
+            Py_DECREF(self);
             return NULL;
         }
     } else
@@ -2535,14 +2600,40 @@
     self->target = target;
 
     self->handle_xml = PyObject_GetAttrString(target, "xml");
+    if (ignore_attribute_error(self->handle_xml)) {
+        Py_DECREF(self);
+        return NULL;
+    }
     self->handle_start = PyObject_GetAttrString(target, "start");
+    if (ignore_attribute_error(self->handle_start)) {
+        Py_DECREF(self);
+        return NULL;
+    }
     self->handle_data = PyObject_GetAttrString(target, "data");
+    if (ignore_attribute_error(self->handle_data)) {
+        Py_DECREF(self);
+        return NULL;
+    }
     self->handle_end = PyObject_GetAttrString(target, "end");
+    if (ignore_attribute_error(self->handle_end)) {
+        Py_DECREF(self);
+        return NULL;
+    }
     self->handle_comment = PyObject_GetAttrString(target, "comment");
+    if (ignore_attribute_error(self->handle_comment)) {
+        Py_DECREF(self);
+        return NULL;
+    }
     self->handle_pi = PyObject_GetAttrString(target, "pi");
+    if (ignore_attribute_error(self->handle_pi)) {
+        Py_DECREF(self);
+        return NULL;
+    }
     self->handle_close = PyObject_GetAttrString(target, "close");
-
-    PyErr_Clear();
+    if (ignore_attribute_error(self->handle_close)) {
+        Py_DECREF(self);
+        return NULL;
+    }
 
     /* configure parser */
     EXPAT(SetUserData)(self->parser, self);
@@ -2576,8 +2667,6 @@
         );
 #endif
 
-    ALLOC(sizeof(XMLParserObject), "create expatparser");
-
     return (PyObject*) self;
 }
 
@@ -2855,8 +2944,8 @@
 }
 
 statichere PyTypeObject XMLParser_Type = {
-    PyObject_HEAD_INIT(NULL)
-    0, "XMLParser", sizeof(XMLParserObject), 0,
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "XMLParser", sizeof(XMLParserObject), 0,
     /* methods */
     (destructor)xmlparser_dealloc, /* tp_dealloc */
     0, /* tp_print */
diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c
index e0781a9..e9e8933 100644
--- a/Modules/_functoolsmodule.c
+++ b/Modules/_functoolsmodule.c
@@ -143,6 +143,7 @@
 static void
 partial_dealloc(partialobject *pto)
 {
+    /* bpo-31095: UnTrack is needed before calling any callbacks */
     PyObject_GC_UnTrack(pto);
     if (pto->weakreflist != NULL)
         PyObject_ClearWeakRefs((PyObject *) pto);
diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c
index 75b3a3d..de69f6f 100644
--- a/Modules/_hashopenssl.c
+++ b/Modules/_hashopenssl.c
@@ -899,8 +899,11 @@
 {
     PyObject *m, *openssl_md_meth_names;
 
-    OpenSSL_add_all_digests();
+#ifndef OPENSSL_VERSION_1_1
+    /* Load all digest algorithms and initialize cpuid */
+    OPENSSL_add_all_algorithms_noconf();
     ERR_load_crypto_strings();
+#endif
 
     /* TODO build EVP_functions openssl_* entries dynamically based
      * on what hashes are supported rather than listing many
diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c
index 1335ae8..0ee4b80 100644
--- a/Modules/_io/bytesio.c
+++ b/Modules/_io/bytesio.c
@@ -745,6 +745,7 @@
 static void
 bytesio_dealloc(bytesio *self)
 {
+    /* bpo-31095: UnTrack is needed before calling any callbacks */
     _PyObject_GC_UNTRACK(self);
     if (self->buf != NULL) {
         PyMem_Free(self->buf);
diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c
index 0678ef8..2b40ada 100644
--- a/Modules/_io/fileio.c
+++ b/Modules/_io/fileio.c
@@ -8,6 +8,9 @@
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #endif
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
 #endif
@@ -143,9 +146,15 @@
 {
 #if defined(HAVE_FSTAT) && defined(S_IFDIR) && defined(EISDIR)
     struct stat buf;
+    int res;
     if (self->fd < 0)
         return 0;
-    if (fstat(self->fd, &buf) == 0 && S_ISDIR(buf.st_mode)) {
+
+    Py_BEGIN_ALLOW_THREADS
+    res = fstat(self->fd, &buf);
+    Py_END_ALLOW_THREADS
+
+    if (res == 0 && S_ISDIR(buf.st_mode)) {
         errno = EISDIR;
         PyErr_SetFromErrnoWithFilenameObject(PyExc_IOError, nameobj);
         return -1;
@@ -159,17 +168,34 @@
 {
 #if defined(HAVE_FSTAT)
     struct stat buf;
-    if (!_PyVerify_fd(fd) || (fstat(fd, &buf) < 0 && errno == EBADF)) {
-        PyObject *exc;
-        char *msg = strerror(EBADF);
-        exc = PyObject_CallFunction(PyExc_OSError, "(is)",
-                                    EBADF, msg);
-        PyErr_SetObject(PyExc_OSError, exc);
-        Py_XDECREF(exc);
-        return -1;
+    int res;
+    PyObject *exc;
+    char *msg;
+
+    if (!_PyVerify_fd(fd)) {
+        goto badfd;
     }
-#endif
+
+    Py_BEGIN_ALLOW_THREADS
+    res = fstat(fd, &buf);
+    Py_END_ALLOW_THREADS
+
+    if (res < 0 && errno == EBADF) {
+        goto badfd;
+    }
+
     return 0;
+
+badfd:
+    msg = strerror(EBADF);
+    exc = PyObject_CallFunction(PyExc_OSError, "(is)",
+                                EBADF, msg);
+    PyErr_SetObject(PyExc_OSError, exc);
+    Py_XDECREF(exc);
+    return -1;
+#else
+    return 0;
+#endif
 }
 
 
@@ -516,9 +542,19 @@
 #ifdef HAVE_FSTAT
     off_t pos, end;
     struct stat st;
-    if (fstat(self->fd, &st) == 0) {
+    int res;
+
+    Py_BEGIN_ALLOW_THREADS
+    res = fstat(self->fd, &st);
+    Py_END_ALLOW_THREADS
+
+    if (res == 0) {
         end = st.st_size;
+
+        Py_BEGIN_ALLOW_THREADS
         pos = lseek(self->fd, 0L, SEEK_CUR);
+        Py_END_ALLOW_THREADS
+
         /* Files claiming a size smaller than SMALLCHUNK may
            actually be streaming pseudo-files. In this case, we
            apply the more aggressive algorithm below.
diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c
index 2fec7e8..17b905a 100644
--- a/Modules/_io/iobase.c
+++ b/Modules/_io/iobase.c
@@ -1,9 +1,9 @@
 /*
     An implementation of the I/O abstract base classes hierarchy
     as defined by PEP 3116 - "New I/O"
-    
+
     Classes defined here: IOBase, RawIOBase.
-    
+
     Written by Amaury Forgeot d'Arc and Antoine Pitrou
 */
 
@@ -19,7 +19,7 @@
 
 typedef struct {
     PyObject_HEAD
-    
+
     PyObject *dict;
     PyObject *weakreflist;
 } iobase;
@@ -177,17 +177,25 @@
 static PyObject *
 iobase_close(PyObject *self, PyObject *args)
 {
-    PyObject *res;
+    PyObject *res, *exc, *val, *tb;
+    int rc;
 
     if (IS_CLOSED(self))
         Py_RETURN_NONE;
 
     res = PyObject_CallMethodObjArgs(self, _PyIO_str_flush, NULL);
-    PyObject_SetAttrString(self, "__IOBase_closed", Py_True);
+
+    PyErr_Fetch(&exc, &val, &tb);
+    rc = PyObject_SetAttrString(self, "__IOBase_closed", Py_True);
+    _PyErr_ReplaceException(exc, val, tb);
+    if (rc < 0) {
+        Py_CLEAR(res);
+    }
+
     if (res == NULL) {
         return NULL;
     }
-    Py_XDECREF(res);
+    Py_DECREF(res);
     Py_RETURN_NONE;
 }
 
@@ -571,7 +579,8 @@
     if (line == NULL)
         return NULL;
 
-    if (PyObject_Size(line) == 0) {
+    if (PyObject_Size(line) <= 0) {
+        /* Error or empty */
         Py_DECREF(line);
         return NULL;
     }
@@ -590,7 +599,7 @@
 iobase_readlines(PyObject *self, PyObject *args)
 {
     Py_ssize_t hint = -1, length = 0;
-    PyObject *result;
+    PyObject *result, *it = NULL;
 
     if (!PyArg_ParseTuple(args, "|O&:readlines", &_PyIO_ConvertSsize_t, &hint)) {
         return NULL;
@@ -606,19 +615,23 @@
            probably be removed here. */
         PyObject *ret = PyObject_CallMethod(result, "extend", "O", self);
         if (ret == NULL) {
-            Py_DECREF(result);
-            return NULL;
+            goto error;
         }
         Py_DECREF(ret);
         return result;
     }
 
+    it = PyObject_GetIter(self);
+    if (it == NULL) {
+        goto error;
+    }
+
     while (1) {
-        PyObject *line = PyIter_Next(self);
+        Py_ssize_t line_length;
+        PyObject *line = PyIter_Next(it);
         if (line == NULL) {
             if (PyErr_Occurred()) {
-                Py_DECREF(result);
-                return NULL;
+                goto error;
             }
             else
                 break; /* StopIteration raised */
@@ -626,16 +639,25 @@
 
         if (PyList_Append(result, line) < 0) {
             Py_DECREF(line);
-            Py_DECREF(result);
-            return NULL;
+            goto error;
         }
-        length += PyObject_Size(line);
+        line_length = PyObject_Size(line);
         Py_DECREF(line);
-
-        if (length > hint)
+        if (line_length < 0) {
+            goto error;
+        }
+        if (line_length > hint - length)
             break;
+        length += line_length;
     }
+
+    Py_DECREF(it);
     return result;
+
+ error:
+    Py_XDECREF(it);
+    Py_DECREF(result);
+    return NULL;
 }
 
 static PyObject *
@@ -823,7 +845,7 @@
     int r;
     PyObject *chunks = PyList_New(0);
     PyObject *result;
-    
+
     if (chunks == NULL)
         return NULL;
 
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index b4007c2..1979539 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -707,6 +707,8 @@
     PyObject *dict;
 } textio;
 
+static void
+textiowrapper_set_decoded_chars(textio *self, PyObject *chars);
 
 /* A couple of specialized cases in order to bypass the slow incremental
    encoding methods for the most popular encodings. */
@@ -907,6 +909,7 @@
     else {
         PyErr_SetString(PyExc_IOError,
                         "could not determine default encoding");
+        goto error;
     }
 
     /* Check we have been asked for a real text encoding */
@@ -983,7 +986,7 @@
                                                            errors);
         if (self->encoder == NULL)
             goto error;
-        /* Get the normalized named of the codec */
+        /* Get the normalized name of the codec */
         res = PyObject_GetAttrString(codec_info, "name");
         if (res == NULL) {
             if (PyErr_ExceptionMatches(PyExc_AttributeError))
@@ -1328,6 +1331,7 @@
         Py_DECREF(ret);
     }
 
+    textiowrapper_set_decoded_chars(self, NULL);
     Py_CLEAR(self->snapshot);
 
     if (self->decoder) {
@@ -1416,7 +1420,7 @@
         /* Given this, we know there was a valid snapshot point
          * len(dec_buffer) bytes ago with decoder state (b'', dec_flags).
          */
-        if (PyArg_Parse(state, "(OO)", &dec_buffer, &dec_flags) < 0) {
+        if (!PyArg_Parse(state, "(OO)", &dec_buffer, &dec_flags)) {
             Py_DECREF(state);
             return -1;
         }
@@ -1533,6 +1537,7 @@
         if (final == NULL)
             goto fail;
 
+        textiowrapper_set_decoded_chars(self, NULL);
         Py_CLEAR(self->snapshot);
         return final;
     }
diff --git a/Modules/_json.c b/Modules/_json.c
index 189cb2c..3a88882 100644
--- a/Modules/_json.c
+++ b/Modules/_json.c
@@ -95,16 +95,12 @@
 _build_rval_index_tuple(PyObject *rval, Py_ssize_t idx);
 static PyObject *
 scanner_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
-static int
-scanner_init(PyObject *self, PyObject *args, PyObject *kwds);
 static void
 scanner_dealloc(PyObject *self);
 static int
 scanner_clear(PyObject *self);
 static PyObject *
 encoder_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
-static int
-encoder_init(PyObject *self, PyObject *args, PyObject *kwds);
 static void
 encoder_dealloc(PyObject *self);
 static int
@@ -844,7 +840,8 @@
 static void
 scanner_dealloc(PyObject *self)
 {
-    /* Deallocate scanner object */
+    /* bpo-31095: UnTrack is needed before calling any callbacks */
+    PyObject_GC_UnTrack(self);
     scanner_clear(self);
     Py_TYPE(self)->tp_free(self);
 }
@@ -1707,32 +1704,15 @@
 scanner_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
     PyScannerObject *s;
-    s = (PyScannerObject *)type->tp_alloc(type, 0);
-    if (s != NULL) {
-        s->encoding = NULL;
-        s->strict = NULL;
-        s->object_hook = NULL;
-        s->pairs_hook = NULL;
-        s->parse_float = NULL;
-        s->parse_int = NULL;
-        s->parse_constant = NULL;
-    }
-    return (PyObject *)s;
-}
-
-static int
-scanner_init(PyObject *self, PyObject *args, PyObject *kwds)
-{
-    /* Initialize Scanner object */
     PyObject *ctx;
     static char *kwlist[] = {"context", NULL};
-    PyScannerObject *s;
-
-    assert(PyScanner_Check(self));
-    s = (PyScannerObject *)self;
 
     if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:make_scanner", kwlist, &ctx))
-        return -1;
+        return NULL;
+
+    s = (PyScannerObject *)type->tp_alloc(type, 0);
+    if (s == NULL)
+        return NULL;
 
     /* PyString_AS_STRING is used on encoding */
     s->encoding = PyObject_GetAttrString(ctx, "encoding");
@@ -1776,25 +1756,18 @@
     if (s->parse_constant == NULL)
         goto bail;
 
-    return 0;
+    return (PyObject *)s;
 
 bail:
-    Py_CLEAR(s->encoding);
-    Py_CLEAR(s->strict);
-    Py_CLEAR(s->object_hook);
-    Py_CLEAR(s->pairs_hook);
-    Py_CLEAR(s->parse_float);
-    Py_CLEAR(s->parse_int);
-    Py_CLEAR(s->parse_constant);
-    return -1;
+    Py_DECREF(s);
+    return NULL;
 }
 
 PyDoc_STRVAR(scanner_doc, "JSON scanner object");
 
 static
 PyTypeObject PyScannerType = {
-    PyObject_HEAD_INIT(NULL)
-    0,                    /* tp_internal */
+    PyVarObject_HEAD_INIT(NULL, 0)
     "_json.Scanner",       /* tp_name */
     sizeof(PyScannerObject), /* tp_basicsize */
     0,                    /* tp_itemsize */
@@ -1829,7 +1802,7 @@
     0,                    /* tp_descr_get */
     0,                    /* tp_descr_set */
     0,                    /* tp_dictoffset */
-    scanner_init,                    /* tp_init */
+    0,                    /* tp_init */
     0,/* PyType_GenericAlloc, */        /* tp_alloc */
     scanner_new,          /* tp_new */
     0,/* PyObject_GC_Del, */              /* tp_free */
@@ -1838,25 +1811,6 @@
 static PyObject *
 encoder_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
-    PyEncoderObject *s;
-    s = (PyEncoderObject *)type->tp_alloc(type, 0);
-    if (s != NULL) {
-        s->markers = NULL;
-        s->defaultfn = NULL;
-        s->encoder = NULL;
-        s->indent = NULL;
-        s->key_separator = NULL;
-        s->item_separator = NULL;
-        s->sort_keys = NULL;
-        s->skipkeys = NULL;
-    }
-    return (PyObject *)s;
-}
-
-static int
-encoder_init(PyObject *self, PyObject *args, PyObject *kwds)
-{
-    /* initialize Encoder object */
     static char *kwlist[] = {"markers", "default", "encoder", "indent", "key_separator", "item_separator", "sort_keys", "skipkeys", "allow_nan", NULL};
 
     PyEncoderObject *s;
@@ -1864,25 +1818,26 @@
     PyObject *item_separator, *sort_keys, *skipkeys, *allow_nan_obj;
     int allow_nan;
 
-    assert(PyEncoder_Check(self));
-    s = (PyEncoderObject *)self;
-
     if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOOOOOOOO:make_encoder", kwlist,
         &markers, &defaultfn, &encoder, &indent, &key_separator, &item_separator,
         &sort_keys, &skipkeys, &allow_nan_obj))
-        return -1;
+        return NULL;
 
     allow_nan = PyObject_IsTrue(allow_nan_obj);
     if (allow_nan < 0)
-        return -1;
+        return NULL;
 
     if (markers != Py_None && !PyDict_Check(markers)) {
         PyErr_Format(PyExc_TypeError,
                      "make_encoder() argument 1 must be dict or None, "
                      "not %.200s", Py_TYPE(markers)->tp_name);
-        return -1;
+        return NULL;
     }
 
+    s = (PyEncoderObject *)type->tp_alloc(type, 0);
+    if (s == NULL)
+        return NULL;
+
     s->markers = markers;
     s->defaultfn = defaultfn;
     s->encoder = encoder;
@@ -1902,7 +1857,7 @@
     Py_INCREF(s->item_separator);
     Py_INCREF(s->sort_keys);
     Py_INCREF(s->skipkeys);
-    return 0;
+    return (PyObject *)s;
 }
 
 static PyObject *
@@ -1938,7 +1893,7 @@
         if (s_null == NULL) {
             s_null = PyString_InternFromString("null");
         }
-        Py_INCREF(s_null);
+        Py_XINCREF(s_null);
         return s_null;
     }
     else if (obj == Py_True) {
@@ -1946,7 +1901,7 @@
         if (s_true == NULL) {
             s_true = PyString_InternFromString("true");
         }
-        Py_INCREF(s_true);
+        Py_XINCREF(s_true);
         return s_true;
     }
     else if (obj == Py_False) {
@@ -1954,7 +1909,7 @@
         if (s_false == NULL) {
             s_false = PyString_InternFromString("false");
         }
-        Py_INCREF(s_false);
+        Py_XINCREF(s_false);
         return s_false;
     }
     else {
@@ -2026,7 +1981,7 @@
             return -1;
         return _steal_list_append(rval, encoded);
     }
-    else if (PyInt_Check(obj) || PyLong_Check(obj)) {
+    else if (_PyAnyInt_Check(obj)) {
         PyObject *encoded = PyObject_Str(obj);
         if (encoded == NULL)
             return -1;
@@ -2077,8 +2032,11 @@
             return -1;
         }
 
-        if (Py_EnterRecursiveCall(" while encoding a JSON object"))
+        if (Py_EnterRecursiveCall(" while encoding a JSON object")) {
+            Py_DECREF(newobj);
+            Py_XDECREF(ident);
             return -1;
+        }
         rv = encoder_listencode_obj(s, rval, newobj, indent_level);
         Py_LeaveRecursiveCall();
 
@@ -2173,7 +2131,7 @@
             if (kstr == NULL)
                 goto bail;
         }
-        else if (PyInt_Check(key) || PyLong_Check(key)) {
+        else if (_PyAnyInt_Check(key)) {
             kstr = PyObject_Str(key);
             if (kstr == NULL)
                 goto bail;
@@ -2340,7 +2298,8 @@
 static void
 encoder_dealloc(PyObject *self)
 {
-    /* Deallocate Encoder */
+    /* bpo-31095: UnTrack is needed before calling any callbacks */
+    PyObject_GC_UnTrack(self);
     encoder_clear(self);
     Py_TYPE(self)->tp_free(self);
 }
@@ -2384,8 +2343,7 @@
 
 static
 PyTypeObject PyEncoderType = {
-    PyObject_HEAD_INIT(NULL)
-    0,                    /* tp_internal */
+    PyVarObject_HEAD_INIT(NULL, 0)
     "_json.Encoder",       /* tp_name */
     sizeof(PyEncoderObject), /* tp_basicsize */
     0,                    /* tp_itemsize */
@@ -2420,7 +2378,7 @@
     0,                    /* tp_descr_get */
     0,                    /* tp_descr_set */
     0,                    /* tp_dictoffset */
-    encoder_init,         /* tp_init */
+    0,                    /* tp_init */
     0,                    /* tp_alloc */
     encoder_new,          /* tp_new */
     0,                    /* tp_free */
@@ -2445,10 +2403,8 @@
 init_json(void)
 {
     PyObject *m;
-    PyScannerType.tp_new = PyType_GenericNew;
     if (PyType_Ready(&PyScannerType) < 0)
         return;
-    PyEncoderType.tp_new = PyType_GenericNew;
     if (PyType_Ready(&PyEncoderType) < 0)
         return;
     m = Py_InitModule3("_json", speedups_methods, module_doc);
diff --git a/Modules/_lsprof.c b/Modules/_lsprof.c
index 049c94d..945354f 100644
--- a/Modules/_lsprof.c
+++ b/Modules/_lsprof.c
@@ -807,18 +807,17 @@
 };
 
 PyDoc_STRVAR(profiler_doc, "\
-Profiler(custom_timer=None, time_unit=None, subcalls=True, builtins=True)\n\
+Profiler(timer=None, timeunit=None, subcalls=True, builtins=True)\n\
 \n\
     Builds a profiler object using the specified timer function.\n\
     The default timer is a fast built-in one based on real time.\n\
-    For custom timer functions returning integers, time_unit can\n\
+    For custom timer functions returning integers, timeunit can\n\
     be a float specifying a scale (i.e. how long each integer unit\n\
     is, in seconds).\n\
 ");
 
 statichere PyTypeObject PyProfiler_Type = {
-    PyObject_HEAD_INIT(NULL)
-    0,                                      /* ob_size */
+    PyVarObject_HEAD_INIT(NULL, 0)
     "_lsprof.Profiler",                     /* tp_name */
     sizeof(ProfilerObject),                 /* tp_basicsize */
     0,                                      /* tp_itemsize */
diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c
index 480df92..2c0daef 100644
--- a/Modules/_randommodule.c
+++ b/Modules/_randommodule.c
@@ -2,7 +2,7 @@
 
 /* ------------------------------------------------------------------
    The code in this module was based on a download from:
-      http://www.math.keio.ac.jp/~matumoto/MT2002/emt19937ar.html
+      http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html
 
    It was modified in 2002 by Raymond Hettinger as follows:
 
@@ -60,8 +60,8 @@
 
 
    Any feedback is very welcome.
-   http://www.math.keio.ac.jp/matumoto/emt.html
-   email: matumoto@math.keio.ac.jp
+   http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
+   email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)
 */
 
 /* ---------------------------------------------------------------*/
@@ -230,9 +230,15 @@
     }
     /* If the arg is an int or long, use its absolute value; else use
      * the absolute value of its hash code.
+     * Calling int.__abs__() or long.__abs__() prevents calling arg.__abs__(),
+     * which might return an invalid value. See issue #31478.
      */
-    if (PyInt_Check(arg) || PyLong_Check(arg))
-        n = PyNumber_Absolute(arg);
+    if (PyInt_Check(arg)) {
+        n = PyInt_Type.tp_as_number->nb_absolute(arg);
+    }
+    else if (PyLong_Check(arg)) {
+        n = PyLong_Type.tp_as_number->nb_absolute(arg);
+    }
     else {
         long hash = PyObject_Hash(arg);
         if (hash == -1)
@@ -341,6 +347,7 @@
     int i;
     unsigned long element;
     long index;
+    unsigned long new_state[N];
 
     if (!PyTuple_Check(state)) {
         PyErr_SetString(PyExc_TypeError,
@@ -357,7 +364,7 @@
         element = PyLong_AsUnsignedLong(PyTuple_GET_ITEM(state, i));
         if (element == (unsigned long)-1 && PyErr_Occurred())
             return NULL;
-        self->state[i] = element & 0xffffffffUL; /* Make sure we get sane state */
+        new_state[i] = element & 0xffffffffUL; /* Make sure we get sane state */
     }
 
     index = PyLong_AsLong(PyTuple_GET_ITEM(state, i));
@@ -368,6 +375,8 @@
         return NULL;
     }
     self->index = (int)index;
+    for (i = 0; i < N; i++)
+        self->state[i] = new_state[i];
 
     Py_INCREF(Py_None);
     return Py_None;
@@ -406,7 +415,7 @@
     PyObject *remobj;
     unsigned long *mt, tmp, nonzero;
 
-    if (!PyInt_Check(n) && !PyLong_Check(n)) {
+    if (!_PyAnyInt_Check(n)) {
         PyErr_Format(PyExc_TypeError, "jumpahead requires an "
                      "integer, not '%s'",
                      Py_TYPE(n)->tp_name);
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index 237d6e4..c3f39fd 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -293,7 +293,7 @@
     Py_XDECREF(self->statements);
     Py_XDECREF(self->cursors);
 
-    self->ob_type->tp_free((PyObject*)self);
+    Py_TYPE(self)->tp_free((PyObject*)self);
 }
 
 /*
@@ -675,7 +675,7 @@
         Py_DECREF(py_retval);
     }
     if (!ok) {
-        if (_enable_callback_tracebacks) {
+        if (_pysqlite_enable_callback_tracebacks) {
             PyErr_Print();
         } else {
             PyErr_Clear();
@@ -711,7 +711,7 @@
 
         if (PyErr_Occurred()) {
             *aggregate_instance = 0;
-            if (_enable_callback_tracebacks) {
+            if (_pysqlite_enable_callback_tracebacks) {
                 PyErr_Print();
             } else {
                 PyErr_Clear();
@@ -735,7 +735,7 @@
     Py_DECREF(args);
 
     if (!function_result) {
-        if (_enable_callback_tracebacks) {
+        if (_pysqlite_enable_callback_tracebacks) {
             PyErr_Print();
         } else {
             PyErr_Clear();
@@ -781,7 +781,7 @@
         Py_DECREF(function_result);
     }
     if (!ok) {
-        if (_enable_callback_tracebacks) {
+        if (_pysqlite_enable_callback_tracebacks) {
             PyErr_Print();
         } else {
             PyErr_Clear();
@@ -936,7 +936,7 @@
     ret = PyObject_CallFunction((PyObject*)user_arg, "issss", action, arg1, arg2, dbname, access_attempt_source);
 
     if (!ret) {
-        if (_enable_callback_tracebacks) {
+        if (_pysqlite_enable_callback_tracebacks) {
             PyErr_Print();
         } else {
             PyErr_Clear();
@@ -972,7 +972,7 @@
     ret = PyObject_CallFunction((PyObject*)user_arg, "");
 
     if (!ret) {
-        if (_enable_callback_tracebacks) {
+        if (_pysqlite_enable_callback_tracebacks) {
             PyErr_Print();
         } else {
             PyErr_Clear();
@@ -1106,8 +1106,8 @@
     if (self->check_same_thread) {
         if (PyThread_get_thread_ident() != self->thread_ident) {
             PyErr_Format(pysqlite_ProgrammingError,
-                        "SQLite objects created in a thread can only be used in that same thread."
-                        "The object was created in thread id %ld and this is thread id %ld",
+                        "SQLite objects created in a thread can only be used in that same thread. "
+                        "The object was created in thread id %ld and this is thread id %ld.",
                         self->thread_ident, PyThread_get_thread_ident());
             return 0;
         }
diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c
index db36004..e5cd721 100644
--- a/Modules/_sqlite/cursor.c
+++ b/Modules/_sqlite/cursor.c
@@ -78,21 +78,20 @@
     }
 
     Py_INCREF(connection);
-    self->connection = connection;
-    self->statement = NULL;
-    self->next_row = NULL;
-    self->in_weakreflist = NULL;
+    Py_XSETREF(self->connection, connection);
+    Py_CLEAR(self->statement);
+    Py_CLEAR(self->next_row);
 
-    self->row_cast_map = PyList_New(0);
+    Py_XSETREF(self->row_cast_map, PyList_New(0));
     if (!self->row_cast_map) {
         return -1;
     }
 
     Py_INCREF(Py_None);
-    self->description = Py_None;
+    Py_XSETREF(self->description, Py_None);
 
     Py_INCREF(Py_None);
-    self->lastrowid= Py_None;
+    Py_XSETREF(self->lastrowid, Py_None);
 
     self->arraysize = 1;
     self->closed = 0;
@@ -101,7 +100,7 @@
     self->rowcount = -1L;
 
     Py_INCREF(Py_None);
-    self->row_factory = Py_None;
+    Py_XSETREF(self->row_factory, Py_None);
 
     if (!pysqlite_check_thread(self->connection)) {
         return -1;
@@ -135,7 +134,7 @@
         PyObject_ClearWeakRefs((PyObject*)self);
     }
 
-    self->ob_type->tp_free((PyObject*)self);
+    Py_TYPE(self)->tp_free((PyObject*)self);
 }
 
 PyObject* _pysqlite_get_converter(PyObject* key)
@@ -148,7 +147,7 @@
         return NULL;
     }
 
-    retval = PyDict_GetItem(converters, upcase_key);
+    retval = PyDict_GetItem(_pysqlite_converters, upcase_key);
     Py_DECREF(upcase_key);
 
     return retval;
@@ -656,7 +655,7 @@
             } else {
                 if (PyErr_Occurred()) {
                     /* there was an error that occurred in a user-defined callback */
-                    if (_enable_callback_tracebacks) {
+                    if (_pysqlite_enable_callback_tracebacks) {
                         PyErr_Print();
                     } else {
                         PyErr_Clear();
@@ -1015,6 +1014,11 @@
 
 PyObject* pysqlite_cursor_close(pysqlite_Cursor* self, PyObject* args)
 {
+    if (!self->connection) {
+        PyErr_SetString(pysqlite_ProgrammingError,
+                        "Base Cursor.__init__ not called.");
+        return NULL;
+    }
     if (!pysqlite_check_thread(self->connection) || !pysqlite_check_connection(self->connection)) {
         return NULL;
     }
diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c
index 33611d9..fa45edf 100644
--- a/Modules/_sqlite/module.c
+++ b/Modules/_sqlite/module.c
@@ -39,8 +39,8 @@
     *pysqlite_InternalError, *pysqlite_OperationalError, *pysqlite_ProgrammingError,
     *pysqlite_IntegrityError, *pysqlite_DataError, *pysqlite_NotSupportedError, *pysqlite_OptimizedUnicode;
 
-PyObject* converters;
-int _enable_callback_tracebacks;
+PyObject* _pysqlite_converters;
+int _pysqlite_enable_callback_tracebacks;
 int pysqlite_BaseTypeAdapted;
 
 static PyObject* module_connect(PyObject* self, PyObject* args, PyObject*
@@ -190,7 +190,7 @@
         goto error;
     }
 
-    if (PyDict_SetItem(converters, name, callable) != 0) {
+    if (PyDict_SetItem(_pysqlite_converters, name, callable) != 0) {
         goto error;
     }
 
@@ -208,7 +208,7 @@
 
 static PyObject* enable_callback_tracebacks(PyObject* self, PyObject* args)
 {
-    if (!PyArg_ParseTuple(args, "i", &_enable_callback_tracebacks)) {
+    if (!PyArg_ParseTuple(args, "i", &_pysqlite_enable_callback_tracebacks)) {
         return NULL;
     }
 
@@ -223,12 +223,12 @@
 
 static void converters_init(PyObject* dict)
 {
-    converters = PyDict_New();
-    if (!converters) {
+    _pysqlite_converters = PyDict_New();
+    if (!_pysqlite_converters) {
         return;
     }
 
-    PyDict_SetItemString(dict, "converters", converters);
+    PyDict_SetItemString(dict, "converters", _pysqlite_converters);
 }
 
 static PyMethodDef module_methods[] = {
@@ -428,7 +428,7 @@
     /* initialize the default converters */
     converters_init(dict);
 
-    _enable_callback_tracebacks = 0;
+    _pysqlite_enable_callback_tracebacks = 0;
 
     pysqlite_BaseTypeAdapted = 0;
 
diff --git a/Modules/_sqlite/module.h b/Modules/_sqlite/module.h
index 8d17d61..322452f 100644
--- a/Modules/_sqlite/module.h
+++ b/Modules/_sqlite/module.h
@@ -40,17 +40,13 @@
 
 extern PyObject* pysqlite_OptimizedUnicode;
 
-/* the functions time.time() and time.sleep() */
-extern PyObject* time_time;
-extern PyObject* time_sleep;
-
 /* A dictionary, mapping colum types (INTEGER, VARCHAR, etc.) to converter
  * functions, that convert the SQL value to the appropriate Python value.
  * The key is uppercase.
  */
-extern PyObject* converters;
+extern PyObject* _pysqlite_converters;
 
-extern int _enable_callback_tracebacks;
+extern int _pysqlite_enable_callback_tracebacks;
 extern int pysqlite_BaseTypeAdapted;
 
 #define PARSE_DECLTYPES 1
diff --git a/Modules/_sqlite/statement.c b/Modules/_sqlite/statement.c
index 5d6263c..ec60095 100644
--- a/Modules/_sqlite/statement.c
+++ b/Modules/_sqlite/statement.c
@@ -205,7 +205,7 @@
         return 1;
     }
 
-    if (PyInt_CheckExact(obj) || PyLong_CheckExact(obj)
+    if (_PyAnyInt_CheckExact(obj)
             || PyFloat_CheckExact(obj) || PyString_CheckExact(obj)
             || PyUnicode_CheckExact(obj) || PyBuffer_Check(obj)) {
         return 0;
diff --git a/Modules/_sqlite/util.c b/Modules/_sqlite/util.c
index a24dd8c..7377225 100644
--- a/Modules/_sqlite/util.c
+++ b/Modules/_sqlite/util.c
@@ -132,7 +132,7 @@
     }
 # endif
 #endif
-    return PyInt_FromLong(value);
+    return PyInt_FromLong(Py_SAFE_DOWNCAST(value, sqlite_int64, long));
 }
 
 sqlite_int64
diff --git a/Modules/_sre.c b/Modules/_sre.c
index 8e16c1d..081a1aa 100644
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -835,7 +835,7 @@
     if (ctx->pattern[0] == SRE_OP_INFO) {
         /* optimization info block */
         /* <INFO> <1=skip> <2=flags> <3=min> ... */
-        if (ctx->pattern[3] && (end - ctx->ptr) < ctx->pattern[3]) {
+        if (ctx->pattern[3] && (Py_uintptr_t)(end - ctx->ptr) < ctx->pattern[3]) {
             TRACE(("reject (got %" PY_FORMAT_SIZE_T "d chars, "
                    "need %" PY_FORMAT_SIZE_T "d)\n",
                    (end - ctx->ptr), (Py_ssize_t) ctx->pattern[3]));
@@ -2267,6 +2267,20 @@
     if (!string)
         return NULL;
 
+    if (Py_Py3kWarningFlag &&
+        (self->code[0] != SRE_OP_INFO || self->code[3] == 0))
+    {
+        if (self->code[0] == SRE_OP_INFO && self->code[4] == 0) {
+            if (PyErr_WarnPy3k("split() requires a non-empty pattern match.",
+                               1) < 0)
+                return NULL;
+        }
+        else if (PyErr_WarnEx(PyExc_FutureWarning,
+                              "split() requires a non-empty pattern match.",
+                              1) < 0)
+            return NULL;
+    }
+
     string = state_init(&state, self, string, 0, PY_SSIZE_T_MAX);
     if (!string)
         return NULL;
@@ -2698,8 +2712,8 @@
 };
 
 statichere PyTypeObject Pattern_Type = {
-    PyObject_HEAD_INIT(NULL)
-    0, "_" SRE_MODULE ".SRE_Pattern",
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "_" SRE_MODULE ".SRE_Pattern",
     sizeof(PatternObject), sizeof(SRE_CODE),
     (destructor)pattern_dealloc, /*tp_dealloc*/
     0,                                  /* tp_print */
@@ -2868,7 +2882,7 @@
         skip = *code;                                   \
         VTRACE(("%lu (skip to %p)\n",                   \
                (unsigned long)skip, code+skip));        \
-        if (skip-adj > end-code)                        \
+        if (skip-adj > (Py_uintptr_t)(end - code))      \
             FAIL;                                       \
         code++;                                         \
     } while (0)
@@ -2901,7 +2915,7 @@
 
         case SRE_OP_CHARSET:
             offset = 32/sizeof(SRE_CODE); /* 32-byte bitmap */
-            if (offset > end-code)
+            if (offset > (Py_uintptr_t)(end - code))
                 FAIL;
             code += offset;
             break;
@@ -2909,7 +2923,7 @@
         case SRE_OP_BIGCHARSET:
             GET_ARG; /* Number of blocks */
             offset = 256/sizeof(SRE_CODE); /* 256-byte table */
-            if (offset > end-code)
+            if (offset > (Py_uintptr_t)(end - code))
                 FAIL;
             /* Make sure that each byte points to a valid block */
             for (i = 0; i < 256; i++) {
@@ -2918,7 +2932,7 @@
             }
             code += offset;
             offset = arg * 32/sizeof(SRE_CODE); /* 32-byte bitmap times arg */
-            if (offset > end-code)
+            if (offset > (Py_uintptr_t)(end - code))
                 FAIL;
             code += offset;
             break;
@@ -2981,7 +2995,7 @@
                sre_match() code is robust even if they don't, and the worst
                you can get is nonsensical match results. */
             GET_ARG;
-            if (arg > 2*groups+1) {
+            if (arg > 2 * (size_t)groups + 1) {
                 VTRACE(("arg=%d, groups=%d\n", (int)arg, (int)groups));
                 FAIL;
             }
@@ -3069,11 +3083,11 @@
                     GET_ARG; prefix_len = arg;
                     GET_ARG; /* prefix skip */
                     /* Here comes the prefix string */
-                    if (prefix_len > newcode-code)
+                    if (prefix_len > (Py_uintptr_t)(newcode - code))
                         FAIL;
                     code += prefix_len;
                     /* And here comes the overlap table */
-                    if (prefix_len > newcode-code)
+                    if (prefix_len > (Py_uintptr_t)(newcode - code))
                         FAIL;
                     /* Each overlap value should be < prefix_len */
                     for (i = 0; i < prefix_len; i++) {
@@ -3164,7 +3178,7 @@
         case SRE_OP_GROUPREF:
         case SRE_OP_GROUPREF_IGNORE:
             GET_ARG;
-            if (arg >= groups)
+            if (arg >= (size_t)groups)
                 FAIL;
             break;
 
@@ -3173,7 +3187,7 @@
                'group' is either an integer group number or a group name,
                'then' and 'else' are sub-regexes, and 'else' is optional. */
             GET_ARG;
-            if (arg >= groups)
+            if (arg >= (size_t)groups)
                 FAIL;
             GET_SKIP_ADJ(1);
             code--; /* The skip is relative to the first arg! */
@@ -3202,7 +3216,7 @@
                to allow arbitrary jumps anywhere in the code; so we just look
                for a JUMP opcode preceding our skip target.
             */
-            if (skip >= 3 && skip-3 < end-code &&
+            if (skip >= 3 && skip-3 < (Py_uintptr_t)(end - code) &&
                 code[skip-3] == SRE_OP_JUMP)
             {
                 VTRACE(("both then and else parts present\n"));
@@ -3313,7 +3327,7 @@
 {
     Py_ssize_t i;
 
-    if (PyInt_Check(index) || PyLong_Check(index))
+    if (_PyAnyInt_Check(index))
         return PyInt_AsSsize_t(index);
 
     i = -1;
@@ -3321,7 +3335,7 @@
     if (self->pattern->groupindex) {
         index = PyObject_GetItem(self->pattern->groupindex, index);
         if (index) {
-            if (PyInt_Check(index) || PyLong_Check(index))
+            if (_PyAnyInt_Check(index))
                 i = PyInt_AsSsize_t(index);
             Py_DECREF(index);
         } else
@@ -3938,8 +3952,8 @@
 };
 
 statichere PyTypeObject Scanner_Type = {
-    PyObject_HEAD_INIT(NULL)
-    0, "_" SRE_MODULE ".SRE_Scanner",
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "_" SRE_MODULE ".SRE_Scanner",
     sizeof(ScannerObject), 0,
     (destructor)scanner_dealloc, /*tp_dealloc*/
     0,				/* tp_print */
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index a927100..0e0dacd 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -52,6 +52,11 @@
 #include <sys/poll.h>
 #endif
 
+#ifndef MS_WINDOWS
+/* inet_pton */
+#include <arpa/inet.h>
+#endif
+
 /* Don't warn about deprecated functions */
 #ifdef __GNUC__
 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
@@ -97,6 +102,12 @@
 
 #if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER)
 #  define OPENSSL_VERSION_1_1 1
+#  define PY_OPENSSL_1_1_API 1
+#endif
+
+/* LibreSSL 2.7.0 provides necessary OpenSSL 1.1.0 APIs */
+#if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER >= 0x2070000fL
+#  define PY_OPENSSL_1_1_API 1
 #endif
 
 /* Openssl comes with TLSv1.1 and TLSv1.2 between 1.0.0h and 1.0.1
@@ -118,24 +129,44 @@
 #endif
 
 /* ALPN added in OpenSSL 1.0.2 */
-#if !defined(LIBRESSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x1000200fL && !defined(OPENSSL_NO_TLSEXT)
-# define HAVE_ALPN
+#ifdef TLSEXT_TYPE_application_layer_protocol_negotiation
+# define HAVE_ALPN 1
+#else
+# define HAVE_ALPN 0
+#endif
+
+/* We cannot rely on OPENSSL_NO_NEXTPROTONEG because LibreSSL 2.6.1 dropped
+ * NPN support but did not set OPENSSL_NO_NEXTPROTONEG for compatibility
+ * reasons. The check for TLSEXT_TYPE_next_proto_neg works with
+ * OpenSSL 1.0.1+ and LibreSSL.
+ * OpenSSL 1.1.1-pre1 dropped NPN but still has TLSEXT_TYPE_next_proto_neg.
+ */
+#ifdef OPENSSL_NO_NEXTPROTONEG
+# define HAVE_NPN 0
+#elif (OPENSSL_VERSION_NUMBER >= 0x10101000L) && !defined(LIBRESSL_VERSION_NUMBER)
+# define HAVE_NPN 0
+#elif defined(TLSEXT_TYPE_next_proto_neg)
+# define HAVE_NPN 1
+#else
+# define HAVE_NPN 0
 #endif
 
 #ifndef INVALID_SOCKET /* MS defines this */
 #define INVALID_SOCKET (-1)
 #endif
 
-#ifdef OPENSSL_VERSION_1_1
-/* OpenSSL 1.1.0+ */
-#ifndef OPENSSL_NO_SSL2
-#define OPENSSL_NO_SSL2
-#endif
-#else /* OpenSSL < 1.1.0 */
-#if defined(WITH_THREAD)
+/* OpenSSL 1.0.2 and LibreSSL needs extra code for locking */
+#if !defined(OPENSSL_VERSION_1_1) && defined(WITH_THREAD)
 #define HAVE_OPENSSL_CRYPTO_LOCK
 #endif
 
+#if defined(OPENSSL_VERSION_1_1) && !defined(OPENSSL_NO_SSL2)
+#define OPENSSL_NO_SSL2
+#endif
+
+#ifndef PY_OPENSSL_1_1_API
+/* OpenSSL 1.1 API shims for OpenSSL < 1.1.0 and LibreSSL < 2.7.0 */
+
 #define TLS_method SSLv23_method
 
 static int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne)
@@ -178,7 +209,7 @@
 {
     return store->param;
 }
-#endif /* OpenSSL < 1.1.0 or LibreSSL */
+#endif /* OpenSSL < 1.1.0 or LibreSSL < 2.7.0 */
 
 
 enum py_ssl_error {
@@ -280,11 +311,11 @@
 typedef struct {
     PyObject_HEAD
     SSL_CTX *ctx;
-#ifdef OPENSSL_NPN_NEGOTIATED
+#if HAVE_NPN
     unsigned char *npn_protocols;
     int npn_protocols_len;
 #endif
-#ifdef HAVE_ALPN
+#if HAVE_ALPN
     unsigned char *alpn_protocols;
     int alpn_protocols_len;
 #endif
@@ -560,7 +591,9 @@
     Py_INCREF(sslctx);
 
     /* Make sure the SSL error state is initialized */
+#ifndef OPENSSL_IS_BORINGSSL
     (void) ERR_get_state();
+#endif
     ERR_clear_error();
 
     PySSL_BEGIN_ALLOW_THREADS
@@ -575,8 +608,42 @@
     SSL_set_mode(self->ssl, mode);
 
 #if HAVE_SNI
-    if (server_hostname != NULL)
-        SSL_set_tlsext_host_name(self->ssl, server_hostname);
+    if (server_hostname != NULL) {
+/* Don't send SNI for IP addresses. We cannot simply use inet_aton() and
+ * inet_pton() here. inet_aton() may be linked weakly and inet_pton() isn't
+ * available on all platforms. Use OpenSSL's IP address parser. It's
+ * available since 1.0.2 and LibreSSL since at least 2.3.0. */
+        int send_sni = 1;
+#if OPENSSL_VERSION_NUMBER >= 0x10200000L
+        ASN1_OCTET_STRING *ip = a2i_IPADDRESS(server_hostname);
+        if (ip == NULL) {
+            send_sni = 1;
+            ERR_clear_error();
+        } else {
+            send_sni = 0;
+            ASN1_OCTET_STRING_free(ip);
+        }
+#elif defined(HAVE_INET_PTON)
+#ifdef ENABLE_IPV6
+	#define PySSL_MAX(x, y) (((x) > (y)) ? (x) : (y))
+        char packed[PySSL_MAX(sizeof(struct in_addr), sizeof(struct in6_addr))];
+#else
+        char packed[sizeof(struct in_addr)];
+#endif /* ENABLE_IPV6 */
+        if (inet_pton(AF_INET, server_hostname, packed)) {
+            send_sni = 0;
+#ifdef ENABLE_IPV6
+        } else if(inet_pton(AF_INET6, server_hostname, packed)) {
+            send_sni = 0;
+#endif /* ENABLE_IPV6 */
+        } else {
+            send_sni = 1;
+        }
+#endif /* HAVE_INET_PTON */
+        if (send_sni) {
+            SSL_set_tlsext_host_name(self->ssl, server_hostname);
+        }
+    }
 #endif
 
     /* If the socket is in non-blocking mode or timeout mode, set the BIO
@@ -676,49 +743,67 @@
 }
 
 static PyObject *
-_create_tuple_for_attribute (ASN1_OBJECT *name, ASN1_STRING *value) {
-
-    char namebuf[X509_NAME_MAXLEN];
+_asn1obj2py(const ASN1_OBJECT *name, int no_name)
+{
+    char buf[X509_NAME_MAXLEN];
+    char *namebuf = buf;
     int buflen;
-    PyObject *name_obj;
-    PyObject *value_obj;
-    PyObject *attr;
-    unsigned char *valuebuf = NULL;
+    PyObject *name_obj = NULL;
 
-    buflen = OBJ_obj2txt(namebuf, sizeof(namebuf), name, 0);
+    buflen = OBJ_obj2txt(namebuf, X509_NAME_MAXLEN, name, no_name);
     if (buflen < 0) {
         _setSSLError(NULL, 0, __FILE__, __LINE__);
-        goto fail;
+        return NULL;
     }
-    name_obj = PyString_FromStringAndSize(namebuf, buflen);
-    if (name_obj == NULL)
-        goto fail;
+    /* initial buffer is too small for oid + terminating null byte */
+    if (buflen > X509_NAME_MAXLEN - 1) {
+        /* make OBJ_obj2txt() calculate the required buflen */
+        buflen = OBJ_obj2txt(NULL, 0, name, no_name);
+        /* allocate len + 1 for terminating NULL byte */
+        namebuf = PyMem_Malloc(buflen + 1);
+        if (namebuf == NULL) {
+            PyErr_NoMemory();
+            return NULL;
+        }
+        buflen = OBJ_obj2txt(namebuf, buflen + 1, name, no_name);
+        if (buflen < 0) {
+            _setSSLError(NULL, 0, __FILE__, __LINE__);
+            goto done;
+        }
+    }
+    if (!buflen && no_name) {
+        Py_INCREF(Py_None);
+        name_obj = Py_None;
+    }
+    else {
+        name_obj = PyString_FromStringAndSize(namebuf, buflen);
+    }
+
+  done:
+    if (buf != namebuf) {
+        PyMem_Free(namebuf);
+    }
+    return name_obj;
+}
+
+static PyObject *
+_create_tuple_for_attribute(ASN1_OBJECT *name, ASN1_STRING *value)
+{
+    Py_ssize_t buflen;
+    unsigned char *valuebuf = NULL;
+    PyObject *attr, *value_obj;
 
     buflen = ASN1_STRING_to_UTF8(&valuebuf, value);
     if (buflen < 0) {
         _setSSLError(NULL, 0, __FILE__, __LINE__);
-        Py_DECREF(name_obj);
-        goto fail;
+        return NULL;
     }
     value_obj = PyUnicode_DecodeUTF8((char *) valuebuf,
                                      buflen, "strict");
-    OPENSSL_free(valuebuf);
-    if (value_obj == NULL) {
-        Py_DECREF(name_obj);
-        goto fail;
-    }
-    attr = PyTuple_New(2);
-    if (attr == NULL) {
-        Py_DECREF(name_obj);
-        Py_DECREF(value_obj);
-        goto fail;
-    }
-    PyTuple_SET_ITEM(attr, 0, name_obj);
-    PyTuple_SET_ITEM(attr, 1, value_obj);
-    return attr;
 
-  fail:
-    return NULL;
+    attr = Py_BuildValue("NN", _asn1obj2py(name, 0), value_obj);
+    OPENSSL_free(valuebuf);
+    return attr;
 }
 
 static PyObject *
@@ -1125,10 +1210,6 @@
     int i, j;
     PyObject *lst, *res = NULL;
 
-#if OPENSSL_VERSION_NUMBER >= 0x10001000L
-    /* Calls x509v3_cache_extensions and sets up crldp */
-    X509_check_ca(certificate);
-#endif
     dps = X509_get_ext_d2i(certificate, NID_crl_distribution_points, NULL, NULL);
 
     if (dps == NULL)
@@ -1173,9 +1254,7 @@
 
   done:
     Py_XDECREF(lst);
-#if OPENSSL_VERSION_NUMBER < 0x10001000L
-    sk_DIST_POINT_free(dps);
-#endif
+    CRL_DIST_POINTS_free(dps);
     return res;
 }
 
@@ -1508,7 +1587,7 @@
     return PyUnicode_FromString(version);
 }
 
-#ifdef OPENSSL_NPN_NEGOTIATED
+#if defined(OPENSSL_NPN_NEGOTIATED) && !defined(OPENSSL_NO_NEXTPROTONEG)
 static PyObject *PySSL_selected_npn_protocol(PySSLSocket *self) {
     const unsigned char *out;
     unsigned int outlen;
@@ -1522,7 +1601,7 @@
 }
 #endif
 
-#ifdef HAVE_ALPN
+#if HAVE_ALPN
 static PyObject *PySSL_selected_alpn_protocol(PySSLSocket *self) {
     const unsigned char *out;
     unsigned int outlen;
@@ -2039,7 +2118,7 @@
 #ifdef OPENSSL_NPN_NEGOTIATED
     {"selected_npn_protocol", (PyCFunction)PySSL_selected_npn_protocol, METH_NOARGS},
 #endif
-#ifdef HAVE_ALPN
+#if HAVE_ALPN
     {"selected_alpn_protocol", (PyCFunction)PySSL_selected_alpn_protocol, METH_NOARGS},
 #endif
     {"compression", (PyCFunction)PySSL_compression, METH_NOARGS},
@@ -2134,8 +2213,7 @@
         return NULL;
     }
     if (ctx == NULL) {
-        PyErr_SetString(PySSLErrorObject,
-                        "failed to allocate SSL context");
+        _setSSLError(NULL, 0, __FILE__, __LINE__);
         return NULL;
     }
 
@@ -2146,10 +2224,10 @@
         return NULL;
     }
     self->ctx = ctx;
-#ifdef OPENSSL_NPN_NEGOTIATED
+#if HAVE_NPN
     self->npn_protocols = NULL;
 #endif
-#ifdef HAVE_ALPN
+#if HAVE_ALPN
     self->alpn_protocols = NULL;
 #endif
 #ifndef OPENSSL_NO_TLSEXT
@@ -2166,12 +2244,12 @@
         options |= SSL_OP_NO_SSLv3;
     SSL_CTX_set_options(self->ctx, options);
 
-#ifndef OPENSSL_NO_ECDH
+#if !defined(OPENSSL_NO_ECDH) && !defined(OPENSSL_VERSION_1_1)
     /* Allow automatic ECDH curve selection (on OpenSSL 1.0.2+), or use
        prime256v1 by default.  This is Apache mod_ssl's initialization
        policy, so we should be safe. OpenSSL 1.1 has it enabled by default.
      */
-#if defined(SSL_CTX_set_ecdh_auto) && !defined(OPENSSL_VERSION_1_1)
+#if defined(SSL_CTX_set_ecdh_auto)
     SSL_CTX_set_ecdh_auto(self->ctx, 1);
 #else
     {
@@ -2220,12 +2298,14 @@
 static void
 context_dealloc(PySSLContext *self)
 {
+    /* bpo-31095: UnTrack is needed before calling any callbacks */
+    PyObject_GC_UnTrack(self);
     context_clear(self);
     SSL_CTX_free(self->ctx);
-#ifdef OPENSSL_NPN_NEGOTIATED
+#if HAVE_NPN
     PyMem_FREE(self->npn_protocols);
 #endif
-#ifdef HAVE_ALPN
+#if HAVE_ALPN
     PyMem_FREE(self->alpn_protocols);
 #endif
     Py_TYPE(self)->tp_free(self);
@@ -2252,7 +2332,7 @@
     Py_RETURN_NONE;
 }
 
-#ifdef OPENSSL_NPN_NEGOTIATED
+#if HAVE_NPN || HAVE_ALPN
 static int
 do_protocol_selection(int alpn, unsigned char **out, unsigned char *outlen,
                       const unsigned char *server_protocols, unsigned int server_protocols_len,
@@ -2276,7 +2356,9 @@
 
     return SSL_TLSEXT_ERR_OK;
 }
+#endif
 
+#if HAVE_NPN
 /* this callback gets passed to SSL_CTX_set_next_protos_advertise_cb */
 static int
 _advertiseNPN_cb(SSL *s,
@@ -2311,7 +2393,7 @@
 static PyObject *
 _set_npn_protocols(PySSLContext *self, PyObject *args)
 {
-#ifdef OPENSSL_NPN_NEGOTIATED
+#if HAVE_NPN
     Py_buffer protos;
 
     if (!PyArg_ParseTuple(args, "s*:set_npn_protocols", &protos))
@@ -2347,7 +2429,7 @@
 #endif
 }
 
-#ifdef HAVE_ALPN
+#if HAVE_ALPN
 static int
 _selectALPN_cb(SSL *s,
               const unsigned char **out, unsigned char *outlen,
@@ -2364,7 +2446,7 @@
 static PyObject *
 _set_alpn_protocols(PySSLContext *self, PyObject *args)
 {
-#ifdef HAVE_ALPN
+#if HAVE_ALPN
     Py_buffer protos;
 
     if (!PyArg_ParseTuple(args, "s*:set_npn_protocols", &protos))
@@ -2968,13 +3050,25 @@
 {
     BIO *bio;
     DH *dh;
-    char *path = PyBytes_AsString(filepath);
-    if (!path) {
-        return NULL;
+    PyObject *filepath_bytes = NULL;
+
+    if (PyString_Check(filepath)) {
+        Py_INCREF(filepath);
+        filepath_bytes = filepath;
+    } else {
+        PyObject *u = PyUnicode_FromObject(filepath);
+        if (!u)
+            return NULL;
+        filepath_bytes = PyUnicode_AsEncodedString(
+            u, Py_FileSystemDefaultEncoding, NULL);
+        Py_DECREF(u);
+        if (!filepath_bytes)
+            return NULL;
     }
 
-    bio = BIO_new_file(path, "r");
+    bio = BIO_new_file(PyBytes_AS_STRING(filepath_bytes), "r");
     if (bio == NULL) {
+        Py_DECREF(filepath_bytes);
         ERR_clear_error();
         PyErr_SetFromErrnoWithFilenameObject(PyExc_IOError, filepath);
         return NULL;
@@ -2983,6 +3077,7 @@
     PySSL_BEGIN_ALLOW_THREADS
     dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
     BIO_free(bio);
+    Py_DECREF(filepath_bytes);
     PySSL_END_ALLOW_THREADS
     if (dh == NULL) {
         if (errno != 0) {
@@ -3578,8 +3673,6 @@
 {
     int nid;
     const char *ln, *sn;
-    char buf[100];
-    Py_ssize_t buflen;
 
     nid = OBJ_obj2nid(obj);
     if (nid == NID_undef) {
@@ -3588,16 +3681,7 @@
     }
     sn = OBJ_nid2sn(nid);
     ln = OBJ_nid2ln(nid);
-    buflen = OBJ_obj2txt(buf, sizeof(buf), obj, 1);
-    if (buflen < 0) {
-        _setSSLError(NULL, 0, __FILE__, __LINE__);
-        return NULL;
-    }
-    if (buflen) {
-        return Py_BuildValue("isss#", nid, sn, ln, buf, buflen);
-    } else {
-        return Py_BuildValue("issO", nid, sn, ln, Py_None);
-    }
+    return Py_BuildValue("issN", nid, sn, ln, _asn1obj2py(obj, 1));
 }
 
 PyDoc_STRVAR(PySSL_txt2obj_doc,
@@ -4086,9 +4170,14 @@
     if (PySocketModule_ImportModuleAndAPI())
         return;
 
+#ifndef OPENSSL_VERSION_1_1
+    /* Load all algorithms and initialize cpuid */
+    OPENSSL_add_all_algorithms_noconf();
     /* Init OpenSSL */
     SSL_load_error_strings();
     SSL_library_init();
+#endif
+
 #ifdef WITH_THREAD
 #ifdef HAVE_OPENSSL_CRYPTO_LOCK
     /* note that this will start threading if not already started */
@@ -4100,7 +4189,6 @@
     _ssl_locks_count++;
 #endif
 #endif  /* WITH_THREAD */
-    OpenSSL_add_all_algorithms();
 
     /* Add symbols to module dict */
     PySSLErrorObject = PyErr_NewExceptionWithDoc(
@@ -4274,6 +4362,11 @@
     PyModule_AddIntConstant(m, "OP_NO_TLSv1_1", SSL_OP_NO_TLSv1_1);
     PyModule_AddIntConstant(m, "OP_NO_TLSv1_2", SSL_OP_NO_TLSv1_2);
 #endif
+#ifdef SSL_OP_NO_TLSv1_3
+    PyModule_AddIntConstant(m, "OP_NO_TLSv1_3", SSL_OP_NO_TLSv1_3);
+#else
+    PyModule_AddIntConstant(m, "OP_NO_TLSv1_3", 0);
+#endif
     PyModule_AddIntConstant(m, "OP_CIPHER_SERVER_PREFERENCE",
                             SSL_OP_CIPHER_SERVER_PREFERENCE);
     PyModule_AddIntConstant(m, "OP_SINGLE_DH_USE", SSL_OP_SINGLE_DH_USE);
@@ -4309,7 +4402,7 @@
     Py_INCREF(r);
     PyModule_AddObject(m, "HAS_ECDH", r);
 
-#ifdef OPENSSL_NPN_NEGOTIATED
+#if HAVE_NPN
     r = Py_True;
 #else
     r = Py_False;
@@ -4317,7 +4410,7 @@
     Py_INCREF(r);
     PyModule_AddObject(m, "HAS_NPN", r);
 
-#ifdef HAVE_ALPN
+#if HAVE_ALPN
     r = Py_True;
 #else
     r = Py_False;
@@ -4325,6 +4418,14 @@
     Py_INCREF(r);
     PyModule_AddObject(m, "HAS_ALPN", r);
 
+#if defined(TLS1_3_VERSION) && !defined(OPENSSL_NO_TLS1_3)
+    r = Py_True;
+#else
+    r = Py_False;
+#endif
+    Py_INCREF(r);
+    PyModule_AddObject(m, "HAS_TLSv1_3", r);
+
     /* Mappings for error codes */
     err_codes_to_names = PyDict_New();
     err_names_to_codes = PyDict_New();
diff --git a/Modules/_struct.c b/Modules/_struct.c
index 50fb138..8b97672 100644
--- a/Modules/_struct.c
+++ b/Modules/_struct.c
@@ -110,7 +110,7 @@
     PyObject *r, *w;
     int converted = 0;
     assert(v != NULL);
-    if (!PyInt_Check(v) && !PyLong_Check(v)) {
+    if (!_PyAnyInt_Check(v)) {
         PyNumberMethods *m;
         /* Not an integer; first try to use __index__ to
            convert to an integer.  If the __index__ method
@@ -150,7 +150,7 @@
             v = m->nb_int(v);
             if (v == NULL)
                 return NULL;
-            if (!PyInt_Check(v) && !PyLong_Check(v)) {
+            if (!_PyAnyInt_Check(v)) {
                 PyErr_SetString(PyExc_TypeError,
                                 "__int__ method returned "
                                 "non-integer");
@@ -169,7 +169,7 @@
         /* Ensure we own a reference to v. */
         Py_INCREF(v);
 
-    assert(PyInt_Check(v) || PyLong_Check(v));
+    assert(_PyAnyInt_Check(v));
     if (PyInt_Check(v)) {
         r = PyLong_FromLong(PyInt_AS_LONG(v));
         Py_DECREF(v);
@@ -506,7 +506,7 @@
                         "ubyte format requires 0 <= number <= 255");
         return -1;
     }
-    *p = (char)x;
+    *(unsigned char *)p = (unsigned char)x;
     return 0;
 }
 
@@ -814,6 +814,7 @@
 {
     long x;
     Py_ssize_t i;
+    unsigned char *q = (unsigned char *)p;
     if (get_long(v, &x) < 0)
         return -1;
     i = f->size;
@@ -826,7 +827,7 @@
 #endif
     }
     do {
-        p[--i] = (char)x;
+        q[--i] = (unsigned char)(x & 0xffL);
         x >>= 8;
     } while (i > 0);
     return 0;
@@ -837,6 +838,7 @@
 {
     unsigned long x;
     Py_ssize_t i;
+    unsigned char *q = (unsigned char *)p;
     if (get_ulong(v, &x) < 0)
         return -1;
     i = f->size;
@@ -847,7 +849,7 @@
             return _range_error(f, 1);
     }
     do {
-        p[--i] = (char)x;
+        q[--i] = (unsigned char)(x & 0xffUL);
         x >>= 8;
     } while (i > 0);
     return 0;
@@ -1034,6 +1036,7 @@
 {
     long x;
     Py_ssize_t i;
+    unsigned char *q = (unsigned char *)p;
     if (get_long(v, &x) < 0)
         return -1;
     i = f->size;
@@ -1046,7 +1049,7 @@
 #endif
     }
     do {
-        *p++ = (char)x;
+        *q++ = (unsigned char)(x & 0xffL);
         x >>= 8;
     } while (--i > 0);
     return 0;
@@ -1057,6 +1060,7 @@
 {
     unsigned long x;
     Py_ssize_t i;
+    unsigned char *q = (unsigned char *)p;
     if (get_ulong(v, &x) < 0)
         return -1;
     i = f->size;
@@ -1067,7 +1071,7 @@
             return _range_error(f, 1);
     }
     do {
-        *p++ = (char)x;
+        *q++ = (unsigned char)(x & 0xffUL);
         x >>= 8;
     } while (--i > 0);
     return 0;
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index f306b1c..67488e7 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -10,6 +10,14 @@
 #include "structmember.h"
 #include "datetime.h"
 #include "marshal.h"
+#include <signal.h>
+#ifdef MS_WINDOWS
+#  include <crtdbg.h>
+#endif
+
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>           /* For W_STOPCODE */
+#endif
 
 #ifdef WITH_THREAD
 #include "pythread.h"
@@ -179,8 +187,7 @@
  *   PyType_Ready if it hasn't already been called
  */
 static PyTypeObject _HashInheritanceTester_Type = {
-    PyObject_HEAD_INIT(NULL)
-    0,                          /* Number of items for varobject */
+    PyVarObject_HEAD_INIT(NULL, 0)
     "hashinheritancetester",            /* Name of this type */
     sizeof(PyObject),           /* Basic object size */
     0,                          /* Item size for varobject */
@@ -307,8 +314,7 @@
 };
 
 static PyTypeObject _MemoryViewTester_Type = {
-    PyObject_HEAD_INIT(NULL)
-    0,                          /* Number of items for varobject */
+    PyVarObject_HEAD_INIT(NULL, 0)
     "memoryviewtester",         /* Name of this type */
     sizeof(PyObject),           /* Basic object size */
     0,                          /* Item size for varobject */
@@ -903,8 +909,9 @@
     PyTuple_SET_ITEM(tuple, 0, num);
 
     value = -1;
-    if (PyArg_ParseTuple(tuple, "L:test_L_code", &value) < 0)
+    if (!PyArg_ParseTuple(tuple, "L:test_L_code", &value)) {
         return NULL;
+    }
     if (value != 42)
         return raiseTestError("test_L_code",
             "L code returned wrong value for long 42");
@@ -917,8 +924,9 @@
     PyTuple_SET_ITEM(tuple, 0, num);
 
     value = -1;
-    if (PyArg_ParseTuple(tuple, "L:test_L_code", &value) < 0)
+    if (!PyArg_ParseTuple(tuple, "L:test_L_code", &value)) {
         return NULL;
+    }
     if (value != 42)
         return raiseTestError("test_L_code",
             "L code returned wrong value for int 42");
@@ -1199,8 +1207,9 @@
     PyTuple_SET_ITEM(tuple, 0, num);
 
     value = 0;
-    if (PyArg_ParseTuple(tuple, "k:test_k_code", &value) < 0)
+    if (!PyArg_ParseTuple(tuple, "k:test_k_code", &value)) {
         return NULL;
+    }
     if (value != ULONG_MAX)
         return raiseTestError("test_k_code",
             "k code returned wrong value for long 0xFFF...FFF");
@@ -1218,8 +1227,9 @@
     PyTuple_SET_ITEM(tuple, 0, num);
 
     value = 0;
-    if (PyArg_ParseTuple(tuple, "k:test_k_code", &value) < 0)
+    if (!PyArg_ParseTuple(tuple, "k:test_k_code", &value)) {
         return NULL;
+    }
     if (value != (unsigned long)-0x42)
         return raiseTestError("test_k_code",
             "k code returned wrong value for long -0xFFF..000042");
@@ -1549,6 +1559,89 @@
     return result;
 }
 
+static PyObject *
+get_indices(PyObject *self, PyObject *args)
+{
+    int result;
+    PySliceObject *slice;
+    Py_ssize_t length, start, stop, step;
+
+    if (!PyArg_ParseTuple(args, "On", &slice, &length))
+        return NULL;
+
+    result = PySlice_GetIndices(slice, length, &start, &stop, &step);
+
+    if (PyErr_Occurred()) {
+        assert(result == -1);
+        return NULL;
+    }
+
+    if (result == -1) {
+        Py_RETURN_NONE;
+    }
+    return Py_BuildValue("innn", result, start, stop, step);
+}
+
+static PyObject *
+parse_tuple_and_keywords(PyObject *self, PyObject *args)
+{
+    PyObject *sub_args;
+    PyObject *sub_kwargs;
+    const char *sub_format;
+    PyObject *sub_keywords;
+
+    Py_ssize_t i, size;
+    char *keywords[8 + 1]; /* space for NULL at end */
+    PyObject *o;
+
+    int result;
+    PyObject *return_value = NULL;
+
+    double buffers[8][4]; /* double ensures alignment where necessary */
+
+    if (!PyArg_ParseTuple(args, "OOsO:parse_tuple_and_keywords",
+        &sub_args, &sub_kwargs,
+        &sub_format, &sub_keywords))
+        return NULL;
+
+    if (!(PyList_CheckExact(sub_keywords) || PyTuple_CheckExact(sub_keywords))) {
+        PyErr_SetString(PyExc_ValueError,
+            "parse_tuple_and_keywords: sub_keywords must be either list or tuple");
+        return NULL;
+    }
+
+    memset(buffers, 0, sizeof(buffers));
+    memset(keywords, 0, sizeof(keywords));
+
+    size = PySequence_Fast_GET_SIZE(sub_keywords);
+    if (size > 8) {
+        PyErr_SetString(PyExc_ValueError,
+            "parse_tuple_and_keywords: too many keywords in sub_keywords");
+        goto exit;
+    }
+
+    for (i = 0; i < size; i++) {
+        o = PySequence_Fast_GET_ITEM(sub_keywords, i);
+        keywords[i] = PyString_AsString(o);
+        if (keywords[i] == NULL) {
+            goto exit;
+        }
+    }
+
+    result = PyArg_ParseTupleAndKeywords(sub_args, sub_kwargs,
+        sub_format, keywords,
+        buffers + 0, buffers + 1, buffers + 2, buffers + 3,
+        buffers + 4, buffers + 5, buffers + 6, buffers + 7);
+
+    if (result) {
+        return_value = Py_None;
+        Py_INCREF(Py_None);
+    }
+
+exit:
+    return return_value;
+}
+
 #ifdef Py_USING_UNICODE
 
 static volatile int x;
@@ -1579,14 +1672,16 @@
     PyTuple_SET_ITEM(tuple, 0, obj);
 
     value = 0;
-    if (PyArg_ParseTuple(tuple, "u:test_u_code", &value) < 0)
+    if (!PyArg_ParseTuple(tuple, "u:test_u_code", &value)) {
         return NULL;
+    }
     if (value != PyUnicode_AS_UNICODE(obj))
         return raiseTestError("test_u_code",
             "u code returned wrong value for u'test'");
     value = 0;
-    if (PyArg_ParseTuple(tuple, "u#:test_u_code", &value, &len) < 0)
+    if (!PyArg_ParseTuple(tuple, "u#:test_u_code", &value, &len)) {
         return NULL;
+    }
     if (value != PyUnicode_AS_UNICODE(obj) ||
         len != PyUnicode_GET_SIZE(obj))
         return raiseTestError("test_u_code",
@@ -1684,8 +1779,9 @@
     tuple = PyTuple_New(0);
     if (!tuple)
         return NULL;
-    if ((result = PyArg_ParseTuple(tuple, "|:test_empty_argparse")) < 0)
+    if (!(result = PyArg_ParseTuple(tuple, "|:test_empty_argparse"))) {
         goto done;
+    }
     dict = PyDict_New();
     if (!dict)
         goto done;
@@ -1693,8 +1789,9 @@
   done:
     Py_DECREF(tuple);
     Py_XDECREF(dict);
-    if (result < 0)
+    if (!result) {
         return NULL;
+    }
     else {
         Py_RETURN_NONE;
     }
@@ -1949,7 +2046,8 @@
 /* The following requests n callbacks to _pending_callback.  It can be
  * run from any python thread.
  */
-PyObject *pending_threadfunc(PyObject *self, PyObject *arg)
+static PyObject *
+pending_threadfunc(PyObject *self, PyObject *arg)
 {
     PyObject *callable;
     int r;
@@ -2481,6 +2579,92 @@
     return Py_BuildValue("Nl", obj, pos);
 }
 
+static PyObject*
+test_raise_signal(PyObject* self, PyObject *args)
+{
+    int signum, err;
+
+    if (!PyArg_ParseTuple(args, "i:raise_signal", &signum)) {
+        return NULL;
+    }
+
+    err = raise(signum);
+    if (err)
+        return PyErr_SetFromErrno(PyExc_OSError);
+
+    if (PyErr_CheckSignals() < 0)
+        return NULL;
+
+    Py_RETURN_NONE;
+}
+
+
+#ifdef MS_WINDOWS
+static PyObject*
+msvcrt_CrtSetReportMode(PyObject* self, PyObject *args)
+{
+    int type, mode;
+    int res;
+
+    if (!PyArg_ParseTuple(args, "ii:CrtSetReportMode", &type, &mode)) {
+        return NULL;
+    }
+
+    res = _CrtSetReportMode(type, mode);
+    if (res == -1) {
+        PyErr_SetFromErrno(PyExc_OSError);
+        return NULL;
+    }
+    return PyInt_FromLong(res);
+}
+
+
+static PyObject*
+msvcrt_CrtSetReportFile(PyObject* self, PyObject *args)
+{
+    int type, file;
+    long res;
+
+    if (!PyArg_ParseTuple(args, "ii:CrtSetReportFile", &type, &file)) {
+        return NULL;
+    }
+
+    res = (long)_CrtSetReportFile(type, (_HFILE)file);
+
+    return PyInt_FromLong(res);
+}
+#endif
+
+
+#ifdef W_STOPCODE
+static PyObject*
+py_w_stopcode(PyObject *self, PyObject *args)
+{
+    int sig, status;
+    if (!PyArg_ParseTuple(args, "i", &sig)) {
+        return NULL;
+    }
+    status = W_STOPCODE(sig);
+    return PyLong_FromLong(status);
+}
+#endif
+
+
+/* Read memory from NULL (address 0) to raise a SIGSEGV or SIGBUS signal
+   depending on the platform. This function is used by
+   test.support._crash_python() to "crash" Python. */
+static PyObject *
+read_null(PyObject *self, PyObject *args)
+{
+    volatile int *x;
+    volatile int y;
+
+    x = NULL;
+    y = *x;
+    return PyLong_FromLong(y);
+
+}
+
 
 static PyMethodDef TestMethods[] = {
     {"raise_exception",         raise_exception,                 METH_VARARGS},
@@ -2503,6 +2687,8 @@
 #ifdef Py_USING_UNICODE
     {"test_empty_argparse", (PyCFunction)test_empty_argparse,METH_NOARGS},
 #endif
+    {"get_indices", get_indices, METH_VARARGS},
+    {"parse_tuple_and_keywords", parse_tuple_and_keywords, METH_VARARGS},
     {"test_null_strings",       (PyCFunction)test_null_strings,  METH_NOARGS},
     {"test_string_from_format", (PyCFunction)test_string_from_format, METH_NOARGS},
     {"test_with_docstring", (PyCFunction)test_with_docstring, METH_NOARGS,
@@ -2593,6 +2779,15 @@
         pymarshal_read_last_object_from_file, METH_VARARGS},
     {"pymarshal_read_object_from_file",
         pymarshal_read_object_from_file, METH_VARARGS},
+    {"raise_signal", (PyCFunction)test_raise_signal, METH_VARARGS},
+#ifdef MS_WINDOWS
+    {"CrtSetReportMode", (PyCFunction)msvcrt_CrtSetReportMode, METH_VARARGS},
+    {"CrtSetReportFile", (PyCFunction)msvcrt_CrtSetReportFile, METH_VARARGS},
+#endif
+#ifdef W_STOPCODE
+    {"W_STOPCODE", py_w_stopcode, METH_VARARGS},
+#endif
+    {"_read_null", (PyCFunction)read_null, METH_NOARGS},
     {NULL, NULL} /* sentinel */
 };
 
@@ -2789,6 +2984,14 @@
     PyModule_AddObject(m, "PY_SSIZE_T_MIN", PyInt_FromSsize_t(PY_SSIZE_T_MIN));
     PyModule_AddObject(m, "SIZEOF_PYGC_HEAD", PyInt_FromSsize_t(sizeof(PyGC_Head)));
 
+#ifdef MS_WINDOWS
+    PyModule_AddIntConstant(m, "CRT_WARN", _CRT_WARN);
+    PyModule_AddIntConstant(m, "CRT_ERROR", _CRT_ERROR);
+    PyModule_AddIntConstant(m, "CRT_ASSERT", _CRT_ASSERT);
+    PyModule_AddIntConstant(m, "CRTDBG_MODE_FILE", _CRTDBG_MODE_FILE);
+    PyModule_AddIntConstant(m, "CRTDBG_FILE_STDERR", (int)_CRTDBG_FILE_STDERR);
+#endif
+
     TestError = PyErr_NewException("_testcapi.error", NULL, NULL);
     Py_INCREF(TestError);
     PyModule_AddObject(m, "error", TestError);
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index 46cc64d..c71ffd0 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -2107,7 +2107,7 @@
 
     if (PyTuple_Size(args) == 1) {
         PyObject* o = PyTuple_GetItem(args, 0);
-        if (PyInt_Check(o) || PyLong_Check(o)) {
+        if (_PyAnyInt_Check(o)) {
             Py_INCREF(o);
             return o;
         }
@@ -2131,8 +2131,12 @@
     result = fromWideIntObj(self, value);
 #endif
     Tcl_DecrRefCount(value);
-    if (result != NULL)
-        return PyNumber_Int(result);
+    if (result != NULL) {
+        PyObject *resint = PyNumber_Int(result);
+        Py_DECREF(result);
+        return resint;
+    }
+
     if (PyErr_Occurred())
         return NULL;
 #else
@@ -2328,7 +2332,11 @@
     if (!PyArg_ParseTuple(args, "et:splitlist", "utf-8", &list))
         return NULL;
 
-    CHECK_STRING_LENGTH(list);
+    if (strlen(list) >= INT_MAX) {
+        PyErr_SetString(PyExc_OverflowError, "string is too long");
+        PyMem_Free(list);
+        return NULL;
+    }
     if (Tcl_SplitList(Tkapp_Interp(self), list,
                       &argc, &argv) == TCL_ERROR)  {
         PyMem_Free(list);
@@ -2390,7 +2398,11 @@
 
     if (!PyArg_ParseTuple(args, "et:split", "utf-8", &list))
         return NULL;
-    CHECK_STRING_LENGTH(list);
+    if (strlen(list) >= INT_MAX) {
+        PyErr_SetString(PyExc_OverflowError, "string is too long");
+        PyMem_Free(list);
+        return NULL;
+    }
     v = Split(list);
     PyMem_Free(list);
     return v;
diff --git a/Modules/_weakref.c b/Modules/_weakref.c
index 3880067..46e0063 100644
--- a/Modules/_weakref.c
+++ b/Modules/_weakref.c
@@ -5,6 +5,43 @@
         ((PyWeakReference **) PyObject_GET_WEAKREFS_LISTPTR(o))
 
 
+static int
+is_dead_weakref(PyObject *value)
+{
+    if (!PyWeakref_Check(value)) {
+        PyErr_SetString(PyExc_TypeError, "not a weakref");
+        return -1;
+    }
+    return PyWeakref_GET_OBJECT(value) == Py_None;
+}
+
+PyDoc_STRVAR(remove_dead_weakref__doc__,
+"_remove_dead_weakref(dict, key) -- atomically remove key from dict\n"
+"if it points to a dead weakref.");
+
+static PyObject *
+remove_dead_weakref(PyObject *self, PyObject *args)
+{
+    PyObject *dct, *key;
+
+    if (!PyArg_ParseTuple(args, "O!O:_remove_dead_weakref",
+                          &PyDict_Type, &dct, &key)) {
+        return NULL;
+    }
+    if (_PyDict_DelItemIf(dct, key, is_dead_weakref) < 0) {
+        if (PyErr_ExceptionMatches(PyExc_KeyError))
+            /* This function is meant to allow safe weak-value dicts
+               with GC in another thread (see issue #28427), so it's
+               ok if the key doesn't exist anymore.
+               */
+            PyErr_Clear();
+        else
+            return NULL;
+    }
+    Py_RETURN_NONE;
+}
+
+
 PyDoc_STRVAR(weakref_getweakrefcount__doc__,
 "getweakrefcount(object) -- return the number of weak references\n"
 "to 'object'.");
@@ -84,6 +121,8 @@
      weakref_getweakrefs__doc__},
     {"proxy",           weakref_proxy,                  METH_VARARGS,
      weakref_proxy__doc__},
+    {"_remove_dead_weakref", remove_dead_weakref,       METH_VARARGS,
+     remove_dead_weakref__doc__},
     {NULL, NULL, 0, NULL}
 };
 
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 9819141..5bd3a42 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -1292,9 +1292,9 @@
         PyErr_SetString(PyExc_TypeError, "arg must be open file");
         return NULL;
     }
-    if (self->ob_size > 0) {
+    if (Py_SIZE(self) > 0) {
         if (fwrite(self->ob_item, self->ob_descr->itemsize,
-                   self->ob_size, fp) != (size_t)self->ob_size) {
+                   Py_SIZE(self), fp) != (size_t)Py_SIZE(self)) {
             PyErr_SetFromErrno(PyExc_IOError);
             clearerr(fp);
             return NULL;
@@ -1348,7 +1348,7 @@
             if ((*self->ob_descr->setitem)(self,
                             Py_SIZE(self) - n + i, v) != 0) {
                 Py_SIZE(self) -= n;
-                if (itemsize && (self->ob_size > PY_SSIZE_T_MAX / itemsize)) {
+                if (itemsize && (Py_SIZE(self) > PY_SSIZE_T_MAX / itemsize)) {
                     return PyErr_NoMemory();
                 }
                 PyMem_RESIZE(item, char,
@@ -1444,7 +1444,7 @@
 static PyObject *
 array_tostring(arrayobject *self, PyObject *unused)
 {
-    if (self->ob_size <= PY_SSIZE_T_MAX / self->ob_descr->itemsize) {
+    if (Py_SIZE(self) <= PY_SSIZE_T_MAX / self->ob_descr->itemsize) {
         return PyString_FromStringAndSize(self->ob_item,
                             Py_SIZE(self) * self->ob_descr->itemsize);
     } else {
@@ -1701,10 +1701,11 @@
         arrayobject* ar;
         int itemsize = self->ob_descr->itemsize;
 
-        if (PySlice_GetIndicesEx((PySliceObject*)item, Py_SIZE(self),
-                         &start, &stop, &step, &slicelength) < 0) {
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0) {
             return NULL;
         }
+        slicelength = _PySlice_AdjustIndices(Py_SIZE(self), &start, &stop,
+                                            step);
 
         if (slicelength <= 0) {
             return newarrayobject(&Arraytype, 0, self->ob_descr);
@@ -1772,11 +1773,11 @@
             return (*self->ob_descr->setitem)(self, i, value);
     }
     else if (PySlice_Check(item)) {
-        if (PySlice_GetIndicesEx((PySliceObject *)item,
-                                 Py_SIZE(self), &start, &stop,
-                                 &step, &slicelength) < 0) {
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0) {
             return -1;
         }
+        slicelength = _PySlice_AdjustIndices(Py_SIZE(self), &start, &stop,
+                                            step);
     }
     else {
         PyErr_SetString(PyExc_TypeError,
@@ -2288,8 +2289,8 @@
 {
     PyObject *m;
 
-    Arraytype.ob_type = &PyType_Type;
-    PyArrayIter_Type.ob_type = &PyType_Type;
+    Py_TYPE(&Arraytype) = &PyType_Type;
+    Py_TYPE(&PyArrayIter_Type) = &PyType_Type;
     m = Py_InitModule3("array", a_methods, module_doc);
     if (m == NULL)
         return;
diff --git a/Modules/audioop.c b/Modules/audioop.c
index a4d1375..91f585c 100644
--- a/Modules/audioop.c
+++ b/Modules/audioop.c
@@ -25,17 +25,25 @@
 #endif
 
 static const int maxvals[] = {0, 0x7F, 0x7FFF, 0x7FFFFF, 0x7FFFFFFF};
-static const int minvals[] = {0, -0x80, -0x8000, -0x800000, -0x80000000};
+/* -1 trick is needed on Windows to support -0x80000000 without a warning */
+static const int minvals[] = {0, -0x80, -0x8000, -0x800000, -0x7FFFFFFF-1};
 static const unsigned int masks[] = {0, 0xFF, 0xFFFF, 0xFFFFFF, 0xFFFFFFFF};
 
 static int
 fbound(double val, double minval, double maxval)
 {
-    if (val > maxval)
+    if (val > maxval) {
         val = maxval;
-    else if (val < minval + 1)
+    }
+    else if (val < minval + 1.0) {
         val = minval;
-    return val;
+    }
+
+    /* Round towards minus infinity (-inf) */
+    val = floor(val);
+
+    /* Cast double to integer: round towards zero */
+    return (int)val;
 }
 
 
@@ -386,7 +394,9 @@
     signed char *cp;
     int len, size, val = 0;
     int i;
-    int min = 0x7fffffff, max = -0x80000000;
+    /* -1 trick below is needed on Windows to support -0x80000000 without
+    a warning */
+    int min = 0x7fffffff, max = -0x7FFFFFFF-1;
 
     if (!PyArg_ParseTuple(args, "s#i:minmax", &cp, &len, &size))
         return NULL;
@@ -793,8 +803,8 @@
         if ( size == 1 )      val = (int)*CHARP(cp, i);
         else if ( size == 2 ) val = (int)*SHORTP(cp, i);
         else if ( size == 4 ) val = (int)*LONGP(cp, i);
-        fval = (double)val*factor;
-        val = (int)floor(fbound(fval, minval, maxval));
+        fval = (double)val * factor;
+        val = fbound(fval, minval, maxval);
         if ( size == 1 )      *CHARP(ncp, i) = (signed char)val;
         else if ( size == 2 ) *SHORTP(ncp, i) = (short)val;
         else if ( size == 4 ) *LONGP(ncp, i) = (Py_Int32)val;
@@ -837,8 +847,8 @@
         if ( size == 1 )      val2 = (int)*CHARP(cp, i+1);
         else if ( size == 2 ) val2 = (int)*SHORTP(cp, i+2);
         else if ( size == 4 ) val2 = (int)*LONGP(cp, i+4);
-        fval = (double)val1*fac1 + (double)val2*fac2;
-        val1 = (int)floor(fbound(fval, minval, maxval));
+        fval = (double)val1 * fac1 + (double)val2 * fac2;
+        val1 = fbound(fval, minval, maxval);
         if ( size == 1 )      *CHARP(ncp, i/2) = (signed char)val1;
         else if ( size == 2 ) *SHORTP(ncp, i/2) = (short)val1;
         else if ( size == 4 ) *LONGP(ncp, i/2)= (Py_Int32)val1;
@@ -881,11 +891,11 @@
         else if ( size == 2 ) val = (int)*SHORTP(cp, i);
         else if ( size == 4 ) val = (int)*LONGP(cp, i);
 
-        fval = (double)val*fac1;
-        val1 = (int)floor(fbound(fval, minval, maxval));
+        fval = (double)val * fac1;
+        val1 = fbound(fval, minval, maxval);
 
-        fval = (double)val*fac2;
-        val2 = (int)floor(fbound(fval, minval, maxval));
+        fval = (double)val * fac2;
+        val2 = fbound(fval, minval, maxval);
 
         if ( size == 1 )      *CHARP(ncp, i*2) = (signed char)val1;
         else if ( size == 2 ) *SHORTP(ncp, i*2) = (short)val1;
@@ -944,7 +954,7 @@
         else {
             double fval = (double)val1 + (double)val2;
             /* truncate in case of overflow */
-            newval = (int)floor(fbound(fval, minval, maxval));
+            newval = fbound(fval, minval, maxval);
         }
 
         if ( size == 1 )      *CHARP(ncp, i) = (signed char)newval;
@@ -1086,7 +1096,7 @@
     char *cp, *ncp;
     int len, size, nchannels, inrate, outrate, weightA, weightB;
     int chan, d, *prev_i, *cur_i, cur_o;
-    PyObject *state, *samps, *str, *rv = NULL;
+    PyObject *state, *samps, *str, *rv = NULL, *channel;
     int bytes_per_frame;
 
     weightA = 1;
@@ -1152,6 +1162,10 @@
             prev_i[chan] = cur_i[chan] = 0;
     }
     else {
+        if (!PyTuple_Check(state)) {
+            PyErr_SetString(PyExc_TypeError, "state must be a tuple or None");
+            goto exit;
+        }
         if (!PyArg_ParseTuple(state,
                         "iO!;audioop.ratecv: illegal state argument",
                         &d, &PyTuple_Type, &samps))
@@ -1162,7 +1176,13 @@
             goto exit;
         }
         for (chan = 0; chan < nchannels; chan++) {
-            if (!PyArg_ParseTuple(PyTuple_GetItem(samps, chan),
+            channel = PyTuple_GetItem(samps, chan);
+            if (!PyTuple_Check(channel)) {
+                PyErr_SetString(PyExc_TypeError,
+                                "ratecv(): illegal state argument");
+                goto exit;
+            }
+            if (!PyArg_ParseTuple(channel,
                                   "ii:ratecv", &prev_i[chan],
                                                &cur_i[chan]))
                 goto exit;
diff --git a/Modules/binascii.c b/Modules/binascii.c
index 06af60f..1e785fa 100644
--- a/Modules/binascii.c
+++ b/Modules/binascii.c
@@ -842,7 +842,7 @@
 }
 
 PyDoc_STRVAR(doc_crc_hqx,
-"(data, oldcrc) -> newcrc. Compute hqx CRC incrementally");
+"(data, oldcrc) -> newcrc. Compute CRC-CCITT incrementally");
 
 static PyObject *
 binascii_crc_hqx(PyObject *self, PyObject *args)
diff --git a/Modules/bz2module.c b/Modules/bz2module.c
index fe417c5..81f1688 100644
--- a/Modules/bz2module.c
+++ b/Modules/bz2module.c
@@ -1353,6 +1353,30 @@
 
 /* ===================================================================== */
 /* Slot definitions for BZ2File_Type. */
+static int
+BZ2File_clear(BZ2FileObject *self)
+{
+    int bzerror;
+
+    ACQUIRE_LOCK(self);
+    switch (self->mode) {
+        case MODE_READ:
+        case MODE_READ_EOF:
+            BZ2_bzReadClose(&bzerror, self->fp);
+            break;
+        case MODE_WRITE:
+            BZ2_bzWriteClose(&bzerror, self->fp,
+                             0, NULL, NULL);
+            break;
+    }
+    if (self->fp != NULL && self->file != NULL)
+        PyFile_DecUseCount((PyFileObject *)self->file);
+    self->fp = NULL;
+    Util_DropReadAhead(self);
+    Py_CLEAR(self->file);
+    RELEASE_LOCK(self);
+    return 0;
+}
 
 static int
 BZ2File_init(BZ2FileObject *self, PyObject *args, PyObject *kwargs)
@@ -1420,6 +1444,19 @@
 
     mode = (mode_char == 'r') ? "rb" : "wb";
 
+#ifdef WITH_THREAD
+    if (!self->lock) {
+        self->lock = PyThread_allocate_lock();
+    }
+    
+    if (!self->lock) {
+        PyErr_SetString(PyExc_MemoryError, "unable to allocate lock");
+        goto error;
+    }
+#endif
+
+    BZ2File_clear(self);
+
     self->file = PyObject_CallFunction((PyObject*)&PyFile_Type, "(Osi)",
                                        name, mode, buffering);
     if (self->file == NULL)
@@ -1428,14 +1465,6 @@
     /* From now on, we have stuff to dealloc, so jump to error label
      * instead of returning */
 
-#ifdef WITH_THREAD
-    self->lock = PyThread_allocate_lock();
-    if (!self->lock) {
-        PyErr_SetString(PyExc_MemoryError, "unable to allocate lock");
-        goto error;
-    }
-#endif
-
     if (mode_char == 'r')
         self->fp = BZ2_bzReadOpen(&bzerror,
                                   PyFile_AsFile(self->file),
@@ -1469,26 +1498,11 @@
 static void
 BZ2File_dealloc(BZ2FileObject *self)
 {
-    int bzerror;
+    BZ2File_clear(self);
 #ifdef WITH_THREAD
     if (self->lock)
         PyThread_free_lock(self->lock);
 #endif
-    switch (self->mode) {
-        case MODE_READ:
-        case MODE_READ_EOF:
-            BZ2_bzReadClose(&bzerror, self->fp);
-            break;
-        case MODE_WRITE:
-            BZ2_bzWriteClose(&bzerror, self->fp,
-                             0, NULL, NULL);
-            break;
-    }
-    if (self->fp != NULL && self->file != NULL)
-        PyFile_DecUseCount((PyFileObject *)self->file);
-    self->fp = NULL;
-    Util_DropReadAhead(self);
-    Py_XDECREF(self->file);
     Py_TYPE(self)->tp_free((PyObject *)self);
 }
 
@@ -1574,7 +1588,7 @@
     Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /*tp_flags*/
     BZ2File__doc__,         /*tp_doc*/
     0,                      /*tp_traverse*/
-    0,                      /*tp_clear*/
+    (inquiry)BZ2File_clear, /*tp_clear*/
     0,                      /*tp_richcompare*/
     0,                      /*tp_weaklistoffset*/
     (getiterfunc)BZ2File_getiter, /*tp_iter*/
diff --git a/Modules/cPickle.c b/Modules/cPickle.c
index 845ad8f..914ebb3 100644
--- a/Modules/cPickle.c
+++ b/Modules/cPickle.c
@@ -778,7 +778,7 @@
             s[1] = (int)(c_value & 0xff);
             len = 2;
         }
-        else {
+        else if (c_value < 0x7fffffffL) {
             s[0] = LONG_BINGET;
             s[1] = (int)(c_value & 0xff);
             s[2] = (int)((c_value >> 8)  & 0xff);
@@ -786,6 +786,11 @@
             s[4] = (int)((c_value >> 24) & 0xff);
             len = 5;
         }
+        else { /* unlikely */
+            PyErr_SetString(PicklingError,
+                            "memo id too large for LONG_BINGET");
+            return -1;
+        }
     }
 
     if (self->write_func(self, s, len) < 0)
@@ -857,7 +862,12 @@
         goto finally;
     }
     else {
-        if (p >= 256) {
+        if (p < 256) {
+            c_str[0] = BINPUT;
+            c_str[1] = p;
+            len = 2;
+        }
+        else if (p < 0x7fffffffL) {
             c_str[0] = LONG_BINPUT;
             c_str[1] = (int)(p & 0xff);
             c_str[2] = (int)((p >> 8)  & 0xff);
@@ -865,10 +875,10 @@
             c_str[4] = (int)((p >> 24) & 0xff);
             len = 5;
         }
-        else {
-            c_str[0] = BINPUT;
-            c_str[1] = p;
-            len = 2;
+        else { /* unlikely */
+            PyErr_SetString(PicklingError,
+                            "memo id too large for LONG_BINPUT");
+            goto finally;
         }
     }
 
@@ -1268,14 +1278,17 @@
             c_str[1] = size;
             len = 2;
         }
-        else if (size <= INT_MAX) {
+        else if (size <= 0x7fffffffL) {
             c_str[0] = BINSTRING;
             for (i = 1; i < 5; i++)
                 c_str[i] = (int)(size >> ((i - 1) * 8));
             len = 5;
         }
-        else
+        else {
+            PyErr_SetString(PyExc_OverflowError,
+                            "cannot serialize a string larger than 2 GiB");
             return -1;    /* string too large */
+        }
 
         if (self->write_func(self, c_str, len) < 0)
             return -1;
@@ -1436,8 +1449,11 @@
 
         if ((size = PyString_Size(repr)) < 0)
             goto err;
-        if (size > INT_MAX)
-            return -1;   /* string too large */
+        if (size > 0x7fffffffL) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "cannot serialize a Unicode string larger than 2 GiB");
+            goto err;   /* string too large */
+        }
 
         c_str[0] = BINUNICODE;
         for (i = 1; i < 5; i++)
@@ -3875,52 +3891,22 @@
 static PyObject *
 Instance_New(PyObject *cls, PyObject *args)
 {
-    PyObject *r = 0;
-
     if (PyClass_Check(cls)) {
         int l;
 
-        if ((l=PyObject_Size(args)) < 0) goto err;
+        if ((l=PyObject_Size(args)) < 0) return NULL;
         if (!( l ))  {
-            PyObject *__getinitargs__;
-
-            __getinitargs__ = PyObject_GetAttr(cls,
-                                       __getinitargs___str);
-            if (!__getinitargs__)  {
+            if (!PyObject_HasAttr(cls, __getinitargs___str))  {
                 /* We have a class with no __getinitargs__,
                    so bypass usual construction  */
-                PyObject *inst;
-
-                PyErr_Clear();
-                if (!( inst=PyInstance_NewRaw(cls, NULL)))
-                    goto err;
-                return inst;
+                return PyInstance_NewRaw(cls, NULL);
             }
-            Py_DECREF(__getinitargs__);
         }
 
-        if ((r=PyInstance_New(cls, args, NULL))) return r;
-        else goto err;
+        return PyInstance_New(cls, args, NULL);
     }
 
-    if ((r=PyObject_CallObject(cls, args))) return r;
-
-  err:
-    {
-        PyObject *tp, *v, *tb, *tmp_value;
-
-        PyErr_Fetch(&tp, &v, &tb);
-        tmp_value = v;
-        /* NULL occurs when there was a KeyboardInterrupt */
-        if (tmp_value == NULL)
-            tmp_value = Py_None;
-        if ((r = PyTuple_Pack(3, tmp_value, cls, args))) {
-            Py_XDECREF(v);
-            v=r;
-        }
-        PyErr_Restore(tp,v,tb);
-    }
-    return NULL;
+    return PyObject_CallObject(cls, args);
 }
 
 
diff --git a/Modules/cjkcodecs/_codecs_cn.c b/Modules/cjkcodecs/_codecs_cn.c
index 6e0d2ce..92cf06d 100644
--- a/Modules/cjkcodecs/_codecs_cn.c
+++ b/Modules/cjkcodecs/_codecs_cn.c
@@ -266,7 +266,9 @@
             REQUIRE_INBUF(4)
             c3 = IN3;
             c4 = IN4;
-            if (c < 0x81 || c3 < 0x81 || c4 < 0x30 || c4 > 0x39)
+            if (c  < 0x81 || c  > 0xFE ||
+                c3 < 0x81 || c3 > 0xFE ||
+                c4 < 0x30 || c4 > 0x39)
                 return 4;
             c -= 0x81;  c2 -= 0x30;
             c3 -= 0x81; c4 -= 0x30;
@@ -333,15 +335,17 @@
         DBCHAR code;
 
         if (c < 0x80) {
-            if (state->i == 0) {
-                WRITE1((unsigned char)c)
-                NEXT(1, 1)
-            }
-            else {
-                WRITE3('~', '}', (unsigned char)c)
-                NEXT(1, 3)
+            if (state->i) {
+                WRITE2('~', '}')
+                NEXT_OUT(2)
                 state->i = 0;
             }
+            WRITE1((unsigned char)c)
+            NEXT(1, 1)
+            if (c == '~') {
+                WRITE1('~')
+                NEXT_OUT(1)
+            }
             continue;
         }
 
@@ -388,20 +392,19 @@
             unsigned char c2 = IN2;
 
             REQUIRE_INBUF(2)
-            if (c2 == '~') {
+            if (c2 == '~' && state->i == 0) {
                 WRITE1('~')
-                NEXT(2, 1)
-                continue;
+                NEXT_OUT(1)
             }
             else if (c2 == '{' && state->i == 0)
                 state->i = 1; /* set GB */
+            else if (c2 == '\n' && state->i == 0)
+                ; /* line-continuation */
             else if (c2 == '}' && state->i == 1)
                 state->i = 0; /* set ASCII */
-            else if (c2 == '\n')
-                ; /* line-continuation */
             else
                 return 2;
-            NEXT(2, 0);
+            NEXT_IN(2)
             continue;
         }
 
diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c
index 8713628..4b482bf 100644
--- a/Modules/cjkcodecs/multibytecodec.c
+++ b/Modules/cjkcodecs/multibytecodec.c
@@ -310,8 +310,7 @@
 
     if (!PyTuple_Check(retobj) || PyTuple_GET_SIZE(retobj) != 2 ||
         !PyUnicode_Check((tobj = PyTuple_GET_ITEM(retobj, 0))) ||
-        !(PyInt_Check(PyTuple_GET_ITEM(retobj, 1)) ||
-          PyLong_Check(PyTuple_GET_ITEM(retobj, 1)))) {
+        !_PyAnyInt_Check(PyTuple_GET_ITEM(retobj, 1))) {
         PyErr_SetString(PyExc_TypeError,
                         "encoding error handler must return "
                         "(unicode, int) tuple");
@@ -430,8 +429,7 @@
 
     if (!PyTuple_Check(retobj) || PyTuple_GET_SIZE(retobj) != 2 ||
         !PyUnicode_Check((retuni = PyTuple_GET_ITEM(retobj, 0))) ||
-        !(PyInt_Check(PyTuple_GET_ITEM(retobj, 1)) ||
-          PyLong_Check(PyTuple_GET_ITEM(retobj, 1)))) {
+        !_PyAnyInt_Check(PyTuple_GET_ITEM(retobj, 1))) {
         PyErr_SetString(PyExc_TypeError,
                         "decoding error handler must return "
                         "(unicode, int) tuple");
@@ -1604,6 +1602,9 @@
         if (r == -1)
             return NULL;
     }
+    /* PySequence_Length() can fail */
+    if (PyErr_Occurred())
+        return NULL;
 
     Py_RETURN_NONE;
 }
diff --git a/Modules/config.c b/Modules/config.c
index 67a0bc6..2255347 100644
--- a/Modules/config.c
+++ b/Modules/config.c
@@ -56,6 +56,7 @@
 extern void init_csv(void);
 extern void init_socket(void);
 extern void inittermios(void);
+extern void init_ssl(void);
 extern void init_md5(void);
 extern void init_sha(void);
 extern void init_sha256(void);
@@ -80,6 +81,9 @@
 extern void init_sqlite3(void);
 extern void init_ctypes(void);
 extern void init_ctypes_test(void);
+#ifdef __APPLE__
+extern void init_scproxy(void);
+#endif
 
 /* -- ADDMODULE MARKER 1 -- */
 
@@ -124,6 +128,7 @@
     {"_csv", init_csv},
     {"_socket", init_socket},
     {"termios", inittermios},
+    {"_ssl", init_ssl},
     {"_md5", init_md5},
     {"_sha", init_sha},
     {"_sha256", init_sha256},
@@ -148,6 +153,9 @@
     {"_sqlite3", init_sqlite3},
     {"_ctypes", init_ctypes},
     {"_ctypes_test", init_ctypes_test},
+#ifdef __APPLE__
+    {"_scproxy", init_scproxy},
+#endif
 
 /* -- ADDMODULE MARKER 2 -- */
 
diff --git a/Modules/datetimemodule.c b/Modules/datetimemodule.c
index 4573637..c0b7102 100644
--- a/Modules/datetimemodule.c
+++ b/Modules/datetimemodule.c
@@ -1537,6 +1537,7 @@
     if (x2 == NULL)
         goto Done;
     result = PyNumber_Add(x1, x2);
+    assert(result == NULL || _PyAnyInt_CheckExact(result));
 
 Done:
     Py_XDECREF(x1);
@@ -1559,6 +1560,7 @@
     PyObject *num = NULL;
     PyObject *result = NULL;
 
+    assert(_PyAnyInt_CheckExact(pyus));
     tuple = PyNumber_Divmod(pyus, us_per_second);
     if (tuple == NULL)
         goto Done;
@@ -1801,11 +1803,11 @@
 
     if (PyDelta_Check(left)) {
         /* delta * ??? */
-        if (PyInt_Check(right) || PyLong_Check(right))
+        if (_PyAnyInt_Check(right))
             result = multiply_int_timedelta(right,
                             (PyDateTime_Delta *) left);
     }
-    else if (PyInt_Check(left) || PyLong_Check(left))
+    else if (_PyAnyInt_Check(left))
         result = multiply_int_timedelta(left,
                                         (PyDateTime_Delta *) right);
 
@@ -1821,7 +1823,7 @@
 
     if (PyDelta_Check(left)) {
         /* delta * ??? */
-        if (PyInt_Check(right) || PyLong_Check(right))
+        if (_PyAnyInt_Check(right))
             result = divide_timedelta_int(
                             (PyDateTime_Delta *)left,
                             right);
@@ -1850,12 +1852,14 @@
 
     assert(num != NULL);
 
-    if (PyInt_Check(num) || PyLong_Check(num)) {
-        prod = PyNumber_Multiply(num, factor);
+    if (_PyAnyInt_Check(num)) {
+        prod = PyNumber_Multiply(factor, num);
         if (prod == NULL)
             return NULL;
+        assert(_PyAnyInt_CheckExact(prod));
         sum = PyNumber_Add(sofar, prod);
         Py_DECREF(prod);
+        assert(sum == NULL || _PyAnyInt_CheckExact(sum));
         return sum;
     }
 
@@ -1898,7 +1902,7 @@
          * fractional part requires float arithmetic, and may
          * lose a little info.
          */
-        assert(PyInt_Check(factor) || PyLong_Check(factor));
+        assert(_PyAnyInt_CheckExact(factor));
         if (PyInt_Check(factor))
             dnum = (double)PyInt_AsLong(factor);
         else
@@ -1916,6 +1920,7 @@
         Py_DECREF(sum);
         Py_DECREF(x);
         *leftover += fracpart;
+        assert(y == NULL || _PyAnyInt_CheckExact(y));
         return y;
     }
 
@@ -3039,8 +3044,7 @@
 PyDoc_STR("Abstract base class for time zone info objects.");
 
 statichere PyTypeObject PyDateTime_TZInfoType = {
-    PyObject_HEAD_INIT(NULL)
-    0,                                          /* ob_size */
+    PyVarObject_HEAD_INIT(NULL, 0)
     "datetime.tzinfo",                          /* tp_name */
     sizeof(PyDateTime_TZInfo),                  /* tp_basicsize */
     0,                                          /* tp_itemsize */
@@ -3564,8 +3568,7 @@
 };
 
 statichere PyTypeObject PyDateTime_TimeType = {
-    PyObject_HEAD_INIT(NULL)
-    0,                                          /* ob_size */
+    PyVarObject_HEAD_INIT(NULL, 0)
     "datetime.time",                            /* tp_name */
     sizeof(PyDateTime_Time),                    /* tp_basicsize */
     0,                                          /* tp_itemsize */
@@ -4692,8 +4695,7 @@
 };
 
 statichere PyTypeObject PyDateTime_DateTimeType = {
-    PyObject_HEAD_INIT(NULL)
-    0,                                          /* ob_size */
+    PyVarObject_HEAD_INIT(NULL, 0)
     "datetime.datetime",                        /* tp_name */
     sizeof(PyDateTime_DateTime),                /* tp_basicsize */
     0,                                          /* tp_itemsize */
diff --git a/Modules/dlmodule.c b/Modules/dlmodule.c
index dfecf9d..3f15048 100644
--- a/Modules/dlmodule.c
+++ b/Modules/dlmodule.c
@@ -107,8 +107,11 @@
     }
     for (i = 1; i < n; i++) {
         PyObject *v = PyTuple_GetItem(args, i);
-        if (PyInt_Check(v))
+        if (_PyAnyInt_Check(v)) {
             alist[i-1] = PyInt_AsLong(v);
+            if (alist[i-1] == -1 && PyErr_Occurred())
+                return NULL;
+        }
         else if (PyString_Check(v))
             alist[i-1] = (long)PyString_AsString(v);
         else if (v == Py_None)
diff --git a/Modules/expat/COPYING b/Modules/expat/COPYING
index dcb4506..8d288f0 100644
--- a/Modules/expat/COPYING
+++ b/Modules/expat/COPYING
@@ -1,6 +1,5 @@
-Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
-                               and Clark Cooper
-Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers.
+Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
+Copyright (c) 2001-2017 Expat maintainers
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the
diff --git a/Modules/expat/amigaconfig.h b/Modules/expat/amigaconfig.h
deleted file mode 100644
index 86c6115..0000000
--- a/Modules/expat/amigaconfig.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef AMIGACONFIG_H
-#define AMIGACONFIG_H
-
-/* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */
-#define BYTEORDER 4321
-
-/* Define to 1 if you have the `bcopy' function. */
-#define HAVE_BCOPY 1
-
-/* Define to 1 if you have the <check.h> header file. */
-#undef HAVE_CHECK_H
-
-/* Define to 1 if you have the `memmove' function. */
-#define HAVE_MEMMOVE 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* whether byteorder is bigendian */
-#define WORDS_BIGENDIAN
-
-/* Define to specify how much context to retain around the current parse
-   point. */
-#define XML_CONTEXT_BYTES 1024
-
-/* Define to make parameter entity parsing functionality available. */
-#define XML_DTD
-
-/* Define to make XML Namespaces functionality available. */
-#define XML_NS
-
-#endif  /* AMIGACONFIG_H */
diff --git a/Modules/expat/ascii.h b/Modules/expat/ascii.h
index d10530b..c3587e5 100644
--- a/Modules/expat/ascii.h
+++ b/Modules/expat/ascii.h
@@ -1,5 +1,33 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-   See the file COPYING for copying permission.
+/*
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
 #define ASCII_A 0x41
diff --git a/Modules/expat/asciitab.h b/Modules/expat/asciitab.h
index 79a15c2..2f59fd9 100644
--- a/Modules/expat/asciitab.h
+++ b/Modules/expat/asciitab.h
@@ -1,5 +1,33 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-   See the file COPYING for copying permission.
+/*
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
 /* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
diff --git a/Modules/expat/expat.h b/Modules/expat/expat.h
index e8eefdd..174c3fa 100644
--- a/Modules/expat/expat.h
+++ b/Modules/expat/expat.h
@@ -1,5 +1,33 @@
-/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
-   See the file COPYING for copying permission.
+/*
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
 #ifndef Expat_INCLUDED
@@ -24,7 +52,6 @@
 struct XML_ParserStruct;
 typedef struct XML_ParserStruct *XML_Parser;
 
-/* Should this be defined using stdbool.h when C99 is available? */
 typedef unsigned char XML_Bool;
 #define XML_TRUE   ((XML_Bool) 1)
 #define XML_FALSE  ((XML_Bool) 0)
@@ -95,7 +122,9 @@
   /* Added in 2.0. */
   XML_ERROR_RESERVED_PREFIX_XML,
   XML_ERROR_RESERVED_PREFIX_XMLNS,
-  XML_ERROR_RESERVED_NAMESPACE_URI
+  XML_ERROR_RESERVED_NAMESPACE_URI,
+  /* Added in 2.2.1. */
+  XML_ERROR_INVALID_ARGUMENT
 };
 
 enum XML_Content_Type {
@@ -235,7 +264,7 @@
                     const XML_Char *namespaceSeparator);
 
 /* Prepare a parser object to be re-used.  This is particularly
-   valuable when memory allocation overhead is disproportionatly high,
+   valuable when memory allocation overhead is disproportionately high,
    such as when a large number of small documnents need to be parsed.
    All handlers are cleared from the parser, except for the
    unknownEncodingHandler. The parser's external state is re-initialized
@@ -342,7 +371,7 @@
                          XML_EntityDeclHandler handler);
 
 /* OBSOLETE -- OBSOLETE -- OBSOLETE
-   This handler has been superceded by the EntityDeclHandler above.
+   This handler has been superseded by the EntityDeclHandler above.
    It is provided here for backward compatibility.
 
    This is called for a declaration of an unparsed (NDATA) entity.
@@ -706,6 +735,7 @@
      be called, despite an external subset being parsed.
    Note: If XML_DTD is not defined when Expat is compiled, returns
      XML_ERROR_FEATURE_REQUIRES_XML_DTD.
+   Note: If parser == NULL, returns XML_ERROR_INVALID_ARGUMENT.
 */
 XMLPARSEAPI(enum XML_Error)
 XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD);
@@ -729,15 +759,16 @@
    to the XML_StartElementHandler that were specified in the start-tag
    rather than defaulted. Each attribute/value pair counts as 2; thus
    this correspondds to an index into the atts array passed to the
-   XML_StartElementHandler.
+   XML_StartElementHandler.  Returns -1 if parser == NULL.
 */
 XMLPARSEAPI(int)
 XML_GetSpecifiedAttributeCount(XML_Parser parser);
 
 /* Returns the index of the ID attribute passed in the last call to
-   XML_StartElementHandler, or -1 if there is no ID attribute.  Each
-   attribute/value pair counts as 2; thus this correspondds to an
-   index into the atts array passed to the XML_StartElementHandler.
+   XML_StartElementHandler, or -1 if there is no ID attribute or
+   parser == NULL.  Each attribute/value pair counts as 2; thus this
+   correspondds to an index into the atts array passed to the
+   XML_StartElementHandler.
 */
 XMLPARSEAPI(int)
 XML_GetIdAttributeIndex(XML_Parser parser);
@@ -901,6 +932,7 @@
    entities is requested; otherwise it will return non-zero.
    Note: If XML_SetParamEntityParsing is called after XML_Parse or
       XML_ParseBuffer, then it has no effect and will always return 0.
+   Note: If parser == NULL, the function will do nothing and return 0.
 */
 XMLPARSEAPI(int)
 XML_SetParamEntityParsing(XML_Parser parser,
@@ -910,13 +942,12 @@
    Helps in preventing DoS attacks based on predicting hash
    function behavior. This must be called before parsing is started.
    Returns 1 if successful, 0 when called after parsing has started.
+   Note: If parser == NULL, the function will do nothing and return 0.
 */
 XMLPARSEAPI(int)
 XML_SetHashSalt(XML_Parser parser,
                 unsigned long hash_salt);
 
-#define XML_HAS_SET_HASH_SALT  /* Python Only: Defined for pyexpat.c. */
-
 /* If XML_Parse or XML_ParseBuffer have returned XML_STATUS_ERROR, then
    XML_GetErrorCode returns information about the error.
 */
@@ -938,6 +969,10 @@
    the location is the location of the character at which the error
    was detected; otherwise the location is the location of the last
    parse event, as described above.
+
+   Note: XML_GetCurrentLineNumber and XML_GetCurrentColumnNumber
+   return 0 to indicate an error.
+   Note: XML_GetCurrentByteIndex returns -1 to indicate an error.
 */
 XMLPARSEAPI(XML_Size) XML_GetCurrentLineNumber(XML_Parser parser);
 XMLPARSEAPI(XML_Size) XML_GetCurrentColumnNumber(XML_Parser parser);
@@ -975,9 +1010,12 @@
 
 /* Exposing the memory handling functions used in Expat */
 XMLPARSEAPI(void *)
+XML_ATTR_MALLOC
+XML_ATTR_ALLOC_SIZE(2)
 XML_MemMalloc(XML_Parser parser, size_t size);
 
 XMLPARSEAPI(void *)
+XML_ATTR_ALLOC_SIZE(3)
 XML_MemRealloc(XML_Parser parser, void *ptr, size_t size);
 
 XMLPARSEAPI(void)
@@ -1033,14 +1071,12 @@
 XML_GetFeatureList(void);
 
 
-/* Expat follows the GNU/Linux convention of odd number minor version for
-   beta/development releases and even number minor version for stable
-   releases. Micro is bumped with each release, and set to 0 with each
-   change to major or minor version.
+/* Expat follows the semantic versioning convention.
+   See http://semver.org.
 */
 #define XML_MAJOR_VERSION 2
-#define XML_MINOR_VERSION 1
-#define XML_MICRO_VERSION 1
+#define XML_MINOR_VERSION 2
+#define XML_MICRO_VERSION 6
 
 #ifdef __cplusplus
 }
diff --git a/Modules/expat/expat_external.h b/Modules/expat/expat_external.h
index f337e1c..629483a 100644
--- a/Modules/expat/expat_external.h
+++ b/Modules/expat/expat_external.h
@@ -1,5 +1,33 @@
-/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
-   See the file COPYING for copying permission.
+/*
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
 #ifndef Expat_External_INCLUDED
@@ -7,12 +35,8 @@
 
 /* External API definitions */
 
-/* Namespace external symbols to allow multiple libexpat version to
-   co-exist. */
-#include "pyexpatns.h"
-
 #if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__)
-#define XML_USE_MSC_EXTENSIONS 1
+# define XML_USE_MSC_EXTENSIONS 1
 #endif
 
 /* Expat tries very hard to make the API boundary very specifically
@@ -38,11 +62,11 @@
    system headers may assume the cdecl convention.
 */
 #ifndef XMLCALL
-#if defined(_MSC_VER)
-#define XMLCALL __cdecl
-#elif defined(__GNUC__) && defined(__i386) && !defined(__INTEL_COMPILER)
-#define XMLCALL __attribute__((cdecl))
-#else
+# if defined(_MSC_VER)
+#  define XMLCALL __cdecl
+# elif defined(__GNUC__) && defined(__i386) && !defined(__INTEL_COMPILER)
+#  define XMLCALL __attribute__((cdecl))
+# else
 /* For any platform which uses this definition and supports more than
    one calling convention, we need to extend this definition to
    declare the convention used on that platform, if it's possible to
@@ -53,28 +77,42 @@
    pre-processor and how to specify the same calling convention as the
    platform's malloc() implementation.
 */
-#define XMLCALL
-#endif
+#  define XMLCALL
+# endif
 #endif  /* not defined XMLCALL */
 
 
 #if !defined(XML_STATIC) && !defined(XMLIMPORT)
-#ifndef XML_BUILDING_EXPAT
+# ifndef XML_BUILDING_EXPAT
 /* using Expat from an application */
 
-#ifdef XML_USE_MSC_EXTENSIONS
-#define XMLIMPORT __declspec(dllimport)
-#endif
+#  ifdef XML_USE_MSC_EXTENSIONS
+#   define XMLIMPORT __declspec(dllimport)
+#  endif
 
-#endif
+# endif
 #endif  /* not defined XML_STATIC */
 
+#if !defined(XMLIMPORT) && defined(__GNUC__) && (__GNUC__ >= 4)
+# define XMLIMPORT __attribute__ ((visibility ("default")))
+#endif
 
 /* If we didn't define it above, define it away: */
 #ifndef XMLIMPORT
-#define XMLIMPORT
+# define XMLIMPORT
 #endif
 
+#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96))
+# define XML_ATTR_MALLOC __attribute__((__malloc__))
+#else
+# define XML_ATTR_MALLOC
+#endif
+
+#if defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
+# define XML_ATTR_ALLOC_SIZE(x)  __attribute__((__alloc_size__(x)))
+#else
+# define XML_ATTR_ALLOC_SIZE(x)
+#endif
 
 #define XMLPARSEAPI(type) XMLIMPORT type XMLCALL
 
@@ -83,30 +121,35 @@
 #endif
 
 #ifdef XML_UNICODE_WCHAR_T
-#define XML_UNICODE
+# ifndef XML_UNICODE
+#  define XML_UNICODE
+# endif
+# if defined(__SIZEOF_WCHAR_T__) && (__SIZEOF_WCHAR_T__ != 2)
+#  error "sizeof(wchar_t) != 2; Need -fshort-wchar for both Expat and libc"
+# endif
 #endif
 
 #ifdef XML_UNICODE     /* Information is UTF-16 encoded. */
-#ifdef XML_UNICODE_WCHAR_T
+# ifdef XML_UNICODE_WCHAR_T
 typedef wchar_t XML_Char;
 typedef wchar_t XML_LChar;
-#else
+# else
 typedef unsigned short XML_Char;
 typedef char XML_LChar;
-#endif /* XML_UNICODE_WCHAR_T */
+# endif /* XML_UNICODE_WCHAR_T */
 #else                  /* Information is UTF-8 encoded. */
 typedef char XML_Char;
 typedef char XML_LChar;
 #endif /* XML_UNICODE */
 
 #ifdef XML_LARGE_SIZE  /* Use large integers for file/stream positions. */
-#if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400
+# if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400
 typedef __int64 XML_Index; 
 typedef unsigned __int64 XML_Size;
-#else
+# else
 typedef long long XML_Index;
 typedef unsigned long long XML_Size;
-#endif
+# endif
 #else
 typedef long XML_Index;
 typedef unsigned long XML_Size;
diff --git a/Modules/expat/iasciitab.h b/Modules/expat/iasciitab.h
index 24a1d5c..ce4a4bf 100644
--- a/Modules/expat/iasciitab.h
+++ b/Modules/expat/iasciitab.h
@@ -1,5 +1,33 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-   See the file COPYING for copying permission.
+/*
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
 /* Like asciitab.h, except that 0xD has code BT_S rather than BT_CR */
diff --git a/Modules/expat/internal.h b/Modules/expat/internal.h
index dd54548..e33fdcb 100644
--- a/Modules/expat/internal.h
+++ b/Modules/expat/internal.h
@@ -18,6 +18,35 @@
 
    Note: Use of these macros is based on judgement, not hard rules,
          and therefore subject to change.
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
 #if defined(__GNUC__) && defined(__i386__) && !defined(__MINGW32__)
@@ -71,3 +100,25 @@
 #define inline
 #endif
 #endif
+
+#ifndef UNUSED_P
+# ifdef __GNUC__
+#  define UNUSED_P(p) UNUSED_ ## p __attribute__((__unused__))
+# else
+#  define UNUSED_P(p) UNUSED_ ## p
+# endif
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+void
+_INTERNAL_trim_to_complete_utf8_characters(const char * from, const char ** fromLimRef);
+
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/Modules/expat/latin1tab.h b/Modules/expat/latin1tab.h
index 53c25d7..95dfa52 100644
--- a/Modules/expat/latin1tab.h
+++ b/Modules/expat/latin1tab.h
@@ -1,5 +1,33 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-   See the file COPYING for copying permission.
+/*
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
 /* 0x80 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
diff --git a/Modules/expat/loadlibrary.c b/Modules/expat/loadlibrary.c
new file mode 100644
index 0000000..35fdf98
--- /dev/null
+++ b/Modules/expat/loadlibrary.c
@@ -0,0 +1,143 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2016 - 2017, Steve Holme, <steve_holme@hotmail.com>.
+ * Copyright (C) 2017, Expat development team
+ *
+ * All rights reserved.
+ * Licensed under the MIT license:
+ *
+ * Permission to  use, copy,  modify, and distribute  this software  for any
+ * purpose with  or without fee is  hereby granted, provided that  the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+ * EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+ * MERCHANTABILITY, FITNESS FOR A  PARTICULAR PURPOSE AND NONINFRINGEMENT OF
+ * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR  OTHERWISE, ARISING FROM, OUT OF OR  IN CONNECTION WITH
+ * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice,  the name of a copyright holder shall
+ * not be used in advertising or otherwise to promote the sale, use or other
+ * dealings  in this  Software without  prior written  authorization of  the
+ * copyright holder.
+ *
+ ***************************************************************************/
+
+#if defined(_WIN32)
+
+#include <windows.h>
+#include <tchar.h>
+
+
+HMODULE _Expat_LoadLibrary(LPCTSTR filename);
+
+
+#if !defined(LOAD_WITH_ALTERED_SEARCH_PATH)
+#define LOAD_WITH_ALTERED_SEARCH_PATH  0x00000008
+#endif
+
+#if !defined(LOAD_LIBRARY_SEARCH_SYSTEM32)
+#define LOAD_LIBRARY_SEARCH_SYSTEM32   0x00000800
+#endif
+
+/* We use our own typedef here since some headers might lack these */
+typedef HMODULE (APIENTRY *LOADLIBRARYEX_FN)(LPCTSTR, HANDLE, DWORD);
+
+/* See function definitions in winbase.h */
+#ifdef UNICODE
+#  ifdef _WIN32_WCE
+#    define LOADLIBARYEX  L"LoadLibraryExW"
+#  else
+#    define LOADLIBARYEX  "LoadLibraryExW"
+#  endif
+#else
+#  define LOADLIBARYEX    "LoadLibraryExA"
+#endif
+
+
+/*
+ * _Expat_LoadLibrary()
+ *
+ * This is used to dynamically load DLLs using the most secure method available
+ * for the version of Windows that we are running on.
+ *
+ * Parameters:
+ *
+ * filename  [in] - The filename or full path of the DLL to load. If only the
+ *                  filename is passed then the DLL will be loaded from the
+ *                  Windows system directory.
+ *
+ * Returns the handle of the module on success; otherwise NULL.
+ */
+HMODULE _Expat_LoadLibrary(LPCTSTR filename)
+{
+  HMODULE hModule = NULL;
+  LOADLIBRARYEX_FN pLoadLibraryEx = NULL;
+
+  /* Get a handle to kernel32 so we can access it's functions at runtime */
+  HMODULE hKernel32 = GetModuleHandle(TEXT("kernel32"));
+  if(!hKernel32)
+    return NULL;  /* LCOV_EXCL_LINE */
+
+  /* Attempt to find LoadLibraryEx() which is only available on Windows 2000
+     and above */
+  pLoadLibraryEx = (LOADLIBRARYEX_FN) GetProcAddress(hKernel32, LOADLIBARYEX);
+
+  /* Detect if there's already a path in the filename and load the library if
+     there is. Note: Both back slashes and forward slashes have been supported
+     since the earlier days of DOS at an API level although they are not
+     supported by command prompt */
+  if(_tcspbrk(filename, TEXT("\\/"))) {
+    /** !checksrc! disable BANNEDFUNC 1 **/
+    hModule = pLoadLibraryEx ?
+      pLoadLibraryEx(filename, NULL, LOAD_WITH_ALTERED_SEARCH_PATH) :
+      LoadLibrary(filename);
+  }
+  /* Detect if KB2533623 is installed, as LOAD_LIBARY_SEARCH_SYSTEM32 is only
+     supported on Windows Vista, Windows Server 2008, Windows 7 and Windows
+     Server 2008 R2 with this patch or natively on Windows 8 and above */
+  else if(pLoadLibraryEx && GetProcAddress(hKernel32, "AddDllDirectory")) {
+    /* Load the DLL from the Windows system directory */
+    hModule = pLoadLibraryEx(filename, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
+  }
+  else {
+    /* Attempt to get the Windows system path */
+    UINT systemdirlen = GetSystemDirectory(NULL, 0);
+    if(systemdirlen) {
+      /* Allocate space for the full DLL path (Room for the null terminator
+         is included in systemdirlen) */
+      size_t filenamelen = _tcslen(filename);
+      TCHAR *path = malloc(sizeof(TCHAR) * (systemdirlen + 1 + filenamelen));
+      if(path && GetSystemDirectory(path, systemdirlen)) {
+        /* Calculate the full DLL path */
+        _tcscpy(path + _tcslen(path), TEXT("\\"));
+        _tcscpy(path + _tcslen(path), filename);
+
+        /* Load the DLL from the Windows system directory */
+        /** !checksrc! disable BANNEDFUNC 1 **/
+        hModule = pLoadLibraryEx ?
+          pLoadLibraryEx(path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH) :
+          LoadLibrary(path);
+
+      }
+      free(path);
+    }
+  }
+
+  return hModule;
+}
+
+#else /* defined(_WIN32) */
+
+/* ISO C requires a translation unit to contain at least one declaration
+   [-Wempty-translation-unit] */
+typedef int _TRANSLATION_UNIT_LOAD_LIBRARY_C_NOT_EMTPY;
+
+#endif /* defined(_WIN32) */
diff --git a/Modules/expat/macconfig.h b/Modules/expat/macconfig.h
deleted file mode 100644
index 2725caa..0000000
--- a/Modules/expat/macconfig.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*================================================================
-** Copyright 2000, Clark Cooper
-** All rights reserved.
-**
-** This is free software. You are permitted to copy, distribute, or modify
-** it under the terms of the MIT/X license (contained in the COPYING file
-** with this distribution.)
-**
-*/
-
-#ifndef MACCONFIG_H
-#define MACCONFIG_H
-
-
-/* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */
-#define BYTEORDER  4321
-
-/* Define to 1 if you have the `bcopy' function. */
-#undef HAVE_BCOPY
-
-/* Define to 1 if you have the `memmove' function. */
-#define HAVE_MEMMOVE
-
-/* Define to 1 if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* whether byteorder is bigendian */
-#define WORDS_BIGENDIAN
-
-/* Define to specify how much context to retain around the current parse
-   point. */
-#undef XML_CONTEXT_BYTES
-
-/* Define to make parameter entity parsing functionality available. */
-#define XML_DTD
-
-/* Define to make XML Namespaces functionality available. */
-#define XML_NS
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Define to `long' if <sys/types.h> does not define. */
-#define off_t  long
-
-/* Define to `unsigned' if <sys/types.h> does not define. */
-#undef size_t
-
-
-#endif /* ifndef MACCONFIG_H */
diff --git a/Modules/expat/nametab.h b/Modules/expat/nametab.h
index b05e62c..bfa2bd3 100644
--- a/Modules/expat/nametab.h
+++ b/Modules/expat/nametab.h
@@ -1,3 +1,35 @@
+/*
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
 static const unsigned namingBitmap[] = {
 0x00000000, 0x00000000, 0x00000000, 0x00000000,
 0x00000000, 0x00000000, 0x00000000, 0x00000000,
diff --git a/Modules/expat/siphash.h b/Modules/expat/siphash.h
new file mode 100644
index 0000000..4d6786d
--- /dev/null
+++ b/Modules/expat/siphash.h
@@ -0,0 +1,391 @@
+/* ==========================================================================
+ * siphash.h - SipHash-2-4 in a single header file
+ * --------------------------------------------------------------------------
+ * Derived by William Ahern from the reference implementation[1] published[2]
+ * by Jean-Philippe Aumasson and Daniel J. Berstein.
+ * Minimal changes by Sebastian Pipping and Victor Stinner on top, see below.
+ * Licensed under the CC0 Public Domain Dedication license.
+ *
+ * 1. https://www.131002.net/siphash/siphash24.c
+ * 2. https://www.131002.net/siphash/
+ * --------------------------------------------------------------------------
+ * HISTORY:
+ *
+ * 2018-07-08  (Anton Maklakov)
+ *   - Add "fall through" markers for GCC's -Wimplicit-fallthrough
+ *
+ * 2017-11-03  (Sebastian Pipping)
+ *   - Hide sip_tobin and sip_binof unless SIPHASH_TOBIN macro is defined
+ *
+ * 2017-07-25  (Vadim Zeitlin)
+ *   - Fix use of SIPHASH_MAIN macro
+ *
+ * 2017-07-05  (Sebastian Pipping)
+ *   - Use _SIP_ULL macro to not require a C++11 compiler if compiled as C++
+ *   - Add const qualifiers at two places
+ *   - Ensure <=80 characters line length (assuming tab width 4)
+ *
+ * 2017-06-23  (Victor Stinner)
+ *   - Address Win64 compile warnings
+ *
+ * 2017-06-18  (Sebastian Pipping)
+ *   - Clarify license note in the header
+ *   - Address C89 issues:
+ *     - Stop using inline keyword (and let compiler decide)
+ *     - Replace _Bool by int
+ *     - Turn macro siphash24 into a function
+ *     - Address invalid conversion (void pointer) by explicit cast
+ *   - Address lack of stdint.h for Visual Studio 2003 to 2008
+ *   - Always expose sip24_valid (for self-tests)
+ *
+ * 2012-11-04 - Born.  (William Ahern)
+ * --------------------------------------------------------------------------
+ * USAGE:
+ *
+ * SipHash-2-4 takes as input two 64-bit words as the key, some number of
+ * message bytes, and outputs a 64-bit word as the message digest. This
+ * implementation employs two data structures: a struct sipkey for
+ * representing the key, and a struct siphash for representing the hash
+ * state.
+ *
+ * For converting a 16-byte unsigned char array to a key, use either the
+ * macro sip_keyof or the routine sip_tokey. The former instantiates a
+ * compound literal key, while the latter requires a key object as a
+ * parameter.
+ *
+ * 	unsigned char secret[16];
+ * 	arc4random_buf(secret, sizeof secret);
+ * 	struct sipkey *key = sip_keyof(secret);
+ *
+ * For hashing a message, use either the convenience macro siphash24 or the
+ * routines sip24_init, sip24_update, and sip24_final.
+ *
+ * 	struct siphash state;
+ * 	void *msg;
+ * 	size_t len;
+ * 	uint64_t hash;
+ *
+ * 	sip24_init(&state, key);
+ * 	sip24_update(&state, msg, len);
+ * 	hash = sip24_final(&state);
+ *
+ * or
+ *
+ * 	hash = siphash24(msg, len, key);
+ *
+ * To convert the 64-bit hash value to a canonical 8-byte little-endian
+ * binary representation, use either the macro sip_binof or the routine
+ * sip_tobin. The former instantiates and returns a compound literal array,
+ * while the latter requires an array object as a parameter.
+ * --------------------------------------------------------------------------
+ * NOTES:
+ *
+ * o Neither sip_keyof, sip_binof, nor siphash24 will work with compilers
+ *   lacking compound literal support. Instead, you must use the lower-level
+ *   interfaces which take as parameters the temporary state objects.
+ *
+ * o Uppercase macros may evaluate parameters more than once. Lowercase
+ *   macros should not exhibit any such side effects.
+ * ==========================================================================
+ */
+#ifndef SIPHASH_H
+#define SIPHASH_H
+
+#include <stddef.h> /* size_t */
+
+#if defined(_WIN32) && defined(_MSC_VER) && (_MSC_VER < 1600)
+  /* For vs2003/7.1 up to vs2008/9.0; _MSC_VER 1600 is vs2010/10.0 */
+  typedef unsigned __int8   uint8_t;
+  typedef unsigned __int32 uint32_t;
+  typedef unsigned __int64 uint64_t;
+#else
+ #include <stdint.h> /* uint64_t uint32_t uint8_t */
+#endif
+
+
+/*
+ * Workaround to not require a C++11 compiler for using ULL suffix
+ * if this code is included and compiled as C++; related GCC warning is:
+ * warning: use of C++11 long long integer constant [-Wlong-long]
+ */
+#define _SIP_ULL(high, low)  (((uint64_t)high << 32) | low)
+
+
+#define SIP_ROTL(x, b) (uint64_t)(((x) << (b)) | ( (x) >> (64 - (b))))
+
+#define SIP_U32TO8_LE(p, v) \
+	(p)[0] = (uint8_t)((v) >>  0); (p)[1] = (uint8_t)((v) >>  8); \
+	(p)[2] = (uint8_t)((v) >> 16); (p)[3] = (uint8_t)((v) >> 24);
+
+#define SIP_U64TO8_LE(p, v) \
+	SIP_U32TO8_LE((p) + 0, (uint32_t)((v) >>  0)); \
+	SIP_U32TO8_LE((p) + 4, (uint32_t)((v) >> 32));
+
+#define SIP_U8TO64_LE(p) \
+	(((uint64_t)((p)[0]) <<  0) | \
+	 ((uint64_t)((p)[1]) <<  8) | \
+	 ((uint64_t)((p)[2]) << 16) | \
+	 ((uint64_t)((p)[3]) << 24) | \
+	 ((uint64_t)((p)[4]) << 32) | \
+	 ((uint64_t)((p)[5]) << 40) | \
+	 ((uint64_t)((p)[6]) << 48) | \
+	 ((uint64_t)((p)[7]) << 56))
+
+
+#define SIPHASH_INITIALIZER { 0, 0, 0, 0, { 0 }, 0, 0 }
+
+struct siphash {
+	uint64_t v0, v1, v2, v3;
+
+	unsigned char buf[8], *p;
+	uint64_t c;
+}; /* struct siphash */
+
+
+#define SIP_KEYLEN 16
+
+struct sipkey {
+	uint64_t k[2];
+}; /* struct sipkey */
+
+#define sip_keyof(k) sip_tokey(&(struct sipkey){ { 0 } }, (k))
+
+static struct sipkey *sip_tokey(struct sipkey *key, const void *src) {
+	key->k[0] = SIP_U8TO64_LE((const unsigned char *)src);
+	key->k[1] = SIP_U8TO64_LE((const unsigned char *)src + 8);
+	return key;
+} /* sip_tokey() */
+
+
+#ifdef SIPHASH_TOBIN
+
+#define sip_binof(v) sip_tobin((unsigned char[8]){ 0 }, (v))
+
+static void *sip_tobin(void *dst, uint64_t u64) {
+	SIP_U64TO8_LE((unsigned char *)dst, u64);
+	return dst;
+} /* sip_tobin() */
+
+#endif  /* SIPHASH_TOBIN */
+
+
+static void sip_round(struct siphash *H, const int rounds) {
+	int i;
+
+	for (i = 0; i < rounds; i++) {
+		H->v0 += H->v1;
+		H->v1 = SIP_ROTL(H->v1, 13);
+		H->v1 ^= H->v0;
+		H->v0 = SIP_ROTL(H->v0, 32);
+
+		H->v2 += H->v3;
+		H->v3 = SIP_ROTL(H->v3, 16);
+		H->v3 ^= H->v2;
+
+		H->v0 += H->v3;
+		H->v3 = SIP_ROTL(H->v3, 21);
+		H->v3 ^= H->v0;
+
+		H->v2 += H->v1;
+		H->v1 = SIP_ROTL(H->v1, 17);
+		H->v1 ^= H->v2;
+		H->v2 = SIP_ROTL(H->v2, 32);
+	}
+} /* sip_round() */
+
+
+static struct siphash *sip24_init(struct siphash *H,
+		const struct sipkey *key) {
+	H->v0 = _SIP_ULL(0x736f6d65U, 0x70736575U) ^ key->k[0];
+	H->v1 = _SIP_ULL(0x646f7261U, 0x6e646f6dU) ^ key->k[1];
+	H->v2 = _SIP_ULL(0x6c796765U, 0x6e657261U) ^ key->k[0];
+	H->v3 = _SIP_ULL(0x74656462U, 0x79746573U) ^ key->k[1];
+
+	H->p = H->buf;
+	H->c = 0;
+
+	return H;
+} /* sip24_init() */
+
+
+#define sip_endof(a) (&(a)[sizeof (a) / sizeof *(a)])
+
+static struct siphash *sip24_update(struct siphash *H, const void *src,
+		size_t len) {
+	const unsigned char *p = (const unsigned char *)src, *pe = p + len;
+	uint64_t m;
+
+	do {
+		while (p < pe && H->p < sip_endof(H->buf))
+			*H->p++ = *p++;
+
+		if (H->p < sip_endof(H->buf))
+			break;
+
+		m = SIP_U8TO64_LE(H->buf);
+		H->v3 ^= m;
+		sip_round(H, 2);
+		H->v0 ^= m;
+
+		H->p = H->buf;
+		H->c += 8;
+	} while (p < pe);
+
+	return H;
+} /* sip24_update() */
+
+
+static uint64_t sip24_final(struct siphash *H) {
+	const char left = (char)(H->p - H->buf);
+	uint64_t b = (H->c + left) << 56;
+
+	switch (left) {
+	case 7: b |= (uint64_t)H->buf[6] << 48;
+		/* fall through */
+	case 6: b |= (uint64_t)H->buf[5] << 40;
+		/* fall through */
+	case 5: b |= (uint64_t)H->buf[4] << 32;
+		/* fall through */
+	case 4: b |= (uint64_t)H->buf[3] << 24;
+		/* fall through */
+	case 3: b |= (uint64_t)H->buf[2] << 16;
+		/* fall through */
+	case 2: b |= (uint64_t)H->buf[1] << 8;
+		/* fall through */
+	case 1: b |= (uint64_t)H->buf[0] << 0;
+		/* fall through */
+	case 0: break;
+	}
+
+	H->v3 ^= b;
+	sip_round(H, 2);
+	H->v0 ^= b;
+	H->v2 ^= 0xff;
+	sip_round(H, 4);
+
+	return H->v0 ^ H->v1 ^ H->v2  ^ H->v3;
+} /* sip24_final() */
+
+
+static uint64_t siphash24(const void *src, size_t len,
+		const struct sipkey *key) {
+	struct siphash state = SIPHASH_INITIALIZER;
+	return sip24_final(sip24_update(sip24_init(&state, key), src, len));
+} /* siphash24() */
+
+
+/*
+ * SipHash-2-4 output with
+ * k = 00 01 02 ...
+ * and
+ * in = (empty string)
+ * in = 00 (1 byte)
+ * in = 00 01 (2 bytes)
+ * in = 00 01 02 (3 bytes)
+ * ...
+ * in = 00 01 02 ... 3e (63 bytes)
+ */
+static int sip24_valid(void) {
+	static const unsigned char vectors[64][8] = {
+		{ 0x31, 0x0e, 0x0e, 0xdd, 0x47, 0xdb, 0x6f, 0x72, },
+		{ 0xfd, 0x67, 0xdc, 0x93, 0xc5, 0x39, 0xf8, 0x74, },
+		{ 0x5a, 0x4f, 0xa9, 0xd9, 0x09, 0x80, 0x6c, 0x0d, },
+		{ 0x2d, 0x7e, 0xfb, 0xd7, 0x96, 0x66, 0x67, 0x85, },
+		{ 0xb7, 0x87, 0x71, 0x27, 0xe0, 0x94, 0x27, 0xcf, },
+		{ 0x8d, 0xa6, 0x99, 0xcd, 0x64, 0x55, 0x76, 0x18, },
+		{ 0xce, 0xe3, 0xfe, 0x58, 0x6e, 0x46, 0xc9, 0xcb, },
+		{ 0x37, 0xd1, 0x01, 0x8b, 0xf5, 0x00, 0x02, 0xab, },
+		{ 0x62, 0x24, 0x93, 0x9a, 0x79, 0xf5, 0xf5, 0x93, },
+		{ 0xb0, 0xe4, 0xa9, 0x0b, 0xdf, 0x82, 0x00, 0x9e, },
+		{ 0xf3, 0xb9, 0xdd, 0x94, 0xc5, 0xbb, 0x5d, 0x7a, },
+		{ 0xa7, 0xad, 0x6b, 0x22, 0x46, 0x2f, 0xb3, 0xf4, },
+		{ 0xfb, 0xe5, 0x0e, 0x86, 0xbc, 0x8f, 0x1e, 0x75, },
+		{ 0x90, 0x3d, 0x84, 0xc0, 0x27, 0x56, 0xea, 0x14, },
+		{ 0xee, 0xf2, 0x7a, 0x8e, 0x90, 0xca, 0x23, 0xf7, },
+		{ 0xe5, 0x45, 0xbe, 0x49, 0x61, 0xca, 0x29, 0xa1, },
+		{ 0xdb, 0x9b, 0xc2, 0x57, 0x7f, 0xcc, 0x2a, 0x3f, },
+		{ 0x94, 0x47, 0xbe, 0x2c, 0xf5, 0xe9, 0x9a, 0x69, },
+		{ 0x9c, 0xd3, 0x8d, 0x96, 0xf0, 0xb3, 0xc1, 0x4b, },
+		{ 0xbd, 0x61, 0x79, 0xa7, 0x1d, 0xc9, 0x6d, 0xbb, },
+		{ 0x98, 0xee, 0xa2, 0x1a, 0xf2, 0x5c, 0xd6, 0xbe, },
+		{ 0xc7, 0x67, 0x3b, 0x2e, 0xb0, 0xcb, 0xf2, 0xd0, },
+		{ 0x88, 0x3e, 0xa3, 0xe3, 0x95, 0x67, 0x53, 0x93, },
+		{ 0xc8, 0xce, 0x5c, 0xcd, 0x8c, 0x03, 0x0c, 0xa8, },
+		{ 0x94, 0xaf, 0x49, 0xf6, 0xc6, 0x50, 0xad, 0xb8, },
+		{ 0xea, 0xb8, 0x85, 0x8a, 0xde, 0x92, 0xe1, 0xbc, },
+		{ 0xf3, 0x15, 0xbb, 0x5b, 0xb8, 0x35, 0xd8, 0x17, },
+		{ 0xad, 0xcf, 0x6b, 0x07, 0x63, 0x61, 0x2e, 0x2f, },
+		{ 0xa5, 0xc9, 0x1d, 0xa7, 0xac, 0xaa, 0x4d, 0xde, },
+		{ 0x71, 0x65, 0x95, 0x87, 0x66, 0x50, 0xa2, 0xa6, },
+		{ 0x28, 0xef, 0x49, 0x5c, 0x53, 0xa3, 0x87, 0xad, },
+		{ 0x42, 0xc3, 0x41, 0xd8, 0xfa, 0x92, 0xd8, 0x32, },
+		{ 0xce, 0x7c, 0xf2, 0x72, 0x2f, 0x51, 0x27, 0x71, },
+		{ 0xe3, 0x78, 0x59, 0xf9, 0x46, 0x23, 0xf3, 0xa7, },
+		{ 0x38, 0x12, 0x05, 0xbb, 0x1a, 0xb0, 0xe0, 0x12, },
+		{ 0xae, 0x97, 0xa1, 0x0f, 0xd4, 0x34, 0xe0, 0x15, },
+		{ 0xb4, 0xa3, 0x15, 0x08, 0xbe, 0xff, 0x4d, 0x31, },
+		{ 0x81, 0x39, 0x62, 0x29, 0xf0, 0x90, 0x79, 0x02, },
+		{ 0x4d, 0x0c, 0xf4, 0x9e, 0xe5, 0xd4, 0xdc, 0xca, },
+		{ 0x5c, 0x73, 0x33, 0x6a, 0x76, 0xd8, 0xbf, 0x9a, },
+		{ 0xd0, 0xa7, 0x04, 0x53, 0x6b, 0xa9, 0x3e, 0x0e, },
+		{ 0x92, 0x59, 0x58, 0xfc, 0xd6, 0x42, 0x0c, 0xad, },
+		{ 0xa9, 0x15, 0xc2, 0x9b, 0xc8, 0x06, 0x73, 0x18, },
+		{ 0x95, 0x2b, 0x79, 0xf3, 0xbc, 0x0a, 0xa6, 0xd4, },
+		{ 0xf2, 0x1d, 0xf2, 0xe4, 0x1d, 0x45, 0x35, 0xf9, },
+		{ 0x87, 0x57, 0x75, 0x19, 0x04, 0x8f, 0x53, 0xa9, },
+		{ 0x10, 0xa5, 0x6c, 0xf5, 0xdf, 0xcd, 0x9a, 0xdb, },
+		{ 0xeb, 0x75, 0x09, 0x5c, 0xcd, 0x98, 0x6c, 0xd0, },
+		{ 0x51, 0xa9, 0xcb, 0x9e, 0xcb, 0xa3, 0x12, 0xe6, },
+		{ 0x96, 0xaf, 0xad, 0xfc, 0x2c, 0xe6, 0x66, 0xc7, },
+		{ 0x72, 0xfe, 0x52, 0x97, 0x5a, 0x43, 0x64, 0xee, },
+		{ 0x5a, 0x16, 0x45, 0xb2, 0x76, 0xd5, 0x92, 0xa1, },
+		{ 0xb2, 0x74, 0xcb, 0x8e, 0xbf, 0x87, 0x87, 0x0a, },
+		{ 0x6f, 0x9b, 0xb4, 0x20, 0x3d, 0xe7, 0xb3, 0x81, },
+		{ 0xea, 0xec, 0xb2, 0xa3, 0x0b, 0x22, 0xa8, 0x7f, },
+		{ 0x99, 0x24, 0xa4, 0x3c, 0xc1, 0x31, 0x57, 0x24, },
+		{ 0xbd, 0x83, 0x8d, 0x3a, 0xaf, 0xbf, 0x8d, 0xb7, },
+		{ 0x0b, 0x1a, 0x2a, 0x32, 0x65, 0xd5, 0x1a, 0xea, },
+		{ 0x13, 0x50, 0x79, 0xa3, 0x23, 0x1c, 0xe6, 0x60, },
+		{ 0x93, 0x2b, 0x28, 0x46, 0xe4, 0xd7, 0x06, 0x66, },
+		{ 0xe1, 0x91, 0x5f, 0x5c, 0xb1, 0xec, 0xa4, 0x6c, },
+		{ 0xf3, 0x25, 0x96, 0x5c, 0xa1, 0x6d, 0x62, 0x9f, },
+		{ 0x57, 0x5f, 0xf2, 0x8e, 0x60, 0x38, 0x1b, 0xe5, },
+		{ 0x72, 0x45, 0x06, 0xeb, 0x4c, 0x32, 0x8a, 0x95, }
+	};
+	unsigned char in[64];
+	struct sipkey k;
+	size_t i;
+
+	sip_tokey(&k, "\000\001\002\003\004\005\006\007\010\011"
+			"\012\013\014\015\016\017");
+
+	for (i = 0; i < sizeof in; ++i) {
+		in[i] = (unsigned char)i;
+
+		if (siphash24(in, i, &k) != SIP_U8TO64_LE(vectors[i]))
+			return 0;
+	}
+
+	return 1;
+} /* sip24_valid() */
+
+
+#ifdef SIPHASH_MAIN
+
+#include <stdio.h>
+
+int main(void) {
+	const int ok = sip24_valid();
+
+	if (ok)
+		puts("OK");
+	else
+		puts("FAIL");
+
+	return !ok;
+} /* main() */
+
+#endif /* SIPHASH_MAIN */
+
+
+#endif /* SIPHASH_H */
diff --git a/Modules/expat/utf8tab.h b/Modules/expat/utf8tab.h
index 7bb3e77..fa0bed6 100644
--- a/Modules/expat/utf8tab.h
+++ b/Modules/expat/utf8tab.h
@@ -1,7 +1,34 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-   See the file COPYING for copying permission.
-*/
+/*
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
 
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
 
 /* 0x80 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
 /* 0x84 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
diff --git a/Modules/expat/watcomconfig.h b/Modules/expat/watcomconfig.h
deleted file mode 100644
index 2f05e3f..0000000
--- a/Modules/expat/watcomconfig.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* expat_config.h for use with Open Watcom 1.5 and above.  */
-
-#ifndef WATCOMCONFIG_H
-#define WATCOMCONFIG_H
-
-#ifdef __NT__
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#undef WIN32_LEAN_AND_MEAN
-#endif
-
-/* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */
-#define BYTEORDER 1234
-
-/* Define to 1 if you have the `memmove' function. */
-#define HAVE_MEMMOVE 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "expat-bugs@mail.libexpat.org"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "expat"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "expat 2.0.0"
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "2.0.0"
-
-/* Define to specify how much context to retain around the current parse
-   point. */
-#define XML_CONTEXT_BYTES 1024
-
-/* Define to make parameter entity parsing functionality available. */
-#define XML_DTD 1
-
-/* Define to make XML Namespaces functionality available. */
-#define XML_NS 1
-
-#endif
-
diff --git a/Modules/expat/winconfig.h b/Modules/expat/winconfig.h
index c1b791d..17fea46 100644
--- a/Modules/expat/winconfig.h
+++ b/Modules/expat/winconfig.h
@@ -1,10 +1,33 @@
-/*================================================================
-** Copyright 2000, Clark Cooper
-** All rights reserved.
-**
-** This is free software. You are permitted to copy, distribute, or modify
-** it under the terms of the MIT/X license (contained in the COPYING file
-** with this distribution.)
+/*
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
 #ifndef WINCONFIG_H
@@ -17,6 +40,12 @@
 #include <memory.h>
 #include <string.h>
 
+
+#if defined(HAVE_EXPAT_CONFIG_H)  /* e.g. MinGW */
+# include <expat_config.h>
+#else  /* !defined(HAVE_EXPAT_CONFIG_H) */
+
+
 #define XML_NS 1
 #define XML_DTD 1
 #define XML_CONTEXT_BYTES 1024
@@ -27,4 +56,8 @@
 /* Windows has memmove() available. */
 #define HAVE_MEMMOVE
 
+
+#endif /* !defined(HAVE_EXPAT_CONFIG_H) */
+
+
 #endif /* ndef WINCONFIG_H */
diff --git a/Modules/expat/xmlparse.c b/Modules/expat/xmlparse.c
index 3f0939e..c4f3ffc 100644
--- a/Modules/expat/xmlparse.c
+++ b/Modules/expat/xmlparse.c
@@ -1,37 +1,115 @@
-/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
-   See the file COPYING for copying permission.
+/* 19ac4776051591216f1874e34ee99b6a43a3784c8bd7d70efeb9258dd22b906a (2.2.6+)
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
+#if !defined(_GNU_SOURCE)
+# define _GNU_SOURCE 1                  /* syscall prototype */
+#endif
+
 #include <stddef.h>
-#include <stdint.h>
 #include <string.h>                     /* memset(), memcpy() */
 #include <assert.h>
 #include <limits.h>                     /* UINT_MAX */
+#include <stdio.h>                      /* fprintf */
+#include <stdlib.h>                     /* getenv */
 
-#ifdef COMPILED_FROM_DSP
+#ifdef _WIN32
 #define getpid GetCurrentProcessId
 #else
 #include <sys/time.h>                   /* gettimeofday() */
 #include <sys/types.h>                  /* getpid() */
 #include <unistd.h>                     /* getpid() */
+#include <fcntl.h>                      /* O_RDONLY */
+#include <errno.h>
 #endif
 
 #define XML_BUILDING_EXPAT 1
 
-#ifdef COMPILED_FROM_DSP
+#ifdef _WIN32
 #include "winconfig.h"
-#elif defined(MACOS_CLASSIC)
-#include "macconfig.h"
-#elif defined(__amigaos__)
-#include "amigaconfig.h"
-#elif defined(__WATCOMC__)
-#include "watcomconfig.h"
 #elif defined(HAVE_EXPAT_CONFIG_H)
 #include <expat_config.h>
-#endif /* ndef COMPILED_FROM_DSP */
+#endif /* ndef _WIN32 */
 
 #include "ascii.h"
 #include "expat.h"
+#include "siphash.h"
+
+#if defined(HAVE_GETRANDOM) || defined(HAVE_SYSCALL_GETRANDOM)
+# if defined(HAVE_GETRANDOM)
+#  include <sys/random.h>    /* getrandom */
+# else
+#  include <unistd.h>        /* syscall */
+#  include <sys/syscall.h>   /* SYS_getrandom */
+# endif
+# if ! defined(GRND_NONBLOCK)
+#  define GRND_NONBLOCK  0x0001
+# endif  /* defined(GRND_NONBLOCK) */
+#endif  /* defined(HAVE_GETRANDOM) || defined(HAVE_SYSCALL_GETRANDOM) */
+
+#if defined(HAVE_LIBBSD) \
+    && (defined(HAVE_ARC4RANDOM_BUF) || defined(HAVE_ARC4RANDOM))
+# include <bsd/stdlib.h>
+#endif
+
+#if defined(_WIN32) && !defined(LOAD_LIBRARY_SEARCH_SYSTEM32)
+# define LOAD_LIBRARY_SEARCH_SYSTEM32  0x00000800
+#endif
+
+#if !defined(HAVE_GETRANDOM) && !defined(HAVE_SYSCALL_GETRANDOM) \
+    && !defined(HAVE_ARC4RANDOM_BUF) && !defined(HAVE_ARC4RANDOM) \
+    && !defined(XML_DEV_URANDOM) \
+    && !defined(_WIN32) \
+    && !defined(XML_POOR_ENTROPY)
+# error  \
+    You do not have support for any sources of high quality entropy \
+    enabled.  For end user security, that is probably not what you want. \
+    \
+    Your options include: \
+      * Linux + glibc >=2.25 (getrandom): HAVE_GETRANDOM, \
+      * Linux + glibc <2.25 (syscall SYS_getrandom): HAVE_SYSCALL_GETRANDOM, \
+      * BSD / macOS >=10.7 (arc4random_buf): HAVE_ARC4RANDOM_BUF, \
+      * BSD / macOS <10.7 (arc4random): HAVE_ARC4RANDOM, \
+      * libbsd (arc4random_buf): HAVE_ARC4RANDOM_BUF + HAVE_LIBBSD, \
+      * libbsd (arc4random): HAVE_ARC4RANDOM + HAVE_LIBBSD, \
+      * Linux / BSD / macOS (/dev/urandom): XML_DEV_URANDOM \
+      * Windows (RtlGenRandom): _WIN32. \
+    \
+    If insist on not using any of these, bypass this error by defining \
+    XML_POOR_ENTROPY; you have been warned. \
+    \
+    If you have reasons to patch this detection code away or need changes \
+    to the build system, please open a bug.  Thank you!
+#endif
+
 
 #ifdef XML_UNICODE
 #define XML_ENCODE_MAX XML_UTF16_ENCODE_MAX
@@ -83,6 +161,9 @@
 /* Round up n to be a multiple of sz, where sz is a power of 2. */
 #define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1))
 
+/* Do safe (NULL-aware) pointer arithmetic */
+#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
+
 /* Handle the case where memmove() doesn't exist. */
 #ifndef HAVE_MEMMOVE
 #ifdef HAVE_BCOPY
@@ -110,17 +191,11 @@
   const XML_Memory_Handling_Suite *mem;
 } HASH_TABLE;
 
-/* Basic character hash algorithm, taken from Python's string hash:
-   h = h * 1000003 ^ character, the constant being a prime number.
+static size_t
+keylen(KEY s);
 
-*/
-#ifdef XML_UNICODE
-#define CHAR_HASH(h, c) \
-  (((h) * 0xF4243) ^ (unsigned short)(c))
-#else
-#define CHAR_HASH(h, c) \
-  (((h) * 0xF4243) ^ (unsigned char)(c))
-#endif
+static void
+copy_salt_to_sipkey(XML_Parser parser, struct sipkey * key);
 
 /* For probing (after a collision) we need a step size relative prime
    to the hash table size, which is a power of 2. We use double-hashing,
@@ -356,6 +431,8 @@
                 const char *end, const char **nextPtr, XML_Bool haveMore);
 #endif /* XML_DTD */
 
+static void
+freeBindings(XML_Parser parser, BINDING *bindings);
 static enum XML_Error
 storeAtts(XML_Parser parser, const ENCODING *, const char *s,
           TAG_NAME *tagNamePtr, BINDING **bindingsPtr);
@@ -396,7 +473,7 @@
 static void FASTCALL normalizePublicId(XML_Char *s);
 
 static DTD * dtdCreate(const XML_Memory_Handling_Suite *ms);
-/* do not call if parentParser != NULL */
+/* do not call if m_parentParser != NULL */
 static void dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms);
 static void
 dtdDestroy(DTD *p, XML_Bool isDocEntity, const XML_Memory_Handling_Suite *ms);
@@ -440,6 +517,9 @@
 getElementType(XML_Parser parser, const ENCODING *enc,
                const char *ptr, const char *end);
 
+static XML_Char *copyString(const XML_Char *s,
+                            const XML_Memory_Handling_Suite *memsuite);
+
 static unsigned long generate_hash_secret_salt(XML_Parser parser);
 static XML_Bool startParsing(XML_Parser parser);
 
@@ -465,7 +545,7 @@
    : ((*((pool)->ptr)++ = c), 1))
 
 struct XML_ParserStruct {
-  /* The first member must be userData so that the XML_GetUserData
+  /* The first member must be m_userData so that the XML_GetUserData
      macro works. */
   void *m_userData;
   void *m_handlerArg;
@@ -475,7 +555,7 @@
   const char *m_bufferPtr;
   /* past last character to be parsed */
   char *m_bufferEnd;
-  /* allocated end of buffer */
+  /* allocated end of m_buffer */
   const char *m_bufferLim;
   XML_Index m_parseEndByteIndex;
   const char *m_parseEndPtr;
@@ -567,113 +647,10 @@
   unsigned long m_hash_secret_salt;
 };
 
-#define MALLOC(s) (parser->m_mem.malloc_fcn((s)))
-#define REALLOC(p,s) (parser->m_mem.realloc_fcn((p),(s)))
-#define FREE(p) (parser->m_mem.free_fcn((p)))
+#define MALLOC(parser, s)      (parser->m_mem.malloc_fcn((s)))
+#define REALLOC(parser, p, s)  (parser->m_mem.realloc_fcn((p),(s)))
+#define FREE(parser, p)        (parser->m_mem.free_fcn((p)))
 
-#define userData (parser->m_userData)
-#define handlerArg (parser->m_handlerArg)
-#define startElementHandler (parser->m_startElementHandler)
-#define endElementHandler (parser->m_endElementHandler)
-#define characterDataHandler (parser->m_characterDataHandler)
-#define processingInstructionHandler \
-        (parser->m_processingInstructionHandler)
-#define commentHandler (parser->m_commentHandler)
-#define startCdataSectionHandler \
-        (parser->m_startCdataSectionHandler)
-#define endCdataSectionHandler (parser->m_endCdataSectionHandler)
-#define defaultHandler (parser->m_defaultHandler)
-#define startDoctypeDeclHandler (parser->m_startDoctypeDeclHandler)
-#define endDoctypeDeclHandler (parser->m_endDoctypeDeclHandler)
-#define unparsedEntityDeclHandler \
-        (parser->m_unparsedEntityDeclHandler)
-#define notationDeclHandler (parser->m_notationDeclHandler)
-#define startNamespaceDeclHandler \
-        (parser->m_startNamespaceDeclHandler)
-#define endNamespaceDeclHandler (parser->m_endNamespaceDeclHandler)
-#define notStandaloneHandler (parser->m_notStandaloneHandler)
-#define externalEntityRefHandler \
-        (parser->m_externalEntityRefHandler)
-#define externalEntityRefHandlerArg \
-        (parser->m_externalEntityRefHandlerArg)
-#define internalEntityRefHandler \
-        (parser->m_internalEntityRefHandler)
-#define skippedEntityHandler (parser->m_skippedEntityHandler)
-#define unknownEncodingHandler (parser->m_unknownEncodingHandler)
-#define elementDeclHandler (parser->m_elementDeclHandler)
-#define attlistDeclHandler (parser->m_attlistDeclHandler)
-#define entityDeclHandler (parser->m_entityDeclHandler)
-#define xmlDeclHandler (parser->m_xmlDeclHandler)
-#define encoding (parser->m_encoding)
-#define initEncoding (parser->m_initEncoding)
-#define internalEncoding (parser->m_internalEncoding)
-#define unknownEncodingMem (parser->m_unknownEncodingMem)
-#define unknownEncodingData (parser->m_unknownEncodingData)
-#define unknownEncodingHandlerData \
-  (parser->m_unknownEncodingHandlerData)
-#define unknownEncodingRelease (parser->m_unknownEncodingRelease)
-#define protocolEncodingName (parser->m_protocolEncodingName)
-#define ns (parser->m_ns)
-#define ns_triplets (parser->m_ns_triplets)
-#define prologState (parser->m_prologState)
-#define processor (parser->m_processor)
-#define errorCode (parser->m_errorCode)
-#define eventPtr (parser->m_eventPtr)
-#define eventEndPtr (parser->m_eventEndPtr)
-#define positionPtr (parser->m_positionPtr)
-#define position (parser->m_position)
-#define openInternalEntities (parser->m_openInternalEntities)
-#define freeInternalEntities (parser->m_freeInternalEntities)
-#define defaultExpandInternalEntities \
-        (parser->m_defaultExpandInternalEntities)
-#define tagLevel (parser->m_tagLevel)
-#define buffer (parser->m_buffer)
-#define bufferPtr (parser->m_bufferPtr)
-#define bufferEnd (parser->m_bufferEnd)
-#define parseEndByteIndex (parser->m_parseEndByteIndex)
-#define parseEndPtr (parser->m_parseEndPtr)
-#define bufferLim (parser->m_bufferLim)
-#define dataBuf (parser->m_dataBuf)
-#define dataBufEnd (parser->m_dataBufEnd)
-#define _dtd (parser->m_dtd)
-#define curBase (parser->m_curBase)
-#define declEntity (parser->m_declEntity)
-#define doctypeName (parser->m_doctypeName)
-#define doctypeSysid (parser->m_doctypeSysid)
-#define doctypePubid (parser->m_doctypePubid)
-#define declAttributeType (parser->m_declAttributeType)
-#define declNotationName (parser->m_declNotationName)
-#define declNotationPublicId (parser->m_declNotationPublicId)
-#define declElementType (parser->m_declElementType)
-#define declAttributeId (parser->m_declAttributeId)
-#define declAttributeIsCdata (parser->m_declAttributeIsCdata)
-#define declAttributeIsId (parser->m_declAttributeIsId)
-#define freeTagList (parser->m_freeTagList)
-#define freeBindingList (parser->m_freeBindingList)
-#define inheritedBindings (parser->m_inheritedBindings)
-#define tagStack (parser->m_tagStack)
-#define atts (parser->m_atts)
-#define attsSize (parser->m_attsSize)
-#define nSpecifiedAtts (parser->m_nSpecifiedAtts)
-#define idAttIndex (parser->m_idAttIndex)
-#define nsAtts (parser->m_nsAtts)
-#define nsAttsVersion (parser->m_nsAttsVersion)
-#define nsAttsPower (parser->m_nsAttsPower)
-#define attInfo (parser->m_attInfo)
-#define tempPool (parser->m_tempPool)
-#define temp2Pool (parser->m_temp2Pool)
-#define groupConnector (parser->m_groupConnector)
-#define groupSize (parser->m_groupSize)
-#define namespaceSeparator (parser->m_namespaceSeparator)
-#define parentParser (parser->m_parentParser)
-#define ps_parsing (parser->m_parsingStatus.parsing)
-#define ps_finalBuffer (parser->m_parsingStatus.finalBuffer)
-#ifdef XML_DTD
-#define isParamEntity (parser->m_isParamEntity)
-#define useForeignDTD (parser->m_useForeignDTD)
-#define paramEntityParsing (parser->m_paramEntityParsing)
-#endif /* XML_DTD */
-#define hash_secret_salt (parser->m_hash_secret_salt)
 
 XML_Parser XMLCALL
 XML_ParserCreate(const XML_Char *encodingName)
@@ -698,10 +675,138 @@
   ASCII_s, ASCII_p, ASCII_a, ASCII_c, ASCII_e, '\0'
 };
 
+
+/* To avoid warnings about unused functions: */
+#if ! defined(HAVE_ARC4RANDOM_BUF) && ! defined(HAVE_ARC4RANDOM)
+
+#if defined(HAVE_GETRANDOM) || defined(HAVE_SYSCALL_GETRANDOM)
+
+/* Obtain entropy on Linux 3.17+ */
+static int
+writeRandomBytes_getrandom_nonblock(void * target, size_t count) {
+  int success = 0;  /* full count bytes written? */
+  size_t bytesWrittenTotal = 0;
+  const unsigned int getrandomFlags = GRND_NONBLOCK;
+
+  do {
+    void * const currentTarget = (void*)((char*)target + bytesWrittenTotal);
+    const size_t bytesToWrite = count - bytesWrittenTotal;
+
+    const int bytesWrittenMore =
+#if defined(HAVE_GETRANDOM)
+        getrandom(currentTarget, bytesToWrite, getrandomFlags);
+#else
+        syscall(SYS_getrandom, currentTarget, bytesToWrite, getrandomFlags);
+#endif
+
+    if (bytesWrittenMore > 0) {
+      bytesWrittenTotal += bytesWrittenMore;
+      if (bytesWrittenTotal >= count)
+        success = 1;
+    }
+  } while (! success && (errno == EINTR));
+
+  return success;
+}
+
+#endif  /* defined(HAVE_GETRANDOM) || defined(HAVE_SYSCALL_GETRANDOM) */
+
+
+#if ! defined(_WIN32) && defined(XML_DEV_URANDOM)
+
+/* Extract entropy from /dev/urandom */
+static int
+writeRandomBytes_dev_urandom(void * target, size_t count) {
+  int success = 0;  /* full count bytes written? */
+  size_t bytesWrittenTotal = 0;
+
+  const int fd = open("/dev/urandom", O_RDONLY);
+  if (fd < 0) {
+    return 0;
+  }
+
+  do {
+    void * const currentTarget = (void*)((char*)target + bytesWrittenTotal);
+    const size_t bytesToWrite = count - bytesWrittenTotal;
+
+    const ssize_t bytesWrittenMore = read(fd, currentTarget, bytesToWrite);
+
+    if (bytesWrittenMore > 0) {
+      bytesWrittenTotal += bytesWrittenMore;
+      if (bytesWrittenTotal >= count)
+        success = 1;
+    }
+  } while (! success && (errno == EINTR));
+
+  close(fd);
+  return success;
+}
+
+#endif  /* ! defined(_WIN32) && defined(XML_DEV_URANDOM) */
+
+#endif  /* ! defined(HAVE_ARC4RANDOM_BUF) && ! defined(HAVE_ARC4RANDOM) */
+
+
+#if defined(HAVE_ARC4RANDOM)
+
+static void
+writeRandomBytes_arc4random(void * target, size_t count) {
+  size_t bytesWrittenTotal = 0;
+
+  while (bytesWrittenTotal < count) {
+    const uint32_t random32 = arc4random();
+    size_t i = 0;
+
+    for (; (i < sizeof(random32)) && (bytesWrittenTotal < count);
+        i++, bytesWrittenTotal++) {
+      const uint8_t random8 = (uint8_t)(random32 >> (i * 8));
+      ((uint8_t *)target)[bytesWrittenTotal] = random8;
+    }
+  }
+}
+
+#endif  /* defined(HAVE_ARC4RANDOM) */
+
+
+#ifdef _WIN32
+
+typedef BOOLEAN (APIENTRY *RTLGENRANDOM_FUNC)(PVOID, ULONG);
+HMODULE _Expat_LoadLibrary(LPCTSTR filename);  /* see loadlibrary.c */
+
+/* Obtain entropy on Windows XP / Windows Server 2003 and later.
+ * Hint on RtlGenRandom and the following article from libsodium.
+ *
+ * Michael Howard: Cryptographically Secure Random number on Windows without using CryptoAPI
+ * https://blogs.msdn.microsoft.com/michael_howard/2005/01/14/cryptographically-secure-random-number-on-windows-without-using-cryptoapi/
+ */
+static int
+writeRandomBytes_RtlGenRandom(void * target, size_t count) {
+  int success = 0;  /* full count bytes written? */
+  const HMODULE advapi32 = _Expat_LoadLibrary(TEXT("ADVAPI32.DLL"));
+
+  if (advapi32) {
+    const RTLGENRANDOM_FUNC RtlGenRandom
+        = (RTLGENRANDOM_FUNC)GetProcAddress(advapi32, "SystemFunction036");
+    if (RtlGenRandom) {
+      if (RtlGenRandom((PVOID)target, (ULONG)count) == TRUE) {
+        success = 1;
+      }
+    }
+    FreeLibrary(advapi32);
+  }
+
+  return success;
+}
+
+#endif /* _WIN32 */
+
+
+#if ! defined(HAVE_ARC4RANDOM_BUF) && ! defined(HAVE_ARC4RANDOM)
+
 static unsigned long
 gather_time_entropy(void)
 {
-#ifdef COMPILED_FROM_DSP
+#ifdef _WIN32
   FILETIME ft;
   GetSystemTimeAsFileTime(&ft); /* never fails */
   return ft.dwHighDateTime ^ ft.dwLowDateTime;
@@ -710,36 +815,91 @@
   int gettimeofday_res;
 
   gettimeofday_res = gettimeofday(&tv, NULL);
+
+#if defined(NDEBUG)
+  (void)gettimeofday_res;
+#else
   assert (gettimeofday_res == 0);
+#endif  /* defined(NDEBUG) */
 
   /* Microseconds time is <20 bits entropy */
   return tv.tv_usec;
 #endif
 }
 
+#endif  /* ! defined(HAVE_ARC4RANDOM_BUF) && ! defined(HAVE_ARC4RANDOM) */
+
+
+static unsigned long
+ENTROPY_DEBUG(const char * label, unsigned long entropy) {
+  const char * const EXPAT_ENTROPY_DEBUG = getenv("EXPAT_ENTROPY_DEBUG");
+  if (EXPAT_ENTROPY_DEBUG && ! strcmp(EXPAT_ENTROPY_DEBUG, "1")) {
+    fprintf(stderr, "Entropy: %s --> 0x%0*lx (%lu bytes)\n",
+        label,
+        (int)sizeof(entropy) * 2, entropy,
+        (unsigned long)sizeof(entropy));
+  }
+  return entropy;
+}
+
 static unsigned long
 generate_hash_secret_salt(XML_Parser parser)
 {
-  /* Process ID is 0 bits entropy if attacker has local access
-   * XML_Parser address is few bits of entropy if attacker has local access */
-  const unsigned long entropy =
-      gather_time_entropy() ^ getpid() ^ (uintptr_t)parser;
+  unsigned long entropy;
+  (void)parser;
+
+  /* "Failproof" high quality providers: */
+#if defined(HAVE_ARC4RANDOM_BUF)
+  arc4random_buf(&entropy, sizeof(entropy));
+  return ENTROPY_DEBUG("arc4random_buf", entropy);
+#elif defined(HAVE_ARC4RANDOM)
+  writeRandomBytes_arc4random((void *)&entropy, sizeof(entropy));
+  return ENTROPY_DEBUG("arc4random", entropy);
+#else
+  /* Try high quality providers first .. */
+#ifdef _WIN32
+  if (writeRandomBytes_RtlGenRandom((void *)&entropy, sizeof(entropy))) {
+    return ENTROPY_DEBUG("RtlGenRandom", entropy);
+  }
+#elif defined(HAVE_GETRANDOM) || defined(HAVE_SYSCALL_GETRANDOM)
+  if (writeRandomBytes_getrandom_nonblock((void *)&entropy, sizeof(entropy))) {
+    return ENTROPY_DEBUG("getrandom", entropy);
+  }
+#endif
+#if ! defined(_WIN32) && defined(XML_DEV_URANDOM)
+  if (writeRandomBytes_dev_urandom((void *)&entropy, sizeof(entropy))) {
+    return ENTROPY_DEBUG("/dev/urandom", entropy);
+  }
+#endif  /* ! defined(_WIN32) && defined(XML_DEV_URANDOM) */
+  /* .. and self-made low quality for backup: */
+
+  /* Process ID is 0 bits entropy if attacker has local access */
+  entropy = gather_time_entropy() ^ getpid();
 
   /* Factors are 2^31-1 and 2^61-1 (Mersenne primes M31 and M61) */
   if (sizeof(unsigned long) == 4) {
-    return entropy * 2147483647;
+    return ENTROPY_DEBUG("fallback(4)", entropy * 2147483647);
   } else {
-    return entropy * 2305843009213693951;
+    return ENTROPY_DEBUG("fallback(8)",
+        entropy * (unsigned long)2305843009213693951ULL);
   }
+#endif
+}
+
+static unsigned long
+get_hash_secret_salt(XML_Parser parser) {
+  if (parser->m_parentParser != NULL)
+    return get_hash_secret_salt(parser->m_parentParser);
+  return parser->m_hash_secret_salt;
 }
 
 static XML_Bool  /* only valid for root parser */
 startParsing(XML_Parser parser)
 {
     /* hash functions must be initialized before setContext() is called */
-    if (hash_secret_salt == 0)
-      hash_secret_salt = generate_hash_secret_salt(parser);
-    if (ns) {
+    if (parser->m_hash_secret_salt == 0)
+      parser->m_hash_secret_salt = generate_hash_secret_salt(parser);
+    if (parser->m_ns) {
       /* implicit context only set for root parser, since child
          parsers (i.e. external entity parsers) will inherit it
       */
@@ -789,83 +949,85 @@
   if (!parser)
     return parser;
 
-  buffer = NULL;
-  bufferLim = NULL;
+  parser->m_buffer = NULL;
+  parser->m_bufferLim = NULL;
 
-  attsSize = INIT_ATTS_SIZE;
-  atts = (ATTRIBUTE *)MALLOC(attsSize * sizeof(ATTRIBUTE));
-  if (atts == NULL) {
-    FREE(parser);
+  parser->m_attsSize = INIT_ATTS_SIZE;
+  parser->m_atts = (ATTRIBUTE *)MALLOC(parser, parser->m_attsSize * sizeof(ATTRIBUTE));
+  if (parser->m_atts == NULL) {
+    FREE(parser, parser);
     return NULL;
   }
 #ifdef XML_ATTR_INFO
-  attInfo = (XML_AttrInfo*)MALLOC(attsSize * sizeof(XML_AttrInfo));
-  if (attInfo == NULL) {
-    FREE(atts);
-    FREE(parser);
+  parser->m_attInfo = (XML_AttrInfo*)MALLOC(parser, parser->m_attsSize * sizeof(XML_AttrInfo));
+  if (parser->m_attInfo == NULL) {
+    FREE(parser, parser->m_atts);
+    FREE(parser, parser);
     return NULL;
   }
 #endif
-  dataBuf = (XML_Char *)MALLOC(INIT_DATA_BUF_SIZE * sizeof(XML_Char));
-  if (dataBuf == NULL) {
-    FREE(atts);
+  parser->m_dataBuf = (XML_Char *)MALLOC(parser, INIT_DATA_BUF_SIZE * sizeof(XML_Char));
+  if (parser->m_dataBuf == NULL) {
+    FREE(parser, parser->m_atts);
 #ifdef XML_ATTR_INFO
-    FREE(attInfo);
+    FREE(parser, parser->m_attInfo);
 #endif
-    FREE(parser);
+    FREE(parser, parser);
     return NULL;
   }
-  dataBufEnd = dataBuf + INIT_DATA_BUF_SIZE;
+  parser->m_dataBufEnd = parser->m_dataBuf + INIT_DATA_BUF_SIZE;
 
   if (dtd)
-    _dtd = dtd;
+    parser->m_dtd = dtd;
   else {
-    _dtd = dtdCreate(&parser->m_mem);
-    if (_dtd == NULL) {
-      FREE(dataBuf);
-      FREE(atts);
+    parser->m_dtd = dtdCreate(&parser->m_mem);
+    if (parser->m_dtd == NULL) {
+      FREE(parser, parser->m_dataBuf);
+      FREE(parser, parser->m_atts);
 #ifdef XML_ATTR_INFO
-      FREE(attInfo);
+      FREE(parser, parser->m_attInfo);
 #endif
-      FREE(parser);
+      FREE(parser, parser);
       return NULL;
     }
   }
 
-  freeBindingList = NULL;
-  freeTagList = NULL;
-  freeInternalEntities = NULL;
+  parser->m_freeBindingList = NULL;
+  parser->m_freeTagList = NULL;
+  parser->m_freeInternalEntities = NULL;
 
-  groupSize = 0;
-  groupConnector = NULL;
+  parser->m_groupSize = 0;
+  parser->m_groupConnector = NULL;
 
-  unknownEncodingHandler = NULL;
-  unknownEncodingHandlerData = NULL;
+  parser->m_unknownEncodingHandler = NULL;
+  parser->m_unknownEncodingHandlerData = NULL;
 
-  namespaceSeparator = ASCII_EXCL;
-  ns = XML_FALSE;
-  ns_triplets = XML_FALSE;
+  parser->m_namespaceSeparator = ASCII_EXCL;
+  parser->m_ns = XML_FALSE;
+  parser->m_ns_triplets = XML_FALSE;
 
-  nsAtts = NULL;
-  nsAttsVersion = 0;
-  nsAttsPower = 0;
+  parser->m_nsAtts = NULL;
+  parser->m_nsAttsVersion = 0;
+  parser->m_nsAttsPower = 0;
 
-  poolInit(&tempPool, &(parser->m_mem));
-  poolInit(&temp2Pool, &(parser->m_mem));
+  parser->m_protocolEncodingName = NULL;
+
+  poolInit(&parser->m_tempPool, &(parser->m_mem));
+  poolInit(&parser->m_temp2Pool, &(parser->m_mem));
   parserInit(parser, encodingName);
 
-  if (encodingName && !protocolEncodingName) {
+  if (encodingName && !parser->m_protocolEncodingName) {
     XML_ParserFree(parser);
     return NULL;
   }
 
   if (nameSep) {
-    ns = XML_TRUE;
-    internalEncoding = XmlGetInternalEncodingNS();
-    namespaceSeparator = *nameSep;
+    parser->m_ns = XML_TRUE;
+    parser->m_internalEncoding = XmlGetInternalEncodingNS();
+    parser->m_namespaceSeparator = *nameSep;
   }
   else {
-    internalEncoding = XmlGetInternalEncoding();
+    parser->m_internalEncoding = XmlGetInternalEncoding();
   }
 
   return parser;
@@ -874,85 +1036,85 @@
 static void
 parserInit(XML_Parser parser, const XML_Char *encodingName)
 {
-  processor = prologInitProcessor;
-  XmlPrologStateInit(&prologState);
-  protocolEncodingName = (encodingName != NULL
-                          ? poolCopyString(&tempPool, encodingName)
-                          : NULL);
-  curBase = NULL;
-  XmlInitEncoding(&initEncoding, &encoding, 0);
-  userData = NULL;
-  handlerArg = NULL;
-  startElementHandler = NULL;
-  endElementHandler = NULL;
-  characterDataHandler = NULL;
-  processingInstructionHandler = NULL;
-  commentHandler = NULL;
-  startCdataSectionHandler = NULL;
-  endCdataSectionHandler = NULL;
-  defaultHandler = NULL;
-  startDoctypeDeclHandler = NULL;
-  endDoctypeDeclHandler = NULL;
-  unparsedEntityDeclHandler = NULL;
-  notationDeclHandler = NULL;
-  startNamespaceDeclHandler = NULL;
-  endNamespaceDeclHandler = NULL;
-  notStandaloneHandler = NULL;
-  externalEntityRefHandler = NULL;
-  externalEntityRefHandlerArg = parser;
-  skippedEntityHandler = NULL;
-  elementDeclHandler = NULL;
-  attlistDeclHandler = NULL;
-  entityDeclHandler = NULL;
-  xmlDeclHandler = NULL;
-  bufferPtr = buffer;
-  bufferEnd = buffer;
-  parseEndByteIndex = 0;
-  parseEndPtr = NULL;
-  declElementType = NULL;
-  declAttributeId = NULL;
-  declEntity = NULL;
-  doctypeName = NULL;
-  doctypeSysid = NULL;
-  doctypePubid = NULL;
-  declAttributeType = NULL;
-  declNotationName = NULL;
-  declNotationPublicId = NULL;
-  declAttributeIsCdata = XML_FALSE;
-  declAttributeIsId = XML_FALSE;
-  memset(&position, 0, sizeof(POSITION));
-  errorCode = XML_ERROR_NONE;
-  eventPtr = NULL;
-  eventEndPtr = NULL;
-  positionPtr = NULL;
-  openInternalEntities = NULL;
-  defaultExpandInternalEntities = XML_TRUE;
-  tagLevel = 0;
-  tagStack = NULL;
-  inheritedBindings = NULL;
-  nSpecifiedAtts = 0;
-  unknownEncodingMem = NULL;
-  unknownEncodingRelease = NULL;
-  unknownEncodingData = NULL;
-  parentParser = NULL;
-  ps_parsing = XML_INITIALIZED;
+  parser->m_processor = prologInitProcessor;
+  XmlPrologStateInit(&parser->m_prologState);
+  if (encodingName != NULL) {
+    parser->m_protocolEncodingName = copyString(encodingName, &(parser->m_mem));
+  }
+  parser->m_curBase = NULL;
+  XmlInitEncoding(&parser->m_initEncoding, &parser->m_encoding, 0);
+  parser->m_userData = NULL;
+  parser->m_handlerArg = NULL;
+  parser->m_startElementHandler = NULL;
+  parser->m_endElementHandler = NULL;
+  parser->m_characterDataHandler = NULL;
+  parser->m_processingInstructionHandler = NULL;
+  parser->m_commentHandler = NULL;
+  parser->m_startCdataSectionHandler = NULL;
+  parser->m_endCdataSectionHandler = NULL;
+  parser->m_defaultHandler = NULL;
+  parser->m_startDoctypeDeclHandler = NULL;
+  parser->m_endDoctypeDeclHandler = NULL;
+  parser->m_unparsedEntityDeclHandler = NULL;
+  parser->m_notationDeclHandler = NULL;
+  parser->m_startNamespaceDeclHandler = NULL;
+  parser->m_endNamespaceDeclHandler = NULL;
+  parser->m_notStandaloneHandler = NULL;
+  parser->m_externalEntityRefHandler = NULL;
+  parser->m_externalEntityRefHandlerArg = parser;
+  parser->m_skippedEntityHandler = NULL;
+  parser->m_elementDeclHandler = NULL;
+  parser->m_attlistDeclHandler = NULL;
+  parser->m_entityDeclHandler = NULL;
+  parser->m_xmlDeclHandler = NULL;
+  parser->m_bufferPtr = parser->m_buffer;
+  parser->m_bufferEnd = parser->m_buffer;
+  parser->m_parseEndByteIndex = 0;
+  parser->m_parseEndPtr = NULL;
+  parser->m_declElementType = NULL;
+  parser->m_declAttributeId = NULL;
+  parser->m_declEntity = NULL;
+  parser->m_doctypeName = NULL;
+  parser->m_doctypeSysid = NULL;
+  parser->m_doctypePubid = NULL;
+  parser->m_declAttributeType = NULL;
+  parser->m_declNotationName = NULL;
+  parser->m_declNotationPublicId = NULL;
+  parser->m_declAttributeIsCdata = XML_FALSE;
+  parser->m_declAttributeIsId = XML_FALSE;
+  memset(&parser->m_position, 0, sizeof(POSITION));
+  parser->m_errorCode = XML_ERROR_NONE;
+  parser->m_eventPtr = NULL;
+  parser->m_eventEndPtr = NULL;
+  parser->m_positionPtr = NULL;
+  parser->m_openInternalEntities = NULL;
+  parser->m_defaultExpandInternalEntities = XML_TRUE;
+  parser->m_tagLevel = 0;
+  parser->m_tagStack = NULL;
+  parser->m_inheritedBindings = NULL;
+  parser->m_nSpecifiedAtts = 0;
+  parser->m_unknownEncodingMem = NULL;
+  parser->m_unknownEncodingRelease = NULL;
+  parser->m_unknownEncodingData = NULL;
+  parser->m_parentParser = NULL;
+  parser->m_parsingStatus.parsing = XML_INITIALIZED;
 #ifdef XML_DTD
-  isParamEntity = XML_FALSE;
-  useForeignDTD = XML_FALSE;
-  paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER;
+  parser->m_isParamEntity = XML_FALSE;
+  parser->m_useForeignDTD = XML_FALSE;
+  parser->m_paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER;
 #endif
-  hash_secret_salt = 0;
+  parser->m_hash_secret_salt = 0;
 }
 
-/* moves list of bindings to freeBindingList */
+/* moves list of bindings to m_freeBindingList */
 static void FASTCALL
 moveToFreeBindingList(XML_Parser parser, BINDING *bindings)
 {
   while (bindings) {
     BINDING *b = bindings;
     bindings = bindings->nextTagBinding;
-    b->nextTagBinding = freeBindingList;
-    freeBindingList = b;
+    b->nextTagBinding = parser->m_freeBindingList;
+    parser->m_freeBindingList = b;
   }
 }
 
@@ -961,51 +1123,65 @@
 {
   TAG *tStk;
   OPEN_INTERNAL_ENTITY *openEntityList;
-  if (parentParser)
+
+  if (parser == NULL)
+      return XML_FALSE;
+
+  if (parser->m_parentParser)
     return XML_FALSE;
-  /* move tagStack to freeTagList */
-  tStk = tagStack;
+  /* move m_tagStack to m_freeTagList */
+  tStk = parser->m_tagStack;
   while (tStk) {
     TAG *tag = tStk;
     tStk = tStk->parent;
-    tag->parent = freeTagList;
+    tag->parent = parser->m_freeTagList;
     moveToFreeBindingList(parser, tag->bindings);
     tag->bindings = NULL;
-    freeTagList = tag;
+    parser->m_freeTagList = tag;
   }
-  /* move openInternalEntities to freeInternalEntities */
-  openEntityList = openInternalEntities;
+  /* move m_openInternalEntities to m_freeInternalEntities */
+  openEntityList = parser->m_openInternalEntities;
   while (openEntityList) {
     OPEN_INTERNAL_ENTITY *openEntity = openEntityList;
     openEntityList = openEntity->next;
-    openEntity->next = freeInternalEntities;
-    freeInternalEntities = openEntity;
+    openEntity->next = parser->m_freeInternalEntities;
+    parser->m_freeInternalEntities = openEntity;
   }
-  moveToFreeBindingList(parser, inheritedBindings);
-  FREE(unknownEncodingMem);
-  if (unknownEncodingRelease)
-    unknownEncodingRelease(unknownEncodingData);
-  poolClear(&tempPool);
-  poolClear(&temp2Pool);
+  moveToFreeBindingList(parser, parser->m_inheritedBindings);
+  FREE(parser, parser->m_unknownEncodingMem);
+  if (parser->m_unknownEncodingRelease)
+    parser->m_unknownEncodingRelease(parser->m_unknownEncodingData);
+  poolClear(&parser->m_tempPool);
+  poolClear(&parser->m_temp2Pool);
+  FREE(parser, (void *)parser->m_protocolEncodingName);
+  parser->m_protocolEncodingName = NULL;
   parserInit(parser, encodingName);
-  dtdReset(_dtd, &parser->m_mem);
+  dtdReset(parser->m_dtd, &parser->m_mem);
   return XML_TRUE;
 }
 
 enum XML_Status XMLCALL
 XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName)
 {
+  if (parser == NULL)
+      return XML_STATUS_ERROR;
   /* Block after XML_Parse()/XML_ParseBuffer() has been called.
      XXX There's no way for the caller to determine which of the
      XXX possible error cases caused the XML_STATUS_ERROR return.
   */
-  if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED)
+  if (parser->m_parsingStatus.parsing == XML_PARSING || parser->m_parsingStatus.parsing == XML_SUSPENDED)
     return XML_STATUS_ERROR;
+
+  /* Get rid of any previous encoding name */
+  FREE(parser, (void *)parser->m_protocolEncodingName);
+
   if (encodingName == NULL)
-    protocolEncodingName = NULL;
+    /* No new encoding name */
+    parser->m_protocolEncodingName = NULL;
   else {
-    protocolEncodingName = poolCopyString(&tempPool, encodingName);
-    if (!protocolEncodingName)
+    /* Copy the new encoding name into allocated memory */
+    parser->m_protocolEncodingName = copyString(encodingName, &(parser->m_mem));
+    if (!parser->m_protocolEncodingName)
       return XML_STATUS_ERROR;
   }
   return XML_STATUS_OK;
@@ -1018,52 +1194,88 @@
 {
   XML_Parser parser = oldParser;
   DTD *newDtd = NULL;
-  DTD *oldDtd = _dtd;
-  XML_StartElementHandler oldStartElementHandler = startElementHandler;
-  XML_EndElementHandler oldEndElementHandler = endElementHandler;
-  XML_CharacterDataHandler oldCharacterDataHandler = characterDataHandler;
-  XML_ProcessingInstructionHandler oldProcessingInstructionHandler
-      = processingInstructionHandler;
-  XML_CommentHandler oldCommentHandler = commentHandler;
-  XML_StartCdataSectionHandler oldStartCdataSectionHandler
-      = startCdataSectionHandler;
-  XML_EndCdataSectionHandler oldEndCdataSectionHandler
-      = endCdataSectionHandler;
-  XML_DefaultHandler oldDefaultHandler = defaultHandler;
-  XML_UnparsedEntityDeclHandler oldUnparsedEntityDeclHandler
-      = unparsedEntityDeclHandler;
-  XML_NotationDeclHandler oldNotationDeclHandler = notationDeclHandler;
-  XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler
-      = startNamespaceDeclHandler;
-  XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler
-      = endNamespaceDeclHandler;
-  XML_NotStandaloneHandler oldNotStandaloneHandler = notStandaloneHandler;
-  XML_ExternalEntityRefHandler oldExternalEntityRefHandler
-      = externalEntityRefHandler;
-  XML_SkippedEntityHandler oldSkippedEntityHandler = skippedEntityHandler;
-  XML_UnknownEncodingHandler oldUnknownEncodingHandler
-      = unknownEncodingHandler;
-  XML_ElementDeclHandler oldElementDeclHandler = elementDeclHandler;
-  XML_AttlistDeclHandler oldAttlistDeclHandler = attlistDeclHandler;
-  XML_EntityDeclHandler oldEntityDeclHandler = entityDeclHandler;
-  XML_XmlDeclHandler oldXmlDeclHandler = xmlDeclHandler;
-  ELEMENT_TYPE * oldDeclElementType = declElementType;
+  DTD *oldDtd;
+  XML_StartElementHandler oldStartElementHandler;
+  XML_EndElementHandler oldEndElementHandler;
+  XML_CharacterDataHandler oldCharacterDataHandler;
+  XML_ProcessingInstructionHandler oldProcessingInstructionHandler;
+  XML_CommentHandler oldCommentHandler;
+  XML_StartCdataSectionHandler oldStartCdataSectionHandler;
+  XML_EndCdataSectionHandler oldEndCdataSectionHandler;
+  XML_DefaultHandler oldDefaultHandler;
+  XML_UnparsedEntityDeclHandler oldUnparsedEntityDeclHandler;
+  XML_NotationDeclHandler oldNotationDeclHandler;
+  XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler;
+  XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler;
+  XML_NotStandaloneHandler oldNotStandaloneHandler;
+  XML_ExternalEntityRefHandler oldExternalEntityRefHandler;
+  XML_SkippedEntityHandler oldSkippedEntityHandler;
+  XML_UnknownEncodingHandler oldUnknownEncodingHandler;
+  XML_ElementDeclHandler oldElementDeclHandler;
+  XML_AttlistDeclHandler oldAttlistDeclHandler;
+  XML_EntityDeclHandler oldEntityDeclHandler;
+  XML_XmlDeclHandler oldXmlDeclHandler;
+  ELEMENT_TYPE * oldDeclElementType;
 
-  void *oldUserData = userData;
-  void *oldHandlerArg = handlerArg;
-  XML_Bool oldDefaultExpandInternalEntities = defaultExpandInternalEntities;
-  XML_Parser oldExternalEntityRefHandlerArg = externalEntityRefHandlerArg;
+  void *oldUserData;
+  void *oldHandlerArg;
+  XML_Bool oldDefaultExpandInternalEntities;
+  XML_Parser oldExternalEntityRefHandlerArg;
 #ifdef XML_DTD
-  enum XML_ParamEntityParsing oldParamEntityParsing = paramEntityParsing;
-  int oldInEntityValue = prologState.inEntityValue;
+  enum XML_ParamEntityParsing oldParamEntityParsing;
+  int oldInEntityValue;
 #endif
-  XML_Bool oldns_triplets = ns_triplets;
+  XML_Bool oldns_triplets;
   /* Note that the new parser shares the same hash secret as the old
      parser, so that dtdCopy and copyEntityTable can lookup values
      from hash tables associated with either parser without us having
      to worry which hash secrets each table has.
   */
-  unsigned long oldhash_secret_salt = hash_secret_salt;
+  unsigned long oldhash_secret_salt;
+
+  /* Validate the oldParser parameter before we pull everything out of it */
+  if (oldParser == NULL)
+    return NULL;
+
+  /* Stash the original parser contents on the stack */
+  oldDtd = parser->m_dtd;
+  oldStartElementHandler = parser->m_startElementHandler;
+  oldEndElementHandler = parser->m_endElementHandler;
+  oldCharacterDataHandler = parser->m_characterDataHandler;
+  oldProcessingInstructionHandler = parser->m_processingInstructionHandler;
+  oldCommentHandler = parser->m_commentHandler;
+  oldStartCdataSectionHandler = parser->m_startCdataSectionHandler;
+  oldEndCdataSectionHandler = parser->m_endCdataSectionHandler;
+  oldDefaultHandler = parser->m_defaultHandler;
+  oldUnparsedEntityDeclHandler = parser->m_unparsedEntityDeclHandler;
+  oldNotationDeclHandler = parser->m_notationDeclHandler;
+  oldStartNamespaceDeclHandler = parser->m_startNamespaceDeclHandler;
+  oldEndNamespaceDeclHandler = parser->m_endNamespaceDeclHandler;
+  oldNotStandaloneHandler = parser->m_notStandaloneHandler;
+  oldExternalEntityRefHandler = parser->m_externalEntityRefHandler;
+  oldSkippedEntityHandler = parser->m_skippedEntityHandler;
+  oldUnknownEncodingHandler = parser->m_unknownEncodingHandler;
+  oldElementDeclHandler = parser->m_elementDeclHandler;
+  oldAttlistDeclHandler = parser->m_attlistDeclHandler;
+  oldEntityDeclHandler = parser->m_entityDeclHandler;
+  oldXmlDeclHandler = parser->m_xmlDeclHandler;
+  oldDeclElementType = parser->m_declElementType;
+
+  oldUserData = parser->m_userData;
+  oldHandlerArg = parser->m_handlerArg;
+  oldDefaultExpandInternalEntities = parser->m_defaultExpandInternalEntities;
+  oldExternalEntityRefHandlerArg = parser->m_externalEntityRefHandlerArg;
+#ifdef XML_DTD
+  oldParamEntityParsing = parser->m_paramEntityParsing;
+  oldInEntityValue = parser->m_prologState.inEntityValue;
+#endif
+  oldns_triplets = parser->m_ns_triplets;
+  /* Note that the new parser shares the same hash secret as the old
+     parser, so that dtdCopy and copyEntityTable can lookup values
+     from hash tables associated with either parser without us having
+     to worry which hash secrets each table has.
+  */
+  oldhash_secret_salt = parser->m_hash_secret_salt;
 
 #ifdef XML_DTD
   if (!context)
@@ -1075,9 +1287,9 @@
      here.  This makes this function more painful to follow than it
      would be otherwise.
   */
-  if (ns) {
+  if (parser->m_ns) {
     XML_Char tmp[2];
-    *tmp = namespaceSeparator;
+    *tmp = parser->m_namespaceSeparator;
     parser = parserCreate(encodingName, &parser->m_mem, tmp, newDtd);
   }
   else {
@@ -1087,62 +1299,62 @@
   if (!parser)
     return NULL;
 
-  startElementHandler = oldStartElementHandler;
-  endElementHandler = oldEndElementHandler;
-  characterDataHandler = oldCharacterDataHandler;
-  processingInstructionHandler = oldProcessingInstructionHandler;
-  commentHandler = oldCommentHandler;
-  startCdataSectionHandler = oldStartCdataSectionHandler;
-  endCdataSectionHandler = oldEndCdataSectionHandler;
-  defaultHandler = oldDefaultHandler;
-  unparsedEntityDeclHandler = oldUnparsedEntityDeclHandler;
-  notationDeclHandler = oldNotationDeclHandler;
-  startNamespaceDeclHandler = oldStartNamespaceDeclHandler;
-  endNamespaceDeclHandler = oldEndNamespaceDeclHandler;
-  notStandaloneHandler = oldNotStandaloneHandler;
-  externalEntityRefHandler = oldExternalEntityRefHandler;
-  skippedEntityHandler = oldSkippedEntityHandler;
-  unknownEncodingHandler = oldUnknownEncodingHandler;
-  elementDeclHandler = oldElementDeclHandler;
-  attlistDeclHandler = oldAttlistDeclHandler;
-  entityDeclHandler = oldEntityDeclHandler;
-  xmlDeclHandler = oldXmlDeclHandler;
-  declElementType = oldDeclElementType;
-  userData = oldUserData;
+  parser->m_startElementHandler = oldStartElementHandler;
+  parser->m_endElementHandler = oldEndElementHandler;
+  parser->m_characterDataHandler = oldCharacterDataHandler;
+  parser->m_processingInstructionHandler = oldProcessingInstructionHandler;
+  parser->m_commentHandler = oldCommentHandler;
+  parser->m_startCdataSectionHandler = oldStartCdataSectionHandler;
+  parser->m_endCdataSectionHandler = oldEndCdataSectionHandler;
+  parser->m_defaultHandler = oldDefaultHandler;
+  parser->m_unparsedEntityDeclHandler = oldUnparsedEntityDeclHandler;
+  parser->m_notationDeclHandler = oldNotationDeclHandler;
+  parser->m_startNamespaceDeclHandler = oldStartNamespaceDeclHandler;
+  parser->m_endNamespaceDeclHandler = oldEndNamespaceDeclHandler;
+  parser->m_notStandaloneHandler = oldNotStandaloneHandler;
+  parser->m_externalEntityRefHandler = oldExternalEntityRefHandler;
+  parser->m_skippedEntityHandler = oldSkippedEntityHandler;
+  parser->m_unknownEncodingHandler = oldUnknownEncodingHandler;
+  parser->m_elementDeclHandler = oldElementDeclHandler;
+  parser->m_attlistDeclHandler = oldAttlistDeclHandler;
+  parser->m_entityDeclHandler = oldEntityDeclHandler;
+  parser->m_xmlDeclHandler = oldXmlDeclHandler;
+  parser->m_declElementType = oldDeclElementType;
+  parser->m_userData = oldUserData;
   if (oldUserData == oldHandlerArg)
-    handlerArg = userData;
+    parser->m_handlerArg = parser->m_userData;
   else
-    handlerArg = parser;
+    parser->m_handlerArg = parser;
   if (oldExternalEntityRefHandlerArg != oldParser)
-    externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg;
-  defaultExpandInternalEntities = oldDefaultExpandInternalEntities;
-  ns_triplets = oldns_triplets;
-  hash_secret_salt = oldhash_secret_salt;
-  parentParser = oldParser;
+    parser->m_externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg;
+  parser->m_defaultExpandInternalEntities = oldDefaultExpandInternalEntities;
+  parser->m_ns_triplets = oldns_triplets;
+  parser->m_hash_secret_salt = oldhash_secret_salt;
+  parser->m_parentParser = oldParser;
 #ifdef XML_DTD
-  paramEntityParsing = oldParamEntityParsing;
-  prologState.inEntityValue = oldInEntityValue;
+  parser->m_paramEntityParsing = oldParamEntityParsing;
+  parser->m_prologState.inEntityValue = oldInEntityValue;
   if (context) {
 #endif /* XML_DTD */
-    if (!dtdCopy(oldParser, _dtd, oldDtd, &parser->m_mem)
+    if (!dtdCopy(oldParser, parser->m_dtd, oldDtd, &parser->m_mem)
       || !setContext(parser, context)) {
       XML_ParserFree(parser);
       return NULL;
     }
-    processor = externalEntityInitProcessor;
+    parser->m_processor = externalEntityInitProcessor;
 #ifdef XML_DTD
   }
   else {
-    /* The DTD instance referenced by _dtd is shared between the document's
+    /* The DTD instance referenced by parser->m_dtd is shared between the document's
        root parser and external PE parsers, therefore one does not need to
        call setContext. In addition, one also *must* not call setContext,
        because this would overwrite existing prefix->binding pointers in
-       _dtd with ones that get destroyed with the external PE parser.
+       parser->m_dtd with ones that get destroyed with the external PE parser.
        This would leave those prefixes with dangling pointers.
     */
-    isParamEntity = XML_TRUE;
-    XmlPrologStateInitExternalEntity(&prologState);
-    processor = externalParEntInitProcessor;
+    parser->m_isParamEntity = XML_TRUE;
+    XmlPrologStateInitExternalEntity(&parser->m_prologState);
+    parser->m_processor = externalParEntInitProcessor;
   }
 #endif /* XML_DTD */
   return parser;
@@ -1156,8 +1368,8 @@
     if (!b)
       break;
     bindings = b->nextTagBinding;
-    FREE(b->uri);
-    FREE(b);
+    FREE(parser, b->uri);
+    FREE(parser, b);
   }
 }
 
@@ -1168,78 +1380,82 @@
   OPEN_INTERNAL_ENTITY *entityList;
   if (parser == NULL)
     return;
-  /* free tagStack and freeTagList */
-  tagList = tagStack;
+  /* free m_tagStack and m_freeTagList */
+  tagList = parser->m_tagStack;
   for (;;) {
     TAG *p;
     if (tagList == NULL) {
-      if (freeTagList == NULL)
+      if (parser->m_freeTagList == NULL)
         break;
-      tagList = freeTagList;
-      freeTagList = NULL;
+      tagList = parser->m_freeTagList;
+      parser->m_freeTagList = NULL;
     }
     p = tagList;
     tagList = tagList->parent;
-    FREE(p->buf);
+    FREE(parser, p->buf);
     destroyBindings(p->bindings, parser);
-    FREE(p);
+    FREE(parser, p);
   }
-  /* free openInternalEntities and freeInternalEntities */
-  entityList = openInternalEntities;
+  /* free m_openInternalEntities and m_freeInternalEntities */
+  entityList = parser->m_openInternalEntities;
   for (;;) {
     OPEN_INTERNAL_ENTITY *openEntity;
     if (entityList == NULL) {
-      if (freeInternalEntities == NULL)
+      if (parser->m_freeInternalEntities == NULL)
         break;
-      entityList = freeInternalEntities;
-      freeInternalEntities = NULL;
+      entityList = parser->m_freeInternalEntities;
+      parser->m_freeInternalEntities = NULL;
     }
     openEntity = entityList;
     entityList = entityList->next;
-    FREE(openEntity);
+    FREE(parser, openEntity);
   }
 
-  destroyBindings(freeBindingList, parser);
-  destroyBindings(inheritedBindings, parser);
-  poolDestroy(&tempPool);
-  poolDestroy(&temp2Pool);
+  destroyBindings(parser->m_freeBindingList, parser);
+  destroyBindings(parser->m_inheritedBindings, parser);
+  poolDestroy(&parser->m_tempPool);
+  poolDestroy(&parser->m_temp2Pool);
+  FREE(parser, (void *)parser->m_protocolEncodingName);
 #ifdef XML_DTD
   /* external parameter entity parsers share the DTD structure
      parser->m_dtd with the root parser, so we must not destroy it
   */
-  if (!isParamEntity && _dtd)
+  if (!parser->m_isParamEntity && parser->m_dtd)
 #else
-  if (_dtd)
+  if (parser->m_dtd)
 #endif /* XML_DTD */
-    dtdDestroy(_dtd, (XML_Bool)!parentParser, &parser->m_mem);
-  FREE((void *)atts);
+    dtdDestroy(parser->m_dtd, (XML_Bool)!parser->m_parentParser, &parser->m_mem);
+  FREE(parser, (void *)parser->m_atts);
 #ifdef XML_ATTR_INFO
-  FREE((void *)attInfo);
+  FREE(parser, (void *)parser->m_attInfo);
 #endif
-  FREE(groupConnector);
-  FREE(buffer);
-  FREE(dataBuf);
-  FREE(nsAtts);
-  FREE(unknownEncodingMem);
-  if (unknownEncodingRelease)
-    unknownEncodingRelease(unknownEncodingData);
-  FREE(parser);
+  FREE(parser, parser->m_groupConnector);
+  FREE(parser, parser->m_buffer);
+  FREE(parser, parser->m_dataBuf);
+  FREE(parser, parser->m_nsAtts);
+  FREE(parser, parser->m_unknownEncodingMem);
+  if (parser->m_unknownEncodingRelease)
+    parser->m_unknownEncodingRelease(parser->m_unknownEncodingData);
+  FREE(parser, parser);
 }
 
 void XMLCALL
 XML_UseParserAsHandlerArg(XML_Parser parser)
 {
-  handlerArg = parser;
+  if (parser != NULL)
+    parser->m_handlerArg = parser;
 }
 
 enum XML_Error XMLCALL
 XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD)
 {
+  if (parser == NULL)
+    return XML_ERROR_INVALID_ARGUMENT;
 #ifdef XML_DTD
   /* block after XML_Parse()/XML_ParseBuffer() has been called */
-  if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED)
+  if (parser->m_parsingStatus.parsing == XML_PARSING || parser->m_parsingStatus.parsing == XML_SUSPENDED)
     return XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING;
-  useForeignDTD = useDTD;
+  parser->m_useForeignDTD = useDTD;
   return XML_ERROR_NONE;
 #else
   return XML_ERROR_FEATURE_REQUIRES_XML_DTD;
@@ -1249,58 +1465,72 @@
 void XMLCALL
 XML_SetReturnNSTriplet(XML_Parser parser, int do_nst)
 {
-  /* block after XML_Parse()/XML_ParseBuffer() has been called */
-  if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED)
+  if (parser == NULL)
     return;
-  ns_triplets = do_nst ? XML_TRUE : XML_FALSE;
+  /* block after XML_Parse()/XML_ParseBuffer() has been called */
+  if (parser->m_parsingStatus.parsing == XML_PARSING || parser->m_parsingStatus.parsing == XML_SUSPENDED)
+    return;
+  parser->m_ns_triplets = do_nst ? XML_TRUE : XML_FALSE;
 }
 
 void XMLCALL
 XML_SetUserData(XML_Parser parser, void *p)
 {
-  if (handlerArg == userData)
-    handlerArg = userData = p;
+  if (parser == NULL)
+    return;
+  if (parser->m_handlerArg == parser->m_userData)
+    parser->m_handlerArg = parser->m_userData = p;
   else
-    userData = p;
+    parser->m_userData = p;
 }
 
 enum XML_Status XMLCALL
 XML_SetBase(XML_Parser parser, const XML_Char *p)
 {
+  if (parser == NULL)
+    return XML_STATUS_ERROR;
   if (p) {
-    p = poolCopyString(&_dtd->pool, p);
+    p = poolCopyString(&parser->m_dtd->pool, p);
     if (!p)
       return XML_STATUS_ERROR;
-    curBase = p;
+    parser->m_curBase = p;
   }
   else
-    curBase = NULL;
+    parser->m_curBase = NULL;
   return XML_STATUS_OK;
 }
 
 const XML_Char * XMLCALL
 XML_GetBase(XML_Parser parser)
 {
-  return curBase;
+  if (parser == NULL)
+    return NULL;
+  return parser->m_curBase;
 }
 
 int XMLCALL
 XML_GetSpecifiedAttributeCount(XML_Parser parser)
 {
-  return nSpecifiedAtts;
+  if (parser == NULL)
+    return -1;
+  return parser->m_nSpecifiedAtts;
 }
 
 int XMLCALL
 XML_GetIdAttributeIndex(XML_Parser parser)
 {
-  return idAttIndex;
+  if (parser == NULL)
+    return -1;
+  return parser->m_idAttIndex;
 }
 
 #ifdef XML_ATTR_INFO
 const XML_AttrInfo * XMLCALL
 XML_GetAttributeInfo(XML_Parser parser)
 {
-  return attInfo;
+  if (parser == NULL)
+    return NULL;
+  return parser->m_attInfo;
 }
 #endif
 
@@ -1309,41 +1539,48 @@
                       XML_StartElementHandler start,
                       XML_EndElementHandler end)
 {
-  startElementHandler = start;
-  endElementHandler = end;
+  if (parser == NULL)
+    return;
+  parser->m_startElementHandler = start;
+  parser->m_endElementHandler = end;
 }
 
 void XMLCALL
 XML_SetStartElementHandler(XML_Parser parser,
                            XML_StartElementHandler start) {
-  startElementHandler = start;
+  if (parser != NULL)
+    parser->m_startElementHandler = start;
 }
 
 void XMLCALL
 XML_SetEndElementHandler(XML_Parser parser,
                          XML_EndElementHandler end) {
-  endElementHandler = end;
+  if (parser != NULL)
+    parser->m_endElementHandler = end;
 }
 
 void XMLCALL
 XML_SetCharacterDataHandler(XML_Parser parser,
                             XML_CharacterDataHandler handler)
 {
-  characterDataHandler = handler;
+  if (parser != NULL)
+    parser->m_characterDataHandler = handler;
 }
 
 void XMLCALL
 XML_SetProcessingInstructionHandler(XML_Parser parser,
                                     XML_ProcessingInstructionHandler handler)
 {
-  processingInstructionHandler = handler;
+  if (parser != NULL)
+    parser->m_processingInstructionHandler = handler;
 }
 
 void XMLCALL
 XML_SetCommentHandler(XML_Parser parser,
                       XML_CommentHandler handler)
 {
-  commentHandler = handler;
+  if (parser != NULL)
+    parser->m_commentHandler = handler;
 }
 
 void XMLCALL
@@ -1351,36 +1588,44 @@
                            XML_StartCdataSectionHandler start,
                            XML_EndCdataSectionHandler end)
 {
-  startCdataSectionHandler = start;
-  endCdataSectionHandler = end;
+  if (parser == NULL)
+    return;
+  parser->m_startCdataSectionHandler = start;
+  parser->m_endCdataSectionHandler = end;
 }
 
 void XMLCALL
 XML_SetStartCdataSectionHandler(XML_Parser parser,
                                 XML_StartCdataSectionHandler start) {
-  startCdataSectionHandler = start;
+  if (parser != NULL)
+    parser->m_startCdataSectionHandler = start;
 }
 
 void XMLCALL
 XML_SetEndCdataSectionHandler(XML_Parser parser,
                               XML_EndCdataSectionHandler end) {
-  endCdataSectionHandler = end;
+  if (parser != NULL)
+    parser->m_endCdataSectionHandler = end;
 }
 
 void XMLCALL
 XML_SetDefaultHandler(XML_Parser parser,
                       XML_DefaultHandler handler)
 {
-  defaultHandler = handler;
-  defaultExpandInternalEntities = XML_FALSE;
+  if (parser == NULL)
+    return;
+  parser->m_defaultHandler = handler;
+  parser->m_defaultExpandInternalEntities = XML_FALSE;
 }
 
 void XMLCALL
 XML_SetDefaultHandlerExpand(XML_Parser parser,
                             XML_DefaultHandler handler)
 {
-  defaultHandler = handler;
-  defaultExpandInternalEntities = XML_TRUE;
+  if (parser == NULL)
+    return;
+  parser->m_defaultHandler = handler;
+  parser->m_defaultExpandInternalEntities = XML_TRUE;
 }
 
 void XMLCALL
@@ -1388,34 +1633,40 @@
                           XML_StartDoctypeDeclHandler start,
                           XML_EndDoctypeDeclHandler end)
 {
-  startDoctypeDeclHandler = start;
-  endDoctypeDeclHandler = end;
+  if (parser == NULL)
+    return;
+  parser->m_startDoctypeDeclHandler = start;
+  parser->m_endDoctypeDeclHandler = end;
 }
 
 void XMLCALL
 XML_SetStartDoctypeDeclHandler(XML_Parser parser,
                                XML_StartDoctypeDeclHandler start) {
-  startDoctypeDeclHandler = start;
+  if (parser != NULL)
+    parser->m_startDoctypeDeclHandler = start;
 }
 
 void XMLCALL
 XML_SetEndDoctypeDeclHandler(XML_Parser parser,
                              XML_EndDoctypeDeclHandler end) {
-  endDoctypeDeclHandler = end;
+  if (parser != NULL)
+    parser->m_endDoctypeDeclHandler = end;
 }
 
 void XMLCALL
 XML_SetUnparsedEntityDeclHandler(XML_Parser parser,
                                  XML_UnparsedEntityDeclHandler handler)
 {
-  unparsedEntityDeclHandler = handler;
+  if (parser != NULL)
+    parser->m_unparsedEntityDeclHandler = handler;
 }
 
 void XMLCALL
 XML_SetNotationDeclHandler(XML_Parser parser,
                            XML_NotationDeclHandler handler)
 {
-  notationDeclHandler = handler;
+  if (parser != NULL)
+    parser->m_notationDeclHandler = handler;
 }
 
 void XMLCALL
@@ -1423,50 +1674,59 @@
                             XML_StartNamespaceDeclHandler start,
                             XML_EndNamespaceDeclHandler end)
 {
-  startNamespaceDeclHandler = start;
-  endNamespaceDeclHandler = end;
+  if (parser == NULL)
+    return;
+  parser->m_startNamespaceDeclHandler = start;
+  parser->m_endNamespaceDeclHandler = end;
 }
 
 void XMLCALL
 XML_SetStartNamespaceDeclHandler(XML_Parser parser,
                                  XML_StartNamespaceDeclHandler start) {
-  startNamespaceDeclHandler = start;
+  if (parser != NULL)
+    parser->m_startNamespaceDeclHandler = start;
 }
 
 void XMLCALL
 XML_SetEndNamespaceDeclHandler(XML_Parser parser,
                                XML_EndNamespaceDeclHandler end) {
-  endNamespaceDeclHandler = end;
+  if (parser != NULL)
+    parser->m_endNamespaceDeclHandler = end;
 }
 
 void XMLCALL
 XML_SetNotStandaloneHandler(XML_Parser parser,
                             XML_NotStandaloneHandler handler)
 {
-  notStandaloneHandler = handler;
+  if (parser != NULL)
+    parser->m_notStandaloneHandler = handler;
 }
 
 void XMLCALL
 XML_SetExternalEntityRefHandler(XML_Parser parser,
                                 XML_ExternalEntityRefHandler handler)
 {
-  externalEntityRefHandler = handler;
+  if (parser != NULL)
+    parser->m_externalEntityRefHandler = handler;
 }
 
 void XMLCALL
 XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg)
 {
+  if (parser == NULL)
+    return;
   if (arg)
-    externalEntityRefHandlerArg = (XML_Parser)arg;
+    parser->m_externalEntityRefHandlerArg = (XML_Parser)arg;
   else
-    externalEntityRefHandlerArg = parser;
+    parser->m_externalEntityRefHandlerArg = parser;
 }
 
 void XMLCALL
 XML_SetSkippedEntityHandler(XML_Parser parser,
                             XML_SkippedEntityHandler handler)
 {
-  skippedEntityHandler = handler;
+  if (parser != NULL)
+    parser->m_skippedEntityHandler = handler;
 }
 
 void XMLCALL
@@ -1474,46 +1734,54 @@
                               XML_UnknownEncodingHandler handler,
                               void *data)
 {
-  unknownEncodingHandler = handler;
-  unknownEncodingHandlerData = data;
+  if (parser == NULL)
+    return;
+  parser->m_unknownEncodingHandler = handler;
+  parser->m_unknownEncodingHandlerData = data;
 }
 
 void XMLCALL
 XML_SetElementDeclHandler(XML_Parser parser,
                           XML_ElementDeclHandler eldecl)
 {
-  elementDeclHandler = eldecl;
+  if (parser != NULL)
+    parser->m_elementDeclHandler = eldecl;
 }
 
 void XMLCALL
 XML_SetAttlistDeclHandler(XML_Parser parser,
                           XML_AttlistDeclHandler attdecl)
 {
-  attlistDeclHandler = attdecl;
+  if (parser != NULL)
+    parser->m_attlistDeclHandler = attdecl;
 }
 
 void XMLCALL
 XML_SetEntityDeclHandler(XML_Parser parser,
                          XML_EntityDeclHandler handler)
 {
-  entityDeclHandler = handler;
+  if (parser != NULL)
+    parser->m_entityDeclHandler = handler;
 }
 
 void XMLCALL
 XML_SetXmlDeclHandler(XML_Parser parser,
                       XML_XmlDeclHandler handler) {
-  xmlDeclHandler = handler;
+  if (parser != NULL)
+    parser->m_xmlDeclHandler = handler;
 }
 
 int XMLCALL
 XML_SetParamEntityParsing(XML_Parser parser,
                           enum XML_ParamEntityParsing peParsing)
 {
+  if (parser == NULL)
+    return 0;
   /* block after XML_Parse()/XML_ParseBuffer() has been called */
-  if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED)
+  if (parser->m_parsingStatus.parsing == XML_PARSING || parser->m_parsingStatus.parsing == XML_SUSPENDED)
     return 0;
 #ifdef XML_DTD
-  paramEntityParsing = peParsing;
+  parser->m_paramEntityParsing = peParsing;
   return 1;
 #else
   return peParsing == XML_PARAM_ENTITY_PARSING_NEVER;
@@ -1524,88 +1792,118 @@
 XML_SetHashSalt(XML_Parser parser,
                 unsigned long hash_salt)
 {
-  /* block after XML_Parse()/XML_ParseBuffer() has been called */
-  if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED)
+  if (parser == NULL)
     return 0;
-  hash_secret_salt = hash_salt;
+  if (parser->m_parentParser)
+    return XML_SetHashSalt(parser->m_parentParser, hash_salt);
+  /* block after XML_Parse()/XML_ParseBuffer() has been called */
+  if (parser->m_parsingStatus.parsing == XML_PARSING || parser->m_parsingStatus.parsing == XML_SUSPENDED)
+    return 0;
+  parser->m_hash_secret_salt = hash_salt;
   return 1;
 }
 
 enum XML_Status XMLCALL
 XML_Parse(XML_Parser parser, const char *s, int len, int isFinal)
 {
-  switch (ps_parsing) {
+  if ((parser == NULL) || (len < 0) || ((s == NULL) && (len != 0))) {
+    if (parser != NULL)
+      parser->m_errorCode = XML_ERROR_INVALID_ARGUMENT;
+    return XML_STATUS_ERROR;
+  }
+  switch (parser->m_parsingStatus.parsing) {
   case XML_SUSPENDED:
-    errorCode = XML_ERROR_SUSPENDED;
+    parser->m_errorCode = XML_ERROR_SUSPENDED;
     return XML_STATUS_ERROR;
   case XML_FINISHED:
-    errorCode = XML_ERROR_FINISHED;
+    parser->m_errorCode = XML_ERROR_FINISHED;
     return XML_STATUS_ERROR;
   case XML_INITIALIZED:
-    if (parentParser == NULL && !startParsing(parser)) {
-      errorCode = XML_ERROR_NO_MEMORY;
+    if (parser->m_parentParser == NULL && !startParsing(parser)) {
+      parser->m_errorCode = XML_ERROR_NO_MEMORY;
       return XML_STATUS_ERROR;
     }
+    /* fall through */
   default:
-    ps_parsing = XML_PARSING;
+    parser->m_parsingStatus.parsing = XML_PARSING;
   }
 
   if (len == 0) {
-    ps_finalBuffer = (XML_Bool)isFinal;
+    parser->m_parsingStatus.finalBuffer = (XML_Bool)isFinal;
     if (!isFinal)
       return XML_STATUS_OK;
-    positionPtr = bufferPtr;
-    parseEndPtr = bufferEnd;
+    parser->m_positionPtr = parser->m_bufferPtr;
+    parser->m_parseEndPtr = parser->m_bufferEnd;
 
     /* If data are left over from last buffer, and we now know that these
        data are the final chunk of input, then we have to check them again
        to detect errors based on that fact.
     */
-    errorCode = processor(parser, bufferPtr, parseEndPtr, &bufferPtr);
+    parser->m_errorCode = parser->m_processor(parser, parser->m_bufferPtr, parser->m_parseEndPtr, &parser->m_bufferPtr);
 
-    if (errorCode == XML_ERROR_NONE) {
-      switch (ps_parsing) {
+    if (parser->m_errorCode == XML_ERROR_NONE) {
+      switch (parser->m_parsingStatus.parsing) {
       case XML_SUSPENDED:
-        XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position);
-        positionPtr = bufferPtr;
+        /* It is hard to be certain, but it seems that this case
+         * cannot occur.  This code is cleaning up a previous parse
+         * with no new data (since len == 0).  Changing the parsing
+         * state requires getting to execute a handler function, and
+         * there doesn't seem to be an opportunity for that while in
+         * this circumstance.
+         *
+         * Given the uncertainty, we retain the code but exclude it
+         * from coverage tests.
+         *
+         * LCOV_EXCL_START
+         */
+        XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, parser->m_bufferPtr, &parser->m_position);
+        parser->m_positionPtr = parser->m_bufferPtr;
         return XML_STATUS_SUSPENDED;
+        /* LCOV_EXCL_STOP */
       case XML_INITIALIZED:
       case XML_PARSING:
-        ps_parsing = XML_FINISHED;
+        parser->m_parsingStatus.parsing = XML_FINISHED;
         /* fall through */
       default:
         return XML_STATUS_OK;
       }
     }
-    eventEndPtr = eventPtr;
-    processor = errorProcessor;
+    parser->m_eventEndPtr = parser->m_eventPtr;
+    parser->m_processor = errorProcessor;
     return XML_STATUS_ERROR;
   }
 #ifndef XML_CONTEXT_BYTES
-  else if (bufferPtr == bufferEnd) {
+  else if (parser->m_bufferPtr == parser->m_bufferEnd) {
     const char *end;
     int nLeftOver;
     enum XML_Status result;
-    parseEndByteIndex += len;
-    positionPtr = s;
-    ps_finalBuffer = (XML_Bool)isFinal;
+    /* Detect overflow (a+b > MAX <==> b > MAX-a) */
+    if (len > ((XML_Size)-1) / 2 - parser->m_parseEndByteIndex) {
+       parser->m_errorCode = XML_ERROR_NO_MEMORY;
+       parser->m_eventPtr = parser->m_eventEndPtr = NULL;
+       parser->m_processor = errorProcessor;
+       return XML_STATUS_ERROR;
+    }
+    parser->m_parseEndByteIndex += len;
+    parser->m_positionPtr = s;
+    parser->m_parsingStatus.finalBuffer = (XML_Bool)isFinal;
 
-    errorCode = processor(parser, s, parseEndPtr = s + len, &end);
+    parser->m_errorCode = parser->m_processor(parser, s, parser->m_parseEndPtr = s + len, &end);
 
-    if (errorCode != XML_ERROR_NONE) {
-      eventEndPtr = eventPtr;
-      processor = errorProcessor;
+    if (parser->m_errorCode != XML_ERROR_NONE) {
+      parser->m_eventEndPtr = parser->m_eventPtr;
+      parser->m_processor = errorProcessor;
       return XML_STATUS_ERROR;
     }
     else {
-      switch (ps_parsing) {
+      switch (parser->m_parsingStatus.parsing) {
       case XML_SUSPENDED:
         result = XML_STATUS_SUSPENDED;
         break;
       case XML_INITIALIZED:
       case XML_PARSING:
         if (isFinal) {
-          ps_parsing = XML_FINISHED;
+          parser->m_parsingStatus.parsing = XML_FINISHED;
           return XML_STATUS_OK;
         }
       /* fall through */
@@ -1614,32 +1912,33 @@
       }
     }
 
-    XmlUpdatePosition(encoding, positionPtr, end, &position);
+    XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, end, &parser->m_position);
     nLeftOver = s + len - end;
     if (nLeftOver) {
-      if (buffer == NULL || nLeftOver > bufferLim - buffer) {
-        /* FIXME avoid integer overflow */
-        char *temp;
-        temp = (buffer == NULL
-                ? (char *)MALLOC(len * 2)
-                : (char *)REALLOC(buffer, len * 2));
+      if (parser->m_buffer == NULL || nLeftOver > parser->m_bufferLim - parser->m_buffer) {
+        /* avoid _signed_ integer overflow */
+        char *temp = NULL;
+        const int bytesToAllocate = (int)((unsigned)len * 2U);
+        if (bytesToAllocate > 0) {
+          temp = (char *)REALLOC(parser, parser->m_buffer, bytesToAllocate);
+        }
         if (temp == NULL) {
-          errorCode = XML_ERROR_NO_MEMORY;
-          eventPtr = eventEndPtr = NULL;
-          processor = errorProcessor;
+          parser->m_errorCode = XML_ERROR_NO_MEMORY;
+          parser->m_eventPtr = parser->m_eventEndPtr = NULL;
+          parser->m_processor = errorProcessor;
           return XML_STATUS_ERROR;
         }
-        buffer = temp;
-        bufferLim = buffer + len * 2;
+        parser->m_buffer = temp;
+        parser->m_bufferLim = parser->m_buffer + bytesToAllocate;
       }
-      memcpy(buffer, end, nLeftOver);
+      memcpy(parser->m_buffer, end, nLeftOver);
     }
-    bufferPtr = buffer;
-    bufferEnd = buffer + nLeftOver;
-    positionPtr = bufferPtr;
-    parseEndPtr = bufferEnd;
-    eventPtr = bufferPtr;
-    eventEndPtr = bufferPtr;
+    parser->m_bufferPtr = parser->m_buffer;
+    parser->m_bufferEnd = parser->m_buffer + nLeftOver;
+    parser->m_positionPtr = parser->m_bufferPtr;
+    parser->m_parseEndPtr = parser->m_bufferEnd;
+    parser->m_eventPtr = parser->m_bufferPtr;
+    parser->m_eventEndPtr = parser->m_bufferPtr;
     return result;
   }
 #endif  /* not defined XML_CONTEXT_BYTES */
@@ -1660,177 +1959,201 @@
   const char *start;
   enum XML_Status result = XML_STATUS_OK;
 
-  switch (ps_parsing) {
+  if (parser == NULL)
+    return XML_STATUS_ERROR;
+  switch (parser->m_parsingStatus.parsing) {
   case XML_SUSPENDED:
-    errorCode = XML_ERROR_SUSPENDED;
+    parser->m_errorCode = XML_ERROR_SUSPENDED;
     return XML_STATUS_ERROR;
   case XML_FINISHED:
-    errorCode = XML_ERROR_FINISHED;
+    parser->m_errorCode = XML_ERROR_FINISHED;
     return XML_STATUS_ERROR;
   case XML_INITIALIZED:
-    if (parentParser == NULL && !startParsing(parser)) {
-      errorCode = XML_ERROR_NO_MEMORY;
+    if (parser->m_parentParser == NULL && !startParsing(parser)) {
+      parser->m_errorCode = XML_ERROR_NO_MEMORY;
       return XML_STATUS_ERROR;
     }
+    /* fall through */
   default:
-    ps_parsing = XML_PARSING;
+    parser->m_parsingStatus.parsing = XML_PARSING;
   }
 
-  start = bufferPtr;
-  positionPtr = start;
-  bufferEnd += len;
-  parseEndPtr = bufferEnd;
-  parseEndByteIndex += len;
-  ps_finalBuffer = (XML_Bool)isFinal;
+  start = parser->m_bufferPtr;
+  parser->m_positionPtr = start;
+  parser->m_bufferEnd += len;
+  parser->m_parseEndPtr = parser->m_bufferEnd;
+  parser->m_parseEndByteIndex += len;
+  parser->m_parsingStatus.finalBuffer = (XML_Bool)isFinal;
 
-  errorCode = processor(parser, start, parseEndPtr, &bufferPtr);
+  parser->m_errorCode = parser->m_processor(parser, start, parser->m_parseEndPtr, &parser->m_bufferPtr);
 
-  if (errorCode != XML_ERROR_NONE) {
-    eventEndPtr = eventPtr;
-    processor = errorProcessor;
+  if (parser->m_errorCode != XML_ERROR_NONE) {
+    parser->m_eventEndPtr = parser->m_eventPtr;
+    parser->m_processor = errorProcessor;
     return XML_STATUS_ERROR;
   }
   else {
-    switch (ps_parsing) {
+    switch (parser->m_parsingStatus.parsing) {
     case XML_SUSPENDED:
       result = XML_STATUS_SUSPENDED;
       break;
     case XML_INITIALIZED:
     case XML_PARSING:
       if (isFinal) {
-        ps_parsing = XML_FINISHED;
+        parser->m_parsingStatus.parsing = XML_FINISHED;
         return result;
       }
     default: ;  /* should not happen */
     }
   }
 
-  XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position);
-  positionPtr = bufferPtr;
+  XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, parser->m_bufferPtr, &parser->m_position);
+  parser->m_positionPtr = parser->m_bufferPtr;
   return result;
 }
 
 void * XMLCALL
 XML_GetBuffer(XML_Parser parser, int len)
 {
+  if (parser == NULL)
+    return NULL;
   if (len < 0) {
-    errorCode = XML_ERROR_NO_MEMORY;
+    parser->m_errorCode = XML_ERROR_NO_MEMORY;
     return NULL;
   }
-  switch (ps_parsing) {
+  switch (parser->m_parsingStatus.parsing) {
   case XML_SUSPENDED:
-    errorCode = XML_ERROR_SUSPENDED;
+    parser->m_errorCode = XML_ERROR_SUSPENDED;
     return NULL;
   case XML_FINISHED:
-    errorCode = XML_ERROR_FINISHED;
+    parser->m_errorCode = XML_ERROR_FINISHED;
     return NULL;
   default: ;
   }
 
-  if (len > bufferLim - bufferEnd) {
+  if (len > EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_bufferEnd)) {
 #ifdef XML_CONTEXT_BYTES
     int keep;
-#endif
-    int neededSize = len + (int)(bufferEnd - bufferPtr);
+#endif  /* defined XML_CONTEXT_BYTES */
+    /* Do not invoke signed arithmetic overflow: */
+    int neededSize = (int) ((unsigned)len +
+                            (unsigned)EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd,
+                                                          parser->m_bufferPtr));
     if (neededSize < 0) {
-      errorCode = XML_ERROR_NO_MEMORY;
+      parser->m_errorCode = XML_ERROR_NO_MEMORY;
       return NULL;
     }
 #ifdef XML_CONTEXT_BYTES
-    keep = (int)(bufferPtr - buffer);
-
+    keep = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer);
     if (keep > XML_CONTEXT_BYTES)
       keep = XML_CONTEXT_BYTES;
     neededSize += keep;
 #endif  /* defined XML_CONTEXT_BYTES */
-    if (neededSize  <= bufferLim - buffer) {
+    if (neededSize <= EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_buffer)) {
 #ifdef XML_CONTEXT_BYTES
-      if (keep < bufferPtr - buffer) {
-        int offset = (int)(bufferPtr - buffer) - keep;
-        memmove(buffer, &buffer[offset], bufferEnd - bufferPtr + keep);
-        bufferEnd -= offset;
-        bufferPtr -= offset;
+      if (keep < EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer)) {
+          int offset = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer) - keep;
+        /* The buffer pointers cannot be NULL here; we have at least some bytes in the buffer */
+        memmove(parser->m_buffer, &parser->m_buffer[offset], parser->m_bufferEnd - parser->m_bufferPtr + keep);
+        parser->m_bufferEnd -= offset;
+        parser->m_bufferPtr -= offset;
       }
 #else
-      memmove(buffer, bufferPtr, bufferEnd - bufferPtr);
-      bufferEnd = buffer + (bufferEnd - bufferPtr);
-      bufferPtr = buffer;
+      if (parser->m_buffer && parser->m_bufferPtr) {
+        memmove(parser->m_buffer, parser->m_bufferPtr,
+                EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr));
+        parser->m_bufferEnd = parser->m_buffer +
+            EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr);
+        parser->m_bufferPtr = parser->m_buffer;
+      }
 #endif  /* not defined XML_CONTEXT_BYTES */
     }
     else {
       char *newBuf;
-      int bufferSize = (int)(bufferLim - bufferPtr);
+      int bufferSize = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_bufferPtr);
       if (bufferSize == 0)
         bufferSize = INIT_BUFFER_SIZE;
       do {
-        bufferSize *= 2;
+        /* Do not invoke signed arithmetic overflow: */
+        bufferSize = (int) (2U * (unsigned) bufferSize);
       } while (bufferSize < neededSize && bufferSize > 0);
       if (bufferSize <= 0) {
-        errorCode = XML_ERROR_NO_MEMORY;
+        parser->m_errorCode = XML_ERROR_NO_MEMORY;
         return NULL;
       }
-      newBuf = (char *)MALLOC(bufferSize);
+      newBuf = (char *)MALLOC(parser, bufferSize);
       if (newBuf == 0) {
-        errorCode = XML_ERROR_NO_MEMORY;
+        parser->m_errorCode = XML_ERROR_NO_MEMORY;
         return NULL;
       }
-      bufferLim = newBuf + bufferSize;
+      parser->m_bufferLim = newBuf + bufferSize;
 #ifdef XML_CONTEXT_BYTES
-      if (bufferPtr) {
-        int keep = (int)(bufferPtr - buffer);
+      if (parser->m_bufferPtr) {
+        int keep = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer);
         if (keep > XML_CONTEXT_BYTES)
           keep = XML_CONTEXT_BYTES;
-        memcpy(newBuf, &bufferPtr[-keep], bufferEnd - bufferPtr + keep);
-        FREE(buffer);
-        buffer = newBuf;
-        bufferEnd = buffer + (bufferEnd - bufferPtr) + keep;
-        bufferPtr = buffer + keep;
+        memcpy(newBuf, &parser->m_bufferPtr[-keep],
+               EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr) + keep);
+        FREE(parser, parser->m_buffer);
+        parser->m_buffer = newBuf;
+        parser->m_bufferEnd = parser->m_buffer +
+            EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr) + keep;
+        parser->m_bufferPtr = parser->m_buffer + keep;
       }
       else {
-        bufferEnd = newBuf + (bufferEnd - bufferPtr);
-        bufferPtr = buffer = newBuf;
+        /* This must be a brand new buffer with no data in it yet */
+        parser->m_bufferEnd = newBuf;
+        parser->m_bufferPtr = parser->m_buffer = newBuf;
       }
 #else
-      if (bufferPtr) {
-        memcpy(newBuf, bufferPtr, bufferEnd - bufferPtr);
-        FREE(buffer);
+      if (parser->m_bufferPtr) {
+        memcpy(newBuf, parser->m_bufferPtr,
+               EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr));
+        FREE(parser, parser->m_buffer);
+        parser->m_bufferEnd = newBuf +
+            EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr);
       }
-      bufferEnd = newBuf + (bufferEnd - bufferPtr);
-      bufferPtr = buffer = newBuf;
+      else {
+        /* This must be a brand new buffer with no data in it yet */
+        parser->m_bufferEnd = newBuf;
+      }
+      parser->m_bufferPtr = parser->m_buffer = newBuf;
 #endif  /* not defined XML_CONTEXT_BYTES */
     }
-    eventPtr = eventEndPtr = NULL;
-    positionPtr = NULL;
+    parser->m_eventPtr = parser->m_eventEndPtr = NULL;
+    parser->m_positionPtr = NULL;
   }
-  return bufferEnd;
+  return parser->m_bufferEnd;
 }
 
 enum XML_Status XMLCALL
 XML_StopParser(XML_Parser parser, XML_Bool resumable)
 {
-  switch (ps_parsing) {
+  if (parser == NULL)
+    return XML_STATUS_ERROR;
+  switch (parser->m_parsingStatus.parsing) {
   case XML_SUSPENDED:
     if (resumable) {
-      errorCode = XML_ERROR_SUSPENDED;
+      parser->m_errorCode = XML_ERROR_SUSPENDED;
       return XML_STATUS_ERROR;
     }
-    ps_parsing = XML_FINISHED;
+    parser->m_parsingStatus.parsing = XML_FINISHED;
     break;
   case XML_FINISHED:
-    errorCode = XML_ERROR_FINISHED;
+    parser->m_errorCode = XML_ERROR_FINISHED;
     return XML_STATUS_ERROR;
   default:
     if (resumable) {
 #ifdef XML_DTD
-      if (isParamEntity) {
-        errorCode = XML_ERROR_SUSPEND_PE;
+      if (parser->m_isParamEntity) {
+        parser->m_errorCode = XML_ERROR_SUSPEND_PE;
         return XML_STATUS_ERROR;
       }
 #endif
-      ps_parsing = XML_SUSPENDED;
+      parser->m_parsingStatus.parsing = XML_SUSPENDED;
     }
     else
-      ps_parsing = XML_FINISHED;
+      parser->m_parsingStatus.parsing = XML_FINISHED;
   }
   return XML_STATUS_OK;
 }
@@ -1840,42 +2163,46 @@
 {
   enum XML_Status result = XML_STATUS_OK;
 
-  if (ps_parsing != XML_SUSPENDED) {
-    errorCode = XML_ERROR_NOT_SUSPENDED;
+  if (parser == NULL)
+    return XML_STATUS_ERROR;
+  if (parser->m_parsingStatus.parsing != XML_SUSPENDED) {
+    parser->m_errorCode = XML_ERROR_NOT_SUSPENDED;
     return XML_STATUS_ERROR;
   }
-  ps_parsing = XML_PARSING;
+  parser->m_parsingStatus.parsing = XML_PARSING;
 
-  errorCode = processor(parser, bufferPtr, parseEndPtr, &bufferPtr);
+  parser->m_errorCode = parser->m_processor(parser, parser->m_bufferPtr, parser->m_parseEndPtr, &parser->m_bufferPtr);
 
-  if (errorCode != XML_ERROR_NONE) {
-    eventEndPtr = eventPtr;
-    processor = errorProcessor;
+  if (parser->m_errorCode != XML_ERROR_NONE) {
+    parser->m_eventEndPtr = parser->m_eventPtr;
+    parser->m_processor = errorProcessor;
     return XML_STATUS_ERROR;
   }
   else {
-    switch (ps_parsing) {
+    switch (parser->m_parsingStatus.parsing) {
     case XML_SUSPENDED:
       result = XML_STATUS_SUSPENDED;
       break;
     case XML_INITIALIZED:
     case XML_PARSING:
-      if (ps_finalBuffer) {
-        ps_parsing = XML_FINISHED;
+      if (parser->m_parsingStatus.finalBuffer) {
+        parser->m_parsingStatus.parsing = XML_FINISHED;
         return result;
       }
     default: ;
     }
   }
 
-  XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position);
-  positionPtr = bufferPtr;
+  XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, parser->m_bufferPtr, &parser->m_position);
+  parser->m_positionPtr = parser->m_bufferPtr;
   return result;
 }
 
 void XMLCALL
 XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status)
 {
+  if (parser == NULL)
+    return;
   assert(status != NULL);
   *status = parser->m_parsingStatus;
 }
@@ -1883,22 +2210,28 @@
 enum XML_Error XMLCALL
 XML_GetErrorCode(XML_Parser parser)
 {
-  return errorCode;
+  if (parser == NULL)
+    return XML_ERROR_INVALID_ARGUMENT;
+  return parser->m_errorCode;
 }
 
 XML_Index XMLCALL
 XML_GetCurrentByteIndex(XML_Parser parser)
 {
-  if (eventPtr)
-    return parseEndByteIndex - (parseEndPtr - eventPtr);
+  if (parser == NULL)
+    return -1;
+  if (parser->m_eventPtr)
+    return (XML_Index)(parser->m_parseEndByteIndex - (parser->m_parseEndPtr - parser->m_eventPtr));
   return -1;
 }
 
 int XMLCALL
 XML_GetCurrentByteCount(XML_Parser parser)
 {
-  if (eventEndPtr && eventPtr)
-    return (int)(eventEndPtr - eventPtr);
+  if (parser == NULL)
+    return 0;
+  if (parser->m_eventEndPtr && parser->m_eventPtr)
+    return (int)(parser->m_eventEndPtr - parser->m_eventPtr);
   return 0;
 }
 
@@ -1906,11 +2239,19 @@
 XML_GetInputContext(XML_Parser parser, int *offset, int *size)
 {
 #ifdef XML_CONTEXT_BYTES
-  if (eventPtr && buffer) {
-    *offset = (int)(eventPtr - buffer);
-    *size   = (int)(bufferEnd - buffer);
-    return buffer;
+  if (parser == NULL)
+    return NULL;
+  if (parser->m_eventPtr && parser->m_buffer) {
+    if (offset != NULL)
+      *offset = (int)(parser->m_eventPtr - parser->m_buffer);
+    if (size != NULL)
+      *size   = (int)(parser->m_bufferEnd - parser->m_buffer);
+    return parser->m_buffer;
   }
+#else
+  (void)parser;
+  (void)offset;
+  (void)size;
 #endif /* defined XML_CONTEXT_BYTES */
   return (char *) 0;
 }
@@ -1918,109 +2259,166 @@
 XML_Size XMLCALL
 XML_GetCurrentLineNumber(XML_Parser parser)
 {
-  if (eventPtr && eventPtr >= positionPtr) {
-    XmlUpdatePosition(encoding, positionPtr, eventPtr, &position);
-    positionPtr = eventPtr;
+  if (parser == NULL)
+    return 0;
+  if (parser->m_eventPtr && parser->m_eventPtr >= parser->m_positionPtr) {
+    XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, parser->m_eventPtr, &parser->m_position);
+    parser->m_positionPtr = parser->m_eventPtr;
   }
-  return position.lineNumber + 1;
+  return parser->m_position.lineNumber + 1;
 }
 
 XML_Size XMLCALL
 XML_GetCurrentColumnNumber(XML_Parser parser)
 {
-  if (eventPtr && eventPtr >= positionPtr) {
-    XmlUpdatePosition(encoding, positionPtr, eventPtr, &position);
-    positionPtr = eventPtr;
+  if (parser == NULL)
+    return 0;
+  if (parser->m_eventPtr && parser->m_eventPtr >= parser->m_positionPtr) {
+    XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, parser->m_eventPtr, &parser->m_position);
+    parser->m_positionPtr = parser->m_eventPtr;
   }
-  return position.columnNumber;
+  return parser->m_position.columnNumber;
 }
 
 void XMLCALL
 XML_FreeContentModel(XML_Parser parser, XML_Content *model)
 {
-  FREE(model);
+  if (parser != NULL)
+    FREE(parser, model);
 }
 
 void * XMLCALL
 XML_MemMalloc(XML_Parser parser, size_t size)
 {
-  return MALLOC(size);
+  if (parser == NULL)
+    return NULL;
+  return MALLOC(parser, size);
 }
 
 void * XMLCALL
 XML_MemRealloc(XML_Parser parser, void *ptr, size_t size)
 {
-  return REALLOC(ptr, size);
+  if (parser == NULL)
+    return NULL;
+  return REALLOC(parser, ptr, size);
 }
 
 void XMLCALL
 XML_MemFree(XML_Parser parser, void *ptr)
 {
-  FREE(ptr);
+  if (parser != NULL)
+    FREE(parser, ptr);
 }
 
 void XMLCALL
 XML_DefaultCurrent(XML_Parser parser)
 {
-  if (defaultHandler) {
-    if (openInternalEntities)
+  if (parser == NULL)
+    return;
+  if (parser->m_defaultHandler) {
+    if (parser->m_openInternalEntities)
       reportDefault(parser,
-                    internalEncoding,
-                    openInternalEntities->internalEventPtr,
-                    openInternalEntities->internalEventEndPtr);
+                    parser->m_internalEncoding,
+                    parser->m_openInternalEntities->internalEventPtr,
+                    parser->m_openInternalEntities->internalEventEndPtr);
     else
-      reportDefault(parser, encoding, eventPtr, eventEndPtr);
+      reportDefault(parser, parser->m_encoding, parser->m_eventPtr, parser->m_eventEndPtr);
   }
 }
 
 const XML_LChar * XMLCALL
 XML_ErrorString(enum XML_Error code)
 {
-  static const XML_LChar* const message[] = {
-    0,
-    XML_L("out of memory"),
-    XML_L("syntax error"),
-    XML_L("no element found"),
-    XML_L("not well-formed (invalid token)"),
-    XML_L("unclosed token"),
-    XML_L("partial character"),
-    XML_L("mismatched tag"),
-    XML_L("duplicate attribute"),
-    XML_L("junk after document element"),
-    XML_L("illegal parameter entity reference"),
-    XML_L("undefined entity"),
-    XML_L("recursive entity reference"),
-    XML_L("asynchronous entity"),
-    XML_L("reference to invalid character number"),
-    XML_L("reference to binary entity"),
-    XML_L("reference to external entity in attribute"),
-    XML_L("XML or text declaration not at start of entity"),
-    XML_L("unknown encoding"),
-    XML_L("encoding specified in XML declaration is incorrect"),
-    XML_L("unclosed CDATA section"),
-    XML_L("error in processing external entity reference"),
-    XML_L("document is not standalone"),
-    XML_L("unexpected parser state - please send a bug report"),
-    XML_L("entity declared in parameter entity"),
-    XML_L("requested feature requires XML_DTD support in Expat"),
-    XML_L("cannot change setting once parsing has begun"),
-    XML_L("unbound prefix"),
-    XML_L("must not undeclare prefix"),
-    XML_L("incomplete markup in parameter entity"),
-    XML_L("XML declaration not well-formed"),
-    XML_L("text declaration not well-formed"),
-    XML_L("illegal character(s) in public id"),
-    XML_L("parser suspended"),
-    XML_L("parser not suspended"),
-    XML_L("parsing aborted"),
-    XML_L("parsing finished"),
-    XML_L("cannot suspend in external parameter entity"),
-    XML_L("reserved prefix (xml) must not be undeclared or bound to another namespace name"),
-    XML_L("reserved prefix (xmlns) must not be declared or undeclared"),
-    XML_L("prefix must not be bound to one of the reserved namespace names")
-  };
-  if (code > 0 && code < sizeof(message)/sizeof(message[0]))
-    return message[code];
+  switch (code) {
+  case XML_ERROR_NONE:
+    return NULL;
+  case XML_ERROR_NO_MEMORY:
+    return XML_L("out of memory");
+  case XML_ERROR_SYNTAX:
+    return XML_L("syntax error");
+  case XML_ERROR_NO_ELEMENTS:
+    return XML_L("no element found");
+  case XML_ERROR_INVALID_TOKEN:
+    return XML_L("not well-formed (invalid token)");
+  case XML_ERROR_UNCLOSED_TOKEN:
+    return XML_L("unclosed token");
+  case XML_ERROR_PARTIAL_CHAR:
+    return XML_L("partial character");
+  case XML_ERROR_TAG_MISMATCH:
+    return XML_L("mismatched tag");
+  case XML_ERROR_DUPLICATE_ATTRIBUTE:
+    return XML_L("duplicate attribute");
+  case XML_ERROR_JUNK_AFTER_DOC_ELEMENT:
+    return XML_L("junk after document element");
+  case XML_ERROR_PARAM_ENTITY_REF:
+    return XML_L("illegal parameter entity reference");
+  case XML_ERROR_UNDEFINED_ENTITY:
+    return XML_L("undefined entity");
+  case XML_ERROR_RECURSIVE_ENTITY_REF:
+    return XML_L("recursive entity reference");
+  case XML_ERROR_ASYNC_ENTITY:
+    return XML_L("asynchronous entity");
+  case XML_ERROR_BAD_CHAR_REF:
+    return XML_L("reference to invalid character number");
+  case XML_ERROR_BINARY_ENTITY_REF:
+    return XML_L("reference to binary entity");
+  case XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF:
+    return XML_L("reference to external entity in attribute");
+  case XML_ERROR_MISPLACED_XML_PI:
+    return XML_L("XML or text declaration not at start of entity");
+  case XML_ERROR_UNKNOWN_ENCODING:
+    return XML_L("unknown encoding");
+  case XML_ERROR_INCORRECT_ENCODING:
+    return XML_L("encoding specified in XML declaration is incorrect");
+  case XML_ERROR_UNCLOSED_CDATA_SECTION:
+    return XML_L("unclosed CDATA section");
+  case XML_ERROR_EXTERNAL_ENTITY_HANDLING:
+    return XML_L("error in processing external entity reference");
+  case XML_ERROR_NOT_STANDALONE:
+    return XML_L("document is not standalone");
+  case XML_ERROR_UNEXPECTED_STATE:
+    return XML_L("unexpected parser state - please send a bug report");
+  case XML_ERROR_ENTITY_DECLARED_IN_PE:
+    return XML_L("entity declared in parameter entity");
+  case XML_ERROR_FEATURE_REQUIRES_XML_DTD:
+    return XML_L("requested feature requires XML_DTD support in Expat");
+  case XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING:
+    return XML_L("cannot change setting once parsing has begun");
+  /* Added in 1.95.7. */
+  case XML_ERROR_UNBOUND_PREFIX:
+    return XML_L("unbound prefix");
+  /* Added in 1.95.8. */
+  case XML_ERROR_UNDECLARING_PREFIX:
+    return XML_L("must not undeclare prefix");
+  case XML_ERROR_INCOMPLETE_PE:
+    return XML_L("incomplete markup in parameter entity");
+  case XML_ERROR_XML_DECL:
+    return XML_L("XML declaration not well-formed");
+  case XML_ERROR_TEXT_DECL:
+    return XML_L("text declaration not well-formed");
+  case XML_ERROR_PUBLICID:
+    return XML_L("illegal character(s) in public id");
+  case XML_ERROR_SUSPENDED:
+    return XML_L("parser suspended");
+  case XML_ERROR_NOT_SUSPENDED:
+    return XML_L("parser not suspended");
+  case XML_ERROR_ABORTED:
+    return XML_L("parsing aborted");
+  case XML_ERROR_FINISHED:
+    return XML_L("parsing finished");
+  case XML_ERROR_SUSPEND_PE:
+    return XML_L("cannot suspend in external parameter entity");
+  /* Added in 2.0.0. */
+  case XML_ERROR_RESERVED_PREFIX_XML:
+    return XML_L("reserved prefix (xml) must not be undeclared or bound to another namespace name");
+  case XML_ERROR_RESERVED_PREFIX_XMLNS:
+    return XML_L("reserved prefix (xmlns) must not be declared or undeclared");
+  case XML_ERROR_RESERVED_NAMESPACE_URI:
+    return XML_L("prefix must not be bound to one of the reserved namespace names");
+  /* Added in 2.2.5. */
+  case XML_ERROR_INVALID_ARGUMENT:  /* Constant added in 2.2.1, already */
+    return XML_L("invalid argument");
+  }
   return NULL;
 }
 
@@ -2103,12 +2501,12 @@
 static XML_Bool
 storeRawNames(XML_Parser parser)
 {
-  TAG *tag = tagStack;
+  TAG *tag = parser->m_tagStack;
   while (tag) {
     int bufSize;
     int nameLen = sizeof(XML_Char) * (tag->name.strLen + 1);
     char *rawNameBuf = tag->buf + nameLen;
-    /* Stop if already stored.  Since tagStack is a stack, we can stop
+    /* Stop if already stored.  Since m_tagStack is a stack, we can stop
        at the first entry that has already been copied; everything
        below it in the stack is already been accounted for in a
        previous call to this function.
@@ -2120,7 +2518,7 @@
     */
     bufSize = nameLen + ROUND_UP(tag->rawNameLength, sizeof(XML_Char));
     if (bufSize > tag->bufEnd - tag->buf) {
-      char *temp = (char *)REALLOC(tag->buf, bufSize);
+      char *temp = (char *)REALLOC(parser, tag->buf, bufSize);
       if (temp == NULL)
         return XML_FALSE;
       /* if tag->name.str points to tag->buf (only when namespace
@@ -2151,8 +2549,8 @@
                  const char *end,
                  const char **endPtr)
 {
-  enum XML_Error result = doContent(parser, 0, encoding, start, end,
-                                    endPtr, (XML_Bool)!ps_finalBuffer);
+  enum XML_Error result = doContent(parser, 0, parser->m_encoding, start, end,
+                                    endPtr, (XML_Bool)!parser->m_parsingStatus.finalBuffer);
   if (result == XML_ERROR_NONE) {
     if (!storeRawNames(parser))
       return XML_ERROR_NO_MEMORY;
@@ -2169,7 +2567,7 @@
   enum XML_Error result = initializeEncoding(parser);
   if (result != XML_ERROR_NONE)
     return result;
-  processor = externalEntityInitProcessor2;
+  parser->m_processor = externalEntityInitProcessor2;
   return externalEntityInitProcessor2(parser, start, end, endPtr);
 }
 
@@ -2180,7 +2578,7 @@
                              const char **endPtr)
 {
   const char *next = start; /* XmlContentTok doesn't always set the last arg */
-  int tok = XmlContentTok(encoding, start, end, &next);
+  int tok = XmlContentTok(parser->m_encoding, start, end, &next);
   switch (tok) {
   case XML_TOK_BOM:
     /* If we are at the end of the buffer, this would cause the next stage,
@@ -2188,28 +2586,28 @@
        doContent (by detecting XML_TOK_NONE) without processing any xml text
        declaration - causing the error XML_ERROR_MISPLACED_XML_PI in doContent.
     */
-    if (next == end && !ps_finalBuffer) {
+    if (next == end && !parser->m_parsingStatus.finalBuffer) {
       *endPtr = next;
       return XML_ERROR_NONE;
     }
     start = next;
     break;
   case XML_TOK_PARTIAL:
-    if (!ps_finalBuffer) {
+    if (!parser->m_parsingStatus.finalBuffer) {
       *endPtr = start;
       return XML_ERROR_NONE;
     }
-    eventPtr = start;
+    parser->m_eventPtr = start;
     return XML_ERROR_UNCLOSED_TOKEN;
   case XML_TOK_PARTIAL_CHAR:
-    if (!ps_finalBuffer) {
+    if (!parser->m_parsingStatus.finalBuffer) {
       *endPtr = start;
       return XML_ERROR_NONE;
     }
-    eventPtr = start;
+    parser->m_eventPtr = start;
     return XML_ERROR_PARTIAL_CHAR;
   }
-  processor = externalEntityInitProcessor3;
+  parser->m_processor = externalEntityInitProcessor3;
   return externalEntityInitProcessor3(parser, start, end, endPtr);
 }
 
@@ -2221,9 +2619,9 @@
 {
   int tok;
   const char *next = start; /* XmlContentTok doesn't always set the last arg */
-  eventPtr = start;
-  tok = XmlContentTok(encoding, start, end, &next);
-  eventEndPtr = next;
+  parser->m_eventPtr = start;
+  tok = XmlContentTok(parser->m_encoding, start, end, &next);
+  parser->m_eventEndPtr = next;
 
   switch (tok) {
   case XML_TOK_XML_DECL:
@@ -2232,7 +2630,7 @@
       result = processXmlDecl(parser, 1, start, next);
       if (result != XML_ERROR_NONE)
         return result;
-      switch (ps_parsing) {
+      switch (parser->m_parsingStatus.parsing) {
       case XML_SUSPENDED:
         *endPtr = next;
         return XML_ERROR_NONE;
@@ -2244,20 +2642,20 @@
     }
     break;
   case XML_TOK_PARTIAL:
-    if (!ps_finalBuffer) {
+    if (!parser->m_parsingStatus.finalBuffer) {
       *endPtr = start;
       return XML_ERROR_NONE;
     }
     return XML_ERROR_UNCLOSED_TOKEN;
   case XML_TOK_PARTIAL_CHAR:
-    if (!ps_finalBuffer) {
+    if (!parser->m_parsingStatus.finalBuffer) {
       *endPtr = start;
       return XML_ERROR_NONE;
     }
     return XML_ERROR_PARTIAL_CHAR;
   }
-  processor = externalEntityContentProcessor;
-  tagLevel = 1;
+  parser->m_processor = externalEntityContentProcessor;
+  parser->m_tagLevel = 1;
   return externalEntityContentProcessor(parser, start, end, endPtr);
 }
 
@@ -2267,8 +2665,8 @@
                                const char *end,
                                const char **endPtr)
 {
-  enum XML_Error result = doContent(parser, 1, encoding, start, end,
-                                    endPtr, (XML_Bool)!ps_finalBuffer);
+  enum XML_Error result = doContent(parser, 1, parser->m_encoding, start, end,
+                                    endPtr, (XML_Bool)!parser->m_parsingStatus.finalBuffer);
   if (result == XML_ERROR_NONE) {
     if (!storeRawNames(parser))
       return XML_ERROR_NO_MEMORY;
@@ -2286,17 +2684,17 @@
           XML_Bool haveMore)
 {
   /* save one level of indirection */
-  DTD * const dtd = _dtd;
+  DTD * const dtd = parser->m_dtd;
 
   const char **eventPP;
   const char **eventEndPP;
-  if (enc == encoding) {
-    eventPP = &eventPtr;
-    eventEndPP = &eventEndPtr;
+  if (enc == parser->m_encoding) {
+    eventPP = &parser->m_eventPtr;
+    eventEndPP = &parser->m_eventEndPtr;
   }
   else {
-    eventPP = &(openInternalEntities->internalEventPtr);
-    eventEndPP = &(openInternalEntities->internalEventEndPtr);
+    eventPP = &(parser->m_openInternalEntities->internalEventPtr);
+    eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr);
   }
   *eventPP = s;
 
@@ -2311,18 +2709,18 @@
         return XML_ERROR_NONE;
       }
       *eventEndPP = end;
-      if (characterDataHandler) {
+      if (parser->m_characterDataHandler) {
         XML_Char c = 0xA;
-        characterDataHandler(handlerArg, &c, 1);
+        parser->m_characterDataHandler(parser->m_handlerArg, &c, 1);
       }
-      else if (defaultHandler)
+      else if (parser->m_defaultHandler)
         reportDefault(parser, enc, s, end);
       /* We are at the end of the final buffer, should we check for
          XML_SUSPENDED, XML_FINISHED?
       */
       if (startTagLevel == 0)
         return XML_ERROR_NO_ELEMENTS;
-      if (tagLevel != startTagLevel)
+      if (parser->m_tagLevel != startTagLevel)
         return XML_ERROR_ASYNC_ENTITY;
       *nextPtr = end;
       return XML_ERROR_NONE;
@@ -2332,7 +2730,7 @@
         return XML_ERROR_NONE;
       }
       if (startTagLevel > 0) {
-        if (tagLevel != startTagLevel)
+        if (parser->m_tagLevel != startTagLevel)
           return XML_ERROR_ASYNC_ENTITY;
         *nextPtr = s;
         return XML_ERROR_NONE;
@@ -2361,9 +2759,9 @@
                                               s + enc->minBytesPerChar,
                                               next - enc->minBytesPerChar);
         if (ch) {
-          if (characterDataHandler)
-            characterDataHandler(handlerArg, &ch, 1);
-          else if (defaultHandler)
+          if (parser->m_characterDataHandler)
+            parser->m_characterDataHandler(parser->m_handlerArg, &ch, 1);
+          else if (parser->m_defaultHandler)
             reportDefault(parser, enc, s, next);
           break;
         }
@@ -2385,9 +2783,9 @@
             return XML_ERROR_ENTITY_DECLARED_IN_PE;
         }
         else if (!entity) {
-          if (skippedEntityHandler)
-            skippedEntityHandler(handlerArg, name, 0);
-          else if (defaultHandler)
+          if (parser->m_skippedEntityHandler)
+            parser->m_skippedEntityHandler(parser->m_handlerArg, name, 0);
+          else if (parser->m_defaultHandler)
             reportDefault(parser, enc, s, next);
           break;
         }
@@ -2397,10 +2795,10 @@
           return XML_ERROR_BINARY_ENTITY_REF;
         if (entity->textPtr) {
           enum XML_Error result;
-          if (!defaultExpandInternalEntities) {
-            if (skippedEntityHandler)
-              skippedEntityHandler(handlerArg, entity->name, 0);
-            else if (defaultHandler)
+          if (!parser->m_defaultExpandInternalEntities) {
+            if (parser->m_skippedEntityHandler)
+              parser->m_skippedEntityHandler(parser->m_handlerArg, entity->name, 0);
+            else if (parser->m_defaultHandler)
               reportDefault(parser, enc, s, next);
             break;
           }
@@ -2408,22 +2806,22 @@
           if (result != XML_ERROR_NONE)
             return result;
         }
-        else if (externalEntityRefHandler) {
+        else if (parser->m_externalEntityRefHandler) {
           const XML_Char *context;
           entity->open = XML_TRUE;
           context = getContext(parser);
           entity->open = XML_FALSE;
           if (!context)
             return XML_ERROR_NO_MEMORY;
-          if (!externalEntityRefHandler(externalEntityRefHandlerArg,
+          if (!parser->m_externalEntityRefHandler(parser->m_externalEntityRefHandlerArg,
                                         context,
                                         entity->base,
                                         entity->systemId,
                                         entity->publicId))
             return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
-          poolDiscard(&tempPool);
+          poolDiscard(&parser->m_tempPool);
         }
-        else if (defaultHandler)
+        else if (parser->m_defaultHandler)
           reportDefault(parser, enc, s, next);
         break;
       }
@@ -2434,29 +2832,29 @@
         TAG *tag;
         enum XML_Error result;
         XML_Char *toPtr;
-        if (freeTagList) {
-          tag = freeTagList;
-          freeTagList = freeTagList->parent;
+        if (parser->m_freeTagList) {
+          tag = parser->m_freeTagList;
+          parser->m_freeTagList = parser->m_freeTagList->parent;
         }
         else {
-          tag = (TAG *)MALLOC(sizeof(TAG));
+          tag = (TAG *)MALLOC(parser, sizeof(TAG));
           if (!tag)
             return XML_ERROR_NO_MEMORY;
-          tag->buf = (char *)MALLOC(INIT_TAG_BUF_SIZE);
+          tag->buf = (char *)MALLOC(parser, INIT_TAG_BUF_SIZE);
           if (!tag->buf) {
-            FREE(tag);
+            FREE(parser, tag);
             return XML_ERROR_NO_MEMORY;
           }
           tag->bufEnd = tag->buf + INIT_TAG_BUF_SIZE;
         }
         tag->bindings = NULL;
-        tag->parent = tagStack;
-        tagStack = tag;
+        tag->parent = parser->m_tagStack;
+        parser->m_tagStack = tag;
         tag->name.localPart = NULL;
         tag->name.prefix = NULL;
         tag->rawName = s + enc->minBytesPerChar;
         tag->rawNameLength = XmlNameLength(enc, tag->rawName);
-        ++tagLevel;
+        ++parser->m_tagLevel;
         {
           const char *rawNameEnd = tag->rawName + tag->rawNameLength;
           const char *fromPtr = tag->rawName;
@@ -2464,17 +2862,17 @@
           for (;;) {
             int bufSize;
             int convLen;
-            XmlConvert(enc,
+            const enum XML_Convert_Result convert_res = XmlConvert(enc,
                        &fromPtr, rawNameEnd,
                        (ICHAR **)&toPtr, (ICHAR *)tag->bufEnd - 1);
             convLen = (int)(toPtr - (XML_Char *)tag->buf);
-            if (fromPtr == rawNameEnd) {
+            if ((fromPtr >= rawNameEnd) || (convert_res == XML_CONVERT_INPUT_INCOMPLETE)) {
               tag->name.strLen = convLen;
               break;
             }
             bufSize = (int)(tag->bufEnd - tag->buf) << 1;
             {
-              char *temp = (char *)REALLOC(tag->buf, bufSize);
+              char *temp = (char *)REALLOC(parser, tag->buf, bufSize);
               if (temp == NULL)
                 return XML_ERROR_NO_MEMORY;
               tag->buf = temp;
@@ -2488,12 +2886,12 @@
         result = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings));
         if (result)
           return result;
-        if (startElementHandler)
-          startElementHandler(handlerArg, tag->name.str,
-                              (const XML_Char **)atts);
-        else if (defaultHandler)
+        if (parser->m_startElementHandler)
+          parser->m_startElementHandler(parser->m_handlerArg, tag->name.str,
+                              (const XML_Char **)parser->m_atts);
+        else if (parser->m_defaultHandler)
           reportDefault(parser, enc, s, next);
-        poolClear(&tempPool);
+        poolClear(&parser->m_tempPool);
         break;
       }
     case XML_TOK_EMPTY_ELEMENT_NO_ATTS:
@@ -2505,51 +2903,49 @@
         BINDING *bindings = NULL;
         XML_Bool noElmHandlers = XML_TRUE;
         TAG_NAME name;
-        name.str = poolStoreString(&tempPool, enc, rawName,
+        name.str = poolStoreString(&parser->m_tempPool, enc, rawName,
                                    rawName + XmlNameLength(enc, rawName));
         if (!name.str)
           return XML_ERROR_NO_MEMORY;
-        poolFinish(&tempPool);
+        poolFinish(&parser->m_tempPool);
         result = storeAtts(parser, enc, s, &name, &bindings);
-        if (result)
+        if (result != XML_ERROR_NONE) {
+          freeBindings(parser, bindings);
           return result;
-        poolFinish(&tempPool);
-        if (startElementHandler) {
-          startElementHandler(handlerArg, name.str, (const XML_Char **)atts);
+        }
+        poolFinish(&parser->m_tempPool);
+        if (parser->m_startElementHandler) {
+          parser->m_startElementHandler(parser->m_handlerArg, name.str, (const XML_Char **)parser->m_atts);
           noElmHandlers = XML_FALSE;
         }
-        if (endElementHandler) {
-          if (startElementHandler)
+        if (parser->m_endElementHandler) {
+          if (parser->m_startElementHandler)
             *eventPP = *eventEndPP;
-          endElementHandler(handlerArg, name.str);
+          parser->m_endElementHandler(parser->m_handlerArg, name.str);
           noElmHandlers = XML_FALSE;
         }
-        if (noElmHandlers && defaultHandler)
+        if (noElmHandlers && parser->m_defaultHandler)
           reportDefault(parser, enc, s, next);
-        poolClear(&tempPool);
-        while (bindings) {
-          BINDING *b = bindings;
-          if (endNamespaceDeclHandler)
-            endNamespaceDeclHandler(handlerArg, b->prefix->name);
-          bindings = bindings->nextTagBinding;
-          b->nextTagBinding = freeBindingList;
-          freeBindingList = b;
-          b->prefix->binding = b->prevPrefixBinding;
-        }
+        poolClear(&parser->m_tempPool);
+        freeBindings(parser, bindings);
       }
-      if (tagLevel == 0)
-        return epilogProcessor(parser, next, end, nextPtr);
+      if ((parser->m_tagLevel == 0) && (parser->m_parsingStatus.parsing != XML_FINISHED)) {
+        if (parser->m_parsingStatus.parsing == XML_SUSPENDED)
+          parser->m_processor = epilogProcessor;
+        else
+          return epilogProcessor(parser, next, end, nextPtr);
+      }
       break;
     case XML_TOK_END_TAG:
-      if (tagLevel == startTagLevel)
+      if (parser->m_tagLevel == startTagLevel)
         return XML_ERROR_ASYNC_ENTITY;
       else {
         int len;
         const char *rawName;
-        TAG *tag = tagStack;
-        tagStack = tag->parent;
-        tag->parent = freeTagList;
-        freeTagList = tag;
+        TAG *tag = parser->m_tagStack;
+        parser->m_tagStack = tag->parent;
+        tag->parent = parser->m_freeTagList;
+        parser->m_freeTagList = tag;
         rawName = s + enc->minBytesPerChar*2;
         len = XmlNameLength(enc, rawName);
         if (len != tag->rawNameLength
@@ -2557,13 +2953,13 @@
           *eventPP = rawName;
           return XML_ERROR_TAG_MISMATCH;
         }
-        --tagLevel;
-        if (endElementHandler) {
+        --parser->m_tagLevel;
+        if (parser->m_endElementHandler) {
           const XML_Char *localPart;
           const XML_Char *prefix;
           XML_Char *uri;
           localPart = tag->name.localPart;
-          if (ns && localPart) {
+          if (parser->m_ns && localPart) {
             /* localPart and prefix may have been overwritten in
                tag->name.str, since this points to the binding->uri
                buffer which gets re-used; so we have to add them again
@@ -2572,26 +2968,26 @@
             /* don't need to check for space - already done in storeAtts() */
             while (*localPart) *uri++ = *localPart++;
             prefix = (XML_Char *)tag->name.prefix;
-            if (ns_triplets && prefix) {
-              *uri++ = namespaceSeparator;
+            if (parser->m_ns_triplets && prefix) {
+              *uri++ = parser->m_namespaceSeparator;
               while (*prefix) *uri++ = *prefix++;
              }
             *uri = XML_T('\0');
           }
-          endElementHandler(handlerArg, tag->name.str);
+          parser->m_endElementHandler(parser->m_handlerArg, tag->name.str);
         }
-        else if (defaultHandler)
+        else if (parser->m_defaultHandler)
           reportDefault(parser, enc, s, next);
         while (tag->bindings) {
           BINDING *b = tag->bindings;
-          if (endNamespaceDeclHandler)
-            endNamespaceDeclHandler(handlerArg, b->prefix->name);
+          if (parser->m_endNamespaceDeclHandler)
+            parser->m_endNamespaceDeclHandler(parser->m_handlerArg, b->prefix->name);
           tag->bindings = tag->bindings->nextTagBinding;
-          b->nextTagBinding = freeBindingList;
-          freeBindingList = b;
+          b->nextTagBinding = parser->m_freeBindingList;
+          parser->m_freeBindingList = b;
           b->prefix->binding = b->prevPrefixBinding;
         }
-        if (tagLevel == 0)
+        if (parser->m_tagLevel == 0)
           return epilogProcessor(parser, next, end, nextPtr);
       }
       break;
@@ -2600,29 +2996,29 @@
         int n = XmlCharRefNumber(enc, s);
         if (n < 0)
           return XML_ERROR_BAD_CHAR_REF;
-        if (characterDataHandler) {
+        if (parser->m_characterDataHandler) {
           XML_Char buf[XML_ENCODE_MAX];
-          characterDataHandler(handlerArg, buf, XmlEncode(n, (ICHAR *)buf));
+          parser->m_characterDataHandler(parser->m_handlerArg, buf, XmlEncode(n, (ICHAR *)buf));
         }
-        else if (defaultHandler)
+        else if (parser->m_defaultHandler)
           reportDefault(parser, enc, s, next);
       }
       break;
     case XML_TOK_XML_DECL:
       return XML_ERROR_MISPLACED_XML_PI;
     case XML_TOK_DATA_NEWLINE:
-      if (characterDataHandler) {
+      if (parser->m_characterDataHandler) {
         XML_Char c = 0xA;
-        characterDataHandler(handlerArg, &c, 1);
+        parser->m_characterDataHandler(parser->m_handlerArg, &c, 1);
       }
-      else if (defaultHandler)
+      else if (parser->m_defaultHandler)
         reportDefault(parser, enc, s, next);
       break;
     case XML_TOK_CDATA_SECT_OPEN:
       {
         enum XML_Error result;
-        if (startCdataSectionHandler)
-          startCdataSectionHandler(handlerArg);
+        if (parser->m_startCdataSectionHandler)
+          parser->m_startCdataSectionHandler(parser->m_handlerArg);
 #if 0
         /* Suppose you doing a transformation on a document that involves
            changing only the character data.  You set up a defaultHandler
@@ -2636,16 +3032,16 @@
            However, now we have a start/endCdataSectionHandler, so it seems
            easier to let the user deal with this.
         */
-        else if (characterDataHandler)
-          characterDataHandler(handlerArg, dataBuf, 0);
+        else if (parser->m_characterDataHandler)
+          parser->m_characterDataHandler(parser->m_handlerArg, parser->m_dataBuf, 0);
 #endif
-        else if (defaultHandler)
+        else if (parser->m_defaultHandler)
           reportDefault(parser, enc, s, next);
         result = doCdataSection(parser, enc, &next, end, nextPtr, haveMore);
         if (result != XML_ERROR_NONE)
           return result;
         else if (!next) {
-          processor = cdataSectionProcessor;
+          parser->m_processor = cdataSectionProcessor;
           return result;
         }
       }
@@ -2655,19 +3051,19 @@
         *nextPtr = s;
         return XML_ERROR_NONE;
       }
-      if (characterDataHandler) {
+      if (parser->m_characterDataHandler) {
         if (MUST_CONVERT(enc, s)) {
-          ICHAR *dataPtr = (ICHAR *)dataBuf;
-          XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd);
-          characterDataHandler(handlerArg, dataBuf,
-                               (int)(dataPtr - (ICHAR *)dataBuf));
+          ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf;
+          XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)parser->m_dataBufEnd);
+          parser->m_characterDataHandler(parser->m_handlerArg, parser->m_dataBuf,
+                               (int)(dataPtr - (ICHAR *)parser->m_dataBuf));
         }
         else
-          characterDataHandler(handlerArg,
+          parser->m_characterDataHandler(parser->m_handlerArg,
                                (XML_Char *)s,
                                (int)((XML_Char *)end - (XML_Char *)s));
       }
-      else if (defaultHandler)
+      else if (parser->m_defaultHandler)
         reportDefault(parser, enc, s, end);
       /* We are at the end of the final buffer, should we check for
          XML_SUSPENDED, XML_FINISHED?
@@ -2676,7 +3072,7 @@
         *eventPP = end;
         return XML_ERROR_NO_ELEMENTS;
       }
-      if (tagLevel != startTagLevel) {
+      if (parser->m_tagLevel != startTagLevel) {
         *eventPP = end;
         return XML_ERROR_ASYNC_ENTITY;
       }
@@ -2684,26 +3080,26 @@
       return XML_ERROR_NONE;
     case XML_TOK_DATA_CHARS:
       {
-        XML_CharacterDataHandler charDataHandler = characterDataHandler;
+        XML_CharacterDataHandler charDataHandler = parser->m_characterDataHandler;
         if (charDataHandler) {
           if (MUST_CONVERT(enc, s)) {
             for (;;) {
-              ICHAR *dataPtr = (ICHAR *)dataBuf;
-              XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd);
+              ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf;
+              const enum XML_Convert_Result convert_res = XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)parser->m_dataBufEnd);
               *eventEndPP = s;
-              charDataHandler(handlerArg, dataBuf,
-                              (int)(dataPtr - (ICHAR *)dataBuf));
-              if (s == next)
+              charDataHandler(parser->m_handlerArg, parser->m_dataBuf,
+                              (int)(dataPtr - (ICHAR *)parser->m_dataBuf));
+              if ((convert_res == XML_CONVERT_COMPLETED) || (convert_res == XML_CONVERT_INPUT_INCOMPLETE))
                 break;
               *eventPP = s;
             }
           }
           else
-            charDataHandler(handlerArg,
+            charDataHandler(parser->m_handlerArg,
                             (XML_Char *)s,
                             (int)((XML_Char *)next - (XML_Char *)s));
         }
-        else if (defaultHandler)
+        else if (parser->m_defaultHandler)
           reportDefault(parser, enc, s, next);
       }
       break;
@@ -2716,12 +3112,20 @@
         return XML_ERROR_NO_MEMORY;
       break;
     default:
-      if (defaultHandler)
+      /* All of the tokens produced by XmlContentTok() have their own
+       * explicit cases, so this default is not strictly necessary.
+       * However it is a useful safety net, so we retain the code and
+       * simply exclude it from the coverage tests.
+       *
+       * LCOV_EXCL_START
+       */
+      if (parser->m_defaultHandler)
         reportDefault(parser, enc, s, next);
       break;
+      /* LCOV_EXCL_STOP */
     }
     *eventPP = s = next;
-    switch (ps_parsing) {
+    switch (parser->m_parsingStatus.parsing) {
     case XML_SUSPENDED:
       *nextPtr = next;
       return XML_ERROR_NONE;
@@ -2733,6 +3137,29 @@
   /* not reached */
 }
 
+/* This function does not call free() on the allocated memory, merely
+ * moving it to the parser's m_freeBindingList where it can be freed or
+ * reused as appropriate.
+ */
+static void
+freeBindings(XML_Parser parser, BINDING *bindings)
+{
+  while (bindings) {
+    BINDING *b = bindings;
+
+    /* m_startNamespaceDeclHandler will have been called for this
+     * binding in addBindings(), so call the end handler now.
+     */
+    if (parser->m_endNamespaceDeclHandler)
+        parser->m_endNamespaceDeclHandler(parser->m_handlerArg, b->prefix->name);
+
+    bindings = bindings->nextTagBinding;
+    b->nextTagBinding = parser->m_freeBindingList;
+    parser->m_freeBindingList = b;
+    b->prefix->binding = b->prevPrefixBinding;
+  }
+}
+
 /* Precondition: all arguments must be non-NULL;
    Purpose:
    - normalize attributes
@@ -2748,7 +3175,7 @@
           const char *attStr, TAG_NAME *tagNamePtr,
           BINDING **bindingsPtr)
 {
-  DTD * const dtd = _dtd;  /* save one level of indirection */
+  DTD * const dtd = parser->m_dtd;  /* save one level of indirection */
   ELEMENT_TYPE *elementType;
   int nDefaultAtts;
   const XML_Char **appAtts;   /* the attribute list for the application */
@@ -2771,39 +3198,43 @@
                                          sizeof(ELEMENT_TYPE));
     if (!elementType)
       return XML_ERROR_NO_MEMORY;
-    if (ns && !setElementTypePrefix(parser, elementType))
+    if (parser->m_ns && !setElementTypePrefix(parser, elementType))
       return XML_ERROR_NO_MEMORY;
   }
   nDefaultAtts = elementType->nDefaultAtts;
 
   /* get the attributes from the tokenizer */
-  n = XmlGetAttributes(enc, attStr, attsSize, atts);
-  if (n + nDefaultAtts > attsSize) {
-    int oldAttsSize = attsSize;
+  n = XmlGetAttributes(enc, attStr, parser->m_attsSize, parser->m_atts);
+  if (n + nDefaultAtts > parser->m_attsSize) {
+    int oldAttsSize = parser->m_attsSize;
     ATTRIBUTE *temp;
 #ifdef XML_ATTR_INFO
     XML_AttrInfo *temp2;
 #endif
-    attsSize = n + nDefaultAtts + INIT_ATTS_SIZE;
-    temp = (ATTRIBUTE *)REALLOC((void *)atts, attsSize * sizeof(ATTRIBUTE));
-    if (temp == NULL)
+    parser->m_attsSize = n + nDefaultAtts + INIT_ATTS_SIZE;
+    temp = (ATTRIBUTE *)REALLOC(parser, (void *)parser->m_atts, parser->m_attsSize * sizeof(ATTRIBUTE));
+    if (temp == NULL) {
+      parser->m_attsSize = oldAttsSize;
       return XML_ERROR_NO_MEMORY;
-    atts = temp;
+    }
+    parser->m_atts = temp;
 #ifdef XML_ATTR_INFO
-    temp2 = (XML_AttrInfo *)REALLOC((void *)attInfo, attsSize * sizeof(XML_AttrInfo));
-    if (temp2 == NULL)
+    temp2 = (XML_AttrInfo *)REALLOC(parser, (void *)parser->m_attInfo, parser->m_attsSize * sizeof(XML_AttrInfo));
+    if (temp2 == NULL) {
+      parser->m_attsSize = oldAttsSize;
       return XML_ERROR_NO_MEMORY;
-    attInfo = temp2;
+    }
+    parser->m_attInfo = temp2;
 #endif
     if (n > oldAttsSize)
-      XmlGetAttributes(enc, attStr, n, atts);
+      XmlGetAttributes(enc, attStr, n, parser->m_atts);
   }
 
-  appAtts = (const XML_Char **)atts;
+  appAtts = (const XML_Char **)parser->m_atts;
   for (i = 0; i < n; i++) {
-    ATTRIBUTE *currAtt = &atts[i];
+    ATTRIBUTE *currAtt = &parser->m_atts[i];
 #ifdef XML_ATTR_INFO
-    XML_AttrInfo *currAttInfo = &attInfo[i];
+    XML_AttrInfo *currAttInfo = &parser->m_attInfo[i];
 #endif
     /* add the name and value to the attribute list */
     ATTRIBUTE_ID *attId = getAttributeId(parser, enc, currAtt->name,
@@ -2812,25 +3243,25 @@
     if (!attId)
       return XML_ERROR_NO_MEMORY;
 #ifdef XML_ATTR_INFO
-    currAttInfo->nameStart = parseEndByteIndex - (parseEndPtr - currAtt->name);
+    currAttInfo->nameStart = parser->m_parseEndByteIndex - (parser->m_parseEndPtr - currAtt->name);
     currAttInfo->nameEnd = currAttInfo->nameStart +
                            XmlNameLength(enc, currAtt->name);
-    currAttInfo->valueStart = parseEndByteIndex -
-                            (parseEndPtr - currAtt->valuePtr);
-    currAttInfo->valueEnd = parseEndByteIndex - (parseEndPtr - currAtt->valueEnd);
+    currAttInfo->valueStart = parser->m_parseEndByteIndex -
+                            (parser->m_parseEndPtr - currAtt->valuePtr);
+    currAttInfo->valueEnd = parser->m_parseEndByteIndex - (parser->m_parseEndPtr - currAtt->valueEnd);
 #endif
     /* Detect duplicate attributes by their QNames. This does not work when
        namespace processing is turned on and different prefixes for the same
        namespace are used. For this case we have a check further down.
     */
     if ((attId->name)[-1]) {
-      if (enc == encoding)
-        eventPtr = atts[i].name;
+      if (enc == parser->m_encoding)
+        parser->m_eventPtr = parser->m_atts[i].name;
       return XML_ERROR_DUPLICATE_ATTRIBUTE;
     }
     (attId->name)[-1] = 1;
     appAtts[attIndex++] = attId->name;
-    if (!atts[i].normalized) {
+    if (!parser->m_atts[i].normalized) {
       enum XML_Error result;
       XML_Bool isCdata = XML_TRUE;
 
@@ -2847,20 +3278,20 @@
 
       /* normalize the attribute value */
       result = storeAttributeValue(parser, enc, isCdata,
-                                   atts[i].valuePtr, atts[i].valueEnd,
-                                   &tempPool);
+                                   parser->m_atts[i].valuePtr, parser->m_atts[i].valueEnd,
+                                   &parser->m_tempPool);
       if (result)
         return result;
-      appAtts[attIndex] = poolStart(&tempPool);
-      poolFinish(&tempPool);
+      appAtts[attIndex] = poolStart(&parser->m_tempPool);
+      poolFinish(&parser->m_tempPool);
     }
     else {
       /* the value did not need normalizing */
-      appAtts[attIndex] = poolStoreString(&tempPool, enc, atts[i].valuePtr,
-                                          atts[i].valueEnd);
+      appAtts[attIndex] = poolStoreString(&parser->m_tempPool, enc, parser->m_atts[i].valuePtr,
+                                          parser->m_atts[i].valueEnd);
       if (appAtts[attIndex] == 0)
         return XML_ERROR_NO_MEMORY;
-      poolFinish(&tempPool);
+      poolFinish(&parser->m_tempPool);
     }
     /* handle prefixed attribute names */
     if (attId->prefix) {
@@ -2884,16 +3315,16 @@
   }
 
   /* set-up for XML_GetSpecifiedAttributeCount and XML_GetIdAttributeIndex */
-  nSpecifiedAtts = attIndex;
+  parser->m_nSpecifiedAtts = attIndex;
   if (elementType->idAtt && (elementType->idAtt->name)[-1]) {
     for (i = 0; i < attIndex; i += 2)
       if (appAtts[i] == elementType->idAtt->name) {
-        idAttIndex = i;
+        parser->m_idAttIndex = i;
         break;
       }
   }
   else
-    idAttIndex = -1;
+    parser->m_idAttIndex = -1;
 
   /* do attribute defaulting */
   for (i = 0; i < nDefaultAtts; i++) {
@@ -2927,29 +3358,33 @@
   i = 0;
   if (nPrefixes) {
     int j;  /* hash table index */
-    unsigned long version = nsAttsVersion;
-    int nsAttsSize = (int)1 << nsAttsPower;
+    unsigned long version = parser->m_nsAttsVersion;
+    int nsAttsSize = (int)1 << parser->m_nsAttsPower;
+    unsigned char oldNsAttsPower = parser->m_nsAttsPower;
     /* size of hash table must be at least 2 * (# of prefixed attributes) */
-    if ((nPrefixes << 1) >> nsAttsPower) {  /* true for nsAttsPower = 0 */
+    if ((nPrefixes << 1) >> parser->m_nsAttsPower) {  /* true for m_nsAttsPower = 0 */
       NS_ATT *temp;
       /* hash table size must also be a power of 2 and >= 8 */
-      while (nPrefixes >> nsAttsPower++);
-      if (nsAttsPower < 3)
-        nsAttsPower = 3;
-      nsAttsSize = (int)1 << nsAttsPower;
-      temp = (NS_ATT *)REALLOC(nsAtts, nsAttsSize * sizeof(NS_ATT));
-      if (!temp)
+      while (nPrefixes >> parser->m_nsAttsPower++);
+      if (parser->m_nsAttsPower < 3)
+        parser->m_nsAttsPower = 3;
+      nsAttsSize = (int)1 << parser->m_nsAttsPower;
+      temp = (NS_ATT *)REALLOC(parser, parser->m_nsAtts, nsAttsSize * sizeof(NS_ATT));
+      if (!temp) {
+        /* Restore actual size of memory in m_nsAtts */
+        parser->m_nsAttsPower = oldNsAttsPower;
         return XML_ERROR_NO_MEMORY;
-      nsAtts = temp;
-      version = 0;  /* force re-initialization of nsAtts hash table */
+      }
+      parser->m_nsAtts = temp;
+      version = 0;  /* force re-initialization of m_nsAtts hash table */
     }
-    /* using a version flag saves us from initializing nsAtts every time */
+    /* using a version flag saves us from initializing m_nsAtts every time */
     if (!version) {  /* initialize version flags when version wraps around */
       version = INIT_ATTS_VERSION;
       for (j = nsAttsSize; j != 0; )
-        nsAtts[--j].version = version;
+        parser->m_nsAtts[--j].version = version;
     }
-    nsAttsVersion = --version;
+    parser->m_nsAttsVersion = --version;
 
     /* expand prefixed names and check for duplicates */
     for (; i < attIndex; i += 2) {
@@ -2957,71 +3392,96 @@
       if (s[-1] == 2) {  /* prefixed */
         ATTRIBUTE_ID *id;
         const BINDING *b;
-        unsigned long uriHash = hash_secret_salt;
+        unsigned long uriHash;
+        struct siphash sip_state;
+        struct sipkey sip_key;
+
+        copy_salt_to_sipkey(parser, &sip_key);
+        sip24_init(&sip_state, &sip_key);
+
         ((XML_Char *)s)[-1] = 0;  /* clear flag */
         id = (ATTRIBUTE_ID *)lookup(parser, &dtd->attributeIds, s, 0);
-        if (!id || !id->prefix)
-          return XML_ERROR_NO_MEMORY;
+        if (!id || !id->prefix) {
+          /* This code is walking through the appAtts array, dealing
+           * with (in this case) a prefixed attribute name.  To be in
+           * the array, the attribute must have already been bound, so
+           * has to have passed through the hash table lookup once
+           * already.  That implies that an entry for it already
+           * exists, so the lookup above will return a pointer to
+           * already allocated memory.  There is no opportunaity for
+           * the allocator to fail, so the condition above cannot be
+           * fulfilled.
+           *
+           * Since it is difficult to be certain that the above
+           * analysis is complete, we retain the test and merely
+           * remove the code from coverage tests.
+           */
+          return XML_ERROR_NO_MEMORY; /* LCOV_EXCL_LINE */
+        }
         b = id->prefix->binding;
         if (!b)
           return XML_ERROR_UNBOUND_PREFIX;
 
-        /* as we expand the name we also calculate its hash value */
         for (j = 0; j < b->uriLen; j++) {
           const XML_Char c = b->uri[j];
-          if (!poolAppendChar(&tempPool, c))
+          if (!poolAppendChar(&parser->m_tempPool, c))
             return XML_ERROR_NO_MEMORY;
-          uriHash = CHAR_HASH(uriHash, c);
         }
+
+        sip24_update(&sip_state, b->uri, b->uriLen * sizeof(XML_Char));
+
         while (*s++ != XML_T(ASCII_COLON))
           ;
+
+        sip24_update(&sip_state, s, keylen(s) * sizeof(XML_Char));
+
         do {  /* copies null terminator */
-          const XML_Char c = *s;
-          if (!poolAppendChar(&tempPool, *s))
+          if (!poolAppendChar(&parser->m_tempPool, *s))
             return XML_ERROR_NO_MEMORY;
-          uriHash = CHAR_HASH(uriHash, c);
         } while (*s++);
 
+        uriHash = (unsigned long)sip24_final(&sip_state);
+
         { /* Check hash table for duplicate of expanded name (uriName).
              Derived from code in lookup(parser, HASH_TABLE *table, ...).
           */
           unsigned char step = 0;
           unsigned long mask = nsAttsSize - 1;
           j = uriHash & mask;  /* index into hash table */
-          while (nsAtts[j].version == version) {
+          while (parser->m_nsAtts[j].version == version) {
             /* for speed we compare stored hash values first */
-            if (uriHash == nsAtts[j].hash) {
-              const XML_Char *s1 = poolStart(&tempPool);
-              const XML_Char *s2 = nsAtts[j].uriName;
+            if (uriHash == parser->m_nsAtts[j].hash) {
+              const XML_Char *s1 = poolStart(&parser->m_tempPool);
+              const XML_Char *s2 = parser->m_nsAtts[j].uriName;
               /* s1 is null terminated, but not s2 */
               for (; *s1 == *s2 && *s1 != 0; s1++, s2++);
               if (*s1 == 0)
                 return XML_ERROR_DUPLICATE_ATTRIBUTE;
             }
             if (!step)
-              step = PROBE_STEP(uriHash, mask, nsAttsPower);
+              step = PROBE_STEP(uriHash, mask, parser->m_nsAttsPower);
             j < step ? (j += nsAttsSize - step) : (j -= step);
           }
         }
 
-        if (ns_triplets) {  /* append namespace separator and prefix */
-          tempPool.ptr[-1] = namespaceSeparator;
+        if (parser->m_ns_triplets) {  /* append namespace separator and prefix */
+          parser->m_tempPool.ptr[-1] = parser->m_namespaceSeparator;
           s = b->prefix->name;
           do {
-            if (!poolAppendChar(&tempPool, *s))
+            if (!poolAppendChar(&parser->m_tempPool, *s))
               return XML_ERROR_NO_MEMORY;
           } while (*s++);
         }
 
         /* store expanded name in attribute list */
-        s = poolStart(&tempPool);
-        poolFinish(&tempPool);
+        s = poolStart(&parser->m_tempPool);
+        poolFinish(&parser->m_tempPool);
         appAtts[i] = s;
 
         /* fill empty slot with new version, uriName and hash value */
-        nsAtts[j].version = version;
-        nsAtts[j].hash = uriHash;
-        nsAtts[j].uriName = s;
+        parser->m_nsAtts[j].version = version;
+        parser->m_nsAtts[j].hash = uriHash;
+        parser->m_nsAtts[j].uriName = s;
 
         if (!--nPrefixes) {
           i += 2;
@@ -3038,7 +3498,7 @@
   for (binding = *bindingsPtr; binding; binding = binding->nextTagBinding)
     binding->attId->name[-1] = 0;
 
-  if (!ns)
+  if (!parser->m_ns)
     return XML_ERROR_NONE;
 
   /* expand the element type name */
@@ -3057,7 +3517,7 @@
   else
     return XML_ERROR_NONE;
   prefixLen = 0;
-  if (ns_triplets && binding->prefix->name) {
+  if (parser->m_ns_triplets && binding->prefix->name) {
     for (; binding->prefix->name[prefixLen++];)
       ;  /* prefixLen includes null terminator */
   }
@@ -3070,24 +3530,24 @@
   n = i + binding->uriLen + prefixLen;
   if (n > binding->uriAlloc) {
     TAG *p;
-    uri = (XML_Char *)MALLOC((n + EXPAND_SPARE) * sizeof(XML_Char));
+    uri = (XML_Char *)MALLOC(parser, (n + EXPAND_SPARE) * sizeof(XML_Char));
     if (!uri)
       return XML_ERROR_NO_MEMORY;
     binding->uriAlloc = n + EXPAND_SPARE;
     memcpy(uri, binding->uri, binding->uriLen * sizeof(XML_Char));
-    for (p = tagStack; p; p = p->parent)
+    for (p = parser->m_tagStack; p; p = p->parent)
       if (p->name.str == binding->uri)
         p->name.str = uri;
-    FREE(binding->uri);
+    FREE(parser, binding->uri);
     binding->uri = uri;
   }
-  /* if namespaceSeparator != '\0' then uri includes it already */
+  /* if m_namespaceSeparator != '\0' then uri includes it already */
   uri = binding->uri + binding->uriLen;
   memcpy(uri, localPart, i * sizeof(XML_Char));
   /* we always have a namespace separator between localPart and prefix */
   if (prefixLen) {
     uri += i - 1;
-    *uri = namespaceSeparator;  /* replace null terminator */
+    *uri = parser->m_namespaceSeparator;  /* replace null terminator */
     memcpy(uri + 1, binding->prefix->name, prefixLen * sizeof(XML_Char));
   }
   tagNamePtr->str = binding->uri;
@@ -3165,48 +3625,48 @@
   if (isXMLNS)
     return XML_ERROR_RESERVED_NAMESPACE_URI;
 
-  if (namespaceSeparator)
+  if (parser->m_namespaceSeparator)
     len++;
-  if (freeBindingList) {
-    b = freeBindingList;
+  if (parser->m_freeBindingList) {
+    b = parser->m_freeBindingList;
     if (len > b->uriAlloc) {
-      XML_Char *temp = (XML_Char *)REALLOC(b->uri,
+      XML_Char *temp = (XML_Char *)REALLOC(parser, b->uri,
                           sizeof(XML_Char) * (len + EXPAND_SPARE));
       if (temp == NULL)
         return XML_ERROR_NO_MEMORY;
       b->uri = temp;
       b->uriAlloc = len + EXPAND_SPARE;
     }
-    freeBindingList = b->nextTagBinding;
+    parser->m_freeBindingList = b->nextTagBinding;
   }
   else {
-    b = (BINDING *)MALLOC(sizeof(BINDING));
+    b = (BINDING *)MALLOC(parser, sizeof(BINDING));
     if (!b)
       return XML_ERROR_NO_MEMORY;
-    b->uri = (XML_Char *)MALLOC(sizeof(XML_Char) * (len + EXPAND_SPARE));
+    b->uri = (XML_Char *)MALLOC(parser, sizeof(XML_Char) * (len + EXPAND_SPARE));
     if (!b->uri) {
-      FREE(b);
+      FREE(parser, b);
       return XML_ERROR_NO_MEMORY;
     }
     b->uriAlloc = len + EXPAND_SPARE;
   }
   b->uriLen = len;
   memcpy(b->uri, uri, len * sizeof(XML_Char));
-  if (namespaceSeparator)
-    b->uri[len - 1] = namespaceSeparator;
+  if (parser->m_namespaceSeparator)
+    b->uri[len - 1] = parser->m_namespaceSeparator;
   b->prefix = prefix;
   b->attId = attId;
   b->prevPrefixBinding = prefix->binding;
   /* NULL binding when default namespace undeclared */
-  if (*uri == XML_T('\0') && prefix == &_dtd->defaultPrefix)
+  if (*uri == XML_T('\0') && prefix == &parser->m_dtd->defaultPrefix)
     prefix->binding = NULL;
   else
     prefix->binding = b;
   b->nextTagBinding = *bindingsPtr;
   *bindingsPtr = b;
   /* if attId == NULL then we are not starting a namespace scope */
-  if (attId && startNamespaceDeclHandler)
-    startNamespaceDeclHandler(handlerArg, prefix->name,
+  if (attId && parser->m_startNamespaceDeclHandler)
+    parser->m_startNamespaceDeclHandler(parser->m_handlerArg, prefix->name,
                               prefix->binding ? uri : 0);
   return XML_ERROR_NONE;
 }
@@ -3220,17 +3680,17 @@
                       const char *end,
                       const char **endPtr)
 {
-  enum XML_Error result = doCdataSection(parser, encoding, &start, end,
-                                         endPtr, (XML_Bool)!ps_finalBuffer);
+  enum XML_Error result = doCdataSection(parser, parser->m_encoding, &start, end,
+                                         endPtr, (XML_Bool)!parser->m_parsingStatus.finalBuffer);
   if (result != XML_ERROR_NONE)
     return result;
   if (start) {
-    if (parentParser) {  /* we are parsing an external entity */
-      processor = externalEntityContentProcessor;
+    if (parser->m_parentParser) {  /* we are parsing an external entity */
+      parser->m_processor = externalEntityContentProcessor;
       return externalEntityContentProcessor(parser, start, end, endPtr);
     }
     else {
-      processor = contentProcessor;
+      parser->m_processor = contentProcessor;
       return contentProcessor(parser, start, end, endPtr);
     }
   }
@@ -3251,14 +3711,14 @@
   const char *s = *startPtr;
   const char **eventPP;
   const char **eventEndPP;
-  if (enc == encoding) {
-    eventPP = &eventPtr;
+  if (enc == parser->m_encoding) {
+    eventPP = &parser->m_eventPtr;
     *eventPP = s;
-    eventEndPP = &eventEndPtr;
+    eventEndPP = &parser->m_eventEndPtr;
   }
   else {
-    eventPP = &(openInternalEntities->internalEventPtr);
-    eventEndPP = &(openInternalEntities->internalEventEndPtr);
+    eventPP = &(parser->m_openInternalEntities->internalEventPtr);
+    eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr);
   }
   *eventPP = s;
   *startPtr = NULL;
@@ -3269,51 +3729,51 @@
     *eventEndPP = next;
     switch (tok) {
     case XML_TOK_CDATA_SECT_CLOSE:
-      if (endCdataSectionHandler)
-        endCdataSectionHandler(handlerArg);
+      if (parser->m_endCdataSectionHandler)
+        parser->m_endCdataSectionHandler(parser->m_handlerArg);
 #if 0
       /* see comment under XML_TOK_CDATA_SECT_OPEN */
-      else if (characterDataHandler)
-        characterDataHandler(handlerArg, dataBuf, 0);
+      else if (parser->m_characterDataHandler)
+        parser->m_characterDataHandler(parser->m_handlerArg, parser->m_dataBuf, 0);
 #endif
-      else if (defaultHandler)
+      else if (parser->m_defaultHandler)
         reportDefault(parser, enc, s, next);
       *startPtr = next;
       *nextPtr = next;
-      if (ps_parsing == XML_FINISHED)
+      if (parser->m_parsingStatus.parsing == XML_FINISHED)
         return XML_ERROR_ABORTED;
       else
         return XML_ERROR_NONE;
     case XML_TOK_DATA_NEWLINE:
-      if (characterDataHandler) {
+      if (parser->m_characterDataHandler) {
         XML_Char c = 0xA;
-        characterDataHandler(handlerArg, &c, 1);
+        parser->m_characterDataHandler(parser->m_handlerArg, &c, 1);
       }
-      else if (defaultHandler)
+      else if (parser->m_defaultHandler)
         reportDefault(parser, enc, s, next);
       break;
     case XML_TOK_DATA_CHARS:
       {
-        XML_CharacterDataHandler charDataHandler = characterDataHandler;
+        XML_CharacterDataHandler charDataHandler = parser->m_characterDataHandler;
         if (charDataHandler) {
           if (MUST_CONVERT(enc, s)) {
             for (;;) {
-              ICHAR *dataPtr = (ICHAR *)dataBuf;
-              XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd);
+              ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf;
+              const enum XML_Convert_Result convert_res = XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)parser->m_dataBufEnd);
               *eventEndPP = next;
-              charDataHandler(handlerArg, dataBuf,
-                              (int)(dataPtr - (ICHAR *)dataBuf));
-              if (s == next)
+              charDataHandler(parser->m_handlerArg, parser->m_dataBuf,
+                              (int)(dataPtr - (ICHAR *)parser->m_dataBuf));
+              if ((convert_res == XML_CONVERT_COMPLETED) || (convert_res == XML_CONVERT_INPUT_INCOMPLETE))
                 break;
               *eventPP = s;
             }
           }
           else
-            charDataHandler(handlerArg,
+            charDataHandler(parser->m_handlerArg,
                             (XML_Char *)s,
                             (int)((XML_Char *)next - (XML_Char *)s));
         }
-        else if (defaultHandler)
+        else if (parser->m_defaultHandler)
           reportDefault(parser, enc, s, next);
       }
       break;
@@ -3334,12 +3794,20 @@
       }
       return XML_ERROR_UNCLOSED_CDATA_SECTION;
     default:
+      /* Every token returned by XmlCdataSectionTok() has its own
+       * explicit case, so this default case will never be executed.
+       * We retain it as a safety net and exclude it from the coverage
+       * statistics.
+       *
+       * LCOV_EXCL_START
+      */
       *eventPP = next;
       return XML_ERROR_UNEXPECTED_STATE;
+      /* LCOV_EXCL_STOP */
     }
 
     *eventPP = s = next;
-    switch (ps_parsing) {
+    switch (parser->m_parsingStatus.parsing) {
     case XML_SUSPENDED:
       *nextPtr = next;
       return XML_ERROR_NONE;
@@ -3362,12 +3830,12 @@
                        const char *end,
                        const char **endPtr)
 {
-  enum XML_Error result = doIgnoreSection(parser, encoding, &start, end,
-                                          endPtr, (XML_Bool)!ps_finalBuffer);
+  enum XML_Error result = doIgnoreSection(parser, parser->m_encoding, &start, end,
+                                          endPtr, (XML_Bool)!parser->m_parsingStatus.finalBuffer);
   if (result != XML_ERROR_NONE)
     return result;
   if (start) {
-    processor = prologProcessor;
+    parser->m_processor = prologProcessor;
     return prologProcessor(parser, start, end, endPtr);
   }
   return result;
@@ -3389,14 +3857,26 @@
   const char *s = *startPtr;
   const char **eventPP;
   const char **eventEndPP;
-  if (enc == encoding) {
-    eventPP = &eventPtr;
+  if (enc == parser->m_encoding) {
+    eventPP = &parser->m_eventPtr;
     *eventPP = s;
-    eventEndPP = &eventEndPtr;
+    eventEndPP = &parser->m_eventEndPtr;
   }
   else {
-    eventPP = &(openInternalEntities->internalEventPtr);
-    eventEndPP = &(openInternalEntities->internalEventEndPtr);
+    /* It's not entirely clear, but it seems the following two lines
+     * of code cannot be executed.  The only occasions on which 'enc'
+     * is not 'encoding' are when this function is called
+     * from the internal entity processing, and IGNORE sections are an
+     * error in internal entities.
+     *
+     * Since it really isn't clear that this is true, we keep the code
+     * and just remove it from our coverage tests.
+     *
+     * LCOV_EXCL_START
+     */
+    eventPP = &(parser->m_openInternalEntities->internalEventPtr);
+    eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr);
+    /* LCOV_EXCL_STOP */
   }
   *eventPP = s;
   *startPtr = NULL;
@@ -3404,11 +3884,11 @@
   *eventEndPP = next;
   switch (tok) {
   case XML_TOK_IGNORE_SECT:
-    if (defaultHandler)
+    if (parser->m_defaultHandler)
       reportDefault(parser, enc, s, next);
     *startPtr = next;
     *nextPtr = next;
-    if (ps_parsing == XML_FINISHED)
+    if (parser->m_parsingStatus.parsing == XML_FINISHED)
       return XML_ERROR_ABORTED;
     else
       return XML_ERROR_NONE;
@@ -3429,8 +3909,16 @@
     }
     return XML_ERROR_SYNTAX; /* XML_ERROR_UNCLOSED_IGNORE_SECTION */
   default:
+    /* All of the tokens that XmlIgnoreSectionTok() returns have
+     * explicit cases to handle them, so this default case is never
+     * executed.  We keep it as a safety net anyway, and remove it
+     * from our test coverage statistics.
+     *
+     * LCOV_EXCL_START
+     */
     *eventPP = next;
     return XML_ERROR_UNEXPECTED_STATE;
+    /* LCOV_EXCL_STOP */
   }
   /* not reached */
 }
@@ -3443,27 +3931,28 @@
   const char *s;
 #ifdef XML_UNICODE
   char encodingBuf[128];
-  if (!protocolEncodingName)
+  /* See comments abount `protoclEncodingName` in parserInit() */
+  if (!parser->m_protocolEncodingName)
     s = NULL;
   else {
     int i;
-    for (i = 0; protocolEncodingName[i]; i++) {
+    for (i = 0; parser->m_protocolEncodingName[i]; i++) {
       if (i == sizeof(encodingBuf) - 1
-          || (protocolEncodingName[i] & ~0x7f) != 0) {
+          || (parser->m_protocolEncodingName[i] & ~0x7f) != 0) {
         encodingBuf[0] = '\0';
         break;
       }
-      encodingBuf[i] = (char)protocolEncodingName[i];
+      encodingBuf[i] = (char)parser->m_protocolEncodingName[i];
     }
     encodingBuf[i] = '\0';
     s = encodingBuf;
   }
 #else
-  s = protocolEncodingName;
+  s = parser->m_protocolEncodingName;
 #endif
-  if ((ns ? XmlInitEncodingNS : XmlInitEncoding)(&initEncoding, &encoding, s))
+  if ((parser->m_ns ? XmlInitEncodingNS : XmlInitEncoding)(&parser->m_initEncoding, &parser->m_encoding, s))
     return XML_ERROR_NONE;
-  return handleUnknownEncoding(parser, protocolEncodingName);
+  return handleUnknownEncoding(parser, parser->m_protocolEncodingName);
 }
 
 static enum XML_Error
@@ -3477,13 +3966,13 @@
   const char *versionend;
   const XML_Char *storedversion = NULL;
   int standalone = -1;
-  if (!(ns
+  if (!(parser->m_ns
         ? XmlParseXmlDeclNS
         : XmlParseXmlDecl)(isGeneralTextEntity,
-                           encoding,
+                           parser->m_encoding,
                            s,
                            next,
-                           &eventPtr,
+                           &parser->m_eventPtr,
                            &version,
                            &versionend,
                            &encodingName,
@@ -3495,62 +3984,69 @@
       return XML_ERROR_XML_DECL;
   }
   if (!isGeneralTextEntity && standalone == 1) {
-    _dtd->standalone = XML_TRUE;
+    parser->m_dtd->standalone = XML_TRUE;
 #ifdef XML_DTD
-    if (paramEntityParsing == XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE)
-      paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER;
+    if (parser->m_paramEntityParsing == XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE)
+      parser->m_paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER;
 #endif /* XML_DTD */
   }
-  if (xmlDeclHandler) {
+  if (parser->m_xmlDeclHandler) {
     if (encodingName != NULL) {
-      storedEncName = poolStoreString(&temp2Pool,
-                                      encoding,
+      storedEncName = poolStoreString(&parser->m_temp2Pool,
+                                      parser->m_encoding,
                                       encodingName,
                                       encodingName
-                                      + XmlNameLength(encoding, encodingName));
+                                      + XmlNameLength(parser->m_encoding, encodingName));
       if (!storedEncName)
               return XML_ERROR_NO_MEMORY;
-      poolFinish(&temp2Pool);
+      poolFinish(&parser->m_temp2Pool);
     }
     if (version) {
-      storedversion = poolStoreString(&temp2Pool,
-                                      encoding,
+      storedversion = poolStoreString(&parser->m_temp2Pool,
+                                      parser->m_encoding,
                                       version,
-                                      versionend - encoding->minBytesPerChar);
+                                      versionend - parser->m_encoding->minBytesPerChar);
       if (!storedversion)
         return XML_ERROR_NO_MEMORY;
     }
-    xmlDeclHandler(handlerArg, storedversion, storedEncName, standalone);
+    parser->m_xmlDeclHandler(parser->m_handlerArg, storedversion, storedEncName, standalone);
   }
-  else if (defaultHandler)
-    reportDefault(parser, encoding, s, next);
-  if (protocolEncodingName == NULL) {
+  else if (parser->m_defaultHandler)
+    reportDefault(parser, parser->m_encoding, s, next);
+  if (parser->m_protocolEncodingName == NULL) {
     if (newEncoding) {
-      if (newEncoding->minBytesPerChar != encoding->minBytesPerChar) {
-        eventPtr = encodingName;
+      /* Check that the specified encoding does not conflict with what
+       * the parser has already deduced.  Do we have the same number
+       * of bytes in the smallest representation of a character?  If
+       * this is UTF-16, is it the same endianness?
+       */
+      if (newEncoding->minBytesPerChar != parser->m_encoding->minBytesPerChar
+          || (newEncoding->minBytesPerChar == 2 &&
+              newEncoding != parser->m_encoding)) {
+        parser->m_eventPtr = encodingName;
         return XML_ERROR_INCORRECT_ENCODING;
       }
-      encoding = newEncoding;
+      parser->m_encoding = newEncoding;
     }
     else if (encodingName) {
       enum XML_Error result;
       if (!storedEncName) {
         storedEncName = poolStoreString(
-          &temp2Pool, encoding, encodingName,
-          encodingName + XmlNameLength(encoding, encodingName));
+          &parser->m_temp2Pool, parser->m_encoding, encodingName,
+          encodingName + XmlNameLength(parser->m_encoding, encodingName));
         if (!storedEncName)
           return XML_ERROR_NO_MEMORY;
       }
       result = handleUnknownEncoding(parser, storedEncName);
-      poolClear(&temp2Pool);
+      poolClear(&parser->m_temp2Pool);
       if (result == XML_ERROR_UNKNOWN_ENCODING)
-        eventPtr = encodingName;
+        parser->m_eventPtr = encodingName;
       return result;
     }
   }
 
   if (storedEncName || storedversion)
-    poolClear(&temp2Pool);
+    poolClear(&parser->m_temp2Pool);
 
   return XML_ERROR_NONE;
 }
@@ -3558,7 +4054,7 @@
 static enum XML_Error
 handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName)
 {
-  if (unknownEncodingHandler) {
+  if (parser->m_unknownEncodingHandler) {
     XML_Encoding info;
     int i;
     for (i = 0; i < 256; i++)
@@ -3566,25 +4062,25 @@
     info.convert = NULL;
     info.data = NULL;
     info.release = NULL;
-    if (unknownEncodingHandler(unknownEncodingHandlerData, encodingName,
+    if (parser->m_unknownEncodingHandler(parser->m_unknownEncodingHandlerData, encodingName,
                                &info)) {
       ENCODING *enc;
-      unknownEncodingMem = MALLOC(XmlSizeOfUnknownEncoding());
-      if (!unknownEncodingMem) {
+      parser->m_unknownEncodingMem = MALLOC(parser, XmlSizeOfUnknownEncoding());
+      if (!parser->m_unknownEncodingMem) {
         if (info.release)
           info.release(info.data);
         return XML_ERROR_NO_MEMORY;
       }
-      enc = (ns
+      enc = (parser->m_ns
              ? XmlInitUnknownEncodingNS
-             : XmlInitUnknownEncoding)(unknownEncodingMem,
+             : XmlInitUnknownEncoding)(parser->m_unknownEncodingMem,
                                        info.map,
                                        info.convert,
                                        info.data);
       if (enc) {
-        unknownEncodingData = info.data;
-        unknownEncodingRelease = info.release;
-        encoding = enc;
+        parser->m_unknownEncodingData = info.data;
+        parser->m_unknownEncodingRelease = info.release;
+        parser->m_encoding = enc;
         return XML_ERROR_NONE;
       }
     }
@@ -3603,7 +4099,7 @@
   enum XML_Error result = initializeEncoding(parser);
   if (result != XML_ERROR_NONE)
     return result;
-  processor = prologProcessor;
+  parser->m_processor = prologProcessor;
   return prologProcessor(parser, s, end, nextPtr);
 }
 
@@ -3621,14 +4117,14 @@
 
   /* we know now that XML_Parse(Buffer) has been called,
      so we consider the external parameter entity read */
-  _dtd->paramEntityRead = XML_TRUE;
+  parser->m_dtd->paramEntityRead = XML_TRUE;
 
-  if (prologState.inEntityValue) {
-    processor = entityValueInitProcessor;
+  if (parser->m_prologState.inEntityValue) {
+    parser->m_processor = entityValueInitProcessor;
     return entityValueInitProcessor(parser, s, end, nextPtr);
   }
   else {
-    processor = externalParEntProcessor;
+    parser->m_processor = externalParEntProcessor;
     return externalParEntProcessor(parser, s, end, nextPtr);
   }
 }
@@ -3642,13 +4138,13 @@
   int tok;
   const char *start = s;
   const char *next = start;
-  eventPtr = start;
+  parser->m_eventPtr = start;
 
   for (;;) {
-    tok = XmlPrologTok(encoding, start, end, &next);
-    eventEndPtr = next;
+    tok = XmlPrologTok(parser->m_encoding, start, end, &next);
+    parser->m_eventEndPtr = next;
     if (tok <= 0) {
-      if (!ps_finalBuffer && tok != XML_TOK_INVALID) {
+      if (!parser->m_parsingStatus.finalBuffer && tok != XML_TOK_INVALID) {
         *nextPtr = s;
         return XML_ERROR_NONE;
       }
@@ -3664,24 +4160,23 @@
         break;
       }
       /* found end of entity value - can store it now */
-      return storeEntityValue(parser, encoding, s, end);
+      return storeEntityValue(parser, parser->m_encoding, s, end);
     }
     else if (tok == XML_TOK_XML_DECL) {
       enum XML_Error result;
       result = processXmlDecl(parser, 0, start, next);
       if (result != XML_ERROR_NONE)
         return result;
-      switch (ps_parsing) {
-      case XML_SUSPENDED:
-        *nextPtr = next;
-        return XML_ERROR_NONE;
-      case XML_FINISHED:
+      /* At this point, m_parsingStatus.parsing cannot be XML_SUSPENDED.  For that
+       * to happen, a parameter entity parsing handler must have
+       * attempted to suspend the parser, which fails and raises an
+       * error.  The parser can be aborted, but can't be suspended.
+       */
+      if (parser->m_parsingStatus.parsing == XML_FINISHED)
         return XML_ERROR_ABORTED;
-      default:
-        *nextPtr = next;
-      }
+      *nextPtr = next;
       /* stop scanning for text declaration - we found one */
-      processor = entityValueProcessor;
+      parser->m_processor = entityValueProcessor;
       return entityValueProcessor(parser, next, end, nextPtr);
     }
     /* If we are at the end of the buffer, this would cause XmlPrologTok to
@@ -3691,12 +4186,20 @@
        then, when this routine is entered the next time, XmlPrologTok will
        return XML_TOK_INVALID, since the BOM is still in the buffer
     */
-    else if (tok == XML_TOK_BOM && next == end && !ps_finalBuffer) {
+    else if (tok == XML_TOK_BOM && next == end && !parser->m_parsingStatus.finalBuffer) {
       *nextPtr = next;
       return XML_ERROR_NONE;
     }
+    /* If we get this token, we have the start of what might be a
+       normal tag, but not a declaration (i.e. it doesn't begin with
+       "<!").  In a DTD context, that isn't legal.
+    */
+    else if (tok == XML_TOK_INSTANCE_START) {
+      *nextPtr = next;
+      return XML_ERROR_SYNTAX;
+    }
     start = next;
-    eventPtr = start;
+    parser->m_eventPtr = start;
   }
 }
 
@@ -3709,9 +4212,9 @@
   const char *next = s;
   int tok;
 
-  tok = XmlPrologTok(encoding, s, end, &next);
+  tok = XmlPrologTok(parser->m_encoding, s, end, &next);
   if (tok <= 0) {
-    if (!ps_finalBuffer && tok != XML_TOK_INVALID) {
+    if (!parser->m_parsingStatus.finalBuffer && tok != XML_TOK_INVALID) {
       *nextPtr = s;
       return XML_ERROR_NONE;
     }
@@ -3733,12 +4236,12 @@
   */
   else if (tok == XML_TOK_BOM) {
     s = next;
-    tok = XmlPrologTok(encoding, s, end, &next);
+    tok = XmlPrologTok(parser->m_encoding, s, end, &next);
   }
 
-  processor = prologProcessor;
-  return doProlog(parser, encoding, s, end, tok, next,
-                  nextPtr, (XML_Bool)!ps_finalBuffer);
+  parser->m_processor = prologProcessor;
+  return doProlog(parser, parser->m_encoding, s, end, tok, next,
+                  nextPtr, (XML_Bool)!parser->m_parsingStatus.finalBuffer);
 }
 
 static enum XML_Error PTRCALL
@@ -3749,13 +4252,13 @@
 {
   const char *start = s;
   const char *next = s;
-  const ENCODING *enc = encoding;
+  const ENCODING *enc = parser->m_encoding;
   int tok;
 
   for (;;) {
     tok = XmlPrologTok(enc, start, end, &next);
     if (tok <= 0) {
-      if (!ps_finalBuffer && tok != XML_TOK_INVALID) {
+      if (!parser->m_parsingStatus.finalBuffer && tok != XML_TOK_INVALID) {
         *nextPtr = s;
         return XML_ERROR_NONE;
       }
@@ -3786,9 +4289,9 @@
                 const char **nextPtr)
 {
   const char *next = s;
-  int tok = XmlPrologTok(encoding, s, end, &next);
-  return doProlog(parser, encoding, s, end, tok, next,
-                  nextPtr, (XML_Bool)!ps_finalBuffer);
+  int tok = XmlPrologTok(parser->m_encoding, s, end, &next);
+  return doProlog(parser, parser->m_encoding, s, end, tok, next,
+                  nextPtr, (XML_Bool)!parser->m_parsingStatus.finalBuffer);
 }
 
 static enum XML_Error
@@ -3825,19 +4328,19 @@
   static const XML_Char enumValueStart[] = { ASCII_LPAREN, '\0' };
 
   /* save one level of indirection */
-  DTD * const dtd = _dtd;
+  DTD * const dtd = parser->m_dtd;
 
   const char **eventPP;
   const char **eventEndPP;
   enum XML_Content_Quant quant;
 
-  if (enc == encoding) {
-    eventPP = &eventPtr;
-    eventEndPP = &eventEndPtr;
+  if (enc == parser->m_encoding) {
+    eventPP = &parser->m_eventPtr;
+    eventEndPP = &parser->m_eventEndPtr;
   }
   else {
-    eventPP = &(openInternalEntities->internalEventPtr);
-    eventEndPP = &(openInternalEntities->internalEventEndPtr);
+    eventPP = &(parser->m_openInternalEntities->internalEventPtr);
+    eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr);
   }
 
   for (;;) {
@@ -3864,7 +4367,7 @@
       case XML_TOK_NONE:
 #ifdef XML_DTD
         /* for internal PE NOT referenced between declarations */
-        if (enc != encoding && !openInternalEntities->betweenDecl) {
+        if (enc != parser->m_encoding && !parser->m_openInternalEntities->betweenDecl) {
           *nextPtr = s;
           return XML_ERROR_NONE;
         }
@@ -3872,8 +4375,8 @@
            complete markup, not only for external PEs, but also for
            internal PEs if the reference occurs between declarations.
         */
-        if (isParamEntity || enc != encoding) {
-          if (XmlTokenRole(&prologState, XML_TOK_NONE, end, end, enc)
+        if (parser->m_isParamEntity || enc != parser->m_encoding) {
+          if (XmlTokenRole(&parser->m_prologState, XML_TOK_NONE, end, end, enc)
               == XML_ROLE_ERROR)
             return XML_ERROR_INCOMPLETE_PE;
           *nextPtr = s;
@@ -3887,34 +4390,34 @@
         break;
       }
     }
-    role = XmlTokenRole(&prologState, tok, s, next, enc);
+    role = XmlTokenRole(&parser->m_prologState, tok, s, next, enc);
     switch (role) {
     case XML_ROLE_XML_DECL:
       {
         enum XML_Error result = processXmlDecl(parser, 0, s, next);
         if (result != XML_ERROR_NONE)
           return result;
-        enc = encoding;
+        enc = parser->m_encoding;
         handleDefault = XML_FALSE;
       }
       break;
     case XML_ROLE_DOCTYPE_NAME:
-      if (startDoctypeDeclHandler) {
-        doctypeName = poolStoreString(&tempPool, enc, s, next);
-        if (!doctypeName)
+      if (parser->m_startDoctypeDeclHandler) {
+        parser->m_doctypeName = poolStoreString(&parser->m_tempPool, enc, s, next);
+        if (!parser->m_doctypeName)
           return XML_ERROR_NO_MEMORY;
-        poolFinish(&tempPool);
-        doctypePubid = NULL;
+        poolFinish(&parser->m_tempPool);
+        parser->m_doctypePubid = NULL;
         handleDefault = XML_FALSE;
       }
-      doctypeSysid = NULL; /* always initialize to NULL */
+      parser->m_doctypeSysid = NULL; /* always initialize to NULL */
       break;
     case XML_ROLE_DOCTYPE_INTERNAL_SUBSET:
-      if (startDoctypeDeclHandler) {
-        startDoctypeDeclHandler(handlerArg, doctypeName, doctypeSysid,
-                                doctypePubid, 1);
-        doctypeName = NULL;
-        poolClear(&tempPool);
+      if (parser->m_startDoctypeDeclHandler) {
+        parser->m_startDoctypeDeclHandler(parser->m_handlerArg, parser->m_doctypeName, parser->m_doctypeSysid,
+                                parser->m_doctypePubid, 1);
+        parser->m_doctypeName = NULL;
+        poolClear(&parser->m_tempPool);
         handleDefault = XML_FALSE;
       }
       break;
@@ -3924,34 +4427,34 @@
         enum XML_Error result = processXmlDecl(parser, 1, s, next);
         if (result != XML_ERROR_NONE)
           return result;
-        enc = encoding;
+        enc = parser->m_encoding;
         handleDefault = XML_FALSE;
       }
       break;
 #endif /* XML_DTD */
     case XML_ROLE_DOCTYPE_PUBLIC_ID:
 #ifdef XML_DTD
-      useForeignDTD = XML_FALSE;
-      declEntity = (ENTITY *)lookup(parser,
+      parser->m_useForeignDTD = XML_FALSE;
+      parser->m_declEntity = (ENTITY *)lookup(parser,
                                     &dtd->paramEntities,
                                     externalSubsetName,
                                     sizeof(ENTITY));
-      if (!declEntity)
+      if (!parser->m_declEntity)
         return XML_ERROR_NO_MEMORY;
 #endif /* XML_DTD */
       dtd->hasParamEntityRefs = XML_TRUE;
-      if (startDoctypeDeclHandler) {
+      if (parser->m_startDoctypeDeclHandler) {
         XML_Char *pubId;
         if (!XmlIsPublicId(enc, s, next, eventPP))
           return XML_ERROR_PUBLICID;
-        pubId = poolStoreString(&tempPool, enc,
+        pubId = poolStoreString(&parser->m_tempPool, enc,
                                 s + enc->minBytesPerChar,
                                 next - enc->minBytesPerChar);
         if (!pubId)
           return XML_ERROR_NO_MEMORY;
         normalizePublicId(pubId);
-        poolFinish(&tempPool);
-        doctypePubid = pubId;
+        poolFinish(&parser->m_tempPool);
+        parser->m_doctypePubid = pubId;
         handleDefault = XML_FALSE;
         goto alreadyChecked;
       }
@@ -3960,7 +4463,7 @@
       if (!XmlIsPublicId(enc, s, next, eventPP))
         return XML_ERROR_PUBLICID;
     alreadyChecked:
-      if (dtd->keepProcessing && declEntity) {
+      if (dtd->keepProcessing && parser->m_declEntity) {
         XML_Char *tem = poolStoreString(&dtd->pool,
                                         enc,
                                         s + enc->minBytesPerChar,
@@ -3968,38 +4471,47 @@
         if (!tem)
           return XML_ERROR_NO_MEMORY;
         normalizePublicId(tem);
-        declEntity->publicId = tem;
+        parser->m_declEntity->publicId = tem;
         poolFinish(&dtd->pool);
-        if (entityDeclHandler)
+        /* Don't suppress the default handler if we fell through from
+         * the XML_ROLE_DOCTYPE_PUBLIC_ID case.
+         */
+        if (parser->m_entityDeclHandler && role == XML_ROLE_ENTITY_PUBLIC_ID)
           handleDefault = XML_FALSE;
       }
       break;
     case XML_ROLE_DOCTYPE_CLOSE:
-      if (doctypeName) {
-        startDoctypeDeclHandler(handlerArg, doctypeName,
-                                doctypeSysid, doctypePubid, 0);
-        poolClear(&tempPool);
+      if (parser->m_doctypeName) {
+        parser->m_startDoctypeDeclHandler(parser->m_handlerArg, parser->m_doctypeName,
+                                parser->m_doctypeSysid, parser->m_doctypePubid, 0);
+        poolClear(&parser->m_tempPool);
         handleDefault = XML_FALSE;
       }
-      /* doctypeSysid will be non-NULL in the case of a previous
-         XML_ROLE_DOCTYPE_SYSTEM_ID, even if startDoctypeDeclHandler
+      /* parser->m_doctypeSysid will be non-NULL in the case of a previous
+         XML_ROLE_DOCTYPE_SYSTEM_ID, even if parser->m_startDoctypeDeclHandler
          was not set, indicating an external subset
       */
 #ifdef XML_DTD
-      if (doctypeSysid || useForeignDTD) {
+      if (parser->m_doctypeSysid || parser->m_useForeignDTD) {
         XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs;
         dtd->hasParamEntityRefs = XML_TRUE;
-        if (paramEntityParsing && externalEntityRefHandler) {
+        if (parser->m_paramEntityParsing && parser->m_externalEntityRefHandler) {
           ENTITY *entity = (ENTITY *)lookup(parser,
                                             &dtd->paramEntities,
                                             externalSubsetName,
                                             sizeof(ENTITY));
-          if (!entity)
-            return XML_ERROR_NO_MEMORY;
-          if (useForeignDTD)
-            entity->base = curBase;
+          if (!entity) {
+            /* The external subset name "#" will have already been
+             * inserted into the hash table at the start of the
+             * external entity parsing, so no allocation will happen
+             * and lookup() cannot fail.
+             */
+            return XML_ERROR_NO_MEMORY; /* LCOV_EXCL_LINE */
+          }
+          if (parser->m_useForeignDTD)
+            entity->base = parser->m_curBase;
           dtd->paramEntityRead = XML_FALSE;
-          if (!externalEntityRefHandler(externalEntityRefHandlerArg,
+          if (!parser->m_externalEntityRefHandler(parser->m_externalEntityRefHandlerArg,
                                         0,
                                         entity->base,
                                         entity->systemId,
@@ -4007,22 +4519,22 @@
             return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
           if (dtd->paramEntityRead) {
             if (!dtd->standalone &&
-                notStandaloneHandler &&
-                !notStandaloneHandler(handlerArg))
+                parser->m_notStandaloneHandler &&
+                !parser->m_notStandaloneHandler(parser->m_handlerArg))
               return XML_ERROR_NOT_STANDALONE;
           }
           /* if we didn't read the foreign DTD then this means that there
              is no external subset and we must reset dtd->hasParamEntityRefs
           */
-          else if (!doctypeSysid)
+          else if (!parser->m_doctypeSysid)
             dtd->hasParamEntityRefs = hadParamEntityRefs;
           /* end of DTD - no need to update dtd->keepProcessing */
         }
-        useForeignDTD = XML_FALSE;
+        parser->m_useForeignDTD = XML_FALSE;
       }
 #endif /* XML_DTD */
-      if (endDoctypeDeclHandler) {
-        endDoctypeDeclHandler(handlerArg);
+      if (parser->m_endDoctypeDeclHandler) {
+        parser->m_endDoctypeDeclHandler(parser->m_handlerArg);
         handleDefault = XML_FALSE;
       }
       break;
@@ -4031,18 +4543,18 @@
       /* if there is no DOCTYPE declaration then now is the
          last chance to read the foreign DTD
       */
-      if (useForeignDTD) {
+      if (parser->m_useForeignDTD) {
         XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs;
         dtd->hasParamEntityRefs = XML_TRUE;
-        if (paramEntityParsing && externalEntityRefHandler) {
+        if (parser->m_paramEntityParsing && parser->m_externalEntityRefHandler) {
           ENTITY *entity = (ENTITY *)lookup(parser, &dtd->paramEntities,
                                             externalSubsetName,
                                             sizeof(ENTITY));
           if (!entity)
             return XML_ERROR_NO_MEMORY;
-          entity->base = curBase;
+          entity->base = parser->m_curBase;
           dtd->paramEntityRead = XML_FALSE;
-          if (!externalEntityRefHandler(externalEntityRefHandlerArg,
+          if (!parser->m_externalEntityRefHandler(parser->m_externalEntityRefHandlerArg,
                                         0,
                                         entity->base,
                                         entity->systemId,
@@ -4050,8 +4562,8 @@
             return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
           if (dtd->paramEntityRead) {
             if (!dtd->standalone &&
-                notStandaloneHandler &&
-                !notStandaloneHandler(handlerArg))
+                parser->m_notStandaloneHandler &&
+                !parser->m_notStandaloneHandler(parser->m_handlerArg))
               return XML_ERROR_NOT_STANDALONE;
           }
           /* if we didn't read the foreign DTD then this means that there
@@ -4063,55 +4575,55 @@
         }
       }
 #endif /* XML_DTD */
-      processor = contentProcessor;
+      parser->m_processor = contentProcessor;
       return contentProcessor(parser, s, end, nextPtr);
     case XML_ROLE_ATTLIST_ELEMENT_NAME:
-      declElementType = getElementType(parser, enc, s, next);
-      if (!declElementType)
+      parser->m_declElementType = getElementType(parser, enc, s, next);
+      if (!parser->m_declElementType)
         return XML_ERROR_NO_MEMORY;
       goto checkAttListDeclHandler;
     case XML_ROLE_ATTRIBUTE_NAME:
-      declAttributeId = getAttributeId(parser, enc, s, next);
-      if (!declAttributeId)
+      parser->m_declAttributeId = getAttributeId(parser, enc, s, next);
+      if (!parser->m_declAttributeId)
         return XML_ERROR_NO_MEMORY;
-      declAttributeIsCdata = XML_FALSE;
-      declAttributeType = NULL;
-      declAttributeIsId = XML_FALSE;
+      parser->m_declAttributeIsCdata = XML_FALSE;
+      parser->m_declAttributeType = NULL;
+      parser->m_declAttributeIsId = XML_FALSE;
       goto checkAttListDeclHandler;
     case XML_ROLE_ATTRIBUTE_TYPE_CDATA:
-      declAttributeIsCdata = XML_TRUE;
-      declAttributeType = atypeCDATA;
+      parser->m_declAttributeIsCdata = XML_TRUE;
+      parser->m_declAttributeType = atypeCDATA;
       goto checkAttListDeclHandler;
     case XML_ROLE_ATTRIBUTE_TYPE_ID:
-      declAttributeIsId = XML_TRUE;
-      declAttributeType = atypeID;
+      parser->m_declAttributeIsId = XML_TRUE;
+      parser->m_declAttributeType = atypeID;
       goto checkAttListDeclHandler;
     case XML_ROLE_ATTRIBUTE_TYPE_IDREF:
-      declAttributeType = atypeIDREF;
+      parser->m_declAttributeType = atypeIDREF;
       goto checkAttListDeclHandler;
     case XML_ROLE_ATTRIBUTE_TYPE_IDREFS:
-      declAttributeType = atypeIDREFS;
+      parser->m_declAttributeType = atypeIDREFS;
       goto checkAttListDeclHandler;
     case XML_ROLE_ATTRIBUTE_TYPE_ENTITY:
-      declAttributeType = atypeENTITY;
+      parser->m_declAttributeType = atypeENTITY;
       goto checkAttListDeclHandler;
     case XML_ROLE_ATTRIBUTE_TYPE_ENTITIES:
-      declAttributeType = atypeENTITIES;
+      parser->m_declAttributeType = atypeENTITIES;
       goto checkAttListDeclHandler;
     case XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN:
-      declAttributeType = atypeNMTOKEN;
+      parser->m_declAttributeType = atypeNMTOKEN;
       goto checkAttListDeclHandler;
     case XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS:
-      declAttributeType = atypeNMTOKENS;
+      parser->m_declAttributeType = atypeNMTOKENS;
     checkAttListDeclHandler:
-      if (dtd->keepProcessing && attlistDeclHandler)
+      if (dtd->keepProcessing && parser->m_attlistDeclHandler)
         handleDefault = XML_FALSE;
       break;
     case XML_ROLE_ATTRIBUTE_ENUM_VALUE:
     case XML_ROLE_ATTRIBUTE_NOTATION_VALUE:
-      if (dtd->keepProcessing && attlistDeclHandler) {
+      if (dtd->keepProcessing && parser->m_attlistDeclHandler) {
         const XML_Char *prefix;
-        if (declAttributeType) {
+        if (parser->m_declAttributeType) {
           prefix = enumValueSep;
         }
         else {
@@ -4119,37 +4631,37 @@
                     ? notationPrefix
                     : enumValueStart);
         }
-        if (!poolAppendString(&tempPool, prefix))
+        if (!poolAppendString(&parser->m_tempPool, prefix))
           return XML_ERROR_NO_MEMORY;
-        if (!poolAppend(&tempPool, enc, s, next))
+        if (!poolAppend(&parser->m_tempPool, enc, s, next))
           return XML_ERROR_NO_MEMORY;
-        declAttributeType = tempPool.start;
+        parser->m_declAttributeType = parser->m_tempPool.start;
         handleDefault = XML_FALSE;
       }
       break;
     case XML_ROLE_IMPLIED_ATTRIBUTE_VALUE:
     case XML_ROLE_REQUIRED_ATTRIBUTE_VALUE:
       if (dtd->keepProcessing) {
-        if (!defineAttribute(declElementType, declAttributeId,
-                             declAttributeIsCdata, declAttributeIsId,
+        if (!defineAttribute(parser->m_declElementType, parser->m_declAttributeId,
+                             parser->m_declAttributeIsCdata, parser->m_declAttributeIsId,
                              0, parser))
           return XML_ERROR_NO_MEMORY;
-        if (attlistDeclHandler && declAttributeType) {
-          if (*declAttributeType == XML_T(ASCII_LPAREN)
-              || (*declAttributeType == XML_T(ASCII_N)
-                  && declAttributeType[1] == XML_T(ASCII_O))) {
+        if (parser->m_attlistDeclHandler && parser->m_declAttributeType) {
+          if (*parser->m_declAttributeType == XML_T(ASCII_LPAREN)
+              || (*parser->m_declAttributeType == XML_T(ASCII_N)
+                  && parser->m_declAttributeType[1] == XML_T(ASCII_O))) {
             /* Enumerated or Notation type */
-            if (!poolAppendChar(&tempPool, XML_T(ASCII_RPAREN))
-                || !poolAppendChar(&tempPool, XML_T('\0')))
+            if (!poolAppendChar(&parser->m_tempPool, XML_T(ASCII_RPAREN))
+                || !poolAppendChar(&parser->m_tempPool, XML_T('\0')))
               return XML_ERROR_NO_MEMORY;
-            declAttributeType = tempPool.start;
-            poolFinish(&tempPool);
+            parser->m_declAttributeType = parser->m_tempPool.start;
+            poolFinish(&parser->m_tempPool);
           }
           *eventEndPP = s;
-          attlistDeclHandler(handlerArg, declElementType->name,
-                             declAttributeId->name, declAttributeType,
+          parser->m_attlistDeclHandler(parser->m_handlerArg, parser->m_declElementType->name,
+                             parser->m_declAttributeId->name, parser->m_declAttributeType,
                              0, role == XML_ROLE_REQUIRED_ATTRIBUTE_VALUE);
-          poolClear(&tempPool);
+          poolClear(&parser->m_tempPool);
           handleDefault = XML_FALSE;
         }
       }
@@ -4159,7 +4671,7 @@
       if (dtd->keepProcessing) {
         const XML_Char *attVal;
         enum XML_Error result =
-          storeAttributeValue(parser, enc, declAttributeIsCdata,
+          storeAttributeValue(parser, enc, parser->m_declAttributeIsCdata,
                               s + enc->minBytesPerChar,
                               next - enc->minBytesPerChar,
                               &dtd->pool);
@@ -4168,26 +4680,26 @@
         attVal = poolStart(&dtd->pool);
         poolFinish(&dtd->pool);
         /* ID attributes aren't allowed to have a default */
-        if (!defineAttribute(declElementType, declAttributeId,
-                             declAttributeIsCdata, XML_FALSE, attVal, parser))
+        if (!defineAttribute(parser->m_declElementType, parser->m_declAttributeId,
+                             parser->m_declAttributeIsCdata, XML_FALSE, attVal, parser))
           return XML_ERROR_NO_MEMORY;
-        if (attlistDeclHandler && declAttributeType) {
-          if (*declAttributeType == XML_T(ASCII_LPAREN)
-              || (*declAttributeType == XML_T(ASCII_N)
-                  && declAttributeType[1] == XML_T(ASCII_O))) {
+        if (parser->m_attlistDeclHandler && parser->m_declAttributeType) {
+          if (*parser->m_declAttributeType == XML_T(ASCII_LPAREN)
+              || (*parser->m_declAttributeType == XML_T(ASCII_N)
+                  && parser->m_declAttributeType[1] == XML_T(ASCII_O))) {
             /* Enumerated or Notation type */
-            if (!poolAppendChar(&tempPool, XML_T(ASCII_RPAREN))
-                || !poolAppendChar(&tempPool, XML_T('\0')))
+            if (!poolAppendChar(&parser->m_tempPool, XML_T(ASCII_RPAREN))
+                || !poolAppendChar(&parser->m_tempPool, XML_T('\0')))
               return XML_ERROR_NO_MEMORY;
-            declAttributeType = tempPool.start;
-            poolFinish(&tempPool);
+            parser->m_declAttributeType = parser->m_tempPool.start;
+            poolFinish(&parser->m_tempPool);
           }
           *eventEndPP = s;
-          attlistDeclHandler(handlerArg, declElementType->name,
-                             declAttributeId->name, declAttributeType,
+          parser->m_attlistDeclHandler(parser->m_handlerArg, parser->m_declElementType->name,
+                             parser->m_declAttributeId->name, parser->m_declAttributeType,
                              attVal,
                              role == XML_ROLE_FIXED_ATTRIBUTE_VALUE);
-          poolClear(&tempPool);
+          poolClear(&parser->m_tempPool);
           handleDefault = XML_FALSE;
         }
       }
@@ -4197,18 +4709,18 @@
         enum XML_Error result = storeEntityValue(parser, enc,
                                             s + enc->minBytesPerChar,
                                             next - enc->minBytesPerChar);
-        if (declEntity) {
-          declEntity->textPtr = poolStart(&dtd->entityValuePool);
-          declEntity->textLen = (int)(poolLength(&dtd->entityValuePool));
+        if (parser->m_declEntity) {
+          parser->m_declEntity->textPtr = poolStart(&dtd->entityValuePool);
+          parser->m_declEntity->textLen = (int)(poolLength(&dtd->entityValuePool));
           poolFinish(&dtd->entityValuePool);
-          if (entityDeclHandler) {
+          if (parser->m_entityDeclHandler) {
             *eventEndPP = s;
-            entityDeclHandler(handlerArg,
-                              declEntity->name,
-                              declEntity->is_param,
-                              declEntity->textPtr,
-                              declEntity->textLen,
-                              curBase, 0, 0, 0);
+            parser->m_entityDeclHandler(parser->m_handlerArg,
+                              parser->m_declEntity->name,
+                              parser->m_declEntity->is_param,
+                              parser->m_declEntity->textPtr,
+                              parser->m_declEntity->textLen,
+                              parser->m_curBase, 0, 0, 0);
             handleDefault = XML_FALSE;
           }
         }
@@ -4220,97 +4732,100 @@
       break;
     case XML_ROLE_DOCTYPE_SYSTEM_ID:
 #ifdef XML_DTD
-      useForeignDTD = XML_FALSE;
+      parser->m_useForeignDTD = XML_FALSE;
 #endif /* XML_DTD */
       dtd->hasParamEntityRefs = XML_TRUE;
-      if (startDoctypeDeclHandler) {
-        doctypeSysid = poolStoreString(&tempPool, enc,
+      if (parser->m_startDoctypeDeclHandler) {
+        parser->m_doctypeSysid = poolStoreString(&parser->m_tempPool, enc,
                                        s + enc->minBytesPerChar,
                                        next - enc->minBytesPerChar);
-        if (doctypeSysid == NULL)
+        if (parser->m_doctypeSysid == NULL)
           return XML_ERROR_NO_MEMORY;
-        poolFinish(&tempPool);
+        poolFinish(&parser->m_tempPool);
         handleDefault = XML_FALSE;
       }
 #ifdef XML_DTD
       else
-        /* use externalSubsetName to make doctypeSysid non-NULL
-           for the case where no startDoctypeDeclHandler is set */
-        doctypeSysid = externalSubsetName;
+        /* use externalSubsetName to make parser->m_doctypeSysid non-NULL
+           for the case where no parser->m_startDoctypeDeclHandler is set */
+        parser->m_doctypeSysid = externalSubsetName;
 #endif /* XML_DTD */
       if (!dtd->standalone
 #ifdef XML_DTD
-          && !paramEntityParsing
+          && !parser->m_paramEntityParsing
 #endif /* XML_DTD */
-          && notStandaloneHandler
-          && !notStandaloneHandler(handlerArg))
+          && parser->m_notStandaloneHandler
+          && !parser->m_notStandaloneHandler(parser->m_handlerArg))
         return XML_ERROR_NOT_STANDALONE;
 #ifndef XML_DTD
       break;
 #else /* XML_DTD */
-      if (!declEntity) {
-        declEntity = (ENTITY *)lookup(parser,
+      if (!parser->m_declEntity) {
+        parser->m_declEntity = (ENTITY *)lookup(parser,
                                       &dtd->paramEntities,
                                       externalSubsetName,
                                       sizeof(ENTITY));
-        if (!declEntity)
+        if (!parser->m_declEntity)
           return XML_ERROR_NO_MEMORY;
-        declEntity->publicId = NULL;
+        parser->m_declEntity->publicId = NULL;
       }
-      /* fall through */
 #endif /* XML_DTD */
+      /* fall through */
     case XML_ROLE_ENTITY_SYSTEM_ID:
-      if (dtd->keepProcessing && declEntity) {
-        declEntity->systemId = poolStoreString(&dtd->pool, enc,
+      if (dtd->keepProcessing && parser->m_declEntity) {
+        parser->m_declEntity->systemId = poolStoreString(&dtd->pool, enc,
                                                s + enc->minBytesPerChar,
                                                next - enc->minBytesPerChar);
-        if (!declEntity->systemId)
+        if (!parser->m_declEntity->systemId)
           return XML_ERROR_NO_MEMORY;
-        declEntity->base = curBase;
+        parser->m_declEntity->base = parser->m_curBase;
         poolFinish(&dtd->pool);
-        if (entityDeclHandler)
+        /* Don't suppress the default handler if we fell through from
+         * the XML_ROLE_DOCTYPE_SYSTEM_ID case.
+         */
+        if (parser->m_entityDeclHandler && role == XML_ROLE_ENTITY_SYSTEM_ID)
           handleDefault = XML_FALSE;
       }
       break;
     case XML_ROLE_ENTITY_COMPLETE:
-      if (dtd->keepProcessing && declEntity && entityDeclHandler) {
+      if (dtd->keepProcessing && parser->m_declEntity && parser->m_entityDeclHandler) {
         *eventEndPP = s;
-        entityDeclHandler(handlerArg,
-                          declEntity->name,
-                          declEntity->is_param,
+        parser->m_entityDeclHandler(parser->m_handlerArg,
+                          parser->m_declEntity->name,
+                          parser->m_declEntity->is_param,
                           0,0,
-                          declEntity->base,
-                          declEntity->systemId,
-                          declEntity->publicId,
+                          parser->m_declEntity->base,
+                          parser->m_declEntity->systemId,
+                          parser->m_declEntity->publicId,
                           0);
         handleDefault = XML_FALSE;
       }
       break;
     case XML_ROLE_ENTITY_NOTATION_NAME:
-      if (dtd->keepProcessing && declEntity) {
-        declEntity->notation = poolStoreString(&dtd->pool, enc, s, next);
-        if (!declEntity->notation)
+      if (dtd->keepProcessing && parser->m_declEntity) {
+        parser->m_declEntity->notation = poolStoreString(&dtd->pool, enc, s, next);
+        if (!parser->m_declEntity->notation)
           return XML_ERROR_NO_MEMORY;
         poolFinish(&dtd->pool);
-        if (unparsedEntityDeclHandler) {
+        if (parser->m_unparsedEntityDeclHandler) {
           *eventEndPP = s;
-          unparsedEntityDeclHandler(handlerArg,
-                                    declEntity->name,
-                                    declEntity->base,
-                                    declEntity->systemId,
-                                    declEntity->publicId,
-                                    declEntity->notation);
+          parser->m_unparsedEntityDeclHandler(parser->m_handlerArg,
+                                    parser->m_declEntity->name,
+                                    parser->m_declEntity->base,
+                                    parser->m_declEntity->systemId,
+                                    parser->m_declEntity->publicId,
+                                    parser->m_declEntity->notation);
           handleDefault = XML_FALSE;
         }
-        else if (entityDeclHandler) {
+        else if (parser->m_entityDeclHandler) {
           *eventEndPP = s;
-          entityDeclHandler(handlerArg,
-                            declEntity->name,
+          parser->m_entityDeclHandler(parser->m_handlerArg,
+                            parser->m_declEntity->name,
                             0,0,0,
-                            declEntity->base,
-                            declEntity->systemId,
-                            declEntity->publicId,
-                            declEntity->notation);
+                            parser->m_declEntity->base,
+                            parser->m_declEntity->systemId,
+                            parser->m_declEntity->publicId,
+                            parser->m_declEntity->notation);
           handleDefault = XML_FALSE;
         }
       }
@@ -4318,36 +4833,36 @@
     case XML_ROLE_GENERAL_ENTITY_NAME:
       {
         if (XmlPredefinedEntityName(enc, s, next)) {
-          declEntity = NULL;
+          parser->m_declEntity = NULL;
           break;
         }
         if (dtd->keepProcessing) {
           const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next);
           if (!name)
             return XML_ERROR_NO_MEMORY;
-          declEntity = (ENTITY *)lookup(parser, &dtd->generalEntities, name,
+          parser->m_declEntity = (ENTITY *)lookup(parser, &dtd->generalEntities, name,
                                         sizeof(ENTITY));
-          if (!declEntity)
+          if (!parser->m_declEntity)
             return XML_ERROR_NO_MEMORY;
-          if (declEntity->name != name) {
+          if (parser->m_declEntity->name != name) {
             poolDiscard(&dtd->pool);
-            declEntity = NULL;
+            parser->m_declEntity = NULL;
           }
           else {
             poolFinish(&dtd->pool);
-            declEntity->publicId = NULL;
-            declEntity->is_param = XML_FALSE;
+            parser->m_declEntity->publicId = NULL;
+            parser->m_declEntity->is_param = XML_FALSE;
             /* if we have a parent parser or are reading an internal parameter
                entity, then the entity declaration is not considered "internal"
             */
-            declEntity->is_internal = !(parentParser || openInternalEntities);
-            if (entityDeclHandler)
+            parser->m_declEntity->is_internal = !(parser->m_parentParser || parser->m_openInternalEntities);
+            if (parser->m_entityDeclHandler)
               handleDefault = XML_FALSE;
           }
         }
         else {
           poolDiscard(&dtd->pool);
-          declEntity = NULL;
+          parser->m_declEntity = NULL;
         }
       }
       break;
@@ -4357,90 +4872,90 @@
         const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next);
         if (!name)
           return XML_ERROR_NO_MEMORY;
-        declEntity = (ENTITY *)lookup(parser, &dtd->paramEntities,
+        parser->m_declEntity = (ENTITY *)lookup(parser, &dtd->paramEntities,
                                            name, sizeof(ENTITY));
-        if (!declEntity)
+        if (!parser->m_declEntity)
           return XML_ERROR_NO_MEMORY;
-        if (declEntity->name != name) {
+        if (parser->m_declEntity->name != name) {
           poolDiscard(&dtd->pool);
-          declEntity = NULL;
+          parser->m_declEntity = NULL;
         }
         else {
           poolFinish(&dtd->pool);
-          declEntity->publicId = NULL;
-          declEntity->is_param = XML_TRUE;
+          parser->m_declEntity->publicId = NULL;
+          parser->m_declEntity->is_param = XML_TRUE;
           /* if we have a parent parser or are reading an internal parameter
              entity, then the entity declaration is not considered "internal"
           */
-          declEntity->is_internal = !(parentParser || openInternalEntities);
-          if (entityDeclHandler)
+          parser->m_declEntity->is_internal = !(parser->m_parentParser || parser->m_openInternalEntities);
+          if (parser->m_entityDeclHandler)
             handleDefault = XML_FALSE;
         }
       }
       else {
         poolDiscard(&dtd->pool);
-        declEntity = NULL;
+        parser->m_declEntity = NULL;
       }
 #else /* not XML_DTD */
-      declEntity = NULL;
+      parser->m_declEntity = NULL;
 #endif /* XML_DTD */
       break;
     case XML_ROLE_NOTATION_NAME:
-      declNotationPublicId = NULL;
-      declNotationName = NULL;
-      if (notationDeclHandler) {
-        declNotationName = poolStoreString(&tempPool, enc, s, next);
-        if (!declNotationName)
+      parser->m_declNotationPublicId = NULL;
+      parser->m_declNotationName = NULL;
+      if (parser->m_notationDeclHandler) {
+        parser->m_declNotationName = poolStoreString(&parser->m_tempPool, enc, s, next);
+        if (!parser->m_declNotationName)
           return XML_ERROR_NO_MEMORY;
-        poolFinish(&tempPool);
+        poolFinish(&parser->m_tempPool);
         handleDefault = XML_FALSE;
       }
       break;
     case XML_ROLE_NOTATION_PUBLIC_ID:
       if (!XmlIsPublicId(enc, s, next, eventPP))
         return XML_ERROR_PUBLICID;
-      if (declNotationName) {  /* means notationDeclHandler != NULL */
-        XML_Char *tem = poolStoreString(&tempPool,
+      if (parser->m_declNotationName) {  /* means m_notationDeclHandler != NULL */
+        XML_Char *tem = poolStoreString(&parser->m_tempPool,
                                         enc,
                                         s + enc->minBytesPerChar,
                                         next - enc->minBytesPerChar);
         if (!tem)
           return XML_ERROR_NO_MEMORY;
         normalizePublicId(tem);
-        declNotationPublicId = tem;
-        poolFinish(&tempPool);
+        parser->m_declNotationPublicId = tem;
+        poolFinish(&parser->m_tempPool);
         handleDefault = XML_FALSE;
       }
       break;
     case XML_ROLE_NOTATION_SYSTEM_ID:
-      if (declNotationName && notationDeclHandler) {
+      if (parser->m_declNotationName && parser->m_notationDeclHandler) {
         const XML_Char *systemId
-          = poolStoreString(&tempPool, enc,
+          = poolStoreString(&parser->m_tempPool, enc,
                             s + enc->minBytesPerChar,
                             next - enc->minBytesPerChar);
         if (!systemId)
           return XML_ERROR_NO_MEMORY;
         *eventEndPP = s;
-        notationDeclHandler(handlerArg,
-                            declNotationName,
-                            curBase,
+        parser->m_notationDeclHandler(parser->m_handlerArg,
+                            parser->m_declNotationName,
+                            parser->m_curBase,
                             systemId,
-                            declNotationPublicId);
+                            parser->m_declNotationPublicId);
         handleDefault = XML_FALSE;
       }
-      poolClear(&tempPool);
+      poolClear(&parser->m_tempPool);
       break;
     case XML_ROLE_NOTATION_NO_SYSTEM_ID:
-      if (declNotationPublicId && notationDeclHandler) {
+      if (parser->m_declNotationPublicId && parser->m_notationDeclHandler) {
         *eventEndPP = s;
-        notationDeclHandler(handlerArg,
-                            declNotationName,
-                            curBase,
+        parser->m_notationDeclHandler(parser->m_handlerArg,
+                            parser->m_declNotationName,
+                            parser->m_curBase,
                             0,
-                            declNotationPublicId);
+                            parser->m_declNotationPublicId);
         handleDefault = XML_FALSE;
       }
-      poolClear(&tempPool);
+      poolClear(&parser->m_tempPool);
       break;
     case XML_ROLE_ERROR:
       switch (tok) {
@@ -4457,41 +4972,45 @@
     case XML_ROLE_IGNORE_SECT:
       {
         enum XML_Error result;
-        if (defaultHandler)
+        if (parser->m_defaultHandler)
           reportDefault(parser, enc, s, next);
         handleDefault = XML_FALSE;
         result = doIgnoreSection(parser, enc, &next, end, nextPtr, haveMore);
         if (result != XML_ERROR_NONE)
           return result;
         else if (!next) {
-          processor = ignoreSectionProcessor;
+          parser->m_processor = ignoreSectionProcessor;
           return result;
         }
       }
       break;
 #endif /* XML_DTD */
     case XML_ROLE_GROUP_OPEN:
-      if (prologState.level >= groupSize) {
-        if (groupSize) {
-          char *temp = (char *)REALLOC(groupConnector, groupSize *= 2);
-          if (temp == NULL)
+      if (parser->m_prologState.level >= parser->m_groupSize) {
+        if (parser->m_groupSize) {
+          char *temp = (char *)REALLOC(parser, parser->m_groupConnector, parser->m_groupSize *= 2);
+          if (temp == NULL) {
+            parser->m_groupSize /= 2;
             return XML_ERROR_NO_MEMORY;
-          groupConnector = temp;
+          }
+          parser->m_groupConnector = temp;
           if (dtd->scaffIndex) {
-            int *temp = (int *)REALLOC(dtd->scaffIndex,
-                          groupSize * sizeof(int));
+            int *temp = (int *)REALLOC(parser, dtd->scaffIndex,
+                          parser->m_groupSize * sizeof(int));
             if (temp == NULL)
               return XML_ERROR_NO_MEMORY;
             dtd->scaffIndex = temp;
           }
         }
         else {
-          groupConnector = (char *)MALLOC(groupSize = 32);
-          if (!groupConnector)
+          parser->m_groupConnector = (char *)MALLOC(parser, parser->m_groupSize = 32);
+          if (!parser->m_groupConnector) {
+            parser->m_groupSize = 0;
             return XML_ERROR_NO_MEMORY;
+          }
         }
       }
-      groupConnector[prologState.level] = 0;
+      parser->m_groupConnector[parser->m_prologState.level] = 0;
       if (dtd->in_eldecl) {
         int myindex = nextScaffoldPart(parser);
         if (myindex < 0)
@@ -4499,37 +5018,37 @@
         dtd->scaffIndex[dtd->scaffLevel] = myindex;
         dtd->scaffLevel++;
         dtd->scaffold[myindex].type = XML_CTYPE_SEQ;
-        if (elementDeclHandler)
+        if (parser->m_elementDeclHandler)
           handleDefault = XML_FALSE;
       }
       break;
     case XML_ROLE_GROUP_SEQUENCE:
-      if (groupConnector[prologState.level] == ASCII_PIPE)
+      if (parser->m_groupConnector[parser->m_prologState.level] == ASCII_PIPE)
         return XML_ERROR_SYNTAX;
-      groupConnector[prologState.level] = ASCII_COMMA;
-      if (dtd->in_eldecl && elementDeclHandler)
+      parser->m_groupConnector[parser->m_prologState.level] = ASCII_COMMA;
+      if (dtd->in_eldecl && parser->m_elementDeclHandler)
         handleDefault = XML_FALSE;
       break;
     case XML_ROLE_GROUP_CHOICE:
-      if (groupConnector[prologState.level] == ASCII_COMMA)
+      if (parser->m_groupConnector[parser->m_prologState.level] == ASCII_COMMA)
         return XML_ERROR_SYNTAX;
       if (dtd->in_eldecl
-          && !groupConnector[prologState.level]
+          && !parser->m_groupConnector[parser->m_prologState.level]
           && (dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type
               != XML_CTYPE_MIXED)
           ) {
         dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type
             = XML_CTYPE_CHOICE;
-        if (elementDeclHandler)
+        if (parser->m_elementDeclHandler)
           handleDefault = XML_FALSE;
       }
-      groupConnector[prologState.level] = ASCII_PIPE;
+      parser->m_groupConnector[parser->m_prologState.level] = ASCII_PIPE;
       break;
     case XML_ROLE_PARAM_ENTITY_REF:
 #ifdef XML_DTD
     case XML_ROLE_INNER_PARAM_ENTITY_REF:
       dtd->hasParamEntityRefs = XML_TRUE;
-      if (!paramEntityParsing)
+      if (!parser->m_paramEntityParsing)
         dtd->keepProcessing = dtd->standalone;
       else {
         const XML_Char *name;
@@ -4545,20 +5064,41 @@
            if yes, check that the entity exists, and that it is internal,
            otherwise call the skipped entity handler
         */
-        if (prologState.documentEntity &&
+        if (parser->m_prologState.documentEntity &&
             (dtd->standalone
-             ? !openInternalEntities
+             ? !parser->m_openInternalEntities
              : !dtd->hasParamEntityRefs)) {
           if (!entity)
             return XML_ERROR_UNDEFINED_ENTITY;
-          else if (!entity->is_internal)
-            return XML_ERROR_ENTITY_DECLARED_IN_PE;
+          else if (!entity->is_internal) {
+            /* It's hard to exhaustively search the code to be sure,
+             * but there doesn't seem to be a way of executing the
+             * following line.  There are two cases:
+             *
+             * If 'standalone' is false, the DTD must have no
+             * parameter entities or we wouldn't have passed the outer
+             * 'if' statement.  That measn the only entity in the hash
+             * table is the external subset name "#" which cannot be
+             * given as a parameter entity name in XML syntax, so the
+             * lookup must have returned NULL and we don't even reach
+             * the test for an internal entity.
+             *
+             * If 'standalone' is true, it does not seem to be
+             * possible to create entities taking this code path that
+             * are not internal entities, so fail the test above.
+             *
+             * Because this analysis is very uncertain, the code is
+             * being left in place and merely removed from the
+             * coverage test statistics.
+             */
+            return XML_ERROR_ENTITY_DECLARED_IN_PE; /* LCOV_EXCL_LINE */
+          }
         }
         else if (!entity) {
           dtd->keepProcessing = dtd->standalone;
           /* cannot report skipped entities in declarations */
-          if ((role == XML_ROLE_PARAM_ENTITY_REF) && skippedEntityHandler) {
-            skippedEntityHandler(handlerArg, name, 1);
+          if ((role == XML_ROLE_PARAM_ENTITY_REF) && parser->m_skippedEntityHandler) {
+            parser->m_skippedEntityHandler(parser->m_handlerArg, name, 1);
             handleDefault = XML_FALSE;
           }
           break;
@@ -4575,10 +5115,10 @@
           handleDefault = XML_FALSE;
           break;
         }
-        if (externalEntityRefHandler) {
+        if (parser->m_externalEntityRefHandler) {
           dtd->paramEntityRead = XML_FALSE;
           entity->open = XML_TRUE;
-          if (!externalEntityRefHandler(externalEntityRefHandlerArg,
+          if (!parser->m_externalEntityRefHandler(parser->m_externalEntityRefHandlerArg,
                                         0,
                                         entity->base,
                                         entity->systemId,
@@ -4600,17 +5140,17 @@
       }
 #endif /* XML_DTD */
       if (!dtd->standalone &&
-          notStandaloneHandler &&
-          !notStandaloneHandler(handlerArg))
+          parser->m_notStandaloneHandler &&
+          !parser->m_notStandaloneHandler(parser->m_handlerArg))
         return XML_ERROR_NOT_STANDALONE;
       break;
 
     /* Element declaration stuff */
 
     case XML_ROLE_ELEMENT_NAME:
-      if (elementDeclHandler) {
-        declElementType = getElementType(parser, enc, s, next);
-        if (!declElementType)
+      if (parser->m_elementDeclHandler) {
+        parser->m_declElementType = getElementType(parser, enc, s, next);
+        if (!parser->m_declElementType)
           return XML_ERROR_NO_MEMORY;
         dtd->scaffLevel = 0;
         dtd->scaffCount = 0;
@@ -4622,8 +5162,8 @@
     case XML_ROLE_CONTENT_ANY:
     case XML_ROLE_CONTENT_EMPTY:
       if (dtd->in_eldecl) {
-        if (elementDeclHandler) {
-          XML_Content * content = (XML_Content *) MALLOC(sizeof(XML_Content));
+        if (parser->m_elementDeclHandler) {
+          XML_Content * content = (XML_Content *) MALLOC(parser, sizeof(XML_Content));
           if (!content)
             return XML_ERROR_NO_MEMORY;
           content->quant = XML_CQUANT_NONE;
@@ -4634,7 +5174,7 @@
                            XML_CTYPE_ANY :
                            XML_CTYPE_EMPTY);
           *eventEndPP = s;
-          elementDeclHandler(handlerArg, declElementType->name, content);
+          parser->m_elementDeclHandler(parser->m_handlerArg, parser->m_declElementType->name, content);
           handleDefault = XML_FALSE;
         }
         dtd->in_eldecl = XML_FALSE;
@@ -4645,7 +5185,7 @@
       if (dtd->in_eldecl) {
         dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type
             = XML_CTYPE_MIXED;
-        if (elementDeclHandler)
+        if (parser->m_elementDeclHandler)
           handleDefault = XML_FALSE;
       }
       break;
@@ -4682,7 +5222,7 @@
         nameLen = 0;
         for (; name[nameLen++]; );
         dtd->contentStringLen +=  nameLen;
-        if (elementDeclHandler)
+        if (parser->m_elementDeclHandler)
           handleDefault = XML_FALSE;
       }
       break;
@@ -4700,7 +5240,7 @@
       quant = XML_CQUANT_PLUS;
     closeGroup:
       if (dtd->in_eldecl) {
-        if (elementDeclHandler)
+        if (parser->m_elementDeclHandler)
           handleDefault = XML_FALSE;
         dtd->scaffLevel--;
         dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel]].quant = quant;
@@ -4710,7 +5250,7 @@
             if (!model)
               return XML_ERROR_NO_MEMORY;
             *eventEndPP = s;
-            elementDeclHandler(handlerArg, declElementType->name, model);
+            parser->m_elementDeclHandler(parser->m_handlerArg, parser->m_declElementType->name, model);
           }
           dtd->in_eldecl = XML_FALSE;
           dtd->contentStringLen = 0;
@@ -4737,31 +5277,31 @@
       }
       break;
     case XML_ROLE_DOCTYPE_NONE:
-      if (startDoctypeDeclHandler)
+      if (parser->m_startDoctypeDeclHandler)
         handleDefault = XML_FALSE;
       break;
     case XML_ROLE_ENTITY_NONE:
-      if (dtd->keepProcessing && entityDeclHandler)
+      if (dtd->keepProcessing && parser->m_entityDeclHandler)
         handleDefault = XML_FALSE;
       break;
     case XML_ROLE_NOTATION_NONE:
-      if (notationDeclHandler)
+      if (parser->m_notationDeclHandler)
         handleDefault = XML_FALSE;
       break;
     case XML_ROLE_ATTLIST_NONE:
-      if (dtd->keepProcessing && attlistDeclHandler)
+      if (dtd->keepProcessing && parser->m_attlistDeclHandler)
         handleDefault = XML_FALSE;
       break;
     case XML_ROLE_ELEMENT_NONE:
-      if (elementDeclHandler)
+      if (parser->m_elementDeclHandler)
         handleDefault = XML_FALSE;
       break;
     } /* end of big switch */
 
-    if (handleDefault && defaultHandler)
+    if (handleDefault && parser->m_defaultHandler)
       reportDefault(parser, enc, s, next);
 
-    switch (ps_parsing) {
+    switch (parser->m_parsingStatus.parsing) {
     case XML_SUSPENDED:
       *nextPtr = next;
       return XML_ERROR_NONE;
@@ -4781,18 +5321,18 @@
                 const char *end,
                 const char **nextPtr)
 {
-  processor = epilogProcessor;
-  eventPtr = s;
+  parser->m_processor = epilogProcessor;
+  parser->m_eventPtr = s;
   for (;;) {
     const char *next = NULL;
-    int tok = XmlPrologTok(encoding, s, end, &next);
-    eventEndPtr = next;
+    int tok = XmlPrologTok(parser->m_encoding, s, end, &next);
+    parser->m_eventEndPtr = next;
     switch (tok) {
     /* report partial linebreak - it might be the last token */
     case -XML_TOK_PROLOG_S:
-      if (defaultHandler) {
-        reportDefault(parser, encoding, s, next);
-        if (ps_parsing == XML_FINISHED)
+      if (parser->m_defaultHandler) {
+        reportDefault(parser, parser->m_encoding, s, next);
+        if (parser->m_parsingStatus.parsing == XML_FINISHED)
           return XML_ERROR_ABORTED;
       }
       *nextPtr = next;
@@ -4801,28 +5341,28 @@
       *nextPtr = s;
       return XML_ERROR_NONE;
     case XML_TOK_PROLOG_S:
-      if (defaultHandler)
-        reportDefault(parser, encoding, s, next);
+      if (parser->m_defaultHandler)
+        reportDefault(parser, parser->m_encoding, s, next);
       break;
     case XML_TOK_PI:
-      if (!reportProcessingInstruction(parser, encoding, s, next))
+      if (!reportProcessingInstruction(parser, parser->m_encoding, s, next))
         return XML_ERROR_NO_MEMORY;
       break;
     case XML_TOK_COMMENT:
-      if (!reportComment(parser, encoding, s, next))
+      if (!reportComment(parser, parser->m_encoding, s, next))
         return XML_ERROR_NO_MEMORY;
       break;
     case XML_TOK_INVALID:
-      eventPtr = next;
+      parser->m_eventPtr = next;
       return XML_ERROR_INVALID_TOKEN;
     case XML_TOK_PARTIAL:
-      if (!ps_finalBuffer) {
+      if (!parser->m_parsingStatus.finalBuffer) {
         *nextPtr = s;
         return XML_ERROR_NONE;
       }
       return XML_ERROR_UNCLOSED_TOKEN;
     case XML_TOK_PARTIAL_CHAR:
-      if (!ps_finalBuffer) {
+      if (!parser->m_parsingStatus.finalBuffer) {
         *nextPtr = s;
         return XML_ERROR_NONE;
       }
@@ -4830,8 +5370,8 @@
     default:
       return XML_ERROR_JUNK_AFTER_DOC_ELEMENT;
     }
-    eventPtr = s = next;
-    switch (ps_parsing) {
+    parser->m_eventPtr = s = next;
+    switch (parser->m_parsingStatus.parsing) {
     case XML_SUSPENDED:
       *nextPtr = next;
       return XML_ERROR_NONE;
@@ -4851,49 +5391,51 @@
   enum XML_Error result;
   OPEN_INTERNAL_ENTITY *openEntity;
 
-  if (freeInternalEntities) {
-    openEntity = freeInternalEntities;
-    freeInternalEntities = openEntity->next;
+  if (parser->m_freeInternalEntities) {
+    openEntity = parser->m_freeInternalEntities;
+    parser->m_freeInternalEntities = openEntity->next;
   }
   else {
-    openEntity = (OPEN_INTERNAL_ENTITY *)MALLOC(sizeof(OPEN_INTERNAL_ENTITY));
+    openEntity = (OPEN_INTERNAL_ENTITY *)MALLOC(parser, sizeof(OPEN_INTERNAL_ENTITY));
     if (!openEntity)
       return XML_ERROR_NO_MEMORY;
   }
   entity->open = XML_TRUE;
   entity->processed = 0;
-  openEntity->next = openInternalEntities;
-  openInternalEntities = openEntity;
+  openEntity->next = parser->m_openInternalEntities;
+  parser->m_openInternalEntities = openEntity;
   openEntity->entity = entity;
-  openEntity->startTagLevel = tagLevel;
+  openEntity->startTagLevel = parser->m_tagLevel;
   openEntity->betweenDecl = betweenDecl;
   openEntity->internalEventPtr = NULL;
   openEntity->internalEventEndPtr = NULL;
   textStart = (char *)entity->textPtr;
   textEnd = (char *)(entity->textPtr + entity->textLen);
+  /* Set a safe default value in case 'next' does not get set */
+  next = textStart;
 
 #ifdef XML_DTD
   if (entity->is_param) {
-    int tok = XmlPrologTok(internalEncoding, textStart, textEnd, &next);
-    result = doProlog(parser, internalEncoding, textStart, textEnd, tok,
+    int tok = XmlPrologTok(parser->m_internalEncoding, textStart, textEnd, &next);
+    result = doProlog(parser, parser->m_internalEncoding, textStart, textEnd, tok,
                       next, &next, XML_FALSE);
   }
   else
 #endif /* XML_DTD */
-    result = doContent(parser, tagLevel, internalEncoding, textStart,
+    result = doContent(parser, parser->m_tagLevel, parser->m_internalEncoding, textStart,
                        textEnd, &next, XML_FALSE);
 
   if (result == XML_ERROR_NONE) {
-    if (textEnd != next && ps_parsing == XML_SUSPENDED) {
+    if (textEnd != next && parser->m_parsingStatus.parsing == XML_SUSPENDED) {
       entity->processed = (int)(next - textStart);
-      processor = internalEntityProcessor;
+      parser->m_processor = internalEntityProcessor;
     }
     else {
       entity->open = XML_FALSE;
-      openInternalEntities = openEntity->next;
+      parser->m_openInternalEntities = openEntity->next;
       /* put openEntity back in list of free instances */
-      openEntity->next = freeInternalEntities;
-      freeInternalEntities = openEntity;
+      openEntity->next = parser->m_freeInternalEntities;
+      parser->m_freeInternalEntities = openEntity;
     }
   }
   return result;
@@ -4909,64 +5451,66 @@
   const char *textStart, *textEnd;
   const char *next;
   enum XML_Error result;
-  OPEN_INTERNAL_ENTITY *openEntity = openInternalEntities;
+  OPEN_INTERNAL_ENTITY *openEntity = parser->m_openInternalEntities;
   if (!openEntity)
     return XML_ERROR_UNEXPECTED_STATE;
 
   entity = openEntity->entity;
   textStart = ((char *)entity->textPtr) + entity->processed;
   textEnd = (char *)(entity->textPtr + entity->textLen);
+  /* Set a safe default value in case 'next' does not get set */
+  next = textStart;
 
 #ifdef XML_DTD
   if (entity->is_param) {
-    int tok = XmlPrologTok(internalEncoding, textStart, textEnd, &next);
-    result = doProlog(parser, internalEncoding, textStart, textEnd, tok,
+    int tok = XmlPrologTok(parser->m_internalEncoding, textStart, textEnd, &next);
+    result = doProlog(parser, parser->m_internalEncoding, textStart, textEnd, tok,
                       next, &next, XML_FALSE);
   }
   else
 #endif /* XML_DTD */
-    result = doContent(parser, openEntity->startTagLevel, internalEncoding,
+    result = doContent(parser, openEntity->startTagLevel, parser->m_internalEncoding,
                        textStart, textEnd, &next, XML_FALSE);
 
   if (result != XML_ERROR_NONE)
     return result;
-  else if (textEnd != next && ps_parsing == XML_SUSPENDED) {
+  else if (textEnd != next && parser->m_parsingStatus.parsing == XML_SUSPENDED) {
     entity->processed = (int)(next - (char *)entity->textPtr);
     return result;
   }
   else {
     entity->open = XML_FALSE;
-    openInternalEntities = openEntity->next;
+    parser->m_openInternalEntities = openEntity->next;
     /* put openEntity back in list of free instances */
-    openEntity->next = freeInternalEntities;
-    freeInternalEntities = openEntity;
+    openEntity->next = parser->m_freeInternalEntities;
+    parser->m_freeInternalEntities = openEntity;
   }
 
 #ifdef XML_DTD
   if (entity->is_param) {
     int tok;
-    processor = prologProcessor;
-    tok = XmlPrologTok(encoding, s, end, &next);
-    return doProlog(parser, encoding, s, end, tok, next, nextPtr,
-                    (XML_Bool)!ps_finalBuffer);
+    parser->m_processor = prologProcessor;
+    tok = XmlPrologTok(parser->m_encoding, s, end, &next);
+    return doProlog(parser, parser->m_encoding, s, end, tok, next, nextPtr,
+                    (XML_Bool)!parser->m_parsingStatus.finalBuffer);
   }
   else
 #endif /* XML_DTD */
   {
-    processor = contentProcessor;
+    parser->m_processor = contentProcessor;
     /* see externalEntityContentProcessor vs contentProcessor */
-    return doContent(parser, parentParser ? 1 : 0, encoding, s, end,
-                     nextPtr, (XML_Bool)!ps_finalBuffer);
+    return doContent(parser, parser->m_parentParser ? 1 : 0, parser->m_encoding, s, end,
+                     nextPtr, (XML_Bool)!parser->m_parsingStatus.finalBuffer);
   }
 }
 
 static enum XML_Error PTRCALL
 errorProcessor(XML_Parser parser,
-               const char *s,
-               const char *end,
-               const char **nextPtr)
+               const char *UNUSED_P(s),
+               const char *UNUSED_P(end),
+               const char **UNUSED_P(nextPtr))
 {
-  return errorCode;
+  return parser->m_errorCode;
 }
 
 static enum XML_Error
@@ -4990,7 +5534,7 @@
                      const char *ptr, const char *end,
                      STRING_POOL *pool)
 {
-  DTD * const dtd = _dtd;  /* save one level of indirection */
+  DTD * const dtd = parser->m_dtd;  /* save one level of indirection */
   for (;;) {
     const char *next;
     int tok = XmlAttributeValueTok(enc, ptr, end, &next);
@@ -4998,12 +5542,12 @@
     case XML_TOK_NONE:
       return XML_ERROR_NONE;
     case XML_TOK_INVALID:
-      if (enc == encoding)
-        eventPtr = next;
+      if (enc == parser->m_encoding)
+        parser->m_eventPtr = next;
       return XML_ERROR_INVALID_TOKEN;
     case XML_TOK_PARTIAL:
-      if (enc == encoding)
-        eventPtr = ptr;
+      if (enc == parser->m_encoding)
+        parser->m_eventPtr = ptr;
       return XML_ERROR_INVALID_TOKEN;
     case XML_TOK_CHAR_REF:
       {
@@ -5011,8 +5555,8 @@
         int i;
         int n = XmlCharRefNumber(enc, ptr);
         if (n < 0) {
-          if (enc == encoding)
-            eventPtr = ptr;
+          if (enc == parser->m_encoding)
+            parser->m_eventPtr = ptr;
           return XML_ERROR_BAD_CHAR_REF;
         }
         if (!isCdata
@@ -5020,11 +5564,15 @@
             && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20))
           break;
         n = XmlEncode(n, (ICHAR *)buf);
-        if (!n) {
-          if (enc == encoding)
-            eventPtr = ptr;
-          return XML_ERROR_BAD_CHAR_REF;
-        }
+        /* The XmlEncode() functions can never return 0 here.  That
+         * error return happens if the code point passed in is either
+         * negative or greater than or equal to 0x110000.  The
+         * XmlCharRefNumber() functions will all return a number
+         * strictly less than 0x110000 or a negative value if an error
+         * occurred.  The negative value is intercepted above, so
+         * XmlEncode() is never passed a value it might return an
+         * error for.
+         */
         for (i = 0; i < n; i++) {
           if (!poolAppendChar(pool, buf[i]))
             return XML_ERROR_NO_MEMORY;
@@ -5058,25 +5606,25 @@
                 return XML_ERROR_NO_MEMORY;
           break;
         }
-        name = poolStoreString(&temp2Pool, enc,
+        name = poolStoreString(&parser->m_temp2Pool, enc,
                                ptr + enc->minBytesPerChar,
                                next - enc->minBytesPerChar);
         if (!name)
           return XML_ERROR_NO_MEMORY;
         entity = (ENTITY *)lookup(parser, &dtd->generalEntities, name, 0);
-        poolDiscard(&temp2Pool);
+        poolDiscard(&parser->m_temp2Pool);
         /* First, determine if a check for an existing declaration is needed;
            if yes, check that the entity exists, and that it is internal.
         */
         if (pool == &dtd->pool)  /* are we called from prolog? */
           checkEntityDecl =
 #ifdef XML_DTD
-              prologState.documentEntity &&
+              parser->m_prologState.documentEntity &&
 #endif /* XML_DTD */
               (dtd->standalone
-               ? !openInternalEntities
+               ? !parser->m_openInternalEntities
                : !dtd->hasParamEntityRefs);
-        else /* if (pool == &tempPool): we are called from content */
+        else /* if (pool == &parser->m_tempPool): we are called from content */
           checkEntityDecl = !dtd->hasParamEntityRefs || dtd->standalone;
         if (checkEntityDecl) {
           if (!entity)
@@ -5086,37 +5634,55 @@
         }
         else if (!entity) {
           /* Cannot report skipped entity here - see comments on
-             skippedEntityHandler.
-          if (skippedEntityHandler)
-            skippedEntityHandler(handlerArg, name, 0);
+             parser->m_skippedEntityHandler.
+          if (parser->m_skippedEntityHandler)
+            parser->m_skippedEntityHandler(parser->m_handlerArg, name, 0);
           */
           /* Cannot call the default handler because this would be
              out of sync with the call to the startElementHandler.
-          if ((pool == &tempPool) && defaultHandler)
+          if ((pool == &parser->m_tempPool) && parser->m_defaultHandler)
             reportDefault(parser, enc, ptr, next);
           */
           break;
         }
         if (entity->open) {
-          if (enc == encoding)
-            eventPtr = ptr;
+          if (enc == parser->m_encoding) {
+            /* It does not appear that this line can be executed.
+             *
+             * The "if (entity->open)" check catches recursive entity
+             * definitions.  In order to be called with an open
+             * entity, it must have gone through this code before and
+             * been through the recursive call to
+             * appendAttributeValue() some lines below.  That call
+             * sets the local encoding ("enc") to the parser's
+             * internal encoding (internal_utf8 or internal_utf16),
+             * which can never be the same as the principle encoding.
+             * It doesn't appear there is another code path that gets
+             * here with entity->open being TRUE.
+             *
+             * Since it is not certain that this logic is watertight,
+             * we keep the line and merely exclude it from coverage
+             * tests.
+             */
+            parser->m_eventPtr = ptr; /* LCOV_EXCL_LINE */
+          }
           return XML_ERROR_RECURSIVE_ENTITY_REF;
         }
         if (entity->notation) {
-          if (enc == encoding)
-            eventPtr = ptr;
+          if (enc == parser->m_encoding)
+            parser->m_eventPtr = ptr;
           return XML_ERROR_BINARY_ENTITY_REF;
         }
         if (!entity->textPtr) {
-          if (enc == encoding)
-            eventPtr = ptr;
+          if (enc == parser->m_encoding)
+            parser->m_eventPtr = ptr;
           return XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF;
         }
         else {
           enum XML_Error result;
           const XML_Char *textEnd = entity->textPtr + entity->textLen;
           entity->open = XML_TRUE;
-          result = appendAttributeValue(parser, internalEncoding, isCdata,
+          result = appendAttributeValue(parser, parser->m_internalEncoding, isCdata,
                                         (char *)entity->textPtr,
                                         (char *)textEnd, pool);
           entity->open = XML_FALSE;
@@ -5126,9 +5692,21 @@
       }
       break;
     default:
-      if (enc == encoding)
-        eventPtr = ptr;
+      /* The only token returned by XmlAttributeValueTok() that does
+       * not have an explicit case here is XML_TOK_PARTIAL_CHAR.
+       * Getting that would require an entity name to contain an
+       * incomplete XML character (e.g. \xE2\x82); however previous
+       * tokenisers will have already recognised and rejected such
+       * names before XmlAttributeValueTok() gets a look-in.  This
+       * default case should be retained as a safety net, but the code
+       * excluded from coverage tests.
+       *
+       * LCOV_EXCL_START
+       */
+      if (enc == parser->m_encoding)
+        parser->m_eventPtr = ptr;
       return XML_ERROR_UNEXPECTED_STATE;
+      /* LCOV_EXCL_STOP */
     }
     ptr = next;
   }
@@ -5141,12 +5719,12 @@
                  const char *entityTextPtr,
                  const char *entityTextEnd)
 {
-  DTD * const dtd = _dtd;  /* save one level of indirection */
+  DTD * const dtd = parser->m_dtd;  /* save one level of indirection */
   STRING_POOL *pool = &(dtd->entityValuePool);
   enum XML_Error result = XML_ERROR_NONE;
 #ifdef XML_DTD
-  int oldInEntityValue = prologState.inEntityValue;
-  prologState.inEntityValue = 1;
+  int oldInEntityValue = parser->m_prologState.inEntityValue;
+  parser->m_prologState.inEntityValue = 1;
 #endif /* XML_DTD */
   /* never return Null for the value argument in EntityDeclHandler,
      since this would indicate an external entity; therefore we
@@ -5162,10 +5740,10 @@
     switch (tok) {
     case XML_TOK_PARAM_ENTITY_REF:
 #ifdef XML_DTD
-      if (isParamEntity || enc != encoding) {
+      if (parser->m_isParamEntity || enc != parser->m_encoding) {
         const XML_Char *name;
         ENTITY *entity;
-        name = poolStoreString(&tempPool, enc,
+        name = poolStoreString(&parser->m_tempPool, enc,
                                entityTextPtr + enc->minBytesPerChar,
                                next - enc->minBytesPerChar);
         if (!name) {
@@ -5173,28 +5751,28 @@
           goto endEntityValue;
         }
         entity = (ENTITY *)lookup(parser, &dtd->paramEntities, name, 0);
-        poolDiscard(&tempPool);
+        poolDiscard(&parser->m_tempPool);
         if (!entity) {
           /* not a well-formedness error - see XML 1.0: WFC Entity Declared */
           /* cannot report skipped entity here - see comments on
-             skippedEntityHandler
-          if (skippedEntityHandler)
-            skippedEntityHandler(handlerArg, name, 0);
+             parser->m_skippedEntityHandler
+          if (parser->m_skippedEntityHandler)
+            parser->m_skippedEntityHandler(parser->m_handlerArg, name, 0);
           */
           dtd->keepProcessing = dtd->standalone;
           goto endEntityValue;
         }
         if (entity->open) {
-          if (enc == encoding)
-            eventPtr = entityTextPtr;
+          if (enc == parser->m_encoding)
+            parser->m_eventPtr = entityTextPtr;
           result = XML_ERROR_RECURSIVE_ENTITY_REF;
           goto endEntityValue;
         }
         if (entity->systemId) {
-          if (externalEntityRefHandler) {
+          if (parser->m_externalEntityRefHandler) {
             dtd->paramEntityRead = XML_FALSE;
             entity->open = XML_TRUE;
-            if (!externalEntityRefHandler(externalEntityRefHandlerArg,
+            if (!parser->m_externalEntityRefHandler(parser->m_externalEntityRefHandlerArg,
                                           0,
                                           entity->base,
                                           entity->systemId,
@@ -5213,7 +5791,7 @@
         else {
           entity->open = XML_TRUE;
           result = storeEntityValue(parser,
-                                    internalEncoding,
+                                    parser->m_internalEncoding,
                                     (char *)entity->textPtr,
                                     (char *)(entity->textPtr
                                              + entity->textLen));
@@ -5226,7 +5804,7 @@
 #endif /* XML_DTD */
       /* In the internal subset, PE references are not legal
          within markup declarations, e.g entity values in this case. */
-      eventPtr = entityTextPtr;
+      parser->m_eventPtr = entityTextPtr;
       result = XML_ERROR_PARAM_ENTITY_REF;
       goto endEntityValue;
     case XML_TOK_NONE:
@@ -5255,18 +5833,21 @@
         int i;
         int n = XmlCharRefNumber(enc, entityTextPtr);
         if (n < 0) {
-          if (enc == encoding)
-            eventPtr = entityTextPtr;
+          if (enc == parser->m_encoding)
+            parser->m_eventPtr = entityTextPtr;
           result = XML_ERROR_BAD_CHAR_REF;
           goto endEntityValue;
         }
         n = XmlEncode(n, (ICHAR *)buf);
-        if (!n) {
-          if (enc == encoding)
-            eventPtr = entityTextPtr;
-          result = XML_ERROR_BAD_CHAR_REF;
-          goto endEntityValue;
-        }
+        /* The XmlEncode() functions can never return 0 here.  That
+         * error return happens if the code point passed in is either
+         * negative or greater than or equal to 0x110000.  The
+         * XmlCharRefNumber() functions will all return a number
+         * strictly less than 0x110000 or a negative value if an error
+         * occurred.  The negative value is intercepted above, so
+         * XmlEncode() is never passed a value it might return an
+         * error for.
+         */
         for (i = 0; i < n; i++) {
           if (pool->end == pool->ptr && !poolGrow(pool)) {
             result = XML_ERROR_NO_MEMORY;
@@ -5277,26 +5858,34 @@
       }
       break;
     case XML_TOK_PARTIAL:
-      if (enc == encoding)
-        eventPtr = entityTextPtr;
+      if (enc == parser->m_encoding)
+        parser->m_eventPtr = entityTextPtr;
       result = XML_ERROR_INVALID_TOKEN;
       goto endEntityValue;
     case XML_TOK_INVALID:
-      if (enc == encoding)
-        eventPtr = next;
+      if (enc == parser->m_encoding)
+        parser->m_eventPtr = next;
       result = XML_ERROR_INVALID_TOKEN;
       goto endEntityValue;
     default:
-      if (enc == encoding)
-        eventPtr = entityTextPtr;
+      /* This default case should be unnecessary -- all the tokens
+       * that XmlEntityValueTok() can return have their own explicit
+       * cases -- but should be retained for safety.  We do however
+       * exclude it from the coverage statistics.
+       *
+       * LCOV_EXCL_START
+       */
+      if (enc == parser->m_encoding)
+        parser->m_eventPtr = entityTextPtr;
       result = XML_ERROR_UNEXPECTED_STATE;
       goto endEntityValue;
+      /* LCOV_EXCL_STOP */
     }
     entityTextPtr = next;
   }
 endEntityValue:
 #ifdef XML_DTD
-  prologState.inEntityValue = oldInEntityValue;
+  parser->m_prologState.inEntityValue = oldInEntityValue;
 #endif /* XML_DTD */
   return result;
 }
@@ -5331,25 +5920,25 @@
   const XML_Char *target;
   XML_Char *data;
   const char *tem;
-  if (!processingInstructionHandler) {
-    if (defaultHandler)
+  if (!parser->m_processingInstructionHandler) {
+    if (parser->m_defaultHandler)
       reportDefault(parser, enc, start, end);
     return 1;
   }
   start += enc->minBytesPerChar * 2;
   tem = start + XmlNameLength(enc, start);
-  target = poolStoreString(&tempPool, enc, start, tem);
+  target = poolStoreString(&parser->m_tempPool, enc, start, tem);
   if (!target)
     return 0;
-  poolFinish(&tempPool);
-  data = poolStoreString(&tempPool, enc,
+  poolFinish(&parser->m_tempPool);
+  data = poolStoreString(&parser->m_tempPool, enc,
                         XmlSkipS(enc, tem),
                         end - enc->minBytesPerChar*2);
   if (!data)
     return 0;
   normalizeLines(data);
-  processingInstructionHandler(handlerArg, target, data);
-  poolClear(&tempPool);
+  parser->m_processingInstructionHandler(parser->m_handlerArg, target, data);
+  poolClear(&parser->m_tempPool);
   return 1;
 }
 
@@ -5358,20 +5947,20 @@
               const char *start, const char *end)
 {
   XML_Char *data;
-  if (!commentHandler) {
-    if (defaultHandler)
+  if (!parser->m_commentHandler) {
+    if (parser->m_defaultHandler)
       reportDefault(parser, enc, start, end);
     return 1;
   }
-  data = poolStoreString(&tempPool,
+  data = poolStoreString(&parser->m_tempPool,
                          enc,
                          start + enc->minBytesPerChar * 4,
                          end - enc->minBytesPerChar * 3);
   if (!data)
     return 0;
   normalizeLines(data);
-  commentHandler(handlerArg, data);
-  poolClear(&tempPool);
+  parser->m_commentHandler(parser->m_handlerArg, data);
+  poolClear(&parser->m_tempPool);
   return 1;
 }
 
@@ -5380,26 +5969,44 @@
               const char *s, const char *end)
 {
   if (MUST_CONVERT(enc, s)) {
+    enum XML_Convert_Result convert_res;
     const char **eventPP;
     const char **eventEndPP;
-    if (enc == encoding) {
-      eventPP = &eventPtr;
-      eventEndPP = &eventEndPtr;
+    if (enc == parser->m_encoding) {
+      eventPP = &parser->m_eventPtr;
+      eventEndPP = &parser->m_eventEndPtr;
     }
     else {
-      eventPP = &(openInternalEntities->internalEventPtr);
-      eventEndPP = &(openInternalEntities->internalEventEndPtr);
+      /* To get here, two things must be true; the parser must be
+       * using a character encoding that is not the same as the
+       * encoding passed in, and the encoding passed in must need
+       * conversion to the internal format (UTF-8 unless XML_UNICODE
+       * is defined).  The only occasions on which the encoding passed
+       * in is not the same as the parser's encoding are when it is
+       * the internal encoding (e.g. a previously defined parameter
+       * entity, already converted to internal format).  This by
+       * definition doesn't need conversion, so the whole branch never
+       * gets executed.
+       *
+       * For safety's sake we don't delete these lines and merely
+       * exclude them from coverage statistics.
+       *
+       * LCOV_EXCL_START
+       */
+      eventPP = &(parser->m_openInternalEntities->internalEventPtr);
+      eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr);
+      /* LCOV_EXCL_STOP */
     }
     do {
-      ICHAR *dataPtr = (ICHAR *)dataBuf;
-      XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd);
+      ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf;
+      convert_res = XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)parser->m_dataBufEnd);
       *eventEndPP = s;
-      defaultHandler(handlerArg, dataBuf, (int)(dataPtr - (ICHAR *)dataBuf));
+      parser->m_defaultHandler(parser->m_handlerArg, parser->m_dataBuf, (int)(dataPtr - (ICHAR *)parser->m_dataBuf));
       *eventPP = s;
-    } while (s != end);
+    } while ((convert_res != XML_CONVERT_COMPLETED) && (convert_res != XML_CONVERT_INPUT_INCOMPLETE));
   }
   else
-    defaultHandler(handlerArg, (XML_Char *)s, (int)((XML_Char *)end - (XML_Char *)s));
+    parser->m_defaultHandler(parser->m_handlerArg, (XML_Char *)s, (int)((XML_Char *)end - (XML_Char *)s));
 }
 
 
@@ -5421,16 +6028,18 @@
   if (type->nDefaultAtts == type->allocDefaultAtts) {
     if (type->allocDefaultAtts == 0) {
       type->allocDefaultAtts = 8;
-      type->defaultAtts = (DEFAULT_ATTRIBUTE *)MALLOC(type->allocDefaultAtts
+      type->defaultAtts = (DEFAULT_ATTRIBUTE *)MALLOC(parser, type->allocDefaultAtts
                             * sizeof(DEFAULT_ATTRIBUTE));
-      if (!type->defaultAtts)
+      if (!type->defaultAtts) {
+        type->allocDefaultAtts = 0;
         return 0;
+      }
     }
     else {
       DEFAULT_ATTRIBUTE *temp;
       int count = type->allocDefaultAtts * 2;
       temp = (DEFAULT_ATTRIBUTE *)
-        REALLOC(type->defaultAtts, (count * sizeof(DEFAULT_ATTRIBUTE)));
+        REALLOC(parser, type->defaultAtts, (count * sizeof(DEFAULT_ATTRIBUTE)));
       if (temp == NULL)
         return 0;
       type->allocDefaultAtts = count;
@@ -5450,7 +6059,7 @@
 static int
 setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType)
 {
-  DTD * const dtd = _dtd;  /* save one level of indirection */
+  DTD * const dtd = parser->m_dtd;  /* save one level of indirection */
   const XML_Char *name;
   for (name = elementType->name; *name; name++) {
     if (*name == XML_T(ASCII_COLON)) {
@@ -5481,7 +6090,7 @@
 getAttributeId(XML_Parser parser, const ENCODING *enc,
                const char *start, const char *end)
 {
-  DTD * const dtd = _dtd;  /* save one level of indirection */
+  DTD * const dtd = parser->m_dtd;  /* save one level of indirection */
   ATTRIBUTE_ID *id;
   const XML_Char *name;
   if (!poolAppendChar(&dtd->pool, XML_T('\0')))
@@ -5498,7 +6107,7 @@
     poolDiscard(&dtd->pool);
   else {
     poolFinish(&dtd->pool);
-    if (!ns)
+    if (!parser->m_ns)
       ;
     else if (name[0] == XML_T(ASCII_x)
         && name[1] == XML_T(ASCII_m)
@@ -5545,21 +6154,42 @@
 static const XML_Char *
 getContext(XML_Parser parser)
 {
-  DTD * const dtd = _dtd;  /* save one level of indirection */
+  DTD * const dtd = parser->m_dtd;  /* save one level of indirection */
   HASH_TABLE_ITER iter;
   XML_Bool needSep = XML_FALSE;
 
   if (dtd->defaultPrefix.binding) {
     int i;
     int len;
-    if (!poolAppendChar(&tempPool, XML_T(ASCII_EQUALS)))
+    if (!poolAppendChar(&parser->m_tempPool, XML_T(ASCII_EQUALS)))
       return NULL;
     len = dtd->defaultPrefix.binding->uriLen;
-    if (namespaceSeparator)
+    if (parser->m_namespaceSeparator)
       len--;
-    for (i = 0; i < len; i++)
-      if (!poolAppendChar(&tempPool, dtd->defaultPrefix.binding->uri[i]))
-        return NULL;
+    for (i = 0; i < len; i++) {
+      if (!poolAppendChar(&parser->m_tempPool, dtd->defaultPrefix.binding->uri[i])) {
+        /* Because of memory caching, I don't believe this line can be
+         * executed.
+         *
+         * This is part of a loop copying the default prefix binding
+         * URI into the parser's temporary string pool.  Previously,
+         * that URI was copied into the same string pool, with a
+         * terminating NUL character, as part of setContext().  When
+         * the pool was cleared, that leaves a block definitely big
+         * enough to hold the URI on the free block list of the pool.
+         * The URI copy in getContext() therefore cannot run out of
+         * memory.
+         *
+         * If the pool is used between the setContext() and
+         * getContext() calls, the worst it can do is leave a bigger
+         * block on the front of the free list.  Given that this is
+         * all somewhat inobvious and program logic can be changed, we
+         * don't delete the line but we do exclude it from the test
+         * coverage statistics.
+         */
+        return NULL; /* LCOV_EXCL_LINE */
+      }
+    }
     needSep = XML_TRUE;
   }
 
@@ -5571,20 +6201,27 @@
     PREFIX *prefix = (PREFIX *)hashTableIterNext(&iter);
     if (!prefix)
       break;
-    if (!prefix->binding)
-      continue;
-    if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP))
+    if (!prefix->binding) {
+      /* This test appears to be (justifiable) paranoia.  There does
+       * not seem to be a way of injecting a prefix without a binding
+       * that doesn't get errored long before this function is called.
+       * The test should remain for safety's sake, so we instead
+       * exclude the following line from the coverage statistics.
+       */
+      continue; /* LCOV_EXCL_LINE */
+    }
+    if (needSep && !poolAppendChar(&parser->m_tempPool, CONTEXT_SEP))
       return NULL;
     for (s = prefix->name; *s; s++)
-      if (!poolAppendChar(&tempPool, *s))
+      if (!poolAppendChar(&parser->m_tempPool, *s))
         return NULL;
-    if (!poolAppendChar(&tempPool, XML_T(ASCII_EQUALS)))
+    if (!poolAppendChar(&parser->m_tempPool, XML_T(ASCII_EQUALS)))
       return NULL;
     len = prefix->binding->uriLen;
-    if (namespaceSeparator)
+    if (parser->m_namespaceSeparator)
       len--;
     for (i = 0; i < len; i++)
-      if (!poolAppendChar(&tempPool, prefix->binding->uri[i]))
+      if (!poolAppendChar(&parser->m_tempPool, prefix->binding->uri[i]))
         return NULL;
     needSep = XML_TRUE;
   }
@@ -5598,73 +6235,73 @@
       break;
     if (!e->open)
       continue;
-    if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP))
+    if (needSep && !poolAppendChar(&parser->m_tempPool, CONTEXT_SEP))
       return NULL;
     for (s = e->name; *s; s++)
-      if (!poolAppendChar(&tempPool, *s))
+      if (!poolAppendChar(&parser->m_tempPool, *s))
         return 0;
     needSep = XML_TRUE;
   }
 
-  if (!poolAppendChar(&tempPool, XML_T('\0')))
+  if (!poolAppendChar(&parser->m_tempPool, XML_T('\0')))
     return NULL;
-  return tempPool.start;
+  return parser->m_tempPool.start;
 }
 
 static XML_Bool
 setContext(XML_Parser parser, const XML_Char *context)
 {
-  DTD * const dtd = _dtd;  /* save one level of indirection */
+  DTD * const dtd = parser->m_dtd;  /* save one level of indirection */
   const XML_Char *s = context;
 
   while (*context != XML_T('\0')) {
     if (*s == CONTEXT_SEP || *s == XML_T('\0')) {
       ENTITY *e;
-      if (!poolAppendChar(&tempPool, XML_T('\0')))
+      if (!poolAppendChar(&parser->m_tempPool, XML_T('\0')))
         return XML_FALSE;
-      e = (ENTITY *)lookup(parser, &dtd->generalEntities, poolStart(&tempPool), 0);
+      e = (ENTITY *)lookup(parser, &dtd->generalEntities, poolStart(&parser->m_tempPool), 0);
       if (e)
         e->open = XML_TRUE;
       if (*s != XML_T('\0'))
         s++;
       context = s;
-      poolDiscard(&tempPool);
+      poolDiscard(&parser->m_tempPool);
     }
     else if (*s == XML_T(ASCII_EQUALS)) {
       PREFIX *prefix;
-      if (poolLength(&tempPool) == 0)
+      if (poolLength(&parser->m_tempPool) == 0)
         prefix = &dtd->defaultPrefix;
       else {
-        if (!poolAppendChar(&tempPool, XML_T('\0')))
+        if (!poolAppendChar(&parser->m_tempPool, XML_T('\0')))
           return XML_FALSE;
-        prefix = (PREFIX *)lookup(parser, &dtd->prefixes, poolStart(&tempPool),
+        prefix = (PREFIX *)lookup(parser, &dtd->prefixes, poolStart(&parser->m_tempPool),
                                   sizeof(PREFIX));
         if (!prefix)
           return XML_FALSE;
-        if (prefix->name == poolStart(&tempPool)) {
+        if (prefix->name == poolStart(&parser->m_tempPool)) {
           prefix->name = poolCopyString(&dtd->pool, prefix->name);
           if (!prefix->name)
             return XML_FALSE;
         }
-        poolDiscard(&tempPool);
+        poolDiscard(&parser->m_tempPool);
       }
       for (context = s + 1;
            *context != CONTEXT_SEP && *context != XML_T('\0');
            context++)
-        if (!poolAppendChar(&tempPool, *context))
+        if (!poolAppendChar(&parser->m_tempPool, *context))
           return XML_FALSE;
-      if (!poolAppendChar(&tempPool, XML_T('\0')))
+      if (!poolAppendChar(&parser->m_tempPool, XML_T('\0')))
         return XML_FALSE;
-      if (addBinding(parser, prefix, NULL, poolStart(&tempPool),
-                     &inheritedBindings) != XML_ERROR_NONE)
+      if (addBinding(parser, prefix, NULL, poolStart(&parser->m_tempPool),
+                     &parser->m_inheritedBindings) != XML_ERROR_NONE)
         return XML_FALSE;
-      poolDiscard(&tempPool);
+      poolDiscard(&parser->m_tempPool);
       if (*context != XML_T('\0'))
         ++context;
       s = context;
     }
     else {
-      if (!poolAppendChar(&tempPool, *s))
+      if (!poolAppendChar(&parser->m_tempPool, *s))
         return XML_FALSE;
       s++;
     }
@@ -5875,7 +6512,6 @@
       newE->defaultAtts = (DEFAULT_ATTRIBUTE *)
           ms->malloc_fcn(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE));
       if (!newE->defaultAtts) {
-        ms->free_fcn(newE);
         return 0;
       }
     }
@@ -6010,13 +6646,31 @@
   return XML_FALSE;
 }
 
+static size_t
+keylen(KEY s)
+{
+  size_t len = 0;
+  for (; *s; s++, len++);
+  return len;
+}
+
+static void
+copy_salt_to_sipkey(XML_Parser parser, struct sipkey * key)
+{
+  key->k[0] = 0;
+  key->k[1] = get_hash_secret_salt(parser);
+}
+
 static unsigned long FASTCALL
 hash(XML_Parser parser, KEY s)
 {
-  unsigned long h = hash_secret_salt;
-  while (*s)
-    h = CHAR_HASH(h, *s++);
-  return h;
+  struct siphash state;
+  struct sipkey key;
+  (void)sip24_valid;
+  copy_salt_to_sipkey(parser, &key);
+  sip24_init(&state, &key);
+  sip24_update(&state, s, keylen(s) * sizeof(XML_Char));
+  return (unsigned long)sip24_final(&state);
 }
 
 static NAMED *
@@ -6201,8 +6855,8 @@
   if (!pool->ptr && !poolGrow(pool))
     return NULL;
   for (;;) {
-    XmlConvert(enc, &ptr, end, (ICHAR **)&(pool->ptr), (ICHAR *)pool->end);
-    if (ptr == end)
+    const enum XML_Convert_Result convert_res = XmlConvert(enc, &ptr, end, (ICHAR **)&(pool->ptr), (ICHAR *)pool->end);
+    if ((convert_res == XML_CONVERT_COMPLETED) || (convert_res == XML_CONVERT_INPUT_INCOMPLETE))
       break;
     if (!poolGrow(pool))
       return NULL;
@@ -6225,8 +6879,20 @@
 static const XML_Char *
 poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n)
 {
-  if (!pool->ptr && !poolGrow(pool))
-    return NULL;
+  if (!pool->ptr && !poolGrow(pool)) {
+    /* The following line is unreachable given the current usage of
+     * poolCopyStringN().  Currently it is called from exactly one
+     * place to copy the text of a simple general entity.  By that
+     * point, the name of the entity is already stored in the pool, so
+     * pool->ptr cannot be NULL.
+     *
+     * If poolCopyStringN() is used elsewhere as it well might be,
+     * this line may well become executable again.  Regardless, this
+     * sort of check shouldn't be removed lightly, so we just exclude
+     * it from the coverage statistics.
+     */
+    return NULL; /* LCOV_EXCL_LINE */
+  }
   for (; n > 0; --n, s++) {
     if (!poolAppendChar(pool, *s))
       return NULL;
@@ -6259,6 +6925,35 @@
   return pool->start;
 }
 
+static size_t
+poolBytesToAllocateFor(int blockSize)
+{
+  /* Unprotected math would be:
+  ** return offsetof(BLOCK, s) + blockSize * sizeof(XML_Char);
+  **
+  ** Detect overflow, avoiding _signed_ overflow undefined behavior
+  ** For a + b * c we check b * c in isolation first, so that addition of a
+  ** on top has no chance of making us accept a small non-negative number
+  */
+  const size_t stretch = sizeof(XML_Char);  /* can be 4 bytes */
+
+  if (blockSize <= 0)
+    return 0;
+
+  if (blockSize > (int)(INT_MAX / stretch))
+    return 0;
+
+  {
+    const int stretchedBlockSize = blockSize * (int)stretch;
+    const int bytesToAllocate = (int)(
+        offsetof(BLOCK, s) + (unsigned)stretchedBlockSize);
+    if (bytesToAllocate < 0)
+      return 0;
+
+    return (size_t)bytesToAllocate;
+  }
+}
+
 static XML_Bool FASTCALL
 poolGrow(STRING_POOL *pool)
 {
@@ -6286,28 +6981,71 @@
     }
   }
   if (pool->blocks && pool->start == pool->blocks->s) {
-    int blockSize = (int)(pool->end - pool->start)*2;
-    BLOCK *temp = (BLOCK *)
-      pool->mem->realloc_fcn(pool->blocks,
-                             (offsetof(BLOCK, s)
-                              + blockSize * sizeof(XML_Char)));
+    BLOCK *temp;
+    int blockSize = (int)((unsigned)(pool->end - pool->start)*2U);
+    size_t bytesToAllocate;
+
+    /* NOTE: Needs to be calculated prior to calling `realloc`
+             to avoid dangling pointers: */
+    const ptrdiff_t offsetInsideBlock = pool->ptr - pool->start;
+
+    if (blockSize < 0) {
+      /* This condition traps a situation where either more than
+       * INT_MAX/2 bytes have already been allocated.  This isn't
+       * readily testable, since it is unlikely that an average
+       * machine will have that much memory, so we exclude it from the
+       * coverage statistics.
+       */
+      return XML_FALSE; /* LCOV_EXCL_LINE */
+    }
+
+    bytesToAllocate = poolBytesToAllocateFor(blockSize);
+    if (bytesToAllocate == 0)
+      return XML_FALSE;
+
+    temp = (BLOCK *)
+      pool->mem->realloc_fcn(pool->blocks, (unsigned)bytesToAllocate);
     if (temp == NULL)
       return XML_FALSE;
     pool->blocks = temp;
     pool->blocks->size = blockSize;
-    pool->ptr = pool->blocks->s + (pool->ptr - pool->start);
+    pool->ptr = pool->blocks->s + offsetInsideBlock;
     pool->start = pool->blocks->s;
     pool->end = pool->start + blockSize;
   }
   else {
     BLOCK *tem;
     int blockSize = (int)(pool->end - pool->start);
+    size_t bytesToAllocate;
+
+    if (blockSize < 0) {
+      /* This condition traps a situation where either more than
+       * INT_MAX bytes have already been allocated (which is prevented
+       * by various pieces of program logic, not least this one, never
+       * mind the unlikelihood of actually having that much memory) or
+       * the pool control fields have been corrupted (which could
+       * conceivably happen in an extremely buggy user handler
+       * function).  Either way it isn't readily testable, so we
+       * exclude it from the coverage statistics.
+       */
+      return XML_FALSE;  /* LCOV_EXCL_LINE */
+    }
+
     if (blockSize < INIT_BLOCK_SIZE)
       blockSize = INIT_BLOCK_SIZE;
-    else
+    else {
+      /* Detect overflow, avoiding _signed_ overflow undefined behavior */
+      if ((int)((unsigned)blockSize * 2U) < 0) {
+        return XML_FALSE;
+      }
       blockSize *= 2;
-    tem = (BLOCK *)pool->mem->malloc_fcn(offsetof(BLOCK, s)
-                                        + blockSize * sizeof(XML_Char));
+    }
+
+    bytesToAllocate = poolBytesToAllocateFor(blockSize);
+    if (bytesToAllocate == 0)
+      return XML_FALSE;
+
+    tem = (BLOCK *)pool->mem->malloc_fcn(bytesToAllocate);
     if (!tem)
       return XML_FALSE;
     tem->size = blockSize;
@@ -6326,12 +7064,12 @@
 static int FASTCALL
 nextScaffoldPart(XML_Parser parser)
 {
-  DTD * const dtd = _dtd;  /* save one level of indirection */
+  DTD * const dtd = parser->m_dtd;  /* save one level of indirection */
   CONTENT_SCAFFOLD * me;
   int next;
 
   if (!dtd->scaffIndex) {
-    dtd->scaffIndex = (int *)MALLOC(groupSize * sizeof(int));
+    dtd->scaffIndex = (int *)MALLOC(parser, parser->m_groupSize * sizeof(int));
     if (!dtd->scaffIndex)
       return -1;
     dtd->scaffIndex[0] = 0;
@@ -6341,13 +7079,13 @@
     CONTENT_SCAFFOLD *temp;
     if (dtd->scaffold) {
       temp = (CONTENT_SCAFFOLD *)
-        REALLOC(dtd->scaffold, dtd->scaffSize * 2 * sizeof(CONTENT_SCAFFOLD));
+        REALLOC(parser, dtd->scaffold, dtd->scaffSize * 2 * sizeof(CONTENT_SCAFFOLD));
       if (temp == NULL)
         return -1;
       dtd->scaffSize *= 2;
     }
     else {
-      temp = (CONTENT_SCAFFOLD *)MALLOC(INIT_SCAFFOLD_ELEMENTS
+      temp = (CONTENT_SCAFFOLD *)MALLOC(parser, INIT_SCAFFOLD_ELEMENTS
                                         * sizeof(CONTENT_SCAFFOLD));
       if (temp == NULL)
         return -1;
@@ -6378,7 +7116,7 @@
            XML_Content **contpos,
            XML_Char **strpos)
 {
-  DTD * const dtd = _dtd;  /* save one level of indirection */
+  DTD * const dtd = parser->m_dtd;  /* save one level of indirection */
   dest->type = dtd->scaffold[src_node].type;
   dest->quant = dtd->scaffold[src_node].quant;
   if (dest->type == XML_CTYPE_NAME) {
@@ -6412,14 +7150,14 @@
 static XML_Content *
 build_model (XML_Parser parser)
 {
-  DTD * const dtd = _dtd;  /* save one level of indirection */
+  DTD * const dtd = parser->m_dtd;  /* save one level of indirection */
   XML_Content *ret;
   XML_Content *cpos;
   XML_Char * str;
   int allocsize = (dtd->scaffCount * sizeof(XML_Content)
                    + (dtd->contentStringLen * sizeof(XML_Char)));
 
-  ret = (XML_Content *)MALLOC(allocsize);
+  ret = (XML_Content *)MALLOC(parser, allocsize);
   if (!ret)
     return NULL;
 
@@ -6436,7 +7174,7 @@
                const char *ptr,
                const char *end)
 {
-  DTD * const dtd = _dtd;  /* save one level of indirection */
+  DTD * const dtd = parser->m_dtd;  /* save one level of indirection */
   const XML_Char *name = poolStoreString(&dtd->pool, enc, ptr, end);
   ELEMENT_TYPE *ret;
 
@@ -6454,3 +7192,26 @@
   }
   return ret;
 }
+
+static XML_Char *
+copyString(const XML_Char *s,
+           const XML_Memory_Handling_Suite *memsuite)
+{
+    int charsRequired = 0;
+    XML_Char *result;
+
+    /* First determine how long the string is */
+    while (s[charsRequired] != 0) {
+      charsRequired++;
+    }
+    /* Include the terminator */
+    charsRequired++;
+
+    /* Now allocate space for the copy */
+    result = memsuite->malloc_fcn(charsRequired * sizeof(XML_Char));
+    if (result == NULL)
+        return NULL;
+    /* Copy the original into place */
+    memcpy(result, s, charsRequired * sizeof(XML_Char));
+    return result;
+}
diff --git a/Modules/expat/xmlrole.c b/Modules/expat/xmlrole.c
index 44772e2..708507d 100644
--- a/Modules/expat/xmlrole.c
+++ b/Modules/expat/xmlrole.c
@@ -1,22 +1,44 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-   See the file COPYING for copying permission.
+/*
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
 #include <stddef.h>
 
-#ifdef COMPILED_FROM_DSP
+#ifdef _WIN32
 #include "winconfig.h"
-#elif defined(MACOS_CLASSIC)
-#include "macconfig.h"
-#elif defined(__amigaos__)
-#include "amigaconfig.h"
-#elif defined(__WATCOMC__)
-#include "watcomconfig.h"
 #else
 #ifdef HAVE_EXPAT_CONFIG_H
 #include <expat_config.h>
 #endif
-#endif /* ndef COMPILED_FROM_DSP */
+#endif /* ndef _WIN32 */
 
 #include "expat_external.h"
 #include "internal.h"
@@ -176,7 +198,14 @@
   case XML_TOK_COMMENT:
     return XML_ROLE_COMMENT;
   case XML_TOK_BOM:
-    return XML_ROLE_NONE;
+    /* This case can never arise.  To reach this role function, the
+     * parse must have passed through prolog0 and therefore have had
+     * some form of input, even if only a space.  At that point, a
+     * byte order mark is no longer a valid character (though
+     * technically it should be interpreted as a non-breaking space),
+     * so will be rejected by the tokenizing stages.
+     */
+    return XML_ROLE_NONE; /* LCOV_EXCL_LINE */
   case XML_TOK_DECL_OPEN:
     if (!XmlNameMatchesAscii(enc,
                              ptr + 2 * MIN_BYTES_PER_CHAR(enc),
@@ -195,9 +224,9 @@
 static int PTRCALL
 prolog2(PROLOG_STATE *state,
         int tok,
-        const char *ptr,
-        const char *end,
-        const ENCODING *enc)
+        const char *UNUSED_P(ptr),
+        const char *UNUSED_P(end),
+        const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -216,9 +245,9 @@
 static int PTRCALL
 doctype0(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -264,9 +293,9 @@
 static int PTRCALL
 doctype2(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -281,9 +310,9 @@
 static int PTRCALL
 doctype3(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -298,9 +327,9 @@
 static int PTRCALL
 doctype4(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -318,9 +347,9 @@
 static int PTRCALL
 doctype5(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -437,9 +466,9 @@
 static int PTRCALL
 entity0(PROLOG_STATE *state,
         int tok,
-        const char *ptr,
-        const char *end,
-        const ENCODING *enc)
+        const char *UNUSED_P(ptr),
+        const char *UNUSED_P(end),
+        const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -457,9 +486,9 @@
 static int PTRCALL
 entity1(PROLOG_STATE *state,
         int tok,
-        const char *ptr,
-        const char *end,
-        const ENCODING *enc)
+        const char *UNUSED_P(ptr),
+        const char *UNUSED_P(end),
+        const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -502,9 +531,9 @@
 static int PTRCALL
 entity3(PROLOG_STATE *state,
         int tok,
-        const char *ptr,
-        const char *end,
-        const ENCODING *enc)
+        const char *UNUSED_P(ptr),
+        const char *UNUSED_P(end),
+        const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -519,9 +548,9 @@
 static int PTRCALL
 entity4(PROLOG_STATE *state,
         int tok,
-        const char *ptr,
-        const char *end,
-        const ENCODING *enc)
+        const char *UNUSED_P(ptr),
+        const char *UNUSED_P(end),
+        const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -559,9 +588,9 @@
 static int PTRCALL
 entity6(PROLOG_STATE *state,
         int tok,
-        const char *ptr,
-        const char *end,
-        const ENCODING *enc)
+        const char *UNUSED_P(ptr),
+        const char *UNUSED_P(end),
+        const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -605,9 +634,9 @@
 static int PTRCALL
 entity8(PROLOG_STATE *state,
         int tok,
-        const char *ptr,
-        const char *end,
-        const ENCODING *enc)
+        const char *UNUSED_P(ptr),
+        const char *UNUSED_P(end),
+        const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -622,9 +651,9 @@
 static int PTRCALL
 entity9(PROLOG_STATE *state,
         int tok,
-        const char *ptr,
-        const char *end,
-        const ENCODING *enc)
+        const char *UNUSED_P(ptr),
+        const char *UNUSED_P(end),
+        const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -639,9 +668,9 @@
 static int PTRCALL
 entity10(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -656,9 +685,9 @@
 static int PTRCALL
 notation0(PROLOG_STATE *state,
           int tok,
-          const char *ptr,
-          const char *end,
-          const ENCODING *enc)
+          const char *UNUSED_P(ptr),
+          const char *UNUSED_P(end),
+          const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -697,9 +726,9 @@
 static int PTRCALL
 notation2(PROLOG_STATE *state,
           int tok,
-          const char *ptr,
-          const char *end,
-          const ENCODING *enc)
+          const char *UNUSED_P(ptr),
+          const char *UNUSED_P(end),
+          const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -714,9 +743,9 @@
 static int PTRCALL
 notation3(PROLOG_STATE *state,
           int tok,
-          const char *ptr,
-          const char *end,
-          const ENCODING *enc)
+          const char *UNUSED_P(ptr),
+          const char *UNUSED_P(end),
+          const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -732,9 +761,9 @@
 static int PTRCALL
 notation4(PROLOG_STATE *state,
           int tok,
-          const char *ptr,
-          const char *end,
-          const ENCODING *enc)
+          const char *UNUSED_P(ptr),
+          const char *UNUSED_P(end),
+          const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -753,9 +782,9 @@
 static int PTRCALL
 attlist0(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -771,9 +800,9 @@
 static int PTRCALL
 attlist1(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -833,9 +862,9 @@
 static int PTRCALL
 attlist3(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -852,9 +881,9 @@
 static int PTRCALL
 attlist4(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -872,9 +901,9 @@
 static int PTRCALL
 attlist5(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -889,9 +918,9 @@
 static int PTRCALL
 attlist6(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -906,9 +935,9 @@
 static int PTRCALL
 attlist7(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -967,9 +996,9 @@
 static int PTRCALL
 attlist9(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -984,9 +1013,9 @@
 static int PTRCALL
 element0(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -1072,9 +1101,9 @@
 static int PTRCALL
 element3(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -1097,9 +1126,9 @@
 static int PTRCALL
 element4(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -1115,9 +1144,9 @@
 static int PTRCALL
 element5(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -1136,9 +1165,9 @@
 static int PTRCALL
 element6(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -1166,9 +1195,9 @@
 static int PTRCALL
 element7(PROLOG_STATE *state,
          int tok,
-         const char *ptr,
-         const char *end,
-         const ENCODING *enc)
+         const char *UNUSED_P(ptr),
+         const char *UNUSED_P(end),
+         const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -1240,9 +1269,9 @@
 static int PTRCALL
 condSect1(PROLOG_STATE *state,
           int tok,
-          const char *ptr,
-          const char *end,
-          const ENCODING *enc)
+          const char *UNUSED_P(ptr),
+          const char *UNUSED_P(end),
+          const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -1258,9 +1287,9 @@
 static int PTRCALL
 condSect2(PROLOG_STATE *state,
           int tok,
-          const char *ptr,
-          const char *end,
-          const ENCODING *enc)
+          const char *UNUSED_P(ptr),
+          const char *UNUSED_P(end),
+          const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -1277,9 +1306,9 @@
 static int PTRCALL
 declClose(PROLOG_STATE *state,
           int tok,
-          const char *ptr,
-          const char *end,
-          const ENCODING *enc)
+          const char *UNUSED_P(ptr),
+          const char *UNUSED_P(end),
+          const ENCODING *UNUSED_P(enc))
 {
   switch (tok) {
   case XML_TOK_PROLOG_S:
@@ -1291,15 +1320,36 @@
   return common(state, tok);
 }
 
+/* This function will only be invoked if the internal logic of the
+ * parser has broken down.  It is used in two cases:
+ *
+ * 1: When the XML prolog has been finished.  At this point the
+ * processor (the parser level above these role handlers) should
+ * switch from prologProcessor to contentProcessor and reinitialise
+ * the handler function.
+ *
+ * 2: When an error has been detected (via common() below).  At this
+ * point again the processor should be switched to errorProcessor,
+ * which will never call a handler.
+ *
+ * The result of this is that error() can only be called if the
+ * processor switch failed to happen, which is an internal error and
+ * therefore we shouldn't be able to provoke it simply by using the
+ * library.  It is a necessary backstop, however, so we merely exclude
+ * it from the coverage statistics.
+ *
+ * LCOV_EXCL_START
+ */
 static int PTRCALL
-error(PROLOG_STATE *state,
-      int tok,
-      const char *ptr,
-      const char *end,
-      const ENCODING *enc)
+error(PROLOG_STATE *UNUSED_P(state),
+      int UNUSED_P(tok),
+      const char *UNUSED_P(ptr),
+      const char *UNUSED_P(end),
+      const ENCODING *UNUSED_P(enc))
 {
   return XML_ROLE_NONE;
 }
+/* LCOV_EXCL_STOP */
 
 static int FASTCALL
 common(PROLOG_STATE *state, int tok)
diff --git a/Modules/expat/xmlrole.h b/Modules/expat/xmlrole.h
index 4dd9f06..e5f048e 100644
--- a/Modules/expat/xmlrole.h
+++ b/Modules/expat/xmlrole.h
@@ -1,5 +1,33 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-   See the file COPYING for copying permission.
+/*
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
 #ifndef XmlRole_INCLUDED
diff --git a/Modules/expat/xmltok.c b/Modules/expat/xmltok.c
index bf09dfc..6b415d8 100644
--- a/Modules/expat/xmltok.c
+++ b/Modules/expat/xmltok.c
@@ -1,22 +1,55 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-   See the file COPYING for copying permission.
+/*
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
 #include <stddef.h>
+#include <string.h>  /* memcpy */
 
-#ifdef COMPILED_FROM_DSP
+#if defined(_MSC_VER) && (_MSC_VER <= 1700)
+  /* for vs2012/11.0/1700 and earlier Visual Studio compilers */
+# define bool   int
+# define false  0
+# define true   1
+#else
+# include <stdbool.h>
+#endif
+
+
+#ifdef _WIN32
 #include "winconfig.h"
-#elif defined(MACOS_CLASSIC)
-#include "macconfig.h"
-#elif defined(__amigaos__)
-#include "amigaconfig.h"
-#elif defined(__WATCOMC__)
-#include "watcomconfig.h"
 #else
 #ifdef HAVE_EXPAT_CONFIG_H
 #include <expat_config.h>
 #endif
-#endif /* ndef COMPILED_FROM_DSP */
+#endif /* ndef _WIN32 */
 
 #include "expat_external.h"
 #include "internal.h"
@@ -33,7 +66,6 @@
   { PREFIX(prologTok), PREFIX(contentTok), \
     PREFIX(cdataSectionTok) IGNORE_SECTION_TOK_VTABLE }, \
   { PREFIX(attributeValueTok), PREFIX(entityValueTok) }, \
-  PREFIX(sameName), \
   PREFIX(nameMatchesAscii), \
   PREFIX(nameLength), \
   PREFIX(skipS), \
@@ -46,7 +78,7 @@
 #define VTABLE VTABLE1, PREFIX(toUtf8), PREFIX(toUtf16)
 
 #define UCS2_GET_NAMING(pages, hi, lo) \
-   (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1 << ((lo) & 0x1F)))
+   (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
 
 /* A 2 byte UTF-8 representation splits the characters 11 bits between
    the bottom 5 and 6 bits of the bytes.  We need 8 bits to index into
@@ -56,7 +88,7 @@
     (namingBitmap[((pages)[(((byte)[0]) >> 2) & 7] << 3) \
                       + ((((byte)[0]) & 3) << 1) \
                       + ((((byte)[1]) >> 5) & 1)] \
-         & (1 << (((byte)[1]) & 0x1F)))
+         & (1u << (((byte)[1]) & 0x1F)))
 
 /* A 3 byte UTF-8 representation splits the characters 16 bits between
    the bottom 4, 6 and 6 bits of the bytes.  We need 8 bits to index
@@ -69,7 +101,7 @@
                        << 3) \
                       + ((((byte)[1]) & 3) << 1) \
                       + ((((byte)[2]) >> 5) & 1)] \
-         & (1 << (((byte)[2]) & 0x1F)))
+         & (1u << (((byte)[2]) & 0x1F)))
 
 #define UTF8_GET_NAMING(pages, p, n) \
   ((n) == 2 \
@@ -122,19 +154,19 @@
     ((*p) == 0xF4 ? (p)[1] > 0x8F : ((p)[1] & 0xC0) == 0xC0)))
 
 static int PTRFASTCALL
-isNever(const ENCODING *enc, const char *p)
+isNever(const ENCODING *UNUSED_P(enc), const char *UNUSED_P(p))
 {
   return 0;
 }
 
 static int PTRFASTCALL
-utf8_isName2(const ENCODING *enc, const char *p)
+utf8_isName2(const ENCODING *UNUSED_P(enc), const char *p)
 {
   return UTF8_GET_NAMING2(namePages, (const unsigned char *)p);
 }
 
 static int PTRFASTCALL
-utf8_isName3(const ENCODING *enc, const char *p)
+utf8_isName3(const ENCODING *UNUSED_P(enc), const char *p)
 {
   return UTF8_GET_NAMING3(namePages, (const unsigned char *)p);
 }
@@ -142,13 +174,13 @@
 #define utf8_isName4 isNever
 
 static int PTRFASTCALL
-utf8_isNmstrt2(const ENCODING *enc, const char *p)
+utf8_isNmstrt2(const ENCODING *UNUSED_P(enc), const char *p)
 {
   return UTF8_GET_NAMING2(nmstrtPages, (const unsigned char *)p);
 }
 
 static int PTRFASTCALL
-utf8_isNmstrt3(const ENCODING *enc, const char *p)
+utf8_isNmstrt3(const ENCODING *UNUSED_P(enc), const char *p)
 {
   return UTF8_GET_NAMING3(nmstrtPages, (const unsigned char *)p);
 }
@@ -156,19 +188,19 @@
 #define utf8_isNmstrt4 isNever
 
 static int PTRFASTCALL
-utf8_isInvalid2(const ENCODING *enc, const char *p)
+utf8_isInvalid2(const ENCODING *UNUSED_P(enc), const char *p)
 {
   return UTF8_INVALID2((const unsigned char *)p);
 }
 
 static int PTRFASTCALL
-utf8_isInvalid3(const ENCODING *enc, const char *p)
+utf8_isInvalid3(const ENCODING *UNUSED_P(enc), const char *p)
 {
   return UTF8_INVALID3((const unsigned char *)p);
 }
 
 static int PTRFASTCALL
-utf8_isInvalid4(const ENCODING *enc, const char *p)
+utf8_isInvalid4(const ENCODING *UNUSED_P(enc), const char *p)
 {
   return UTF8_INVALID4((const unsigned char *)p);
 }
@@ -222,6 +254,17 @@
  E ## isInvalid3, \
  E ## isInvalid4
 
+#define NULL_VTABLE \
+ /* isName2 */ NULL, \
+ /* isName3 */ NULL, \
+ /* isName4 */ NULL, \
+ /* isNmstrt2 */ NULL, \
+ /* isNmstrt3 */ NULL, \
+ /* isNmstrt4 */ NULL, \
+ /* isInvalid2 */ NULL, \
+ /* isInvalid3 */ NULL, \
+ /* isInvalid4 */ NULL
+
 static int FASTCALL checkCharRefNumber(int);
 
 #include "xmltok_impl.h"
@@ -318,39 +361,104 @@
   UTF8_cval4 = 0xf0
 };
 
-static void PTRCALL
-utf8_toUtf8(const ENCODING *enc,
+void
+_INTERNAL_trim_to_complete_utf8_characters(const char * from, const char ** fromLimRef)
+{
+  const char * fromLim = *fromLimRef;
+  size_t walked = 0;
+  for (; fromLim > from; fromLim--, walked++) {
+    const unsigned char prev = (unsigned char)fromLim[-1];
+    if ((prev & 0xf8u) == 0xf0u) { /* 4-byte character, lead by 0b11110xxx byte */
+      if (walked + 1 >= 4) {
+        fromLim += 4 - 1;
+        break;
+      } else {
+        walked = 0;
+      }
+    } else if ((prev & 0xf0u) == 0xe0u) { /* 3-byte character, lead by 0b1110xxxx byte */
+      if (walked + 1 >= 3) {
+        fromLim += 3 - 1;
+        break;
+      } else {
+        walked = 0;
+      }
+    } else if ((prev & 0xe0u) == 0xc0u) { /* 2-byte character, lead by 0b110xxxxx byte */
+      if (walked + 1 >= 2) {
+        fromLim += 2 - 1;
+        break;
+      } else {
+        walked = 0;
+      }
+    } else if ((prev & 0x80u) == 0x00u) { /* 1-byte character, matching 0b0xxxxxxx */
+      break;
+    }
+  }
+  *fromLimRef = fromLim;
+}
+
+static enum XML_Convert_Result PTRCALL
+utf8_toUtf8(const ENCODING *UNUSED_P(enc),
             const char **fromP, const char *fromLim,
             char **toP, const char *toLim)
 {
-  char *to;
-  const char *from;
-  if (fromLim - *fromP > toLim - *toP) {
-    /* Avoid copying partial characters. */
-    for (fromLim = *fromP + (toLim - *toP); fromLim > *fromP; fromLim--)
-      if (((unsigned char)fromLim[-1] & 0xc0) != 0x80)
-        break;
+  bool input_incomplete = false;
+  bool output_exhausted = false;
+
+  /* Avoid copying partial characters (due to limited space). */
+  const ptrdiff_t bytesAvailable = fromLim - *fromP;
+  const ptrdiff_t bytesStorable = toLim - *toP;
+  if (bytesAvailable > bytesStorable) {
+    fromLim = *fromP + bytesStorable;
+    output_exhausted = true;
   }
-  for (to = *toP, from = *fromP; from != fromLim; from++, to++)
-    *to = *from;
-  *fromP = from;
-  *toP = to;
+
+  /* Avoid copying partial characters (from incomplete input). */
+  {
+    const char * const fromLimBefore = fromLim;
+    _INTERNAL_trim_to_complete_utf8_characters(*fromP, &fromLim);
+    if (fromLim < fromLimBefore) {
+      input_incomplete = true;
+    }
+  }
+
+  {
+    const ptrdiff_t bytesToCopy = fromLim - *fromP;
+    memcpy(*toP, *fromP, bytesToCopy);
+    *fromP += bytesToCopy;
+    *toP += bytesToCopy;
+  }
+
+  if (output_exhausted)  /* needs to go first */
+    return XML_CONVERT_OUTPUT_EXHAUSTED;
+  else if (input_incomplete)
+    return XML_CONVERT_INPUT_INCOMPLETE;
+  else
+    return XML_CONVERT_COMPLETED;
 }
 
-static void PTRCALL
+static enum XML_Convert_Result PTRCALL
 utf8_toUtf16(const ENCODING *enc,
              const char **fromP, const char *fromLim,
              unsigned short **toP, const unsigned short *toLim)
 {
+  enum XML_Convert_Result res = XML_CONVERT_COMPLETED;
   unsigned short *to = *toP;
   const char *from = *fromP;
-  while (from != fromLim && to != toLim) {
+  while (from < fromLim && to < toLim) {
     switch (((struct normal_encoding *)enc)->type[(unsigned char)*from]) {
     case BT_LEAD2:
+      if (fromLim - from < 2) {
+        res = XML_CONVERT_INPUT_INCOMPLETE;
+        goto after;
+      }
       *to++ = (unsigned short)(((from[0] & 0x1f) << 6) | (from[1] & 0x3f));
       from += 2;
       break;
     case BT_LEAD3:
+      if (fromLim - from < 3) {
+        res = XML_CONVERT_INPUT_INCOMPLETE;
+        goto after;
+      }
       *to++ = (unsigned short)(((from[0] & 0xf) << 12)
                                | ((from[1] & 0x3f) << 6) | (from[2] & 0x3f));
       from += 3;
@@ -358,8 +466,14 @@
     case BT_LEAD4:
       {
         unsigned long n;
-        if (to + 1 == toLim)
+        if (toLim - to < 2) {
+          res = XML_CONVERT_OUTPUT_EXHAUSTED;
           goto after;
+        }
+        if (fromLim - from < 4) {
+          res = XML_CONVERT_INPUT_INCOMPLETE;
+          goto after;
+        }
         n = ((from[0] & 0x7) << 18) | ((from[1] & 0x3f) << 12)
             | ((from[2] & 0x3f) << 6) | (from[3] & 0x3f);
         n -= 0x10000;
@@ -374,9 +488,12 @@
       break;
     }
   }
+  if (from < fromLim)
+    res = XML_CONVERT_OUTPUT_EXHAUSTED;
 after:
   *fromP = from;
   *toP = to;
+  return res;
 }
 
 #ifdef XML_NS
@@ -425,38 +542,43 @@
   STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)
 };
 
-static void PTRCALL
-latin1_toUtf8(const ENCODING *enc,
+static enum XML_Convert_Result PTRCALL
+latin1_toUtf8(const ENCODING *UNUSED_P(enc),
               const char **fromP, const char *fromLim,
               char **toP, const char *toLim)
 {
   for (;;) {
     unsigned char c;
     if (*fromP == fromLim)
-      break;
+      return XML_CONVERT_COMPLETED;
     c = (unsigned char)**fromP;
     if (c & 0x80) {
       if (toLim - *toP < 2)
-        break;
+        return XML_CONVERT_OUTPUT_EXHAUSTED;
       *(*toP)++ = (char)((c >> 6) | UTF8_cval2);
       *(*toP)++ = (char)((c & 0x3f) | 0x80);
       (*fromP)++;
     }
     else {
       if (*toP == toLim)
-        break;
+        return XML_CONVERT_OUTPUT_EXHAUSTED;
       *(*toP)++ = *(*fromP)++;
     }
   }
 }
 
-static void PTRCALL
-latin1_toUtf16(const ENCODING *enc,
+static enum XML_Convert_Result PTRCALL
+latin1_toUtf16(const ENCODING *UNUSED_P(enc),
                const char **fromP, const char *fromLim,
                unsigned short **toP, const unsigned short *toLim)
 {
-  while (*fromP != fromLim && *toP != toLim)
+  while (*fromP < fromLim && *toP < toLim)
     *(*toP)++ = (unsigned char)*(*fromP)++;
+
+  if ((*toP == toLim) && (*fromP < fromLim))
+    return XML_CONVERT_OUTPUT_EXHAUSTED;
+  else
+    return XML_CONVERT_COMPLETED;
 }
 
 #ifdef XML_NS
@@ -467,7 +589,7 @@
 #include "asciitab.h"
 #include "latin1tab.h"
   },
-  STANDARD_VTABLE(sb_)
+  STANDARD_VTABLE(sb_) NULL_VTABLE
 };
 
 #endif
@@ -480,16 +602,21 @@
 #undef BT_COLON
 #include "latin1tab.h"
   },
-  STANDARD_VTABLE(sb_)
+  STANDARD_VTABLE(sb_) NULL_VTABLE
 };
 
-static void PTRCALL
-ascii_toUtf8(const ENCODING *enc,
+static enum XML_Convert_Result PTRCALL
+ascii_toUtf8(const ENCODING *UNUSED_P(enc),
              const char **fromP, const char *fromLim,
              char **toP, const char *toLim)
 {
-  while (*fromP != fromLim && *toP != toLim)
+  while (*fromP < fromLim && *toP < toLim)
     *(*toP)++ = *(*fromP)++;
+
+  if ((*toP == toLim) && (*fromP < fromLim))
+    return XML_CONVERT_OUTPUT_EXHAUSTED;
+  else
+    return XML_CONVERT_COMPLETED;
 }
 
 #ifdef XML_NS
@@ -500,7 +627,7 @@
 #include "asciitab.h"
 /* BT_NONXML == 0 */
   },
-  STANDARD_VTABLE(sb_)
+  STANDARD_VTABLE(sb_) NULL_VTABLE
 };
 
 #endif
@@ -513,7 +640,7 @@
 #undef BT_COLON
 /* BT_NONXML == 0 */
   },
-  STANDARD_VTABLE(sb_)
+  STANDARD_VTABLE(sb_) NULL_VTABLE
 };
 
 static int PTRFASTCALL
@@ -536,13 +663,14 @@
 }
 
 #define DEFINE_UTF16_TO_UTF8(E) \
-static void  PTRCALL \
-E ## toUtf8(const ENCODING *enc, \
+static enum XML_Convert_Result  PTRCALL \
+E ## toUtf8(const ENCODING *UNUSED_P(enc), \
             const char **fromP, const char *fromLim, \
             char **toP, const char *toLim) \
 { \
-  const char *from; \
-  for (from = *fromP; from != fromLim; from += 2) { \
+  const char *from = *fromP; \
+  fromLim = from + (((fromLim - from) >> 1) << 1);  /* shrink to even */ \
+  for (; from < fromLim; from += 2) { \
     int plane; \
     unsigned char lo2; \
     unsigned char lo = GET_LO(from); \
@@ -552,7 +680,7 @@
       if (lo < 0x80) { \
         if (*toP == toLim) { \
           *fromP = from; \
-          return; \
+          return XML_CONVERT_OUTPUT_EXHAUSTED; \
         } \
         *(*toP)++ = lo; \
         break; \
@@ -562,7 +690,7 @@
     case 0x4: case 0x5: case 0x6: case 0x7: \
       if (toLim -  *toP < 2) { \
         *fromP = from; \
-        return; \
+        return XML_CONVERT_OUTPUT_EXHAUSTED; \
       } \
       *(*toP)++ = ((lo >> 6) | (hi << 2) |  UTF8_cval2); \
       *(*toP)++ = ((lo & 0x3f) | 0x80); \
@@ -570,7 +698,7 @@
     default: \
       if (toLim -  *toP < 3)  { \
         *fromP = from; \
-        return; \
+        return XML_CONVERT_OUTPUT_EXHAUSTED; \
       } \
       /* 16 bits divided 4, 6, 6 amongst 3 bytes */ \
       *(*toP)++ = ((hi >> 4) | UTF8_cval3); \
@@ -580,7 +708,11 @@
     case 0xD8: case 0xD9: case 0xDA: case 0xDB: \
       if (toLim -  *toP < 4) { \
         *fromP = from; \
-        return; \
+        return XML_CONVERT_OUTPUT_EXHAUSTED; \
+      } \
+      if (fromLim - from < 4) { \
+        *fromP = from; \
+        return XML_CONVERT_INPUT_INCOMPLETE; \
       } \
       plane = (((hi & 0x3) << 2) | ((lo >> 6) & 0x3)) + 1; \
       *(*toP)++ = ((plane >> 2) | UTF8_cval4); \
@@ -596,20 +728,32 @@
     } \
   } \
   *fromP = from; \
+  if (from < fromLim) \
+    return XML_CONVERT_INPUT_INCOMPLETE; \
+  else \
+    return XML_CONVERT_COMPLETED; \
 }
 
 #define DEFINE_UTF16_TO_UTF16(E) \
-static void  PTRCALL \
-E ## toUtf16(const ENCODING *enc, \
+static enum XML_Convert_Result  PTRCALL \
+E ## toUtf16(const ENCODING *UNUSED_P(enc), \
              const char **fromP, const char *fromLim, \
              unsigned short **toP, const unsigned short *toLim) \
 { \
+  enum XML_Convert_Result res = XML_CONVERT_COMPLETED; \
+  fromLim = *fromP + (((fromLim - *fromP) >> 1) << 1);  /* shrink to even */ \
   /* Avoid copying first half only of surrogate */ \
   if (fromLim - *fromP > ((toLim - *toP) << 1) \
-      && (GET_HI(fromLim - 2) & 0xF8) == 0xD8) \
+      && (GET_HI(fromLim - 2) & 0xF8) == 0xD8) { \
     fromLim -= 2; \
-  for (; *fromP != fromLim && *toP != toLim; *fromP += 2) \
+    res = XML_CONVERT_INPUT_INCOMPLETE; \
+  } \
+  for (; *fromP < fromLim && *toP < toLim; *fromP += 2) \
     *(*toP)++ = (GET_HI(*fromP) << 8) | GET_LO(*fromP); \
+  if ((*toP == toLim) && (*fromP < fromLim)) \
+    return XML_CONVERT_OUTPUT_EXHAUSTED; \
+  else \
+    return res; \
 }
 
 #define SET2(ptr, ch) \
@@ -726,7 +870,7 @@
 #include "asciitab.h"
 #include "latin1tab.h"
   },
-  STANDARD_VTABLE(little2_)
+  STANDARD_VTABLE(little2_) NULL_VTABLE
 };
 
 #endif
@@ -745,7 +889,7 @@
 #undef BT_COLON
 #include "latin1tab.h"
   },
-  STANDARD_VTABLE(little2_)
+  STANDARD_VTABLE(little2_) NULL_VTABLE
 };
 
 #if BYTEORDER != 4321
@@ -758,7 +902,7 @@
 #include "iasciitab.h"
 #include "latin1tab.h"
   },
-  STANDARD_VTABLE(little2_)
+  STANDARD_VTABLE(little2_) NULL_VTABLE
 };
 
 #endif
@@ -771,7 +915,7 @@
 #undef BT_COLON
 #include "latin1tab.h"
   },
-  STANDARD_VTABLE(little2_)
+  STANDARD_VTABLE(little2_) NULL_VTABLE
 };
 
 #endif
@@ -867,7 +1011,7 @@
 #include "asciitab.h"
 #include "latin1tab.h"
   },
-  STANDARD_VTABLE(big2_)
+  STANDARD_VTABLE(big2_) NULL_VTABLE
 };
 
 #endif
@@ -886,7 +1030,7 @@
 #undef BT_COLON
 #include "latin1tab.h"
   },
-  STANDARD_VTABLE(big2_)
+  STANDARD_VTABLE(big2_) NULL_VTABLE
 };
 
 #if BYTEORDER != 1234
@@ -899,7 +1043,7 @@
 #include "iasciitab.h"
 #include "latin1tab.h"
   },
-  STANDARD_VTABLE(big2_)
+  STANDARD_VTABLE(big2_) NULL_VTABLE
 };
 
 #endif
@@ -912,7 +1056,7 @@
 #undef BT_COLON
 #include "latin1tab.h"
   },
-  STANDARD_VTABLE(big2_)
+  STANDARD_VTABLE(big2_) NULL_VTABLE
 };
 
 #endif
@@ -928,7 +1072,11 @@
     if (ASCII_a <= c1 && c1 <= ASCII_z)
       c1 += ASCII_A - ASCII_a;
     if (ASCII_a <= c2 && c2 <= ASCII_z)
-      c2 += ASCII_A - ASCII_a;
+      /* The following line will never get executed.  streqci() is
+       * only called from two places, both of which guarantee to put
+       * upper-case strings into s2.
+       */
+      c2 += ASCII_A - ASCII_a; /* LCOV_EXCL_LINE */
     if (c1 != c2)
       return 0;
     if (!c1)
@@ -938,7 +1086,7 @@
 }
 
 static void PTRCALL
-initUpdatePosition(const ENCODING *enc, const char *ptr,
+initUpdatePosition(const ENCODING *UNUSED_P(enc), const char *ptr,
                    const char *end, POSITION *pos)
 {
   normal_updatePosition(&utf8_encoding.enc, ptr, end, pos);
@@ -1200,7 +1348,7 @@
   };
 
   if (c < 0)
-    return 0;
+    return 0; /* LCOV_EXCL_LINE: this case is always eliminated beforehand */
   if (c < min2) {
     buf[0] = (char)(c | UTF8_cval1);
     return 1;
@@ -1223,7 +1371,7 @@
     buf[3] = (char)((c & 0x3f) | 0x80);
     return 4;
   }
-  return 0;
+  return 0; /* LCOV_EXCL_LINE: this case too is eliminated before calling */
 }
 
 int FASTCALL
@@ -1288,7 +1436,7 @@
   return (c & ~0xFFFF) || checkCharRefNumber(c) < 0;
 }
 
-static void PTRCALL
+static enum XML_Convert_Result PTRCALL
 unknown_toUtf8(const ENCODING *enc,
                const char **fromP, const char *fromLim,
                char **toP, const char *toLim)
@@ -1299,36 +1447,35 @@
     const char *utf8;
     int n;
     if (*fromP == fromLim)
-      break;
+      return XML_CONVERT_COMPLETED;
     utf8 = uenc->utf8[(unsigned char)**fromP];
     n = *utf8++;
     if (n == 0) {
       int c = uenc->convert(uenc->userData, *fromP);
       n = XmlUtf8Encode(c, buf);
       if (n > toLim - *toP)
-        break;
+        return XML_CONVERT_OUTPUT_EXHAUSTED;
       utf8 = buf;
       *fromP += (AS_NORMAL_ENCODING(enc)->type[(unsigned char)**fromP]
                  - (BT_LEAD2 - 2));
     }
     else {
       if (n > toLim - *toP)
-        break;
+        return XML_CONVERT_OUTPUT_EXHAUSTED;
       (*fromP)++;
     }
-    do {
-      *(*toP)++ = *utf8++;
-    } while (--n != 0);
+    memcpy(*toP, utf8, n);
+    *toP += n;
   }
 }
 
-static void PTRCALL
+static enum XML_Convert_Result PTRCALL
 unknown_toUtf16(const ENCODING *enc,
                 const char **fromP, const char *fromLim,
                 unsigned short **toP, const unsigned short *toLim)
 {
   const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc);
-  while (*fromP != fromLim && *toP != toLim) {
+  while (*fromP < fromLim && *toP < toLim) {
     unsigned short c = uenc->utf16[(unsigned char)**fromP];
     if (c == 0) {
       c = (unsigned short)
@@ -1340,6 +1487,11 @@
       (*fromP)++;
     *(*toP)++ = c;
   }
+
+  if ((*toP == toLim) && (*fromP < fromLim))
+    return XML_CONVERT_OUTPUT_EXHAUSTED;
+  else
+    return XML_CONVERT_COMPLETED;
 }
 
 ENCODING *
@@ -1369,6 +1521,9 @@
     else if (c < 0) {
       if (c < -4)
         return 0;
+      /* Multi-byte sequences need a converter function */
+      if (!convert)
+        return 0;
       e->normal.type[i] = (unsigned char)(BT_LEAD2 - (c + 2));
       e->utf8[i][0] = 0;
       e->utf16[i] = 0;
@@ -1503,7 +1658,7 @@
 {
   const ENCODING **encPtr;
 
-  if (ptr == end)
+  if (ptr >= end)
     return XML_TOK_NONE;
   encPtr = enc->encPtr;
   if (ptr + 1 == end) {
diff --git a/Modules/expat/xmltok.h b/Modules/expat/xmltok.h
index ca867aa..50926f3 100644
--- a/Modules/expat/xmltok.h
+++ b/Modules/expat/xmltok.h
@@ -1,5 +1,33 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-   See the file COPYING for copying permission.
+/*
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
 #ifndef XmlTok_INCLUDED
@@ -130,12 +158,15 @@
                                const char *,
                                const char **);
 
+enum XML_Convert_Result {
+  XML_CONVERT_COMPLETED = 0,
+  XML_CONVERT_INPUT_INCOMPLETE = 1,
+  XML_CONVERT_OUTPUT_EXHAUSTED = 2  /* and therefore potentially input remaining as well */
+};
+
 struct encoding {
   SCANNER scanners[XML_N_STATES];
   SCANNER literalScanners[XML_N_LITERAL_TYPES];
-  int (PTRCALL *sameName)(const ENCODING *,
-                          const char *,
-                          const char *);
   int (PTRCALL *nameMatchesAscii)(const ENCODING *,
                                   const char *,
                                   const char *,
@@ -158,12 +189,12 @@
                             const char *ptr,
                             const char *end,
                             const char **badPtr);
-  void (PTRCALL *utf8Convert)(const ENCODING *enc,
+  enum XML_Convert_Result (PTRCALL *utf8Convert)(const ENCODING *enc,
                               const char **fromP,
                               const char *fromLim,
                               char **toP,
                               const char *toLim);
-  void (PTRCALL *utf16Convert)(const ENCODING *enc,
+  enum XML_Convert_Result (PTRCALL *utf16Convert)(const ENCODING *enc,
                                const char **fromP,
                                const char *fromLim,
                                unsigned short **toP,
@@ -226,8 +257,6 @@
 #define XmlEntityValueTok(enc, ptr, end, nextTokPtr) \
    XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr)
 
-#define XmlSameName(enc, ptr1, ptr2) (((enc)->sameName)(enc, ptr1, ptr2))
-
 #define XmlNameMatchesAscii(enc, ptr1, end1, ptr2) \
   (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
 
diff --git a/Modules/expat/xmltok_impl.c b/Modules/expat/xmltok_impl.c
index 9c2895b..4d9ae7d 100644
--- a/Modules/expat/xmltok_impl.c
+++ b/Modules/expat/xmltok_impl.c
@@ -1,8 +1,35 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-   See the file COPYING for copying permission.
+/* This file is included!
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
-/* This file is included! */
 #ifdef XML_TOK_IMPL_C
 
 #ifndef IS_INVALID_CHAR
@@ -47,6 +74,7 @@
       *nextTokPtr = ptr; \
       return XML_TOK_INVALID; \
     } \
+    /* fall through */ \
   case BT_NMSTRT: \
   case BT_HEX: \
   case BT_DIGIT: \
@@ -75,6 +103,7 @@
       *nextTokPtr = ptr; \
       return XML_TOK_INVALID; \
     } \
+    /* fall through */ \
   case BT_NMSTRT: \
   case BT_HEX: \
     ptr += MINBPC(enc); \
@@ -87,27 +116,45 @@
 #define PREFIX(ident) ident
 #endif
 
+
+#define HAS_CHARS(enc, ptr, end, count) \
+    (end - ptr >= count * MINBPC(enc))
+
+#define HAS_CHAR(enc, ptr, end) \
+    HAS_CHARS(enc, ptr, end, 1)
+
+#define REQUIRE_CHARS(enc, ptr, end, count) \
+    { \
+      if (! HAS_CHARS(enc, ptr, end, count)) { \
+        return XML_TOK_PARTIAL; \
+      } \
+    }
+
+#define REQUIRE_CHAR(enc, ptr, end) \
+    REQUIRE_CHARS(enc, ptr, end, 1)
+
+
 /* ptr points to character following "<!-" */
 
 static int PTRCALL
 PREFIX(scanComment)(const ENCODING *enc, const char *ptr,
                     const char *end, const char **nextTokPtr)
 {
-  if (ptr != end) {
+  if (HAS_CHAR(enc, ptr, end)) {
     if (!CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
       *nextTokPtr = ptr;
       return XML_TOK_INVALID;
     }
     ptr += MINBPC(enc);
-    while (ptr != end) {
+    while (HAS_CHAR(enc, ptr, end)) {
       switch (BYTE_TYPE(enc, ptr)) {
       INVALID_CASES(ptr, nextTokPtr)
       case BT_MINUS:
-        if ((ptr += MINBPC(enc)) == end)
-          return XML_TOK_PARTIAL;
+        ptr += MINBPC(enc);
+        REQUIRE_CHAR(enc, ptr, end);
         if (CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
-          if ((ptr += MINBPC(enc)) == end)
-            return XML_TOK_PARTIAL;
+          ptr += MINBPC(enc);
+          REQUIRE_CHAR(enc, ptr, end);
           if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) {
             *nextTokPtr = ptr;
             return XML_TOK_INVALID;
@@ -131,8 +178,7 @@
 PREFIX(scanDecl)(const ENCODING *enc, const char *ptr,
                  const char *end, const char **nextTokPtr)
 {
-  if (ptr == end)
-    return XML_TOK_PARTIAL;
+  REQUIRE_CHAR(enc, ptr, end);
   switch (BYTE_TYPE(enc, ptr)) {
   case BT_MINUS:
     return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
@@ -147,11 +193,10 @@
     *nextTokPtr = ptr;
     return XML_TOK_INVALID;
   }
-  while (ptr != end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
     case BT_PERCNT:
-      if (ptr + MINBPC(enc) == end)
-        return XML_TOK_PARTIAL;
+      REQUIRE_CHARS(enc, ptr, end, 2);
       /* don't allow <!ENTITY% foo "whatever"> */
       switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) {
       case BT_S: case BT_CR: case BT_LF: case BT_PERCNT:
@@ -175,7 +220,7 @@
 }
 
 static int PTRCALL
-PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr,
+PREFIX(checkPiTarget)(const ENCODING *UNUSED_P(enc), const char *ptr,
                       const char *end, int *tokPtr)
 {
   int upper = 0;
@@ -225,15 +270,14 @@
 {
   int tok;
   const char *target = ptr;
-  if (ptr == end)
-    return XML_TOK_PARTIAL;
+  REQUIRE_CHAR(enc, ptr, end);
   switch (BYTE_TYPE(enc, ptr)) {
   CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
   default:
     *nextTokPtr = ptr;
     return XML_TOK_INVALID;
   }
-  while (ptr != end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
     CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
     case BT_S: case BT_CR: case BT_LF:
@@ -242,13 +286,12 @@
         return XML_TOK_INVALID;
       }
       ptr += MINBPC(enc);
-      while (ptr != end) {
+      while (HAS_CHAR(enc, ptr, end)) {
         switch (BYTE_TYPE(enc, ptr)) {
         INVALID_CASES(ptr, nextTokPtr)
         case BT_QUEST:
           ptr += MINBPC(enc);
-          if (ptr == end)
-            return XML_TOK_PARTIAL;
+          REQUIRE_CHAR(enc, ptr, end);
           if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
             *nextTokPtr = ptr + MINBPC(enc);
             return tok;
@@ -266,8 +309,7 @@
         return XML_TOK_INVALID;
       }
       ptr += MINBPC(enc);
-      if (ptr == end)
-        return XML_TOK_PARTIAL;
+      REQUIRE_CHAR(enc, ptr, end);
       if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
         *nextTokPtr = ptr + MINBPC(enc);
         return tok;
@@ -282,15 +324,14 @@
 }
 
 static int PTRCALL
-PREFIX(scanCdataSection)(const ENCODING *enc, const char *ptr,
+PREFIX(scanCdataSection)(const ENCODING *UNUSED_P(enc), const char *ptr,
                          const char *end, const char **nextTokPtr)
 {
   static const char CDATA_LSQB[] = { ASCII_C, ASCII_D, ASCII_A,
                                      ASCII_T, ASCII_A, ASCII_LSQB };
   int i;
   /* CDATA[ */
-  if (end - ptr < 6 * MINBPC(enc))
-    return XML_TOK_PARTIAL;
+  REQUIRE_CHARS(enc, ptr, end, 6);
   for (i = 0; i < 6; i++, ptr += MINBPC(enc)) {
     if (!CHAR_MATCHES(enc, ptr, CDATA_LSQB[i])) {
       *nextTokPtr = ptr;
@@ -305,7 +346,7 @@
 PREFIX(cdataSectionTok)(const ENCODING *enc, const char *ptr,
                         const char *end, const char **nextTokPtr)
 {
-  if (ptr == end)
+  if (ptr >= end)
     return XML_TOK_NONE;
   if (MINBPC(enc) > 1) {
     size_t n = end - ptr;
@@ -319,13 +360,11 @@
   switch (BYTE_TYPE(enc, ptr)) {
   case BT_RSQB:
     ptr += MINBPC(enc);
-    if (ptr == end)
-      return XML_TOK_PARTIAL;
+    REQUIRE_CHAR(enc, ptr, end);
     if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB))
       break;
     ptr += MINBPC(enc);
-    if (ptr == end)
-      return XML_TOK_PARTIAL;
+    REQUIRE_CHAR(enc, ptr, end);
     if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) {
       ptr -= MINBPC(enc);
       break;
@@ -334,8 +373,7 @@
     return XML_TOK_CDATA_SECT_CLOSE;
   case BT_CR:
     ptr += MINBPC(enc);
-    if (ptr == end)
-      return XML_TOK_PARTIAL;
+    REQUIRE_CHAR(enc, ptr, end);
     if (BYTE_TYPE(enc, ptr) == BT_LF)
       ptr += MINBPC(enc);
     *nextTokPtr = ptr;
@@ -348,7 +386,7 @@
     ptr += MINBPC(enc);
     break;
   }
-  while (ptr != end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
 #define LEAD_CASE(n) \
     case BT_LEAD ## n: \
@@ -383,19 +421,18 @@
 PREFIX(scanEndTag)(const ENCODING *enc, const char *ptr,
                    const char *end, const char **nextTokPtr)
 {
-  if (ptr == end)
-    return XML_TOK_PARTIAL;
+  REQUIRE_CHAR(enc, ptr, end);
   switch (BYTE_TYPE(enc, ptr)) {
   CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
   default:
     *nextTokPtr = ptr;
     return XML_TOK_INVALID;
   }
-  while (ptr != end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
     CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
     case BT_S: case BT_CR: case BT_LF:
-      for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) {
+      for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
         switch (BYTE_TYPE(enc, ptr)) {
         case BT_S: case BT_CR: case BT_LF:
           break;
@@ -432,7 +469,7 @@
 PREFIX(scanHexCharRef)(const ENCODING *enc, const char *ptr,
                        const char *end, const char **nextTokPtr)
 {
-  if (ptr != end) {
+  if (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
     case BT_DIGIT:
     case BT_HEX:
@@ -441,7 +478,7 @@
       *nextTokPtr = ptr;
       return XML_TOK_INVALID;
     }
-    for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) {
+    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
       switch (BYTE_TYPE(enc, ptr)) {
       case BT_DIGIT:
       case BT_HEX:
@@ -464,7 +501,7 @@
 PREFIX(scanCharRef)(const ENCODING *enc, const char *ptr,
                     const char *end, const char **nextTokPtr)
 {
-  if (ptr != end) {
+  if (HAS_CHAR(enc, ptr, end)) {
     if (CHAR_MATCHES(enc, ptr, ASCII_x))
       return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
     switch (BYTE_TYPE(enc, ptr)) {
@@ -474,7 +511,7 @@
       *nextTokPtr = ptr;
       return XML_TOK_INVALID;
     }
-    for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) {
+    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
       switch (BYTE_TYPE(enc, ptr)) {
       case BT_DIGIT:
         break;
@@ -496,8 +533,7 @@
 PREFIX(scanRef)(const ENCODING *enc, const char *ptr, const char *end,
                 const char **nextTokPtr)
 {
-  if (ptr == end)
-    return XML_TOK_PARTIAL;
+  REQUIRE_CHAR(enc, ptr, end);
   switch (BYTE_TYPE(enc, ptr)) {
   CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
   case BT_NUM:
@@ -506,7 +542,7 @@
     *nextTokPtr = ptr;
     return XML_TOK_INVALID;
   }
-  while (ptr != end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
     CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
     case BT_SEMI:
@@ -529,7 +565,7 @@
 #ifdef XML_NS
   int hadColon = 0;
 #endif
-  while (ptr != end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
     CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
 #ifdef XML_NS
@@ -540,8 +576,7 @@
       }
       hadColon = 1;
       ptr += MINBPC(enc);
-      if (ptr == end)
-        return XML_TOK_PARTIAL;
+      REQUIRE_CHAR(enc, ptr, end);
       switch (BYTE_TYPE(enc, ptr)) {
       CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
       default:
@@ -555,8 +590,7 @@
         int t;
 
         ptr += MINBPC(enc);
-        if (ptr == end)
-          return XML_TOK_PARTIAL;
+        REQUIRE_CHAR(enc, ptr, end);
         t = BYTE_TYPE(enc, ptr);
         if (t == BT_EQUALS)
           break;
@@ -570,7 +604,7 @@
           return XML_TOK_INVALID;
         }
       }
-    /* fall through */
+      /* fall through */
     case BT_EQUALS:
       {
         int open;
@@ -579,8 +613,7 @@
 #endif
         for (;;) {
           ptr += MINBPC(enc);
-          if (ptr == end)
-            return XML_TOK_PARTIAL;
+          REQUIRE_CHAR(enc, ptr, end);
           open = BYTE_TYPE(enc, ptr);
           if (open == BT_QUOT || open == BT_APOS)
             break;
@@ -598,8 +631,7 @@
         /* in attribute value */
         for (;;) {
           int t;
-          if (ptr == end)
-            return XML_TOK_PARTIAL;
+          REQUIRE_CHAR(enc, ptr, end);
           t = BYTE_TYPE(enc, ptr);
           if (t == open)
             break;
@@ -624,8 +656,7 @@
           }
         }
         ptr += MINBPC(enc);
-        if (ptr == end)
-          return XML_TOK_PARTIAL;
+        REQUIRE_CHAR(enc, ptr, end);
         switch (BYTE_TYPE(enc, ptr)) {
         case BT_S:
         case BT_CR:
@@ -642,8 +673,7 @@
         /* ptr points to closing quote */
         for (;;) {
           ptr += MINBPC(enc);
-          if (ptr == end)
-            return XML_TOK_PARTIAL;
+          REQUIRE_CHAR(enc, ptr, end);
           switch (BYTE_TYPE(enc, ptr)) {
           CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
           case BT_S: case BT_CR: case BT_LF:
@@ -655,8 +685,7 @@
           case BT_SOL:
           sol:
             ptr += MINBPC(enc);
-            if (ptr == end)
-              return XML_TOK_PARTIAL;
+            REQUIRE_CHAR(enc, ptr, end);
             if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) {
               *nextTokPtr = ptr;
               return XML_TOK_INVALID;
@@ -688,13 +717,12 @@
 #ifdef XML_NS
   int hadColon;
 #endif
-  if (ptr == end)
-    return XML_TOK_PARTIAL;
+  REQUIRE_CHAR(enc, ptr, end);
   switch (BYTE_TYPE(enc, ptr)) {
   CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
   case BT_EXCL:
-    if ((ptr += MINBPC(enc)) == end)
-      return XML_TOK_PARTIAL;
+    ptr += MINBPC(enc);
+    REQUIRE_CHAR(enc, ptr, end);
     switch (BYTE_TYPE(enc, ptr)) {
     case BT_MINUS:
       return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
@@ -716,7 +744,7 @@
   hadColon = 0;
 #endif
   /* we have a start-tag */
-  while (ptr != end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
     CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
 #ifdef XML_NS
@@ -727,8 +755,7 @@
       }
       hadColon = 1;
       ptr += MINBPC(enc);
-      if (ptr == end)
-        return XML_TOK_PARTIAL;
+      REQUIRE_CHAR(enc, ptr, end);
       switch (BYTE_TYPE(enc, ptr)) {
       CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
       default:
@@ -740,7 +767,7 @@
     case BT_S: case BT_CR: case BT_LF:
       {
         ptr += MINBPC(enc);
-        while (ptr != end) {
+        while (HAS_CHAR(enc, ptr, end)) {
           switch (BYTE_TYPE(enc, ptr)) {
           CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
           case BT_GT:
@@ -765,8 +792,7 @@
     case BT_SOL:
     sol:
       ptr += MINBPC(enc);
-      if (ptr == end)
-        return XML_TOK_PARTIAL;
+      REQUIRE_CHAR(enc, ptr, end);
       if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) {
         *nextTokPtr = ptr;
         return XML_TOK_INVALID;
@@ -785,7 +811,7 @@
 PREFIX(contentTok)(const ENCODING *enc, const char *ptr, const char *end,
                    const char **nextTokPtr)
 {
-  if (ptr == end)
+  if (ptr >= end)
     return XML_TOK_NONE;
   if (MINBPC(enc) > 1) {
     size_t n = end - ptr;
@@ -803,7 +829,7 @@
     return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
   case BT_CR:
     ptr += MINBPC(enc);
-    if (ptr == end)
+    if (! HAS_CHAR(enc, ptr, end))
       return XML_TOK_TRAILING_CR;
     if (BYTE_TYPE(enc, ptr) == BT_LF)
       ptr += MINBPC(enc);
@@ -814,12 +840,12 @@
     return XML_TOK_DATA_NEWLINE;
   case BT_RSQB:
     ptr += MINBPC(enc);
-    if (ptr == end)
+    if (! HAS_CHAR(enc, ptr, end))
       return XML_TOK_TRAILING_RSQB;
     if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB))
       break;
     ptr += MINBPC(enc);
-    if (ptr == end)
+    if (! HAS_CHAR(enc, ptr, end))
       return XML_TOK_TRAILING_RSQB;
     if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) {
       ptr -= MINBPC(enc);
@@ -832,7 +858,7 @@
     ptr += MINBPC(enc);
     break;
   }
-  while (ptr != end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
 #define LEAD_CASE(n) \
     case BT_LEAD ## n: \
@@ -845,12 +871,12 @@
     LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
 #undef LEAD_CASE
     case BT_RSQB:
-      if (ptr + MINBPC(enc) != end) {
+      if (HAS_CHARS(enc, ptr, end, 2)) {
          if (!CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) {
            ptr += MINBPC(enc);
            break;
          }
-         if (ptr + 2*MINBPC(enc) != end) {
+         if (HAS_CHARS(enc, ptr, end, 3)) {
            if (!CHAR_MATCHES(enc, ptr + 2*MINBPC(enc), ASCII_GT)) {
              ptr += MINBPC(enc);
              break;
@@ -884,8 +910,7 @@
 PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end,
                     const char **nextTokPtr)
 {
-  if (ptr == end)
-    return XML_TOK_PARTIAL;
+  REQUIRE_CHAR(enc, ptr, end);
   switch (BYTE_TYPE(enc, ptr)) {
   CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
   case BT_S: case BT_LF: case BT_CR: case BT_PERCNT:
@@ -895,7 +920,7 @@
     *nextTokPtr = ptr;
     return XML_TOK_INVALID;
   }
-  while (ptr != end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
     CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
     case BT_SEMI:
@@ -913,15 +938,14 @@
 PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end,
                       const char **nextTokPtr)
 {
-  if (ptr == end)
-    return XML_TOK_PARTIAL;
+  REQUIRE_CHAR(enc, ptr, end);
   switch (BYTE_TYPE(enc, ptr)) {
   CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
   default:
     *nextTokPtr = ptr;
     return XML_TOK_INVALID;
   }
-  while (ptr != end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
     CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
     case BT_CR: case BT_LF: case BT_S:
@@ -941,7 +965,7 @@
                 const char *ptr, const char *end,
                 const char **nextTokPtr)
 {
-  while (ptr != end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     int t = BYTE_TYPE(enc, ptr);
     switch (t) {
     INVALID_CASES(ptr, nextTokPtr)
@@ -950,7 +974,7 @@
       ptr += MINBPC(enc);
       if (t != open)
         break;
-      if (ptr == end)
+      if (! HAS_CHAR(enc, ptr, end))
         return -XML_TOK_LITERAL;
       *nextTokPtr = ptr;
       switch (BYTE_TYPE(enc, ptr)) {
@@ -973,7 +997,7 @@
                   const char **nextTokPtr)
 {
   int tok;
-  if (ptr == end)
+  if (ptr >= end)
     return XML_TOK_NONE;
   if (MINBPC(enc) > 1) {
     size_t n = end - ptr;
@@ -992,8 +1016,7 @@
   case BT_LT:
     {
       ptr += MINBPC(enc);
-      if (ptr == end)
-        return XML_TOK_PARTIAL;
+      REQUIRE_CHAR(enc, ptr, end);
       switch (BYTE_TYPE(enc, ptr)) {
       case BT_EXCL:
         return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr);
@@ -1021,7 +1044,7 @@
   case BT_S: case BT_LF:
     for (;;) {
       ptr += MINBPC(enc);
-      if (ptr == end)
+      if (! HAS_CHAR(enc, ptr, end))
         break;
       switch (BYTE_TYPE(enc, ptr)) {
       case BT_S: case BT_LF:
@@ -1048,11 +1071,10 @@
     return XML_TOK_OPEN_BRACKET;
   case BT_RSQB:
     ptr += MINBPC(enc);
-    if (ptr == end)
+    if (! HAS_CHAR(enc, ptr, end))
       return -XML_TOK_CLOSE_BRACKET;
     if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
-      if (ptr + MINBPC(enc) == end)
-        return XML_TOK_PARTIAL;
+      REQUIRE_CHARS(enc, ptr, end, 2);
       if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) {
         *nextTokPtr = ptr + 2*MINBPC(enc);
         return XML_TOK_COND_SECT_CLOSE;
@@ -1065,7 +1087,7 @@
     return XML_TOK_OPEN_PAREN;
   case BT_RPAR:
     ptr += MINBPC(enc);
-    if (ptr == end)
+    if (! HAS_CHAR(enc, ptr, end))
       return -XML_TOK_CLOSE_PAREN;
     switch (BYTE_TYPE(enc, ptr)) {
     case BT_AST:
@@ -1141,7 +1163,7 @@
     *nextTokPtr = ptr;
     return XML_TOK_INVALID;
   }
-  while (ptr != end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
     CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
     case BT_GT: case BT_RPAR: case BT_COMMA:
@@ -1154,8 +1176,7 @@
       ptr += MINBPC(enc);
       switch (tok) {
       case XML_TOK_NAME:
-        if (ptr == end)
-          return XML_TOK_PARTIAL;
+        REQUIRE_CHAR(enc, ptr, end);
         tok = XML_TOK_PREFIXED_NAME;
         switch (BYTE_TYPE(enc, ptr)) {
         CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
@@ -1204,10 +1225,18 @@
                           const char *end, const char **nextTokPtr)
 {
   const char *start;
-  if (ptr == end)
+  if (ptr >= end)
     return XML_TOK_NONE;
+  else if (! HAS_CHAR(enc, ptr, end)) {
+    /* This line cannot be executed.  The incoming data has already
+     * been tokenized once, so incomplete characters like this have
+     * already been eliminated from the input.  Retaining the paranoia
+     * check is still valuable, however.
+     */
+    return XML_TOK_PARTIAL; /* LCOV_EXCL_LINE */
+  }
   start = ptr;
-  while (ptr != end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
 #define LEAD_CASE(n) \
     case BT_LEAD ## n: ptr += n; break;
@@ -1232,7 +1261,7 @@
     case BT_CR:
       if (ptr == start) {
         ptr += MINBPC(enc);
-        if (ptr == end)
+        if (! HAS_CHAR(enc, ptr, end))
           return XML_TOK_TRAILING_CR;
         if (BYTE_TYPE(enc, ptr) == BT_LF)
           ptr += MINBPC(enc);
@@ -1262,10 +1291,18 @@
                        const char *end, const char **nextTokPtr)
 {
   const char *start;
-  if (ptr == end)
+  if (ptr >= end)
     return XML_TOK_NONE;
+  else if (! HAS_CHAR(enc, ptr, end)) {
+    /* This line cannot be executed.  The incoming data has already
+     * been tokenized once, so incomplete characters like this have
+     * already been eliminated from the input.  Retaining the paranoia
+     * check is still valuable, however.
+     */
+    return XML_TOK_PARTIAL; /* LCOV_EXCL_LINE */
+  }
   start = ptr;
-  while (ptr != end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
 #define LEAD_CASE(n) \
     case BT_LEAD ## n: ptr += n; break;
@@ -1294,7 +1331,7 @@
     case BT_CR:
       if (ptr == start) {
         ptr += MINBPC(enc);
-        if (ptr == end)
+        if (! HAS_CHAR(enc, ptr, end))
           return XML_TOK_TRAILING_CR;
         if (BYTE_TYPE(enc, ptr) == BT_LF)
           ptr += MINBPC(enc);
@@ -1326,15 +1363,15 @@
       end = ptr + n;
     }
   }
-  while (ptr != end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
     INVALID_CASES(ptr, nextTokPtr)
     case BT_LT:
-      if ((ptr += MINBPC(enc)) == end)
-        return XML_TOK_PARTIAL;
+      ptr += MINBPC(enc);
+      REQUIRE_CHAR(enc, ptr, end);
       if (CHAR_MATCHES(enc, ptr, ASCII_EXCL)) {
-        if ((ptr += MINBPC(enc)) == end)
-          return XML_TOK_PARTIAL;
+        ptr += MINBPC(enc);
+        REQUIRE_CHAR(enc, ptr, end);
         if (CHAR_MATCHES(enc, ptr, ASCII_LSQB)) {
           ++level;
           ptr += MINBPC(enc);
@@ -1342,11 +1379,11 @@
       }
       break;
     case BT_RSQB:
-      if ((ptr += MINBPC(enc)) == end)
-        return XML_TOK_PARTIAL;
+      ptr += MINBPC(enc);
+      REQUIRE_CHAR(enc, ptr, end);
       if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
-        if ((ptr += MINBPC(enc)) == end)
-          return XML_TOK_PARTIAL;
+        ptr += MINBPC(enc);
+        REQUIRE_CHAR(enc, ptr, end);
         if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
           ptr += MINBPC(enc);
           if (level == 0) {
@@ -1373,7 +1410,7 @@
 {
   ptr += MINBPC(enc);
   end -= MINBPC(enc);
-  for (; ptr != end; ptr += MINBPC(enc)) {
+  for (; HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
     switch (BYTE_TYPE(enc, ptr)) {
     case BT_DIGIT:
     case BT_HEX:
@@ -1407,6 +1444,7 @@
     case BT_NMSTRT:
       if (!(BYTE_TO_ASCII(enc, ptr) & ~0x7f))
         break;
+      /* fall through */
     default:
       switch (BYTE_TO_ASCII(enc, ptr)) {
       case 0x24: /* $ */
@@ -1521,7 +1559,7 @@
 }
 
 static int PTRFASTCALL
-PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr)
+PREFIX(charRefNumber)(const ENCODING *UNUSED_P(enc), const char *ptr)
 {
   int result = 0;
   /* skip &# */
@@ -1565,7 +1603,7 @@
 }
 
 static int PTRCALL
-PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr,
+PREFIX(predefinedEntityName)(const ENCODING *UNUSED_P(enc), const char *ptr,
                              const char *end)
 {
   switch ((end - ptr)/MINBPC(enc)) {
@@ -1619,76 +1657,18 @@
 }
 
 static int PTRCALL
-PREFIX(sameName)(const ENCODING *enc, const char *ptr1, const char *ptr2)
-{
-  for (;;) {
-    switch (BYTE_TYPE(enc, ptr1)) {
-#define LEAD_CASE(n) \
-    case BT_LEAD ## n: \
-      if (*ptr1++ != *ptr2++) \
-        return 0;
-    LEAD_CASE(4) LEAD_CASE(3) LEAD_CASE(2)
-#undef LEAD_CASE
-      /* fall through */
-      if (*ptr1++ != *ptr2++)
-        return 0;
-      break;
-    case BT_NONASCII:
-    case BT_NMSTRT:
-#ifdef XML_NS
-    case BT_COLON:
-#endif
-    case BT_HEX:
-    case BT_DIGIT:
-    case BT_NAME:
-    case BT_MINUS:
-      if (*ptr2++ != *ptr1++)
-        return 0;
-      if (MINBPC(enc) > 1) {
-        if (*ptr2++ != *ptr1++)
-          return 0;
-        if (MINBPC(enc) > 2) {
-          if (*ptr2++ != *ptr1++)
-            return 0;
-          if (MINBPC(enc) > 3) {
-            if (*ptr2++ != *ptr1++)
-              return 0;
-          }
-        }
-      }
-      break;
-    default:
-      if (MINBPC(enc) == 1 && *ptr1 == *ptr2)
-        return 1;
-      switch (BYTE_TYPE(enc, ptr2)) {
-      case BT_LEAD2:
-      case BT_LEAD3:
-      case BT_LEAD4:
-      case BT_NONASCII:
-      case BT_NMSTRT:
-#ifdef XML_NS
-      case BT_COLON:
-#endif
-      case BT_HEX:
-      case BT_DIGIT:
-      case BT_NAME:
-      case BT_MINUS:
-        return 0;
-      default:
-        return 1;
-      }
-    }
-  }
-  /* not reached */
-}
-
-static int PTRCALL
-PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1,
+PREFIX(nameMatchesAscii)(const ENCODING *UNUSED_P(enc), const char *ptr1,
                          const char *end1, const char *ptr2)
 {
   for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) {
-    if (ptr1 == end1)
-      return 0;
+    if (end1 - ptr1 < MINBPC(enc)) {
+      /* This line cannot be executed.  The incoming data has already
+       * been tokenized once, so incomplete characters like this have
+       * already been eliminated from the input.  Retaining the
+       * paranoia check is still valuable, however.
+       */
+      return 0; /* LCOV_EXCL_LINE */
+    }
     if (!CHAR_MATCHES(enc, ptr1, *ptr2))
       return 0;
   }
@@ -1744,7 +1724,7 @@
                        const char *end,
                        POSITION *pos)
 {
-  while (ptr < end) {
+  while (HAS_CHAR(enc, ptr, end)) {
     switch (BYTE_TYPE(enc, ptr)) {
 #define LEAD_CASE(n) \
     case BT_LEAD ## n: \
@@ -1760,7 +1740,7 @@
     case BT_CR:
       pos->lineNumber++;
       ptr += MINBPC(enc);
-      if (ptr != end && BYTE_TYPE(enc, ptr) == BT_LF)
+      if (HAS_CHAR(enc, ptr, end) && BYTE_TYPE(enc, ptr) == BT_LF)
         ptr += MINBPC(enc);
       pos->columnNumber = (XML_Size)-1;
       break;
diff --git a/Modules/expat/xmltok_impl.h b/Modules/expat/xmltok_impl.h
index da0ea60..a6420f4 100644
--- a/Modules/expat/xmltok_impl.h
+++ b/Modules/expat/xmltok_impl.h
@@ -1,6 +1,33 @@
 /*
-Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-See the file COPYING for copying permission.
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
 enum {
diff --git a/Modules/expat/xmltok_ns.c b/Modules/expat/xmltok_ns.c
index c3b88fd..23d31e8 100644
--- a/Modules/expat/xmltok_ns.c
+++ b/Modules/expat/xmltok_ns.c
@@ -1,8 +1,35 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-   See the file COPYING for copying permission.
+/* This file is included!
+                            __  __            _
+                         ___\ \/ /_ __   __ _| |_
+                        / _ \\  /| '_ \ / _` | __|
+                       |  __//  \| |_) | (_| | |_
+                        \___/_/\_\ .__/ \__,_|\__|
+                                 |_| XML parser
+
+   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
+   Copyright (c) 2000-2017 Expat development team
+   Licensed under the MIT license:
+
+   Permission is  hereby granted,  free of charge,  to any  person obtaining
+   a  copy  of  this  software   and  associated  documentation  files  (the
+   "Software"),  to  deal in  the  Software  without restriction,  including
+   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
+   distribute, sublicense, and/or sell copies of the Software, and to permit
+   persons  to whom  the Software  is  furnished to  do so,  subject to  the
+   following conditions:
+
+   The above copyright  notice and this permission notice  shall be included
+   in all copies or substantial portions of the Software.
+
+   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
+   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
+   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+   USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
-/* This file is included! */
 #ifdef XML_TOK_NS_C
 
 const ENCODING *
diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index 916e481..700c1a3 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -771,10 +771,8 @@
  * garbage list (a Python list), else only the objects in finalizers with
  * __del__ methods are appended to garbage.  All objects in finalizers are
  * merged into the old list regardless.
- * Returns 0 if all OK, <0 on error (out of memory to grow the garbage list).
- * The finalizers list is made empty on a successful return.
  */
-static int
+static void
 handle_finalizers(PyGC_Head *finalizers, PyGC_Head *old)
 {
     PyGC_Head *gc = finalizers->gc.gc_next;
@@ -789,12 +787,11 @@
 
         if ((debug & DEBUG_SAVEALL) || has_finalizer(op)) {
             if (PyList_Append(garbage, op) < 0)
-                return -1;
+                break;
         }
     }
 
     gc_list_merge(finalizers, old);
-    return 0;
 }
 
 /* Break reference cycles by clearing the containers involved.  This is
@@ -1012,7 +1009,7 @@
      * reachable list of garbage.  The programmer has to deal with
      * this if they insist on creating this type of structure.
      */
-    (void)handle_finalizers(&finalizers, old);
+    handle_finalizers(&finalizers, old);
 
     /* Clear free list only during the collection of the highest
      * generation */
@@ -1436,8 +1433,11 @@
     if (collecting)
         n = 0; /* already collecting, don't do anything */
     else {
+        PyObject *exc, *value, *tb;
         collecting = 1;
+        PyErr_Fetch(&exc, &value, &tb);
         n = collect(NUM_GENERATIONS - 1);
+        PyErr_Restore(exc, value, tb);
         collecting = 0;
     }
 
@@ -1539,6 +1539,7 @@
 {
     const size_t basicsize = _PyObject_VAR_SIZE(Py_TYPE(op), nitems);
     PyGC_Head *g = AS_GC(op);
+    assert(!IS_TRACKED(op));
     if (basicsize > PY_SSIZE_T_MAX - sizeof(PyGC_Head))
         return (PyVarObject *)PyErr_NoMemory();
     g = (PyGC_Head *)PyObject_REALLOC(g,  sizeof(PyGC_Head) + basicsize);
diff --git a/Modules/getbuildinfo.c b/Modules/getbuildinfo.c
index 7069b6e..5f941a2 100644
--- a/Modules/getbuildinfo.c
+++ b/Modules/getbuildinfo.c
@@ -20,66 +20,48 @@
 #endif
 #endif
 
-/* on unix, SVNVERSION is passed on the command line.
- * on Windows, the string is interpolated using
- * subwcrev.exe
- */
-#ifndef SVNVERSION
-#define SVNVERSION "$WCRANGE$$WCMODS?M:$"
-#endif
-
 /* XXX Only unix build process has been tested */
-#ifndef HGVERSION
-#define HGVERSION ""
+#ifndef GITVERSION
+#define GITVERSION ""
 #endif
-#ifndef HGTAG
-#define HGTAG ""
+#ifndef GITTAG
+#define GITTAG ""
 #endif
-#ifndef HGBRANCH
-#define HGBRANCH ""
+#ifndef GITBRANCH
+#define GITBRANCH ""
 #endif
 
 const char *
 Py_GetBuildInfo(void)
 {
-    static char buildinfo[50 + sizeof(HGVERSION) +
-                          ((sizeof(HGTAG) > sizeof(HGBRANCH)) ?
-                           sizeof(HGTAG) : sizeof(HGBRANCH))];
-    const char *revision = _Py_hgversion();
+    static char buildinfo[50 + sizeof(GITVERSION) +
+                          ((sizeof(GITTAG) > sizeof(GITBRANCH)) ?
+                           sizeof(GITTAG) : sizeof(GITBRANCH))];
+    const char *revision = _Py_gitversion();
     const char *sep = *revision ? ":" : "";
-    const char *hgid = _Py_hgidentifier();
-    if (!(*hgid))
-        hgid = "default";
+    const char *gitid = _Py_gitidentifier();
+    if (!(*gitid))
+        gitid = "default";
     PyOS_snprintf(buildinfo, sizeof(buildinfo),
-                  "%s%s%s, %.20s, %.9s", hgid, sep, revision,
+                  "%s%s%s, %.20s, %.9s", gitid, sep, revision,
                   DATE, TIME);
     return buildinfo;
 }
 
 const char *
-_Py_svnversion(void)
+_Py_gitversion(void)
 {
-    /* the following string can be modified by subwcrev.exe */
-    static const char svnversion[] = SVNVERSION;
-    if (svnversion[0] != '$')
-        return svnversion; /* it was interpolated, or passed on command line */
-    return "Unversioned directory";
+    return GITVERSION;
 }
 
 const char *
-_Py_hgversion(void)
+_Py_gitidentifier(void)
 {
-    return HGVERSION;
-}
-
-const char *
-_Py_hgidentifier(void)
-{
-    const char *hgtag, *hgid;
-    hgtag = HGTAG;
-    if ((*hgtag) && strcmp(hgtag, "tip") != 0)
-        hgid = hgtag;
+    const char *gittag, *gitid;
+    gittag = GITTAG;
+    if ((*gittag) && strcmp(gittag, "undefined") != 0)
+        gitid = gittag;
     else
-        hgid = HGBRANCH;
-    return hgid;
+        gitid = GITBRANCH;
+    return gitid;
 }
diff --git a/Modules/getpath.c b/Modules/getpath.c
index e9d969b..27f3381 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -104,19 +104,15 @@
 #define LANDMARK "os.py"
 #endif
 
-#ifndef INTERNALDIR
-#define INTERNALDIR "internal"
-#endif
-
-#ifndef STDLIBDIR
-#define STDLIBDIR "stdlib"
-#endif
-
 static char prefix[MAXPATHLEN+1];
 static char exec_prefix[MAXPATHLEN+1];
 static char progpath[MAXPATHLEN+1];
 static char *module_search_path = NULL;
+#ifdef ANDROID_LIB_PYTHON_PATH
+static char lib_python[] = ANDROID_LIB_PYTHON_PATH;
+#else
 static char lib_python[] = "lib/python" VERSION;
+#endif
 
 static void
 reduce(char *dir)
@@ -263,11 +259,8 @@
         return 1;
     }
 
-    // GOOGLE(nanzhang): Always set prefix with hermetic executable full path.
-    strcpy(prefix, argv0_path);
-    return 1;
-
     /* Check to see if argv[0] is in the build directory */
+    strcpy(prefix, argv0_path);
     joinpath(prefix, "Modules/Setup");
     if (isfile(prefix)) {
         /* Check VPATH to see if argv0_path is in the build directory. */
@@ -325,13 +318,10 @@
         return 1;
     }
 
-    // GOOGLE(nanzhang): Always set exec_prefix with hermetic executable full path.
-    strcpy(exec_prefix, argv0_path);
-    return 1;
-
     /* Check to see if argv[0] is in the build directory. "pybuilddir.txt"
        is written by setup.py and contains the relative path to the location
        of shared library modules. */
+    strcpy(exec_prefix, argv0_path);
     joinpath(exec_prefix, "pybuilddir.txt");
     if (isfile(exec_prefix)) {
       FILE *f = fopen(exec_prefix, "r");
@@ -377,62 +367,19 @@
 calculate_path(void)
 {
     extern char *Py_GetProgramName(void);
+
     static char delimiter[2] = {DELIM, '\0'};
     static char separator[2] = {SEP, '\0'};
     char *pythonpath = PYTHONPATH;
+    char *rtpypath = Py_GETENV("PYTHONPATH");
     char *home = Py_GetPythonHome();
-    // We have overrided argv[0] using the full path to the hermetic Python
-    // launcher itself. And then Py_SetProgramName(argv[0]) was invoked at
-    // launcher_main.cpp. The launcher_main.cpp has guaranteed that
-    // strlen(Py_GetProgramName()) must not exceed MAXPATHLEN.
+    char *path = getenv("PATH");
     char *prog = Py_GetProgramName();
     char argv0_path[MAXPATHLEN+1];
-    char *buf;
-    size_t bufsz;
-
-    strncpy(progpath, prog, MAXPATHLEN);
-    progpath[MAXPATHLEN] = '\0' /* In case of no NUL-termination. */;
-    strncpy(argv0_path, prog, MAXPATHLEN);
-    argv0_path[MAXPATHLEN] = '\0' /* In case of no NUL-termination. */;
-
-    // We don't reduce the path of prefix, and exec_prefix.
-    search_for_prefix(argv0_path, home);
-    search_for_exec_prefix(argv0_path, home);
-
-    // Calculate size of return buffer.
-    bufsz = strlen(prog) + 1 + sizeof(INTERNALDIR) /* 1 is for SEP */;
-    bufsz += strlen(prog) + 1 + sizeof(INTERNALDIR) + 1 + sizeof(STDLIBDIR) /* 1 is for SEP */;
-
-    /* This is the only malloc call in this file */
-    buf = (char *)PyMem_Malloc(bufsz);
-
-    if (buf == NULL) {
-        /* We can't exit, so print a warning and limp along */
-        fprintf(stderr, "Not enough memory for dynamic PYTHONPATH.\n");
-        fprintf(stderr, "Using default static PYTHONPATH.\n");
-        exit(1);
-    } else {
-        buf[0] = '\0';
-        strcat(buf, prefix);
-        strcat(buf, separator);
-        strcat(buf, INTERNALDIR);
-        strcat(buf, delimiter);
-
-        strcat(buf, prefix);
-        strcat(buf, separator);
-        strcat(buf, INTERNALDIR);
-        strcat(buf, separator);
-        strcat(buf, STDLIBDIR);
-
-        module_search_path = buf;
-    }
-    // GOOGLE(nanzhang): Don't need all the code below for embedded Python launcher.
-    return;
-
-    char *path = getenv("PATH");
-    char *rtpypath = Py_GETENV("PYTHONPATH");
     char zip_path[MAXPATHLEN+1];
     int pfound, efound; /* 1 if found; -1 if found build directory */
+    char *buf;
+    size_t bufsz;
     size_t prefixsz;
     char *defpath = pythonpath;
 #ifdef WITH_NEXT_FRAMEWORK
@@ -620,8 +567,12 @@
         defpath = delim + 1;
     }
 
+#ifndef ANDROID_SKIP_ZIP_PATH
     bufsz += strlen(zip_path) + 1;
+#endif
+#ifndef ANDROID_SKIP_EXEC_PREFIX_PATH
     bufsz += strlen(exec_prefix) + 1;
+#endif
 
     /* This is the only malloc call in this file */
     buf = (char *)PyMem_Malloc(bufsz);
@@ -642,8 +593,10 @@
             buf[0] = '\0';
 
         /* Next is the default zip path */
+#ifndef ANDROID_SKIP_ZIP_PATH
         strcat(buf, zip_path);
         strcat(buf, delimiter);
+#endif
 
         /* Next goes merge of compile-time $PYTHONPATH with
          * dynamically located prefix.
@@ -672,10 +625,12 @@
             }
             defpath = delim + 1;
         }
+#ifndef ANDROID_SKIP_EXEC_PREFIX_PATH
         strcat(buf, delimiter);
 
         /* Finally, on goes the directory for dynamic-load modules */
         strcat(buf, exec_prefix);
+#endif
 
         /* And publish the results */
         module_search_path = buf;
diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index f91501b..47db7af 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -71,10 +71,37 @@
     return 0;
 }
 
+Py_LOCAL_INLINE(int)
+groupby_step(groupbyobject *gbo)
+{
+    PyObject *newvalue, *newkey, *oldvalue;
+
+    newvalue = PyIter_Next(gbo->it);
+    if (newvalue == NULL)
+        return -1;
+
+    if (gbo->keyfunc == Py_None) {
+        newkey = newvalue;
+        Py_INCREF(newvalue);
+    } else {
+        newkey = PyObject_CallFunctionObjArgs(gbo->keyfunc, newvalue, NULL);
+        if (newkey == NULL) {
+            Py_DECREF(newvalue);
+            return -1;
+        }
+    }
+
+    oldvalue = gbo->currvalue;
+    gbo->currvalue = newvalue;
+    Py_XSETREF(gbo->currkey, newkey);
+    Py_XDECREF(oldvalue);
+    return 0;
+}
+
 static PyObject *
 groupby_next(groupbyobject *gbo)
 {
-    PyObject *newvalue, *newkey, *r, *grouper, *tmp;
+    PyObject *r, *grouper;
 
     /* skip to next iteration group */
     for (;;) {
@@ -93,35 +120,11 @@
                 break;
         }
 
-        newvalue = PyIter_Next(gbo->it);
-        if (newvalue == NULL)
+        if (groupby_step(gbo) < 0)
             return NULL;
-
-        if (gbo->keyfunc == Py_None) {
-            newkey = newvalue;
-            Py_INCREF(newvalue);
-        } else {
-            newkey = PyObject_CallFunctionObjArgs(gbo->keyfunc,
-                                                  newvalue, NULL);
-            if (newkey == NULL) {
-                Py_DECREF(newvalue);
-                return NULL;
-            }
-        }
-
-        tmp = gbo->currkey;
-        gbo->currkey = newkey;
-        Py_XDECREF(tmp);
-
-        tmp = gbo->currvalue;
-        gbo->currvalue = newvalue;
-        Py_XDECREF(tmp);
     }
-
     Py_INCREF(gbo->currkey);
-    tmp = gbo->tgtkey;
-    gbo->tgtkey = gbo->currkey;
-    Py_XDECREF(tmp);
+    Py_XSETREF(gbo->tgtkey, gbo->currkey);
 
     grouper = _grouper_create(gbo, gbo->tgtkey);
     if (grouper == NULL)
@@ -229,29 +232,12 @@
 _grouper_next(_grouperobject *igo)
 {
     groupbyobject *gbo = (groupbyobject *)igo->parent;
-    PyObject *newvalue, *newkey, *r;
+    PyObject *r;
     int rcmp;
 
     if (gbo->currvalue == NULL) {
-        newvalue = PyIter_Next(gbo->it);
-        if (newvalue == NULL)
+        if (groupby_step(gbo) < 0)
             return NULL;
-
-        if (gbo->keyfunc == Py_None) {
-            newkey = newvalue;
-            Py_INCREF(newvalue);
-        } else {
-            newkey = PyObject_CallFunctionObjArgs(gbo->keyfunc,
-                                                  newvalue, NULL);
-            if (newkey == NULL) {
-                Py_DECREF(newvalue);
-                return NULL;
-            }
-        }
-
-        assert(gbo->currkey == NULL);
-        gbo->currkey = newkey;
-        gbo->currvalue = newvalue;
     }
 
     assert(gbo->currkey != NULL);
@@ -1708,33 +1694,37 @@
 {
     PyObject *item;
 
-    if (lz->source == NULL)
-        return NULL;                                    /* already stopped */
-
-    if (lz->active == NULL) {
-        PyObject *iterable = PyIter_Next(lz->source);
-        if (iterable == NULL) {
-            Py_CLEAR(lz->source);
-            return NULL;                                /* no more input sources */
-        }
-        lz->active = PyObject_GetIter(iterable);
-        Py_DECREF(iterable);
+    /* lz->source is the iterator of iterables. If it's NULL, we've already
+     * consumed them all. lz->active is the current iterator. If it's NULL,
+     * we should grab a new one from lz->source. */
+    while (lz->source != NULL) {
         if (lz->active == NULL) {
-            Py_CLEAR(lz->source);
-            return NULL;                                /* input not iterable */
+            PyObject *iterable = PyIter_Next(lz->source);
+            if (iterable == NULL) {
+                Py_CLEAR(lz->source);
+                return NULL;                  /* no more input sources */
+            }
+            lz->active = PyObject_GetIter(iterable);
+            Py_DECREF(iterable);
+            if (lz->active == NULL) {
+                Py_CLEAR(lz->source);
+                return NULL;                  /* input not iterable */
+            }
         }
+        item = PyIter_Next(lz->active);
+        if (item != NULL)
+            return item;
+        if (PyErr_Occurred()) {
+            if (PyErr_ExceptionMatches(PyExc_StopIteration))
+                PyErr_Clear();
+            else
+                return NULL;                  /* input raised an exception */
+        }
+        /* lz->active is consumed, try with the next iterable. */
+        Py_CLEAR(lz->active);
     }
-    item = PyIter_Next(lz->active);
-    if (item != NULL)
-        return item;
-    if (PyErr_Occurred()) {
-        if (PyErr_ExceptionMatches(PyExc_StopIteration))
-            PyErr_Clear();
-        else
-            return NULL;                                /* input raised an exception */
-    }
-    Py_CLEAR(lz->active);
-    return chain_next(lz);                      /* recurse and use next active */
+    /* Everything had been consumed already. */
+    return NULL;
 }
 
 PyDoc_STRVAR(chain_doc,
diff --git a/Modules/main.c b/Modules/main.c
index 44217c6..a6edf82 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -10,6 +10,9 @@
 #endif
 
 #if defined(MS_WINDOWS) || defined(__CYGWIN__)
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
 #endif
@@ -59,6 +62,8 @@
 /* Long usage message, split into parts < 512 bytes */
 static char *usage_1 = "\
 Options and arguments (and corresponding environment variables):\n\
+-b     : issue warnings about comparing bytearray with unicode\n\
+         (-bb: issue errors)\n\
 -B     : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x\n\
 -c cmd : program passed in as string (terminates option list)\n\
 -d     : debug output from parser; also PYTHONDEBUG=x\n\
diff --git a/Modules/makesetup b/Modules/makesetup
index 1bffcbf..db5c47e 100755
--- a/Modules/makesetup
+++ b/Modules/makesetup
@@ -261,7 +261,7 @@
 	for mod in $MODS
 	do
 		EXTDECLS="${EXTDECLS}extern void init$mod(void);$NL"
-		INITBITS="${INITBITS}	{\"$mod\", init$mod},$NL"
+		INITBITS="${INITBITS}    {\"$mod\", init$mod},$NL"
 	done
 
 
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index 01ed36b..67354a7 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -1188,7 +1188,7 @@
     if (! PyArg_ParseTuple(args, "dO:ldexp", &x, &oexp))
         return NULL;
 
-    if (PyLong_Check(oexp) || PyInt_Check(oexp)) {
+    if (_PyAnyInt_Check(oexp)) {
         /* on overflow, replace exponent with either LONG_MAX
            or LONG_MIN, depending on the sign. */
         exp = PyLong_AsLongAndOverflow(oexp, &overflow);
diff --git a/Modules/md5module.c b/Modules/md5module.c
index 103da14..dd90a22 100644
--- a/Modules/md5module.c
+++ b/Modules/md5module.c
@@ -236,7 +236,7 @@
 static PyTypeObject MD5type = {
     PyVarObject_HEAD_INIT(NULL, 0)
     "_md5.md5",                   /*tp_name*/
-    sizeof(md5object),            /*tp_size*/
+    sizeof(md5object),            /*tp_basicsize*/
     0,                            /*tp_itemsize*/
     /* methods */
     (destructor)md5_dealloc,  /*tp_dealloc*/
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index 0dc4805..02b31ca 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -784,10 +784,10 @@
     else if (PySlice_Check(item)) {
         Py_ssize_t start, stop, step, slicelen;
 
-        if (PySlice_GetIndicesEx((PySliceObject *)item, self->size,
-                         &start, &stop, &step, &slicelen) < 0) {
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0) {
             return NULL;
         }
+        slicelen = _PySlice_AdjustIndices(self->size, &start, &stop, step);
 
         if (slicelen <= 0)
             return PyString_FromStringAndSize("", 0);
@@ -818,24 +818,6 @@
     }
 }
 
-static PyObject *
-mmap_concat(mmap_object *self, PyObject *bb)
-{
-    CHECK_VALID(NULL);
-    PyErr_SetString(PyExc_SystemError,
-                    "mmaps don't support concatenation");
-    return NULL;
-}
-
-static PyObject *
-mmap_repeat(mmap_object *self, Py_ssize_t n)
-{
-    CHECK_VALID(NULL);
-    PyErr_SetString(PyExc_SystemError,
-                    "mmaps don't support repeat operation");
-    return NULL;
-}
-
 static int
 mmap_ass_slice(mmap_object *self, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *v)
 {
@@ -939,11 +921,10 @@
     else if (PySlice_Check(item)) {
         Py_ssize_t start, stop, step, slicelen;
 
-        if (PySlice_GetIndicesEx((PySliceObject *)item,
-                                 self->size, &start, &stop,
-                                 &step, &slicelen) < 0) {
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0) {
             return -1;
         }
+        slicelen = _PySlice_AdjustIndices(self->size, &start, &stop, step);
         if (value == NULL) {
             PyErr_SetString(PyExc_TypeError,
                 "mmap object doesn't support slice deletion");
@@ -994,9 +975,9 @@
 
 static PySequenceMethods mmap_as_sequence = {
     (lenfunc)mmap_length,                      /*sq_length*/
-    (binaryfunc)mmap_concat,                   /*sq_concat*/
-    (ssizeargfunc)mmap_repeat,                 /*sq_repeat*/
-    (ssizeargfunc)mmap_item,                           /*sq_item*/
+    0,                                         /*sq_concat*/
+    0,                                         /*sq_repeat*/
+    (ssizeargfunc)mmap_item,                   /*sq_item*/
     (ssizessizeargfunc)mmap_slice,             /*sq_slice*/
     (ssizeobjargproc)mmap_ass_item,            /*sq_ass_item*/
     (ssizessizeobjargproc)mmap_ass_slice,      /*sq_ass_slice*/
@@ -1045,7 +1026,7 @@
 static PyTypeObject mmap_object_type = {
     PyVarObject_HEAD_INIT(NULL, 0)
     "mmap.mmap",                                /* tp_name */
-    sizeof(mmap_object),                        /* tp_size */
+    sizeof(mmap_object),                        /* tp_basicsize */
     0,                                          /* tp_itemsize */
     /* methods */
     (destructor) mmap_object_dealloc,           /* tp_dealloc */
@@ -1115,7 +1096,7 @@
         return NULL;
     if (map_size < 0) {
         PyErr_SetString(PyExc_OverflowError,
-                        "memory mapped length must be postiive");
+                        "memory mapped length must be positive");
         return NULL;
     }
     if (offset < 0) {
@@ -1301,7 +1282,7 @@
 
     if (map_size < 0) {
         PyErr_SetString(PyExc_OverflowError,
-                        "memory mapped length must be postiive");
+                        "memory mapped length must be positive");
         return NULL;
     }
     if (offset < 0) {
diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c
index 284cc61..f833bb2 100644
--- a/Modules/ossaudiodev.c
+++ b/Modules/ossaudiodev.c
@@ -842,7 +842,7 @@
 static PyTypeObject OSSAudioType = {
     PyVarObject_HEAD_INIT(&PyType_Type, 0)
     "ossaudiodev.oss_audio_device", /*tp_name*/
-    sizeof(oss_audio_t),        /*tp_size*/
+    sizeof(oss_audio_t),        /*tp_basicsize*/
     0,                          /*tp_itemsize*/
     /* methods */
     (destructor)oss_dealloc,    /*tp_dealloc*/
@@ -856,7 +856,7 @@
 static PyTypeObject OSSMixerType = {
     PyVarObject_HEAD_INIT(&PyType_Type, 0)
     "ossaudiodev.oss_mixer_device", /*tp_name*/
-    sizeof(oss_mixer_t),            /*tp_size*/
+    sizeof(oss_mixer_t),            /*tp_basicsize*/
     0,                              /*tp_itemsize*/
     /* methods */
     (destructor)oss_mixer_dealloc,  /*tp_dealloc*/
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index 2434c67..fcc618d 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -121,10 +121,10 @@
         if (result != NULL) {
             (void) addelem(result, 0, PyInt_FromLong(TYPE(n)));
             (void) addelem(result, 1, PyString_FromString(STR(n)));
-            if (lineno == 1)
+            if (lineno)
                 (void) addelem(result, 2, PyInt_FromLong(n->n_lineno));
-            if (col_offset == 1)
-                (void) addelem(result, 3, PyInt_FromLong(n->n_col_offset));
+            if (col_offset)
+                (void) addelem(result, 2 + lineno, PyInt_FromLong(n->n_col_offset));
         }
         return (result);
     }
@@ -740,6 +740,9 @@
     Py_ssize_t i;
     int  err;
 
+    if (len < 0) {
+        return NULL;
+    }
     for (i = 1; i < len; ++i) {
         /* elem must always be a sequence, however simple */
         PyObject* elem = PySequence_GetItem(tuple, i);
@@ -766,7 +769,7 @@
             PyErr_SetObject(parser_error, err);
             Py_XDECREF(err);
             Py_XDECREF(elem);
-            return (0);
+            return NULL;
         }
         if (ISTERMINAL(type)) {
             Py_ssize_t len = PyObject_Size(elem);
@@ -774,40 +777,53 @@
 
             if ((len != 2) && (len != 3)) {
                 err_string("terminal nodes must have 2 or 3 entries");
-                return 0;
+                Py_DECREF(elem);
+                return NULL;
             }
             temp = PySequence_GetItem(elem, 1);
-            if (temp == NULL)
-                return 0;
+            if (temp == NULL) {
+                Py_DECREF(elem);
+                return NULL;
+            }
             if (!PyString_Check(temp)) {
                 PyErr_Format(parser_error,
                              "second item in terminal node must be a string,"
                              " found %s",
                              Py_TYPE(temp)->tp_name);
                 Py_DECREF(temp);
-                return 0;
+                Py_DECREF(elem);
+                return NULL;
             }
             if (len == 3) {
                 PyObject *o = PySequence_GetItem(elem, 2);
-                if (o != NULL) {
-                    if (PyInt_Check(o))
-                        *line_num = PyInt_AS_LONG(o);
-                    else {
-                        PyErr_Format(parser_error,
-                                     "third item in terminal node must be an"
-                                     " integer, found %s",
-                                     Py_TYPE(temp)->tp_name);
-                        Py_DECREF(o);
-                        Py_DECREF(temp);
-                        return 0;
-                    }
-                    Py_DECREF(o);
+                if (o == NULL) {
+                    Py_DECREF(temp);
+                    Py_DECREF(elem);
+                    return NULL;
                 }
+                if (PyInt_Check(o))
+                    *line_num = PyInt_AS_LONG(o);
+                else {
+                    PyErr_Format(parser_error,
+                                 "third item in terminal node must be an"
+                                 " integer, found %s",
+                                 Py_TYPE(temp)->tp_name);
+                    Py_DECREF(o);
+                    Py_DECREF(temp);
+                    Py_DECREF(elem);
+                    return NULL;
+                }
+                Py_DECREF(o);
             }
             len = PyString_GET_SIZE(temp) + 1;
             strn = (char *)PyObject_MALLOC(len);
-            if (strn != NULL)
-                (void) memcpy(strn, PyString_AS_STRING(temp), len);
+            if (strn == NULL) {
+                Py_DECREF(temp);
+                Py_DECREF(elem);
+                PyErr_NoMemory();
+                return NULL;
+            }
+            (void) memcpy(strn, PyString_AS_STRING(temp), len);
             Py_DECREF(temp);
         }
         else if (!ISNONTERMINAL(type)) {
@@ -815,18 +831,21 @@
              *  It has to be one or the other; this is an error.
              *  Raise an exception.
              */
-            PyObject *err = Py_BuildValue("os", elem, "unknown node type.");
+            PyObject *err = Py_BuildValue("Os", elem, "unknown node type.");
             PyErr_SetObject(parser_error, err);
             Py_XDECREF(err);
-            Py_XDECREF(elem);
-            return (0);
+            Py_DECREF(elem);
+            return NULL;
         }
         err = PyNode_AddChild(root, type, strn, *line_num, 0);
         if (err == E_NOMEM) {
+            Py_DECREF(elem);
             PyObject_FREE(strn);
-            return (node *) PyErr_NoMemory();
+            PyErr_NoMemory();
+            return NULL;
         }
         if (err == E_OVERFLOW) {
+            Py_DECREF(elem);
             PyObject_FREE(strn);
             PyErr_SetString(PyExc_ValueError,
                             "unsupported number of child nodes");
@@ -837,14 +856,14 @@
             node* new_child = CHILD(root, i - 1);
 
             if (new_child != build_node_children(elem, new_child, line_num)) {
-                Py_XDECREF(elem);
-                return (0);
+                Py_DECREF(elem);
+                return NULL;
             }
         }
         else if (type == NEWLINE) {     /* It's true:  we increment the     */
             ++(*line_num);              /* line number *after* the newline! */
         }
-        Py_XDECREF(elem);
+        Py_DECREF(elem);
     }
     return root;
 }
@@ -879,8 +898,23 @@
 
         if (num == encoding_decl) {
             encoding = PySequence_GetItem(tuple, 2);
+            if (encoding == NULL) {
+                PyErr_SetString(parser_error, "missed encoding");
+                return NULL;
+            }
+            if (!PyString_Check(encoding)) {
+                PyErr_Format(parser_error,
+                             "encoding must be a string, found %.200s",
+                             Py_TYPE(encoding)->tp_name);
+                Py_DECREF(encoding);
+                return NULL;
+            }
             /* tuple isn't borrowed anymore here, need to DECREF */
             tuple = PySequence_GetSlice(tuple, 0, 2);
+            if (tuple == NULL) {
+                Py_DECREF(encoding);
+                return NULL;
+            }
         }
         res = PyNode_New(num);
         if (res != NULL) {
@@ -892,19 +926,27 @@
                 Py_ssize_t len;
                 len = PyString_GET_SIZE(encoding) + 1;
                 res->n_str = (char *)PyObject_MALLOC(len);
-                if (res->n_str != NULL)
-                    (void) memcpy(res->n_str, PyString_AS_STRING(encoding), len);
-                Py_DECREF(encoding);
-                Py_DECREF(tuple);
+                if (res->n_str == NULL) {
+                    PyNode_Free(res);
+                    Py_DECREF(encoding);
+                    Py_DECREF(tuple);
+                    PyErr_NoMemory();
+                    return NULL;
+                }
+                (void) memcpy(res->n_str, PyString_AS_STRING(encoding), len);
             }
         }
+        if (encoding != NULL) {
+            Py_DECREF(encoding);
+            Py_DECREF(tuple);
+        }
     }
     else {
         /*  The tuple is illegal -- if the number is neither TERMINAL nor
          *  NONTERMINAL, we can't use it.  Not sure the implementation
          *  allows this condition, but the API doesn't preclude it.
          */
-        PyObject *err = Py_BuildValue("os", tuple,
+        PyObject *err = Py_BuildValue("Os", tuple,
                                       "Illegal component tuple.");
         PyErr_SetObject(parser_error, err);
         Py_XDECREF(err);
@@ -3371,7 +3413,6 @@
             result = Py_BuildValue("O(O)", pickle_constructor, tuple);
             Py_DECREF(tuple);
         }
-        Py_DECREF(empty_dict);
         Py_DECREF(newargs);
     }
   finally:
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index e73805f..7a1a694 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -65,6 +65,11 @@
 #include "osdefs.h"
 #endif
 
+#ifdef HAVE_SYS_SYSMACROS_H
+/* GNU C Library: major(), minor(), makedev() */
+#include <sys/sysmacros.h>
+#endif
+
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif /* HAVE_SYS_TYPES_H */
@@ -979,6 +984,7 @@
     wchar_t _new_path[MAX_PATH+1], *new_path = _new_path;
     int result;
     wchar_t env[4] = L"=x:";
+    int is_unc_like_path;
 
     if(!SetCurrentDirectoryW(path))
         return FALSE;
@@ -997,15 +1003,15 @@
             return FALSE;
         }
     }
-    if (wcsncmp(new_path, L"\\\\", 2) == 0 ||
-        wcsncmp(new_path, L"//", 2) == 0)
-        /* UNC path, nothing to do. */
-        return TRUE;
-    env[1] = new_path[0];
-    result = SetEnvironmentVariableW(env, new_path);
+    is_unc_like_path = (wcsncmp(new_path, L"\\\\", 2) == 0 ||
+                        wcsncmp(new_path, L"//", 2) == 0);
+    if (!is_unc_like_path) {
+        env[1] = new_path[0];
+        result = SetEnvironmentVariableW(env, new_path);
+    }
     if (new_path != _new_path)
         free(new_path);
-    return result;
+    return result ? TRUE : FALSE;
 }
 #endif
 
@@ -2380,7 +2386,7 @@
     if (len > 0) {
         char ch = namebuf[len-1];
         if (ch != SEP && ch != ALTSEP && ch != ':')
-            namebuf[len++] = '/';
+            namebuf[len++] = SEP;
         strcpy(namebuf + len, "*.*");
     }
 
@@ -3315,6 +3321,12 @@
         {
             goto fail_2;
         }
+        /* Search from index 1 because on Windows starting '=' is allowed for
+           defining hidden environment variables. */
+        if (*k == '\0' || strchr(k + 1, '=') != NULL) {
+            PyErr_SetString(PyExc_ValueError, "illegal environment variable name");
+            goto fail_2;
+        }
 
 #if defined(PYOS_OS2)
         /* Omit Pseudo-Env Vars that Would Confuse Programs if Passed On */
@@ -3550,6 +3562,12 @@
         {
             goto fail_2;
         }
+        /* Search from index 1 because on Windows starting '=' is allowed for
+           defining hidden environment variables. */
+        if (*k == '\0' || strchr(k + 1, '=') != NULL) {
+            PyErr_SetString(PyExc_ValueError, "illegal environment variable name");
+            goto fail_2;
+        }
         len = PyString_Size(key) + PyString_Size(val) + 2;
         p = PyMem_NEW(char, len);
         if (p == NULL) {
@@ -3783,6 +3801,12 @@
         {
             goto fail_2;
         }
+        /* Search from index 1 because on Windows starting '=' is allowed for
+           defining hidden environment variables. */
+        if (*k == '\0' || strchr(k + 1, '=') != NULL) {
+            PyErr_SetString(PyExc_ValueError, "illegal environment variable name");
+            goto fail_2;
+        }
         len = PyString_Size(key) + PyString_Size(val) + 2;
         p = PyMem_NEW(char, len);
         if (p == NULL) {
@@ -3913,7 +3937,7 @@
 #ifdef HAVE_STROPTS_H
 #include <stropts.h>
 #endif
-#endif /* defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) || defined(HAVE_DEV_PTMX */
+#endif /* defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) || defined(HAVE_DEV_PTMX) */
 
 #if defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) || defined(HAVE_DEV_PTMX)
 PyDoc_STRVAR(posix_openpty__doc__,
@@ -6077,7 +6101,7 @@
 static PyObject *
 posix_setgroups(PyObject *self, PyObject *groups)
 {
-    int i, len;
+    Py_ssize_t i, len;
     gid_t grouplist[MAX_GROUPS];
 
     if (!PySequence_Check(groups)) {
@@ -6085,6 +6109,9 @@
         return NULL;
     }
     len = PySequence_Size(groups);
+    if (len < 0) {
+        return NULL;
+    }
     if (len > MAX_GROUPS) {
         PyErr_SetString(PyExc_ValueError, "too many groups");
         return NULL;
@@ -6094,7 +6121,7 @@
         elem = PySequence_GetItem(groups, i);
         if (!elem)
             return NULL;
-        if (!PyInt_Check(elem) && !PyLong_Check(elem)) {
+        if (!_PyAnyInt_Check(elem)) {
             PyErr_SetString(PyExc_TypeError,
                             "groups must be integers");
             Py_DECREF(elem);
@@ -7176,6 +7203,13 @@
     } else {
 #endif
 
+    /* Search from index 1 because on Windows starting '=' is allowed for
+       defining hidden environment variables. */
+    if (*s1 == '\0' || strchr(s1 + 1, '=') != NULL) {
+        PyErr_SetString(PyExc_ValueError, "illegal environment variable name");
+        return NULL;
+    }
+
     /* XXX This can leak memory -- not easy to fix :-( */
     len = strlen(s1) + strlen(s2) + 2;
 #ifdef MS_WINDOWS
diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c
index a95c388..2b4d312 100644
--- a/Modules/pyexpat.c
+++ b/Modules/pyexpat.c
@@ -1312,10 +1312,14 @@
     else {
         self->itself = XML_ParserCreate(encoding);
     }
-#if ((XML_MAJOR_VERSION >= 2) && (XML_MINOR_VERSION >= 1)) || defined(XML_HAS_SET_HASH_SALT)
-    /* This feature was added upstream in libexpat 2.1.0.  Our expat copy
-     * has a backport of this feature where we also define XML_HAS_SET_HASH_SALT
-     * to indicate that we can still use it. */
+    if (self->itself == NULL) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "XML_ParserCreate failed");
+        Py_DECREF(self);
+        return NULL;
+    }
+#if XML_COMBINED_VERSION >= 20100
+    /* This feature was added upstream in libexpat 2.1.0. */
     XML_SetHashSalt(self->itself,
                     (unsigned long)_Py_HashSecret.prefix);
 #endif
@@ -1326,12 +1330,6 @@
 #else
     PyObject_GC_Init(self);
 #endif
-    if (self->itself == NULL) {
-        PyErr_SetString(PyExc_RuntimeError,
-                        "XML_ParserCreate failed");
-        Py_DECREF(self);
-        return NULL;
-    }
     XML_SetUserData(self->itself, (void *)self);
 #ifdef Py_USING_UNICODE
     XML_SetUnknownEncodingHandler(self->itself,
diff --git a/Modules/readline.c b/Modules/readline.c
index ad5903c..1e10dd7 100644
--- a/Modules/readline.c
+++ b/Modules/readline.c
@@ -1161,15 +1161,17 @@
     if (n > 0) {
         const char *line;
         int length = _py_get_history_length();
-        if (length > 0)
+        if (length > 0) {
+            HIST_ENTRY *hist_ent;
 #ifdef __APPLE__
             if (using_libedit_emulation) {
                 /* handle older 0-based or newer 1-based indexing */
-                line = history_get(length + libedit_history_start - 1)->line;
+                hist_ent = history_get(length + libedit_history_start - 1);
             } else
 #endif /* __APPLE__ */
-            line = history_get(length)->line;
-        else
+                hist_ent = history_get(length);
+            line = hist_ent ? hist_ent->line : "";
+        } else
             line = "";
         if (strcmp(p, line))
             add_history(p);
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index 6ea308a..1dec6a1 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -289,9 +289,9 @@
         else
             ret = PyTuple_Pack(3, ifdlist, ofdlist, efdlist);
 
-        Py_DECREF(ifdlist);
-        Py_DECREF(ofdlist);
-        Py_DECREF(efdlist);
+        Py_XDECREF(ifdlist);
+        Py_XDECREF(ofdlist);
+        Py_XDECREF(efdlist);
     }
 
   finally:
@@ -530,6 +530,17 @@
             return NULL;
     }
 
+    /* On some OSes, typically BSD-based ones, the timeout parameter of the
+       poll() syscall, when negative, must be exactly INFTIM, where defined,
+       or -1. See issue 31334. */
+    if (timeout < 0) {
+#ifdef INFTIM
+        timeout = INFTIM;
+#else
+        timeout = -1;
+#endif
+    }
+
     /* Avoid concurrent poll() invocation, issue 8865 */
     if (self->poll_running) {
         PyErr_SetString(PyExc_RuntimeError,
@@ -1210,43 +1221,76 @@
 
 #if (SIZEOF_UINTPTR_T != SIZEOF_VOID_P)
 #   error uintptr_t does not match void *!
-#elif (SIZEOF_UINTPTR_T == SIZEOF_LONG_LONG)
+#elif defined(HAVE_LONG_LONG) && (SIZEOF_UINTPTR_T == SIZEOF_LONG_LONG)
 #   define T_UINTPTRT         T_ULONGLONG
 #   define T_INTPTRT          T_LONGLONG
-#   define PyLong_AsUintptr_t PyLong_AsUnsignedLongLong
 #   define UINTPTRT_FMT_UNIT  "K"
 #   define INTPTRT_FMT_UNIT   "L"
 #elif (SIZEOF_UINTPTR_T == SIZEOF_LONG)
 #   define T_UINTPTRT         T_ULONG
 #   define T_INTPTRT          T_LONG
-#   define PyLong_AsUintptr_t PyLong_AsUnsignedLong
 #   define UINTPTRT_FMT_UNIT  "k"
 #   define INTPTRT_FMT_UNIT   "l"
 #elif (SIZEOF_UINTPTR_T == SIZEOF_INT)
 #   define T_UINTPTRT         T_UINT
 #   define T_INTPTRT          T_INT
-#   define PyLong_AsUintptr_t PyLong_AsUnsignedLong
 #   define UINTPTRT_FMT_UNIT  "I"
 #   define INTPTRT_FMT_UNIT   "i"
 #else
 #   error uintptr_t does not match int, long, or long long!
 #endif
 
+#if defined(HAVE_LONG_LONG) && SIZEOF_LONG_LONG == 8
+#   define T_INT64          T_LONGLONG
+#   define INT64_FMT_UNIT   "L"
+#elif SIZEOF_LONG == 8
+#   define T_INT64          T_LONG
+#   define INT64_FMT_UNIT   "l"
+#elif SIZEOF_INT == 8
+#   define T_INT64          T_INT
+#   define INT64_FMT_UNIT   "i"
+#else
+#   define INT64_FMT_UNIT   "_"
+#endif
+
+#if defined(HAVE_LONG_LONG) && SIZEOF_LONG_LONG == 4
+#   define T_UINT32         T_ULONGLONG
+#   define UINT32_FMT_UNIT  "K"
+#elif SIZEOF_LONG == 4
+#   define T_UINT32         T_ULONG
+#   define UINT32_FMT_UNIT  "k"
+#elif SIZEOF_INT == 4
+#   define T_UINT32         T_UINT
+#   define UINT32_FMT_UNIT  "I"
+#else
+#   define UINT32_FMT_UNIT  "_"
+#endif
+
 /*
  * kevent is not standard and its members vary across BSDs.
  */
-#if !defined(__OpenBSD__)
-#   define IDENT_TYPE	T_UINTPTRT
-#   define IDENT_CAST	Py_intptr_t
-#   define DATA_TYPE	T_INTPTRT
-#   define DATA_FMT_UNIT INTPTRT_FMT_UNIT
-#   define IDENT_AsType	PyLong_AsUintptr_t
+#ifdef __NetBSD__
+#   define FILTER_TYPE      T_UINT32
+#   define FILTER_FMT_UNIT  UINT32_FMT_UNIT
+#   define FLAGS_TYPE       T_UINT32
+#   define FLAGS_FMT_UNIT   UINT32_FMT_UNIT
+#   define FFLAGS_TYPE      T_UINT32
+#   define FFLAGS_FMT_UNIT  UINT32_FMT_UNIT
 #else
-#   define IDENT_TYPE	T_UINT
-#   define IDENT_CAST	int
-#   define DATA_TYPE	T_INT
-#   define DATA_FMT_UNIT "i"
-#   define IDENT_AsType	PyLong_AsUnsignedLong
+#   define FILTER_TYPE      T_SHORT
+#   define FILTER_FMT_UNIT  "h"
+#   define FLAGS_TYPE       T_USHORT
+#   define FLAGS_FMT_UNIT   "H"
+#   define FFLAGS_TYPE      T_UINT
+#   define FFLAGS_FMT_UNIT  "I"
+#endif
+
+#if defined(__NetBSD__) || defined(__OpenBSD__)
+#   define DATA_TYPE        T_INT64
+#   define DATA_FMT_UNIT    INT64_FMT_UNIT
+#else
+#   define DATA_TYPE        T_INTPTRT
+#   define DATA_FMT_UNIT    INTPTRT_FMT_UNIT
 #endif
 
 /* Unfortunately, we can't store python objects in udata, because
@@ -1256,9 +1300,9 @@
 
 #define KQ_OFF(x) offsetof(kqueue_event_Object, x)
 static struct PyMemberDef kqueue_event_members[] = {
-    {"ident",           IDENT_TYPE,     KQ_OFF(e.ident)},
-    {"filter",          T_SHORT,        KQ_OFF(e.filter)},
-    {"flags",           T_USHORT,       KQ_OFF(e.flags)},
+    {"ident",           T_UINTPTRT,     KQ_OFF(e.ident)},
+    {"filter",          FILTER_TYPE,    KQ_OFF(e.filter)},
+    {"flags",           FLAGS_TYPE,     KQ_OFF(e.flags)},
     {"fflags",          T_UINT,         KQ_OFF(e.fflags)},
     {"data",            DATA_TYPE,      KQ_OFF(e.data)},
     {"udata",           T_UINTPTRT,     KQ_OFF(e.udata)},
@@ -1273,10 +1317,17 @@
     char buf[1024];
     PyOS_snprintf(
         buf, sizeof(buf),
+#ifdef HAVE_LONG_LONG
         "<select.kevent ident=%zu filter=%d flags=0x%x fflags=0x%x "
-        "data=0x%zd udata=%p>",
-        (size_t)(s->e.ident), s->e.filter, s->e.flags,
-        s->e.fflags, (Py_ssize_t)(s->e.data), s->e.udata);
+        "data=0x%llx udata=%p>",
+        (size_t)(s->e.ident), (int)s->e.filter, (unsigned int)s->e.flags,
+        (unsigned int)s->e.fflags, (long long)(s->e.data), (void *)s->e.udata);
+#else
+        "<select.kevent ident=%zu filter=%d flags=0x%x fflags=0x%x "
+        "data=0x%llx udata=%p>",
+        (size_t)(s->e.ident), (int)s->e.filter, (unsigned int)s->e.flags,
+        (unsigned int)s->e.fflags, (long)(s->e.data), (void *)s->e.udata);
+#endif
     return PyString_FromString(buf);
 }
 
@@ -1286,7 +1337,9 @@
     PyObject *pfd;
     static char *kwlist[] = {"ident", "filter", "flags", "fflags",
                              "data", "udata", NULL};
-    static char *fmt = "O|hHI" DATA_FMT_UNIT UINTPTRT_FMT_UNIT ":kevent";
+    static const char fmt[] = "O|"
+                FILTER_FMT_UNIT FLAGS_FMT_UNIT FFLAGS_FMT_UNIT DATA_FMT_UNIT
+                UINTPTRT_FMT_UNIT ":kevent";
 
     EV_SET(&(self->e), 0, EVFILT_READ, EV_ADD, 0, 0, 0); /* defaults */
 
@@ -1296,12 +1349,15 @@
         return -1;
     }
 
-    if (PyLong_Check(pfd)
-#if IDENT_TYPE == T_UINT
-	&& PyLong_AsUnsignedLong(pfd) <= UINT_MAX
+    if (PyInt_Check(pfd)) {
+        self->e.ident = PyInt_AsUnsignedLongMask(pfd);
+    }
+    else if (PyLong_Check(pfd)) {
+#if defined(HAVE_LONG_LONG) && (SIZEOF_UINTPTR_T == SIZEOF_LONG_LONG)
+        self->e.ident = PyLong_AsUnsignedLongLongMask(pfd);
+#else
+        self->e.ident = PyLong_AsUnsignedLongMask(pfd);
 #endif
-    ) {
-        self->e.ident = IDENT_AsType(pfd);
     }
     else {
         self->e.ident = PyObject_AsFileDescriptor(pfd);
@@ -1316,28 +1372,22 @@
 kqueue_event_richcompare(kqueue_event_Object *s, kqueue_event_Object *o,
                          int op)
 {
-    Py_intptr_t result = 0;
+    int result;
 
     if (!kqueue_event_Check(o)) {
-        if (op == Py_EQ || op == Py_NE) {
-            PyObject *res = op == Py_EQ ? Py_False : Py_True;
-            Py_INCREF(res);
-            return res;
-        }
-        PyErr_Format(PyExc_TypeError,
-            "can't compare %.200s to %.200s",
-            Py_TYPE(s)->tp_name, Py_TYPE(o)->tp_name);
-        return NULL;
+        Py_INCREF(Py_NotImplemented);
+        return Py_NotImplemented;
     }
-    if (((result = (IDENT_CAST)(s->e.ident - o->e.ident)) == 0) &&
-        ((result = s->e.filter - o->e.filter) == 0) &&
-        ((result = s->e.flags - o->e.flags) == 0) &&
-        ((result = (int)(s->e.fflags - o->e.fflags)) == 0) &&
-        ((result = s->e.data - o->e.data) == 0) &&
-        ((result = s->e.udata - o->e.udata) == 0)
-       ) {
-        result = 0;
-    }
+
+#define CMP(a, b) ((a) != (b)) ? ((a) < (b) ? -1 : 1)
+    result = CMP(s->e.ident, o->e.ident)
+           : CMP(s->e.filter, o->e.filter)
+           : CMP(s->e.flags, o->e.flags)
+           : CMP(s->e.fflags, o->e.fflags)
+           : CMP(s->e.data, o->e.data)
+           : CMP((Py_intptr_t)s->e.udata, (Py_intptr_t)o->e.udata)
+           : 0;
+#undef CMP
 
     switch (op) {
         case Py_EQ:
@@ -1537,7 +1587,7 @@
     int i = 0;
     PyObject *otimeout = NULL;
     PyObject *ch = NULL;
-    PyObject *it = NULL, *ei = NULL;
+    PyObject *seq = NULL, *ei = NULL;
     PyObject *result = NULL;
     struct kevent *evl = NULL;
     struct kevent *chl = NULL;
@@ -1593,37 +1643,34 @@
     }
 
     if (ch != NULL && ch != Py_None) {
-        it = PyObject_GetIter(ch);
-        if (it == NULL) {
-            PyErr_SetString(PyExc_TypeError,
-                            "changelist is not iterable");
+        seq = PySequence_Fast(ch, "changelist is not iterable");
+        if (seq == NULL) {
             return NULL;
         }
-        nchanges = PyObject_Size(ch);
-        if (nchanges < 0) {
+        if (PySequence_Fast_GET_SIZE(seq) > INT_MAX) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "changelist is too long");
             goto error;
         }
+        nchanges = (int)PySequence_Fast_GET_SIZE(seq);
 
         chl = PyMem_New(struct kevent, nchanges);
         if (chl == NULL) {
             PyErr_NoMemory();
             goto error;
         }
-        i = 0;
-        while ((ei = PyIter_Next(it)) != NULL) {
+        for (i = 0; i < nchanges; ++i) {
+            ei = PySequence_Fast_GET_ITEM(seq, i);
             if (!kqueue_event_Check(ei)) {
-                Py_DECREF(ei);
                 PyErr_SetString(PyExc_TypeError,
                     "changelist must be an iterable of "
                     "select.kevent objects");
                 goto error;
-            } else {
-                chl[i++] = ((kqueue_event_Object *)ei)->e;
             }
-            Py_DECREF(ei);
+            chl[i] = ((kqueue_event_Object *)ei)->e;
         }
+        Py_CLEAR(seq);
     }
-    Py_CLEAR(it);
 
     /* event list */
     if (nevents) {
@@ -1667,7 +1714,7 @@
     PyMem_Free(chl);
     PyMem_Free(evl);
     Py_XDECREF(result);
-    Py_XDECREF(it);
+    Py_XDECREF(seq);
     return NULL;
 }
 
@@ -1675,7 +1722,7 @@
 "control(changelist, max_events[, timeout=None]) -> eventlist\n\
 \n\
 Calls the kernel kevent function.\n\
-- changelist must be a list of kevent objects describing the changes\n\
+- changelist must be an iterable of kevent objects describing the changes\n\
   to be made to the kernel's watch list or None.\n\
 - max_events lets you specify the maximum number of events that the\n\
   kernel will return.\n\
diff --git a/Modules/sha256module.c b/Modules/sha256module.c
index 8f18faa..76e5220 100644
--- a/Modules/sha256module.c
+++ b/Modules/sha256module.c
@@ -537,7 +537,7 @@
 static PyTypeObject SHA224type = {
     PyVarObject_HEAD_INIT(NULL, 0)
     "_sha256.sha224",   /*tp_name*/
-    sizeof(SHAobject),  /*tp_size*/
+    sizeof(SHAobject),  /*tp_basicsize*/
     0,                  /*tp_itemsize*/
     /* methods */
     SHA_dealloc,        /*tp_dealloc*/
@@ -571,7 +571,7 @@
 static PyTypeObject SHA256type = {
     PyVarObject_HEAD_INIT(NULL, 0)
     "_sha256.sha256",   /*tp_name*/
-    sizeof(SHAobject),  /*tp_size*/
+    sizeof(SHAobject),  /*tp_basicsize*/
     0,                  /*tp_itemsize*/
     /* methods */
     SHA_dealloc,        /*tp_dealloc*/
diff --git a/Modules/sha512module.c b/Modules/sha512module.c
index abc9021..e3733e0 100644
--- a/Modules/sha512module.c
+++ b/Modules/sha512module.c
@@ -603,7 +603,7 @@
 static PyTypeObject SHA384type = {
     PyVarObject_HEAD_INIT(NULL, 0)
     "_sha512.sha384",   /*tp_name*/
-    sizeof(SHAobject),  /*tp_size*/
+    sizeof(SHAobject),  /*tp_basicsize*/
     0,                  /*tp_itemsize*/
     /* methods */
     SHA512_dealloc,     /*tp_dealloc*/
@@ -637,7 +637,7 @@
 static PyTypeObject SHA512type = {
     PyVarObject_HEAD_INIT(NULL, 0)
     "_sha512.sha512",   /*tp_name*/
-    sizeof(SHAobject),  /*tp_size*/
+    sizeof(SHAobject),  /*tp_basicsize*/
     0,                  /*tp_itemsize*/
     /* methods */
     SHA512_dealloc,     /*tp_dealloc*/
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 1d7ba4b..8628f7a 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -95,13 +95,6 @@
 static PyObject *IgnoreHandler;
 static PyObject *IntHandler;
 
-/* On Solaris 8, gcc will produce a warning that the function
-   declaration is not a prototype. This is caused by the definition of
-   SIG_DFL as (void (*)())0; the correct declaration would have been
-   (void (*)(int))0. */
-
-static PyOS_sighandler_t old_siginthandler = SIG_DFL;
-
 #ifdef HAVE_GETITIMER
 static PyObject *ItimerError;
 
@@ -111,6 +104,10 @@
 {
     tv->tv_sec = floor(d);
     tv->tv_usec = fmod(d, 1.0) * 1000000.0;
+    /* Don't disable the timer if the computation above rounds down to zero. */
+    if (d > 0.0 && tv->tv_sec == 0 && tv->tv_usec == 0) {
+        tv->tv_usec = 1;
+    }
 }
 
 Py_LOCAL_INLINE(double)
@@ -313,12 +310,15 @@
     }
     else
         func = signal_handler;
+    /* Check for pending signals before changing signal handler */
+    if (PyErr_CheckSignals()) {
+        return NULL;
+    }
     if (PyOS_setsig(sig_num, func) == SIG_ERR) {
         PyErr_SetFromErrno(PyExc_RuntimeError);
         return NULL;
     }
     old_handler = Handlers[sig_num].func;
-    Handlers[sig_num].tripped = 0;
     Py_INCREF(obj);
     Handlers[sig_num].func = obj;
     if (old_handler != NULL)
@@ -622,7 +622,7 @@
         /* Install default int handler */
         Py_INCREF(IntHandler);
         Py_SETREF(Handlers[SIGINT].func, IntHandler);
-        old_siginthandler = PyOS_setsig(SIGINT, signal_handler);
+        PyOS_setsig(SIGINT, signal_handler);
     }
 
 #ifdef SIGHUP
@@ -865,14 +865,11 @@
     int i;
     PyObject *func;
 
-    PyOS_setsig(SIGINT, old_siginthandler);
-    old_siginthandler = SIG_DFL;
-
     for (i = 1; i < NSIG; i++) {
         func = Handlers[i].func;
         Handlers[i].tripped = 0;
         Handlers[i].func = NULL;
-        if (i != SIGINT && func != NULL && func != Py_None &&
+        if (func != NULL && func != Py_None &&
             func != DefaultHandler && func != IgnoreHandler)
             PyOS_setsig(i, SIG_DFL);
         Py_XDECREF(func);
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 3e3c05f..634c1b9 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -1005,7 +1005,7 @@
    an error occurred. */
 
 static int
-setbdaddr(char *name, bdaddr_t *bdaddr)
+setbdaddr(const char *name, bdaddr_t *bdaddr)
 {
     unsigned int b0, b1, b2, b3, b4, b5;
     char ch;
@@ -1062,7 +1062,7 @@
 #ifdef __BEOS__
     /* XXX: BeOS version of accept() doesn't set family correctly */
     addr->sa_family = AF_INET;
-#endif
+#endif /* __BEOS__ */
 
     switch (addr->sa_family) {
 
@@ -1123,7 +1123,7 @@
         }
         return ret;
     }
-#endif
+#endif /* ENABLE_IPV6 */
 
 #ifdef USE_BLUETOOTH
     case AF_BLUETOOTH:
@@ -1162,11 +1162,11 @@
             struct sockaddr_hci *a = (struct sockaddr_hci *) addr;
 #if defined(__NetBSD__) || defined(__DragonFly__)
             return makebdaddr(&_BT_HCI_MEMB(a, bdaddr));
-#else
+#else /* __NetBSD__ || __DragonFly__ */
             PyObject *ret = NULL;
             ret = Py_BuildValue("i", _BT_HCI_MEMB(a, dev));
             return ret;
-#endif
+#endif /* !(__NetBSD__ || __DragonFly__) */
         }
 
 #if !defined(__FreeBSD__)
@@ -1175,20 +1175,20 @@
             struct sockaddr_sco *a = (struct sockaddr_sco *) addr;
             return makebdaddr(&_BT_SCO_MEMB(a, bdaddr));
         }
-#endif
+#endif /* !__FreeBSD__ */
 
         default:
             PyErr_SetString(PyExc_ValueError,
                             "Unknown Bluetooth protocol");
             return NULL;
         }
-#endif
+#endif /* USE_BLUETOOTH */
 
 #if defined(HAVE_NETPACKET_PACKET_H) && defined(SIOCGIFNAME)
     case AF_PACKET:
     {
         struct sockaddr_ll *a = (struct sockaddr_ll *)addr;
-        char *ifname = "";
+        const char *ifname = "";
         struct ifreq ifr;
         /* need to look up interface name give index */
         if (a->sll_ifindex) {
@@ -1204,7 +1204,7 @@
                              a->sll_addr,
                              a->sll_halen);
     }
-#endif
+#endif /* HAVE_NETPACKET_PACKET_H && SIOCGIFNAME */
 
 #ifdef HAVE_LINUX_TIPC_H
     case AF_TIPC:
@@ -1237,7 +1237,7 @@
             return NULL;
         }
     }
-#endif
+#endif /* HAVE_LINUX_TIPC_H */
 
     /* More cases here... */
 
@@ -1298,9 +1298,9 @@
         memcpy(addr->sun_path, path, len);
 #if defined(PYOS_OS2)
         *len_ret = sizeof(*addr);
-#else
+#else /* PYOS_OS2 */
         *len_ret = len + offsetof(struct sockaddr_un, sun_path);
-#endif
+#endif /* !PYOS_OS2 */
         return 1;
     }
 #endif /* AF_UNIX */
@@ -1327,7 +1327,7 @@
         *len_ret = sizeof(*addr);
         return 1;
     }
-#endif
+#endif /* AF_NETLINK */
 
     case AF_INET:
     {
@@ -1409,7 +1409,7 @@
         *len_ret = sizeof *addr;
         return 1;
     }
-#endif
+#endif /* ENABLE_IPV6 */
 
 #ifdef USE_BLUETOOTH
     case AF_BLUETOOTH:
@@ -1418,7 +1418,7 @@
         case BTPROTO_L2CAP:
         {
             struct sockaddr_l2 *addr;
-            char *straddr;
+            const char *straddr;
 
             addr = (struct sockaddr_l2 *)addr_ret;
             memset(addr, 0, sizeof(struct sockaddr_l2));
@@ -1438,7 +1438,7 @@
         case BTPROTO_RFCOMM:
         {
             struct sockaddr_rc *addr;
-            char *straddr;
+            const char *straddr;
 
             addr = (struct sockaddr_rc *)addr_ret;
             _BT_RC_MEMB(addr, family) = AF_BLUETOOTH;
@@ -1458,24 +1458,24 @@
         {
             struct sockaddr_hci *addr = (struct sockaddr_hci *)addr_ret;
 #if defined(__NetBSD__) || defined(__DragonFly__)
-			char *straddr = PyBytes_AS_STRING(args);
-
-			_BT_HCI_MEMB(addr, family) = AF_BLUETOOTH;
-            if (straddr == NULL) {
-                PyErr_SetString(socket_error, "getsockaddrarg: "
+            const char *straddr;
+            _BT_HCI_MEMB(addr, family) = AF_BLUETOOTH;
+            if (!PyBytes_Check(args)) {
+                PyErr_SetString(PyExc_OSError, "getsockaddrarg: "
                     "wrong format");
                 return 0;
             }
+            straddr = PyBytes_AS_STRING(args);
             if (setbdaddr(straddr, &_BT_HCI_MEMB(addr, bdaddr)) < 0)
                 return 0;
-#else
+#else  /* __NetBSD__ || __DragonFly__ */
             _BT_HCI_MEMB(addr, family) = AF_BLUETOOTH;
             if (!PyArg_ParseTuple(args, "i", &_BT_HCI_MEMB(addr, dev))) {
                 PyErr_SetString(socket_error, "getsockaddrarg: "
                                 "wrong format");
                 return 0;
             }
-#endif
+#endif /* !(__NetBSD__ || __DragonFly__) */
             *len_ret = sizeof *addr;
             return 1;
         }
@@ -1483,7 +1483,7 @@
         case BTPROTO_SCO:
         {
             struct sockaddr_sco *addr;
-            char *straddr;
+            const char *straddr;
 
             addr = (struct sockaddr_sco *)addr_ret;
             _BT_SCO_MEMB(addr, family) = AF_BLUETOOTH;
@@ -1499,20 +1499,20 @@
             *len_ret = sizeof *addr;
             return 1;
         }
-#endif
+#endif /* !__FreeBSD__ */
         default:
             PyErr_SetString(socket_error, "getsockaddrarg: unknown Bluetooth protocol");
             return 0;
         }
     }
-#endif
+#endif /* USE_BLUETOOTH */
 
 #if defined(HAVE_NETPACKET_PACKET_H) && defined(SIOCGIFINDEX)
     case AF_PACKET:
     {
         struct sockaddr_ll* addr;
         struct ifreq ifr;
-        char *interfaceName;
+        const char *interfaceName;
         int protoNumber;
         int hatype = 0;
         int pkttype = 0;
@@ -1561,7 +1561,7 @@
         *len_ret = sizeof *addr;
         return 1;
     }
-#endif
+#endif /* HAVE_NETPACKET_PACKET_H && SIOCGIFINDEX */
 
 #ifdef HAVE_LINUX_TIPC_H
     case AF_TIPC:
@@ -1611,7 +1611,7 @@
 
         return 1;
     }
-#endif
+#endif /* HAVE_LINUX_TIPC_H */
 
     /* More cases here... */
 
@@ -1646,7 +1646,7 @@
         *len_ret = sizeof (struct sockaddr_nl);
         return 1;
     }
-#endif
+#endif /* AF_NETLINK */
 
     case AF_INET:
     {
@@ -1660,7 +1660,7 @@
         *len_ret = sizeof (struct sockaddr_in6);
         return 1;
     }
-#endif
+#endif /* ENABLE_IPV6 */
 
 #ifdef USE_BLUETOOTH
     case AF_BLUETOOTH:
@@ -1681,7 +1681,7 @@
         case BTPROTO_SCO:
             *len_ret = sizeof (struct sockaddr_sco);
             return 1;
-#endif
+#endif /* !__FreeBSD__ */
         default:
             PyErr_SetString(socket_error, "getsockaddrlen: "
                             "unknown BT protocol");
@@ -1689,7 +1689,7 @@
 
         }
     }
-#endif
+#endif /* USE_BLUETOOTH */
 
 #ifdef HAVE_NETPACKET_PACKET_H
     case AF_PACKET:
@@ -1697,7 +1697,7 @@
         *len_ret = sizeof (struct sockaddr_ll);
         return 1;
     }
-#endif
+#endif /* HAVE_NETPACKET_PACKET_H */
 
 #ifdef HAVE_LINUX_TIPC_H
     case AF_TIPC:
@@ -1705,7 +1705,7 @@
         *len_ret = sizeof (struct sockaddr_tipc);
         return 1;
     }
-#endif
+#endif /* HAVE_LINUX_TIPC_H */
 
     /* More cases here... */
 
@@ -3554,7 +3554,7 @@
     int result;
 #endif
 #endif /* HAVE_GETHOSTBYNAME_R */
-    char *ap;
+    const char *ap;
     int al;
     int af;
 
@@ -3623,7 +3623,7 @@
 static PyObject *
 socket_getservbyname(PyObject *self, PyObject *args)
 {
-    char *name, *proto=NULL;
+    const char *name, *proto=NULL;
     struct servent *sp;
     if (!PyArg_ParseTuple(args, "s|s:getservbyname", &name, &proto))
         return NULL;
@@ -3654,7 +3654,7 @@
 socket_getservbyport(PyObject *self, PyObject *args)
 {
     int port;
-    char *proto=NULL;
+    const char *proto=NULL;
     struct servent *sp;
     if (!PyArg_ParseTuple(args, "i|s:getservbyport", &port, &proto))
         return NULL;
@@ -3689,7 +3689,7 @@
 static PyObject *
 socket_getprotobyname(PyObject *self, PyObject *args)
 {
-    char *name;
+    const char *name;
     struct protoent *sp;
 #ifdef __BEOS__
 /* Not available in BeOS yet. - [cjh] */
@@ -3964,7 +3964,7 @@
     /* Have to use inet_addr() instead */
     unsigned int packed_addr;
 #endif
-    char *ip_addr;
+    const char *ip_addr;
 
     if (!PyArg_ParseTuple(args, "s:inet_aton", &ip_addr))
         return NULL;
@@ -4054,7 +4054,7 @@
 socket_inet_pton(PyObject *self, PyObject *args)
 {
     int af;
-    char* ip;
+    const char* ip;
     int retval;
 #ifdef ENABLE_IPV6
     char packed[MAX(sizeof(struct in_addr), sizeof(struct in6_addr))];
@@ -4194,7 +4194,7 @@
                         "getaddrinfo() argument 1 must be string or None");
         return NULL;
     }
-    if (PyInt_Check(pobj) || PyLong_Check(pobj)) {
+    if (_PyAnyInt_Check(pobj)) {
         long value = PyLong_AsLong(pobj);
         if (value == -1 && PyErr_Occurred())
             return NULL;
@@ -4280,7 +4280,7 @@
 {
     PyObject *sa = (PyObject *)NULL;
     int flags;
-    char *hostp;
+    const char *hostp;
     int port;
     unsigned int flowinfo, scope_id;
     char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV];
diff --git a/Modules/svmodule.c b/Modules/svmodule.c
index 1519065..14f236c 100644
--- a/Modules/svmodule.c
+++ b/Modules/svmodule.c
@@ -686,7 +686,7 @@
             if (!cell)
                 goto finally;
 
-            if (!PyInt_Check(cell)) {
+            if (!_PyAnyInt_Check(cell)) {
                 PyErr_BadArgument();
                 goto finally;
             }
@@ -757,7 +757,7 @@
         if (!v)
             goto finally;
 
-        if (!PyInt_Check(v)) {
+        if (!_PyAnyInt_Check(v)) {
             PyErr_BadArgument();
             goto finally;
         }
diff --git a/Modules/termios.c b/Modules/termios.c
index 57f30dc..e26e714 100644
--- a/Modules/termios.c
+++ b/Modules/termios.c
@@ -185,8 +185,11 @@
 
         if (PyString_Check(v) && PyString_Size(v) == 1)
             mode.c_cc[i] = (cc_t) * PyString_AsString(v);
-        else if (PyInt_Check(v))
+        else if (_PyAnyInt_Check(v)) {
             mode.c_cc[i] = (cc_t) PyInt_AsLong(v);
+            if (mode.c_cc[i] == (cc_t) -1 && PyErr_Occurred())
+                return NULL;
+        }
         else {
             PyErr_SetString(PyExc_TypeError,
      "tcsetattr: elements of attributes must be characters or integers");
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 12c43b0..61b8d61 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -388,6 +388,76 @@
     return 1;
 }
 
+/* Check values of the struct tm fields before it is passed to strftime() and
+ * asctime().  Return 1 if all values are valid, otherwise set an exception
+ * and returns 0.
+ */
+static int
+checktm(struct tm* buf)
+{
+    /* Checks added to make sure strftime() and asctime() does not crash Python by
+       indexing blindly into some array for a textual representation
+       by some bad index (fixes bug #897625 and #6608).
+
+       Also support values of zero from Python code for arguments in which
+       that is out of range by forcing that value to the lowest value that
+       is valid (fixed bug #1520914).
+
+       Valid ranges based on what is allowed in struct tm:
+
+       - tm_year: [0, max(int)] (1)
+       - tm_mon: [0, 11] (2)
+       - tm_mday: [1, 31]
+       - tm_hour: [0, 23]
+       - tm_min: [0, 59]
+       - tm_sec: [0, 60]
+       - tm_wday: [0, 6] (1)
+       - tm_yday: [0, 365] (2)
+       - tm_isdst: [-max(int), max(int)]
+
+       (1) gettmarg() handles bounds-checking.
+       (2) Python's acceptable range is one greater than the range in C,
+       thus need to check against automatic decrement by gettmarg().
+    */
+    if (buf->tm_mon == -1)
+        buf->tm_mon = 0;
+    else if (buf->tm_mon < 0 || buf->tm_mon > 11) {
+        PyErr_SetString(PyExc_ValueError, "month out of range");
+        return 0;
+    }
+    if (buf->tm_mday == 0)
+        buf->tm_mday = 1;
+    else if (buf->tm_mday < 0 || buf->tm_mday > 31) {
+        PyErr_SetString(PyExc_ValueError, "day of month out of range");
+        return 0;
+    }
+    if (buf->tm_hour < 0 || buf->tm_hour > 23) {
+        PyErr_SetString(PyExc_ValueError, "hour out of range");
+        return 0;
+    }
+    if (buf->tm_min < 0 || buf->tm_min > 59) {
+        PyErr_SetString(PyExc_ValueError, "minute out of range");
+        return 0;
+    }
+    if (buf->tm_sec < 0 || buf->tm_sec > 61) {
+        PyErr_SetString(PyExc_ValueError, "seconds out of range");
+        return 0;
+    }
+    /* tm_wday does not need checking of its upper-bound since taking
+    ``% 7`` in gettmarg() automatically restricts the range. */
+    if (buf->tm_wday < 0) {
+        PyErr_SetString(PyExc_ValueError, "day of week out of range");
+        return 0;
+    }
+    if (buf->tm_yday == -1)
+        buf->tm_yday = 0;
+    else if (buf->tm_yday < 0 || buf->tm_yday > 365) {
+        PyErr_SetString(PyExc_ValueError, "day of year out of range");
+        return 0;
+    }
+    return 1;
+}
+
 #ifdef HAVE_STRFTIME
 static PyObject *
 time_strftime(PyObject *self, PyObject *args)
@@ -407,8 +477,10 @@
     if (tup == NULL) {
         time_t tt = time(NULL);
         buf = *localtime(&tt);
-    } else if (!gettmarg(tup, &buf))
+    } else if (!gettmarg(tup, &buf)
+               || !checktm(&buf)) {
         return NULL;
+    }
 
     /* Checks added to make sure strftime() does not crash Python by
        indexing blindly into some array for a textual representation
@@ -559,26 +631,50 @@
 
 
 static PyObject *
+_asctime(struct tm *timeptr)
+{
+    /* Inspired by Open Group reference implementation available at
+     * http://pubs.opengroup.org/onlinepubs/009695399/functions/asctime.html */
+    static const char wday_name[7][4] = {
+        "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+    };
+    static const char mon_name[12][4] = {
+        "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+        "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+    };
+    PyObject *unicode, *str;
+    /* PyString_FromString() cannot be used because it doesn't support %3d */
+    unicode = PyUnicode_FromFormat(
+        "%s %s%3d %.2d:%.2d:%.2d %d",
+        wday_name[timeptr->tm_wday],
+        mon_name[timeptr->tm_mon],
+        timeptr->tm_mday, timeptr->tm_hour,
+        timeptr->tm_min, timeptr->tm_sec,
+        1900 + timeptr->tm_year);
+    if (unicode == NULL) {
+        return NULL;
+    }
+
+    str = PyUnicode_AsASCIIString(unicode);
+    Py_DECREF(unicode);
+    return str;
+}
+
+static PyObject *
 time_asctime(PyObject *self, PyObject *args)
 {
     PyObject *tup = NULL;
     struct tm buf;
-    char *p;
     if (!PyArg_UnpackTuple(args, "asctime", 0, 1, &tup))
         return NULL;
     if (tup == NULL) {
         time_t tt = time(NULL);
         buf = *localtime(&tt);
-    } else if (!gettmarg(tup, &buf))
-        return NULL;
-    p = asctime(&buf);
-    if (p == NULL) {
-        PyErr_SetString(PyExc_ValueError, "invalid time");
+    } else if (!gettmarg(tup, &buf)
+               || !checktm(&buf)) {
         return NULL;
     }
-    if (p[24] == '\n')
-        p[24] = '\0';
-    return PyString_FromString(p);
+    return _asctime(&buf);
 }
 
 PyDoc_STRVAR(asctime_doc,
@@ -593,7 +689,7 @@
 {
     PyObject *ot = NULL;
     time_t tt;
-    char *p;
+    struct tm *buf;
 
     if (!PyArg_UnpackTuple(args, "ctime", 0, 1, &ot))
         return NULL;
@@ -607,14 +703,16 @@
         if (tt == (time_t)-1 && PyErr_Occurred())
             return NULL;
     }
-    p = ctime(&tt);
-    if (p == NULL) {
-        PyErr_SetString(PyExc_ValueError, "unconvertible time");
-        return NULL;
+    buf = localtime(&tt);
+    if (buf == NULL) {
+#ifdef EINVAL
+        if (errno == 0) {
+            errno = EINVAL;
+        }
+#endif
+        return PyErr_SetFromErrno(PyExc_ValueError);
     }
-    if (p[24] == '\n')
-        p[24] = '\0';
-    return PyString_FromString(p);
+    return _asctime(buf);
 }
 
 PyDoc_STRVAR(ctime_doc,
diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c
index 6b01fc7..df6ffe3 100644
--- a/Modules/unicodedata.c
+++ b/Modules/unicodedata.c
@@ -664,14 +664,18 @@
          pairs, since we always have decomposed data. */
       if (LBase <= *i && *i < (LBase+LCount) &&
           i + 1 < end &&
-          VBase <= i[1] && i[1] <= (VBase+VCount)) {
+          VBase <= i[1] && i[1] < (VBase+VCount)) {
+          /* check L character is a modern leading consonant (0x1100 ~ 0x1112)
+             and V character is a modern vowel (0x1161 ~ 0x1175). */
           int LIndex, VIndex;
           LIndex = i[0] - LBase;
           VIndex = i[1] - VBase;
           code = SBase + (LIndex*VCount+VIndex)*TCount;
           i+=2;
           if (i < end &&
-              TBase <= *i && *i <= (TBase+TCount)) {
+              TBase < *i && *i < (TBase+TCount)) {
+              /* check T character is a modern trailing consonant
+                 (0x11A8 ~ 0x11C2). */
               code += *i-TBase;
               i++;
           }
diff --git a/Modules/zipimport.c b/Modules/zipimport.c
index 0a7cd0f..1691773 100644
--- a/Modules/zipimport.c
+++ b/Modules/zipimport.c
@@ -43,11 +43,9 @@
 static PyObject *ZipImportError;
 static PyObject *zip_directory_cache = NULL;
 
-// GOOGLE(nanzhang): Changed two functions below to be visible to launcher so
-// that launcher can access the zip metadata section.
 /* forward decls */
-PyObject *read_directory(const char *archive);
-PyObject *get_data(const char *archive, PyObject *toc_entry);
+static PyObject *read_directory(const char *archive);
+static PyObject *get_data(const char *archive, PyObject *toc_entry);
 static PyObject *get_module_code(ZipImporter *self, char *fullname,
                                  int *p_ispackage, char **p_modpath);
 
@@ -704,7 +702,7 @@
    Directories can be recognized by the trailing SEP in the name,
    data_size and file_offset are 0.
 */
-PyObject *
+static PyObject *
 read_directory(const char *archive)
 {
     PyObject *files = NULL;
@@ -914,7 +912,7 @@
 
 /* Given a path to a Zip file and a toc_entry, return the (uncompressed)
    data as a new reference. */
-PyObject *
+static PyObject *
 get_data(const char *archive, PyObject *toc_entry)
 {
     PyObject *raw_data = NULL, *data, *decompress;
diff --git a/Modules/zlib/ChangeLog b/Modules/zlib/ChangeLog
index f22aaba..30199a6 100644
--- a/Modules/zlib/ChangeLog
+++ b/Modules/zlib/ChangeLog
@@ -1,10 +1,53 @@
 
                 ChangeLog file for zlib
 
+Changes in 1.2.11 (15 Jan 2017)
+- Fix deflate stored bug when pulling last block from window
+- Permit immediate deflateParams changes before any deflate input
+
+Changes in 1.2.10 (2 Jan 2017)
+- Avoid warnings on snprintf() return value
+- Fix bug in deflate_stored() for zero-length input
+- Fix bug in gzwrite.c that produced corrupt gzip files
+- Remove files to be installed before copying them in Makefile.in
+- Add warnings when compiling with assembler code
+
+Changes in 1.2.9 (31 Dec 2016)
+- Fix contrib/minizip to permit unzipping with desktop API [Zouzou]
+- Improve contrib/blast to return unused bytes
+- Assure that gzoffset() is correct when appending
+- Improve compress() and uncompress() to support large lengths
+- Fix bug in test/example.c where error code not saved
+- Remedy Coverity warning [Randers-Pehrson]
+- Improve speed of gzprintf() in transparent mode
+- Fix inflateInit2() bug when windowBits is 16 or 32
+- Change DEBUG macro to ZLIB_DEBUG
+- Avoid uninitialized access by gzclose_w()
+- Allow building zlib outside of the source directory
+- Fix bug that accepted invalid zlib header when windowBits is zero
+- Fix gzseek() problem on MinGW due to buggy _lseeki64 there
+- Loop on write() calls in gzwrite.c in case of non-blocking I/O
+- Add --warn (-w) option to ./configure for more compiler warnings
+- Reject a window size of 256 bytes if not using the zlib wrapper
+- Fix bug when level 0 used with Z_HUFFMAN or Z_RLE
+- Add --debug (-d) option to ./configure to define ZLIB_DEBUG
+- Fix bugs in creating a very large gzip header
+- Add uncompress2() function, which returns the input size used
+- Assure that deflateParams() will not switch functions mid-block
+- Dramatically speed up deflation for level 0 (storing)
+- Add gzfread(), duplicating the interface of fread()
+- Add gzfwrite(), duplicating the interface of fwrite()
+- Add deflateGetDictionary() function
+- Use snprintf() for later versions of Microsoft C
+- Fix *Init macros to use z_ prefix when requested
+- Replace as400 with os400 for OS/400 support [Monnerat]
+- Add crc32_z() and adler32_z() functions with size_t lengths
+- Update Visual Studio project files [AraHaan]
+
 Changes in 1.2.8 (28 Apr 2013)
 - Update contrib/minizip/iowin32.c for Windows RT [Vollant]
 - Do not force Z_CONST for C++
-- Clean up contrib/vstudio [Ro§]
+- Clean up contrib/vstudio [Roß]
 - Correct spelling error in zlib.h
 - Fix mixed line endings in contrib/vstudio
 
@@ -34,7 +77,7 @@
 - Clean up the usage of z_const and respect const usage within zlib
 - Clean up examples/gzlog.[ch] comparisons of different types
 - Avoid shift equal to bits in type (caused endless loop)
-- Fix unintialized value bug in gzputc() introduced by const patches
+- Fix uninitialized value bug in gzputc() introduced by const patches
 - Fix memory allocation error in examples/zran.c [Nor]
 - Fix bug where gzopen(), gzclose() would write an empty file
 - Fix bug in gzclose() when gzwrite() runs out of memory
@@ -194,7 +237,7 @@
 - Add a transparent write mode to gzopen() when 'T' is in the mode
 - Update python link in zlib man page
 - Get inffixed.h and MAKEFIXED result to match
-- Add a ./config --solo option to make zlib subset with no libary use
+- Add a ./config --solo option to make zlib subset with no library use
 - Add undocumented inflateResetKeep() function for CAB file decoding
 - Add --cover option to ./configure for gcc coverage testing
 - Add #define ZLIB_CONST option to use const in the z_stream interface
@@ -564,7 +607,7 @@
 - Update make_vms.com [Zinser]
 - Use -fPIC for shared build in configure [Teredesai, Nicholson]
 - Use only major version number for libz.so on IRIX and OSF1 [Reinholdtsen]
-- Use fdopen() (not _fdopen()) for Interix in zutil.h [BŠck]
+- Use fdopen() (not _fdopen()) for Interix in zutil.h [Bäck]
 - Add some FAQ entries about the contrib directory
 - Update the MVS question in the FAQ
 - Avoid extraneous reads after EOF in gzio.c [Brown]
@@ -1178,7 +1221,7 @@
         386 asm code replacing longest_match().
    contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
         A C++ I/O streams interface to the zlib gz* functions
-   contrib/iostream2/  by Tyge Løvset <Tyge.Lovset@cmr.no>
+   contrib/iostream2/  by Tyge Løvset <Tyge.Lovset@cmr.no>
         Another C++ I/O streams interface
    contrib/untgz/  by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
         A very simple tar.gz file extractor using zlib
@@ -1267,7 +1310,7 @@
 - fix array overlay in deflate.c which sometimes caused bad compressed data
 - fix inflate bug with empty stored block
 - fix MSDOS medium model which was broken in 0.99
-- fix deflateParams() which could generated bad compressed data.
+- fix deflateParams() which could generate bad compressed data.
 - Bytef is define'd instead of typedef'ed (work around Borland bug)
 - added an INDEX file
 - new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
diff --git a/Modules/zlib/Makefile.in b/Modules/zlib/Makefile.in
index c61aa30..1852192 100644
--- a/Modules/zlib/Makefile.in
+++ b/Modules/zlib/Makefile.in
@@ -1,5 +1,5 @@
 # Makefile for zlib
-# Copyright (C) 1995-2013 Jean-loup Gailly, Mark Adler
+# Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
 # For conditions of distribution and use, see copyright notice in zlib.h
 
 # To compile and test, type:
@@ -20,7 +20,7 @@
 
 CFLAGS=-O
 #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
-#CFLAGS=-g -DDEBUG
+#CFLAGS=-g -DZLIB_DEBUG
 #CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
 #           -Wstrict-prototypes -Wmissing-prototypes
 
@@ -32,7 +32,7 @@
 
 STATICLIB=libz.a
 SHAREDLIB=libz.so
-SHAREDLIBV=libz.so.1.2.8
+SHAREDLIBV=libz.so.1.2.10
 SHAREDLIBM=libz.so.1
 LIBS=$(STATICLIB) $(SHAREDLIBV)
 
@@ -53,6 +53,9 @@
 mandir = ${prefix}/share/man
 man3dir = ${mandir}/man3
 pkgconfigdir = ${libdir}/pkgconfig
+SRCDIR=
+ZINC=
+ZINCOUT=-I.
 
 OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o
 OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o
@@ -113,8 +116,8 @@
 	fi; \
 	rm -f $$TMP64
 
-infcover.o: test/infcover.c zlib.h zconf.h
-	$(CC) $(CFLAGS) -I. -c -o $@ test/infcover.c
+infcover.o: $(SRCDIR)test/infcover.c $(SRCDIR)zlib.h zconf.h
+	$(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/infcover.c
 
 infcover: infcover.o libz.a
 	$(CC) $(CFLAGS) -o $@ infcover.o libz.a
@@ -140,24 +143,140 @@
 	mv _match.o match.lo
 	rm -f _match.s
 
-example.o: test/example.c zlib.h zconf.h
-	$(CC) $(CFLAGS) -I. -c -o $@ test/example.c
+example.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h
+	$(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/example.c
 
-minigzip.o: test/minigzip.c zlib.h zconf.h
-	$(CC) $(CFLAGS) -I. -c -o $@ test/minigzip.c
+minigzip.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h
+	$(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/minigzip.c
 
-example64.o: test/example.c zlib.h zconf.h
-	$(CC) $(CFLAGS) -I. -D_FILE_OFFSET_BITS=64 -c -o $@ test/example.c
+example64.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h
+	$(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/example.c
 
-minigzip64.o: test/minigzip.c zlib.h zconf.h
-	$(CC) $(CFLAGS) -I. -D_FILE_OFFSET_BITS=64 -c -o $@ test/minigzip.c
+minigzip64.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h
+	$(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/minigzip.c
 
-.SUFFIXES: .lo
 
-.c.lo:
+adler32.o: $(SRCDIR)adler32.c
+	$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)adler32.c
+
+crc32.o: $(SRCDIR)crc32.c
+	$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c
+
+deflate.o: $(SRCDIR)deflate.c
+	$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c
+
+infback.o: $(SRCDIR)infback.c
+	$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)infback.c
+
+inffast.o: $(SRCDIR)inffast.c
+	$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inffast.c
+
+inflate.o: $(SRCDIR)inflate.c
+	$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inflate.c
+
+inftrees.o: $(SRCDIR)inftrees.c
+	$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inftrees.c
+
+trees.o: $(SRCDIR)trees.c
+	$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)trees.c
+
+zutil.o: $(SRCDIR)zutil.c
+	$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)zutil.c
+
+compress.o: $(SRCDIR)compress.c
+	$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)compress.c
+
+uncompr.o: $(SRCDIR)uncompr.c
+	$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)uncompr.c
+
+gzclose.o: $(SRCDIR)gzclose.c
+	$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzclose.c
+
+gzlib.o: $(SRCDIR)gzlib.c
+	$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzlib.c
+
+gzread.o: $(SRCDIR)gzread.c
+	$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzread.c
+
+gzwrite.o: $(SRCDIR)gzwrite.c
+	$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzwrite.c
+
+
+adler32.lo: $(SRCDIR)adler32.c
 	-@mkdir objs 2>/dev/null || test -d objs
-	$(CC) $(SFLAGS) -DPIC -c -o objs/$*.o $<
-	-@mv objs/$*.o $@
+	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/adler32.o $(SRCDIR)adler32.c
+	-@mv objs/adler32.o $@
+
+crc32.lo: $(SRCDIR)crc32.c
+	-@mkdir objs 2>/dev/null || test -d objs
+	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c
+	-@mv objs/crc32.o $@
+
+deflate.lo: $(SRCDIR)deflate.c
+	-@mkdir objs 2>/dev/null || test -d objs
+	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c
+	-@mv objs/deflate.o $@
+
+infback.lo: $(SRCDIR)infback.c
+	-@mkdir objs 2>/dev/null || test -d objs
+	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/infback.o $(SRCDIR)infback.c
+	-@mv objs/infback.o $@
+
+inffast.lo: $(SRCDIR)inffast.c
+	-@mkdir objs 2>/dev/null || test -d objs
+	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inffast.o $(SRCDIR)inffast.c
+	-@mv objs/inffast.o $@
+
+inflate.lo: $(SRCDIR)inflate.c
+	-@mkdir objs 2>/dev/null || test -d objs
+	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inflate.o $(SRCDIR)inflate.c
+	-@mv objs/inflate.o $@
+
+inftrees.lo: $(SRCDIR)inftrees.c
+	-@mkdir objs 2>/dev/null || test -d objs
+	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c
+	-@mv objs/inftrees.o $@
+
+trees.lo: $(SRCDIR)trees.c
+	-@mkdir objs 2>/dev/null || test -d objs
+	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/trees.o $(SRCDIR)trees.c
+	-@mv objs/trees.o $@
+
+zutil.lo: $(SRCDIR)zutil.c
+	-@mkdir objs 2>/dev/null || test -d objs
+	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/zutil.o $(SRCDIR)zutil.c
+	-@mv objs/zutil.o $@
+
+compress.lo: $(SRCDIR)compress.c
+	-@mkdir objs 2>/dev/null || test -d objs
+	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/compress.o $(SRCDIR)compress.c
+	-@mv objs/compress.o $@
+
+uncompr.lo: $(SRCDIR)uncompr.c
+	-@mkdir objs 2>/dev/null || test -d objs
+	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c
+	-@mv objs/uncompr.o $@
+
+gzclose.lo: $(SRCDIR)gzclose.c
+	-@mkdir objs 2>/dev/null || test -d objs
+	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c
+	-@mv objs/gzclose.o $@
+
+gzlib.lo: $(SRCDIR)gzlib.c
+	-@mkdir objs 2>/dev/null || test -d objs
+	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c
+	-@mv objs/gzlib.o $@
+
+gzread.lo: $(SRCDIR)gzread.c
+	-@mkdir objs 2>/dev/null || test -d objs
+	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzread.o $(SRCDIR)gzread.c
+	-@mv objs/gzread.o $@
+
+gzwrite.lo: $(SRCDIR)gzwrite.c
+	-@mkdir objs 2>/dev/null || test -d objs
+	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c
+	-@mv objs/gzwrite.o $@
+
 
 placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a
 	$(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS)
@@ -190,10 +309,12 @@
 	-@if [ ! -d $(DESTDIR)$(sharedlibdir) ]; then mkdir -p $(DESTDIR)$(sharedlibdir); fi
 	-@if [ ! -d $(DESTDIR)$(man3dir)      ]; then mkdir -p $(DESTDIR)$(man3dir); fi
 	-@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi
+	rm -f $(DESTDIR)$(libdir)/$(STATICLIB)
 	cp $(STATICLIB) $(DESTDIR)$(libdir)
 	chmod 644 $(DESTDIR)$(libdir)/$(STATICLIB)
 	-@($(RANLIB) $(DESTDIR)$(libdir)/libz.a || true) >/dev/null 2>&1
 	-@if test -n "$(SHAREDLIBV)"; then \
+	  rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \
 	  cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir); \
 	  echo "cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)"; \
 	  chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \
@@ -203,8 +324,10 @@
 	  ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \
 	  ($(LDCONFIG) || true)  >/dev/null 2>&1; \
 	fi
-	cp zlib.3 $(DESTDIR)$(man3dir)
+	rm -f $(DESTDIR)$(man3dir)/zlib.3
+	cp $(SRCDIR)zlib.3 $(DESTDIR)$(man3dir)
 	chmod 644 $(DESTDIR)$(man3dir)/zlib.3
+	rm -f $(DESTDIR)$(pkgconfigdir)/zlib.pc
 	cp zlib.pc $(DESTDIR)$(pkgconfigdir)
 	chmod 644 $(DESTDIR)$(pkgconfigdir)/zlib.pc
 # The ranlib in install is needed on NeXTSTEP which checks file times
@@ -212,7 +335,8 @@
 
 install: install-libs
 	-@if [ ! -d $(DESTDIR)$(includedir)   ]; then mkdir -p $(DESTDIR)$(includedir); fi
-	cp zlib.h zconf.h $(DESTDIR)$(includedir)
+	rm -f $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h
+	cp $(SRCDIR)zlib.h zconf.h $(DESTDIR)$(includedir)
 	chmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h
 
 uninstall:
@@ -226,18 +350,18 @@
 
 docs: zlib.3.pdf
 
-zlib.3.pdf: zlib.3
-	groff -mandoc -f H -T ps zlib.3 | ps2pdf - zlib.3.pdf
+zlib.3.pdf: $(SRCDIR)zlib.3
+	groff -mandoc -f H -T ps $(SRCDIR)zlib.3 | ps2pdf - $@
 
-zconf.h.cmakein: zconf.h.in
+zconf.h.cmakein: $(SRCDIR)zconf.h.in
 	-@ TEMPFILE=zconfh_$$; \
 	echo "/#define ZCONF_H/ a\\\\\n#cmakedefine Z_PREFIX\\\\\n#cmakedefine Z_HAVE_UNISTD_H\n" >> $$TEMPFILE &&\
-	sed -f $$TEMPFILE zconf.h.in > zconf.h.cmakein &&\
-	touch -r zconf.h.in zconf.h.cmakein &&\
+	sed -f $$TEMPFILE $(SRCDIR)zconf.h.in > $@ &&\
+	touch -r $(SRCDIR)zconf.h.in $@ &&\
 	rm $$TEMPFILE
 
-zconf: zconf.h.in
-	cp -p zconf.h.in zconf.h
+zconf: $(SRCDIR)zconf.h.in
+	cp -p $(SRCDIR)zconf.h.in zconf.h
 
 mostlyclean: clean
 clean:
@@ -255,34 +379,32 @@
 distclean: clean zconf zconf.h.cmakein docs
 	rm -f Makefile zlib.pc configure.log
 	-@rm -f .DS_Store
-	-@printf 'all:\n\t-@echo "Please use ./configure first.  Thank you."\n' > Makefile
-	-@printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile
-	-@touch -r Makefile.in Makefile
+	@if [ -f Makefile.in ]; then \
+	printf 'all:\n\t-@echo "Please use ./configure first.  Thank you."\n' > Makefile ; \
+	printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile ; \
+	touch -r $(SRCDIR)Makefile.in Makefile ; fi
+	@if [ ! -f zconf.h.in ]; then rm -f zconf.h zconf.h.cmakein ; fi
+	@if [ ! -f zlib.3 ]; then rm -f zlib.3.pdf ; fi
 
 tags:
-	etags *.[ch]
+	etags $(SRCDIR)*.[ch]
 
-depend:
-	makedepend -- $(CFLAGS) -- *.[ch]
+adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
+gzclose.o gzlib.o gzread.o gzwrite.o: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h
+compress.o example.o minigzip.o uncompr.o: $(SRCDIR)zlib.h zconf.h
+crc32.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h
+deflate.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
+infback.o inflate.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h
+inffast.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h
+inftrees.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h
+trees.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h
 
-# DO NOT DELETE THIS LINE -- make depend depends on it.
-
-adler32.o zutil.o: zutil.h zlib.h zconf.h
-gzclose.o gzlib.o gzread.o gzwrite.o: zlib.h zconf.h gzguts.h
-compress.o example.o minigzip.o uncompr.o: zlib.h zconf.h
-crc32.o: zutil.h zlib.h zconf.h crc32.h
-deflate.o: deflate.h zutil.h zlib.h zconf.h
-infback.o inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h
-inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
-inftrees.o: zutil.h zlib.h zconf.h inftrees.h
-trees.o: deflate.h zutil.h zlib.h zconf.h trees.h
-
-adler32.lo zutil.lo: zutil.h zlib.h zconf.h
-gzclose.lo gzlib.lo gzread.lo gzwrite.lo: zlib.h zconf.h gzguts.h
-compress.lo example.lo minigzip.lo uncompr.lo: zlib.h zconf.h
-crc32.lo: zutil.h zlib.h zconf.h crc32.h
-deflate.lo: deflate.h zutil.h zlib.h zconf.h
-infback.lo inflate.lo: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h
-inffast.lo: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
-inftrees.lo: zutil.h zlib.h zconf.h inftrees.h
-trees.lo: deflate.h zutil.h zlib.h zconf.h trees.h
+adler32.lo zutil.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
+gzclose.lo gzlib.lo gzread.lo gzwrite.lo: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h
+compress.lo example.lo minigzip.lo uncompr.lo: $(SRCDIR)zlib.h zconf.h
+crc32.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h
+deflate.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
+infback.lo inflate.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h
+inffast.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h
+inftrees.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h
+trees.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h
diff --git a/Modules/zlib/README b/Modules/zlib/README
index 5ca9d12..51106de 100644
--- a/Modules/zlib/README
+++ b/Modules/zlib/README
@@ -1,6 +1,6 @@
 ZLIB DATA COMPRESSION LIBRARY
 
-zlib 1.2.8 is a general purpose data compression library.  All the code is
+zlib 1.2.11 is a general purpose data compression library.  All the code is
 thread safe.  The data format used by the zlib library is described by RFCs
 (Request for Comments) 1950 to 1952 in the files
 http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
@@ -31,7 +31,7 @@
 issue of Dr.  Dobb's Journal; a copy of the article is available at
 http://marknelson.us/1997/01/01/zlib-engine/ .
 
-The changes made in version 1.2.8 are documented in the file ChangeLog.
+The changes made in version 1.2.11 are documented in the file ChangeLog.
 
 Unsupported third party contributions are provided in directory contrib/ .
 
@@ -84,7 +84,7 @@
 
 Copyright notice:
 
- (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ (C) 1995-2017 Jean-loup Gailly and Mark Adler
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
diff --git a/Modules/zlib/adler32.c b/Modules/zlib/adler32.c
index a868f07..d0be438 100644
--- a/Modules/zlib/adler32.c
+++ b/Modules/zlib/adler32.c
@@ -1,5 +1,5 @@
 /* adler32.c -- compute the Adler-32 checksum of a data stream
- * Copyright (C) 1995-2011 Mark Adler
+ * Copyright (C) 1995-2011, 2016 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -7,11 +7,9 @@
 
 #include "zutil.h"
 
-#define local static
-
 local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
 
-#define BASE 65521      /* largest prime smaller than 65536 */
+#define BASE 65521U     /* largest prime smaller than 65536 */
 #define NMAX 5552
 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
 
@@ -62,10 +60,10 @@
 #endif
 
 /* ========================================================================= */
-uLong ZEXPORT adler32(adler, buf, len)
+uLong ZEXPORT adler32_z(adler, buf, len)
     uLong adler;
     const Bytef *buf;
-    uInt len;
+    z_size_t len;
 {
     unsigned long sum2;
     unsigned n;
@@ -133,6 +131,15 @@
 }
 
 /* ========================================================================= */
+uLong ZEXPORT adler32(adler, buf, len)
+    uLong adler;
+    const Bytef *buf;
+    uInt len;
+{
+    return adler32_z(adler, buf, len);
+}
+
+/* ========================================================================= */
 local uLong adler32_combine_(adler1, adler2, len2)
     uLong adler1;
     uLong adler2;
@@ -156,7 +163,7 @@
     sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;
     if (sum1 >= BASE) sum1 -= BASE;
     if (sum1 >= BASE) sum1 -= BASE;
-    if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1);
+    if (sum2 >= ((unsigned long)BASE << 1)) sum2 -= ((unsigned long)BASE << 1);
     if (sum2 >= BASE) sum2 -= BASE;
     return sum1 | (sum2 << 16);
 }
diff --git a/Modules/zlib/compress.c b/Modules/zlib/compress.c
index 6e97626..e2db404 100644
--- a/Modules/zlib/compress.c
+++ b/Modules/zlib/compress.c
@@ -1,5 +1,5 @@
 /* compress.c -- compress a memory buffer
- * Copyright (C) 1995-2005 Jean-loup Gailly.
+ * Copyright (C) 1995-2005, 2014, 2016 Jean-loup Gailly, Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -28,16 +28,11 @@
 {
     z_stream stream;
     int err;
+    const uInt max = (uInt)-1;
+    uLong left;
 
-    stream.next_in = (z_const Bytef *)source;
-    stream.avail_in = (uInt)sourceLen;
-#ifdef MAXSEG_64K
-    /* Check for source > 64K on 16-bit machine: */
-    if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-#endif
-    stream.next_out = dest;
-    stream.avail_out = (uInt)*destLen;
-    if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+    left = *destLen;
+    *destLen = 0;
 
     stream.zalloc = (alloc_func)0;
     stream.zfree = (free_func)0;
@@ -46,15 +41,26 @@
     err = deflateInit(&stream, level);
     if (err != Z_OK) return err;
 
-    err = deflate(&stream, Z_FINISH);
-    if (err != Z_STREAM_END) {
-        deflateEnd(&stream);
-        return err == Z_OK ? Z_BUF_ERROR : err;
-    }
-    *destLen = stream.total_out;
+    stream.next_out = dest;
+    stream.avail_out = 0;
+    stream.next_in = (z_const Bytef *)source;
+    stream.avail_in = 0;
 
-    err = deflateEnd(&stream);
-    return err;
+    do {
+        if (stream.avail_out == 0) {
+            stream.avail_out = left > (uLong)max ? max : (uInt)left;
+            left -= stream.avail_out;
+        }
+        if (stream.avail_in == 0) {
+            stream.avail_in = sourceLen > (uLong)max ? max : (uInt)sourceLen;
+            sourceLen -= stream.avail_in;
+        }
+        err = deflate(&stream, sourceLen ? Z_NO_FLUSH : Z_FINISH);
+    } while (err == Z_OK);
+
+    *destLen = stream.total_out;
+    deflateEnd(&stream);
+    return err == Z_STREAM_END ? Z_OK : err;
 }
 
 /* ===========================================================================
diff --git a/Modules/zlib/configure b/Modules/zlib/configure
index b77a8a8..e974d1f 100755
--- a/Modules/zlib/configure
+++ b/Modules/zlib/configure
@@ -18,6 +18,18 @@
 echo $0 $* >> configure.log
 date >> configure.log
 
+# get source directory
+SRCDIR=`dirname $0`
+if test $SRCDIR = "."; then
+    ZINC=""
+    ZINCOUT="-I."
+    SRCDIR=""
+else
+    ZINC='-include zconf.h'
+    ZINCOUT='-I. -I$(SRCDIR)'
+    SRCDIR="$SRCDIR/"
+fi
+
 # set command prefix for cross-compilation
 if [ -n "${CHOST}" ]; then
     uname="`echo "${CHOST}" | sed -e 's/^[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)-.*$/\1/'`"
@@ -28,10 +40,10 @@
 STATICLIB=libz.a
 
 # extract zlib version numbers from zlib.h
-VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`
-VER3=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\\.[0-9]*\).*/\1/p' < zlib.h`
-VER2=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\)\\..*/\1/p' < zlib.h`
-VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < zlib.h`
+VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < ${SRCDIR}zlib.h`
+VER3=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\\.[0-9]*\).*/\1/p' < ${SRCDIR}zlib.h`
+VER2=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\)\\..*/\1/p' < ${SRCDIR}zlib.h`
+VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < ${SRCDIR}zlib.h`
 
 # establish commands for library building
 if "${CROSS_PREFIX}ar" --version >/dev/null 2>/dev/null || test $? -lt 126; then
@@ -73,6 +85,8 @@
 zconst=0
 build64=0
 gcc=0
+warn=0
+debug=0
 old_cc="$CC"
 old_cflags="$CFLAGS"
 OBJC='$(OBJZ) $(OBJG)'
@@ -121,6 +135,8 @@
     --sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;;
     --localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;;
     -c* | --const) zconst=1; shift ;;
+    -w* | --warn) warn=1; shift ;;
+    -d* | --debug) debug=1; shift ;;
     *)
       echo "unknown option: $1" | tee -a configure.log
       echo "$0 --help for help" | tee -a configure.log
@@ -159,34 +175,42 @@
 esac
 case `$cc -v 2>&1` in
   *gcc*) gcc=1 ;;
+  *clang*) gcc=1 ;;
 esac
 
 show $cc -c $test.c
 if test "$gcc" -eq 1 && ($cc -c $test.c) >> configure.log 2>&1; then
   echo ... using gcc >> configure.log
   CC="$cc"
-  CFLAGS="${CFLAGS--O3} ${ARCHS}"
+  CFLAGS="${CFLAGS--O3}"
   SFLAGS="${CFLAGS--O3} -fPIC"
-  LDFLAGS="${LDFLAGS} ${ARCHS}"
+  if test "$ARCHS"; then
+    CFLAGS="${CFLAGS} ${ARCHS}"
+    LDFLAGS="${LDFLAGS} ${ARCHS}"
+  fi
   if test $build64 -eq 1; then
     CFLAGS="${CFLAGS} -m64"
     SFLAGS="${SFLAGS} -m64"
   fi
-  if test "${ZLIBGCCWARN}" = "YES"; then
+  if test "$warn" -eq 1; then
     if test "$zconst" -eq 1; then
       CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual -pedantic -DZLIB_CONST"
     else
       CFLAGS="${CFLAGS} -Wall -Wextra -pedantic"
     fi
   fi
+  if test $debug -eq 1; then
+    CFLAGS="${CFLAGS} -DZLIB_DEBUG"
+    SFLAGS="${SFLAGS} -DZLIB_DEBUG"
+  fi
   if test -z "$uname"; then
     uname=`(uname -s || echo unknown) 2>/dev/null`
   fi
   case "$uname" in
   Linux* | linux* | GNU | GNU/* | solaris*)
-        LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"} ;;
+        LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,${SRCDIR}zlib.map"} ;;
   *BSD | *bsd* | DragonFly)
-        LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"}
+        LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,${SRCDIR}zlib.map"}
         LDCONFIG="ldconfig -m" ;;
   CYGWIN* | Cygwin* | cygwin* | OS/2*)
         EXE='.exe' ;;
@@ -287,6 +311,9 @@
                  esac
              fi
          fi
+         if test -n "$ZINC"; then
+             ZINC='-I- -I. -I$(SRCDIR)'
+         fi
          ;;
   SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"}
              CFLAGS=${CFLAGS-"-O2"}
@@ -337,16 +364,16 @@
   }
   echo - using any output from compiler to indicate an error >> configure.log
 else
-try()
-{
-  show $*
-  ( $* ) >> configure.log 2>&1
-  ret=$?
-  if test $ret -ne 0; then
-    echo "(exit code "$ret")" >> configure.log
-  fi
-  return $ret
-}
+  try()
+  {
+    show $*
+    ( $* ) >> configure.log 2>&1
+    ret=$?
+    if test $ret -ne 0; then
+      echo "(exit code "$ret")" >> configure.log
+    fi
+    return $ret
+  }
 fi
 
 tryboth()
@@ -422,6 +449,65 @@
 
 echo >> configure.log
 
+# check for size_t
+cat > $test.c <<EOF
+#include <stdio.h>
+#include <stdlib.h>
+size_t dummy = 0;
+EOF
+if try $CC -c $CFLAGS $test.c; then
+  echo "Checking for size_t... Yes." | tee -a configure.log
+  need_sizet=0
+else
+  echo "Checking for size_t... No." | tee -a configure.log
+  need_sizet=1
+fi
+
+echo >> configure.log
+
+# find the size_t integer type, if needed
+if test $need_sizet -eq 1; then
+  cat > $test.c <<EOF
+long long dummy = 0;
+EOF
+  if try $CC -c $CFLAGS $test.c; then
+    echo "Checking for long long... Yes." | tee -a configure.log
+    cat > $test.c <<EOF
+#include <stdio.h>
+int main(void) {
+    if (sizeof(void *) <= sizeof(int)) puts("int");
+    else if (sizeof(void *) <= sizeof(long)) puts("long");
+    else puts("z_longlong");
+    return 0;
+}
+EOF
+  else
+    echo "Checking for long long... No." | tee -a configure.log
+    cat > $test.c <<EOF
+#include <stdio.h>
+int main(void) {
+    if (sizeof(void *) <= sizeof(int)) puts("int");
+    else puts("long");
+    return 0;
+}
+EOF
+  fi
+  if try $CC $CFLAGS -o $test $test.c; then
+    sizet=`./$test`
+    echo "Checking for a pointer-size integer type..." $sizet"." | tee -a configure.log
+  else
+    echo "Failed to find a pointer-size integer type." | tee -a configure.log
+    leave 1
+  fi
+fi
+
+if test $need_sizet -eq 1; then
+  CFLAGS="${CFLAGS} -DNO_SIZE_T=${sizet}"
+  SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}"
+fi
+
+echo >> configure.log
+
 # check for large file support, and if none, check for fseeko()
 cat > $test.c <<EOF
 #include <sys/types.h>
@@ -470,7 +556,7 @@
 fi
 
 # copy clean zconf.h for subsequent edits
-cp -p zconf.h.in zconf.h
+cp -p ${SRCDIR}zconf.h.in zconf.h
 
 echo >> configure.log
 
@@ -764,6 +850,7 @@
 echo TEST = $TEST >> configure.log
 echo VER = $VER >> configure.log
 echo Z_U4 = $Z_U4 >> configure.log
+echo SRCDIR = $SRCDIR >> configure.log
 echo exec_prefix = $exec_prefix >> configure.log
 echo includedir = $includedir >> configure.log
 echo libdir = $libdir >> configure.log
@@ -773,7 +860,7 @@
 echo uname = $uname >> configure.log
 
 # udpate Makefile with the configure results
-sed < Makefile.in "
+sed < ${SRCDIR}Makefile.in "
 /^CC *=/s#=.*#=$CC#
 /^CFLAGS *=/s#=.*#=$CFLAGS#
 /^SFLAGS *=/s#=.*#=$SFLAGS#
@@ -790,6 +877,9 @@
 /^LDCONFIG *=/s#=.*#=$LDCONFIG#
 /^LDSHAREDLIBC *=/s#=.*#=$LDSHAREDLIBC#
 /^EXE *=/s#=.*#=$EXE#
+/^SRCDIR *=/s#=.*#=$SRCDIR#
+/^ZINC *=/s#=.*#=$ZINC#
+/^ZINCOUT *=/s#=.*#=$ZINCOUT#
 /^prefix *=/s#=.*#=$prefix#
 /^exec_prefix *=/s#=.*#=$exec_prefix#
 /^libdir *=/s#=.*#=$libdir#
@@ -803,7 +893,7 @@
 " > Makefile
 
 # create zlib.pc with the configure results
-sed < zlib.pc.in "
+sed < ${SRCDIR}zlib.pc.in "
 /^CC *=/s#=.*#=$CC#
 /^CFLAGS *=/s#=.*#=$CFLAGS#
 /^CPP *=/s#=.*#=$CPP#
diff --git a/Modules/zlib/crc32.c b/Modules/zlib/crc32.c
index 979a719..9580440 100644
--- a/Modules/zlib/crc32.c
+++ b/Modules/zlib/crc32.c
@@ -1,5 +1,5 @@
 /* crc32.c -- compute the CRC-32 of a data stream
- * Copyright (C) 1995-2006, 2010, 2011, 2012 Mark Adler
+ * Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  *
  * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
@@ -30,17 +30,15 @@
 
 #include "zutil.h"      /* for STDC and FAR definitions */
 
-#define local static
-
 /* Definitions for doing the crc four data bytes at a time. */
 #if !defined(NOBYFOUR) && defined(Z_U4)
 #  define BYFOUR
 #endif
 #ifdef BYFOUR
    local unsigned long crc32_little OF((unsigned long,
-                        const unsigned char FAR *, unsigned));
+                        const unsigned char FAR *, z_size_t));
    local unsigned long crc32_big OF((unsigned long,
-                        const unsigned char FAR *, unsigned));
+                        const unsigned char FAR *, z_size_t));
 #  define TBLS 8
 #else
 #  define TBLS 1
@@ -201,10 +199,10 @@
 #define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
 
 /* ========================================================================= */
-unsigned long ZEXPORT crc32(crc, buf, len)
+unsigned long ZEXPORT crc32_z(crc, buf, len)
     unsigned long crc;
     const unsigned char FAR *buf;
-    uInt len;
+    z_size_t len;
 {
     if (buf == Z_NULL) return 0UL;
 
@@ -235,8 +233,29 @@
     return crc ^ 0xffffffffUL;
 }
 
+/* ========================================================================= */
+unsigned long ZEXPORT crc32(crc, buf, len)
+    unsigned long crc;
+    const unsigned char FAR *buf;
+    uInt len;
+{
+    return crc32_z(crc, buf, len);
+}
+
 #ifdef BYFOUR
 
+/*
+   This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit
+   integer pointer type. This violates the strict aliasing rule, where a
+   compiler can assume, for optimization purposes, that two pointers to
+   fundamentally different types won't ever point to the same memory. This can
+   manifest as a problem only if one of the pointers is written to. This code
+   only reads from those pointers. So long as this code remains isolated in
+   this compilation unit, there won't be a problem. For this reason, this code
+   should not be copied and pasted into a compilation unit in which other code
+   writes to the buffer that is passed to these routines.
+ */
+
 /* ========================================================================= */
 #define DOLIT4 c ^= *buf4++; \
         c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
@@ -247,7 +266,7 @@
 local unsigned long crc32_little(crc, buf, len)
     unsigned long crc;
     const unsigned char FAR *buf;
-    unsigned len;
+    z_size_t len;
 {
     register z_crc_t c;
     register const z_crc_t FAR *buf4;
@@ -278,7 +297,7 @@
 }
 
 /* ========================================================================= */
-#define DOBIG4 c ^= *++buf4; \
+#define DOBIG4 c ^= *buf4++; \
         c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
             crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
 #define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
@@ -287,7 +306,7 @@
 local unsigned long crc32_big(crc, buf, len)
     unsigned long crc;
     const unsigned char FAR *buf;
-    unsigned len;
+    z_size_t len;
 {
     register z_crc_t c;
     register const z_crc_t FAR *buf4;
@@ -300,7 +319,6 @@
     }
 
     buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
-    buf4--;
     while (len >= 32) {
         DOBIG32;
         len -= 32;
@@ -309,7 +327,6 @@
         DOBIG4;
         len -= 4;
     }
-    buf4++;
     buf = (const unsigned char FAR *)buf4;
 
     if (len) do {
diff --git a/Modules/zlib/deflate.c b/Modules/zlib/deflate.c
index 6969577..1ec7614 100644
--- a/Modules/zlib/deflate.c
+++ b/Modules/zlib/deflate.c
@@ -1,5 +1,5 @@
 /* deflate.c -- compress data using the deflation algorithm
- * Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -52,7 +52,7 @@
 #include "deflate.h"
 
 const char deflate_copyright[] =
-   " deflate 1.2.8 Copyright 1995-2013 Jean-loup Gailly and Mark Adler ";
+   " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler ";
 /*
   If you use the zlib library in a product, an acknowledgment is welcome
   in the documentation of your product. If for some reason you cannot
@@ -73,6 +73,8 @@
 typedef block_state (*compress_func) OF((deflate_state *s, int flush));
 /* Compression function. Returns the block state after the call. */
 
+local int deflateStateCheck      OF((z_streamp strm));
+local void slide_hash     OF((deflate_state *s));
 local void fill_window    OF((deflate_state *s));
 local block_state deflate_stored OF((deflate_state *s, int flush));
 local block_state deflate_fast   OF((deflate_state *s, int flush));
@@ -84,15 +86,16 @@
 local void lm_init        OF((deflate_state *s));
 local void putShortMSB    OF((deflate_state *s, uInt b));
 local void flush_pending  OF((z_streamp strm));
-local int read_buf        OF((z_streamp strm, Bytef *buf, unsigned size));
+local unsigned read_buf   OF((z_streamp strm, Bytef *buf, unsigned size));
 #ifdef ASMV
+#  pragma message("Assembler code may have bugs -- use at your own risk")
       void match_init OF((void)); /* asm code initialization */
       uInt longest_match  OF((deflate_state *s, IPos cur_match));
 #else
 local uInt longest_match  OF((deflate_state *s, IPos cur_match));
 #endif
 
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
 local  void check_match OF((deflate_state *s, IPos start, IPos match,
                             int length));
 #endif
@@ -148,21 +151,14 @@
  * meaning.
  */
 
-#define EQUAL 0
-/* result of memcmp for equal strings */
-
-#ifndef NO_DUMMY_DECL
-struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
-#endif
-
 /* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
-#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0))
+#define RANK(f) (((f) * 2) - ((f) > 4 ? 9 : 0))
 
 /* ===========================================================================
  * Update a hash value with the given input byte
- * IN  assertion: all calls to to UPDATE_HASH are made with consecutive
- *    input characters, so that a running hash key can be computed from the
- *    previous key instead of complete recalculation each time.
+ * IN  assertion: all calls to UPDATE_HASH are made with consecutive input
+ *    characters, so that a running hash key can be computed from the previous
+ *    key instead of complete recalculation each time.
  */
 #define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
 
@@ -173,9 +169,9 @@
  * the previous length of the hash chain.
  * If this file is compiled with -DFASTEST, the compression level is forced
  * to 1, and no hash chains are maintained.
- * IN  assertion: all calls to to INSERT_STRING are made with consecutive
- *    input characters and the first MIN_MATCH bytes of str are valid
- *    (except for the last MIN_MATCH-1 bytes of the input file).
+ * IN  assertion: all calls to INSERT_STRING are made with consecutive input
+ *    characters and the first MIN_MATCH bytes of str are valid (except for
+ *    the last MIN_MATCH-1 bytes of the input file).
  */
 #ifdef FASTEST
 #define INSERT_STRING(s, str, match_head) \
@@ -197,6 +193,37 @@
     s->head[s->hash_size-1] = NIL; \
     zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
 
+/* ===========================================================================
+ * Slide the hash table when sliding the window down (could be avoided with 32
+ * bit values at the expense of memory usage). We slide even when level == 0 to
+ * keep the hash table consistent if we switch back to level > 0 later.
+ */
+local void slide_hash(s)
+    deflate_state *s;
+{
+    unsigned n, m;
+    Posf *p;
+    uInt wsize = s->w_size;
+
+    n = s->hash_size;
+    p = &s->head[n];
+    do {
+        m = *--p;
+        *p = (Pos)(m >= wsize ? m - wsize : NIL);
+    } while (--n);
+    n = wsize;
+#ifndef FASTEST
+    p = &s->prev[n];
+    do {
+        m = *--p;
+        *p = (Pos)(m >= wsize ? m - wsize : NIL);
+        /* If n is not on any hash chain, prev[n] is garbage but
+         * its value will never be used.
+         */
+    } while (--n);
+#endif
+}
+
 /* ========================================================================= */
 int ZEXPORT deflateInit_(strm, level, version, stream_size)
     z_streamp strm;
@@ -270,7 +297,7 @@
 #endif
     if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
         windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
-        strategy < 0 || strategy > Z_FIXED) {
+        strategy < 0 || strategy > Z_FIXED || (windowBits == 8 && wrap != 1)) {
         return Z_STREAM_ERROR;
     }
     if (windowBits == 8) windowBits = 9;  /* until 256-byte window bug fixed */
@@ -278,14 +305,15 @@
     if (s == Z_NULL) return Z_MEM_ERROR;
     strm->state = (struct internal_state FAR *)s;
     s->strm = strm;
+    s->status = INIT_STATE;     /* to pass state test in deflateReset() */
 
     s->wrap = wrap;
     s->gzhead = Z_NULL;
-    s->w_bits = windowBits;
+    s->w_bits = (uInt)windowBits;
     s->w_size = 1 << s->w_bits;
     s->w_mask = s->w_size - 1;
 
-    s->hash_bits = memLevel + 7;
+    s->hash_bits = (uInt)memLevel + 7;
     s->hash_size = 1 << s->hash_bits;
     s->hash_mask = s->hash_size - 1;
     s->hash_shift =  ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
@@ -319,6 +347,31 @@
     return deflateReset(strm);
 }
 
+/* =========================================================================
+ * Check for a valid deflate stream state. Return 0 if ok, 1 if not.
+ */
+local int deflateStateCheck (strm)
+    z_streamp strm;
+{
+    deflate_state *s;
+    if (strm == Z_NULL ||
+        strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
+        return 1;
+    s = strm->state;
+    if (s == Z_NULL || s->strm != strm || (s->status != INIT_STATE &&
+#ifdef GZIP
+                                           s->status != GZIP_STATE &&
+#endif
+                                           s->status != EXTRA_STATE &&
+                                           s->status != NAME_STATE &&
+                                           s->status != COMMENT_STATE &&
+                                           s->status != HCRC_STATE &&
+                                           s->status != BUSY_STATE &&
+                                           s->status != FINISH_STATE))
+        return 1;
+    return 0;
+}
+
 /* ========================================================================= */
 int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
     z_streamp strm;
@@ -331,7 +384,7 @@
     unsigned avail;
     z_const unsigned char *next;
 
-    if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
+    if (deflateStateCheck(strm) || dictionary == Z_NULL)
         return Z_STREAM_ERROR;
     s = strm->state;
     wrap = s->wrap;
@@ -389,13 +442,34 @@
 }
 
 /* ========================================================================= */
+int ZEXPORT deflateGetDictionary (strm, dictionary, dictLength)
+    z_streamp strm;
+    Bytef *dictionary;
+    uInt  *dictLength;
+{
+    deflate_state *s;
+    uInt len;
+
+    if (deflateStateCheck(strm))
+        return Z_STREAM_ERROR;
+    s = strm->state;
+    len = s->strstart + s->lookahead;
+    if (len > s->w_size)
+        len = s->w_size;
+    if (dictionary != Z_NULL && len)
+        zmemcpy(dictionary, s->window + s->strstart + s->lookahead - len, len);
+    if (dictLength != Z_NULL)
+        *dictLength = len;
+    return Z_OK;
+}
+
+/* ========================================================================= */
 int ZEXPORT deflateResetKeep (strm)
     z_streamp strm;
 {
     deflate_state *s;
 
-    if (strm == Z_NULL || strm->state == Z_NULL ||
-        strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
+    if (deflateStateCheck(strm)) {
         return Z_STREAM_ERROR;
     }
 
@@ -410,7 +484,11 @@
     if (s->wrap < 0) {
         s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
     }
-    s->status = s->wrap ? INIT_STATE : BUSY_STATE;
+    s->status =
+#ifdef GZIP
+        s->wrap == 2 ? GZIP_STATE :
+#endif
+        s->wrap ? INIT_STATE : BUSY_STATE;
     strm->adler =
 #ifdef GZIP
         s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
@@ -440,8 +518,8 @@
     z_streamp strm;
     gz_headerp head;
 {
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    if (strm->state->wrap != 2) return Z_STREAM_ERROR;
+    if (deflateStateCheck(strm) || strm->state->wrap != 2)
+        return Z_STREAM_ERROR;
     strm->state->gzhead = head;
     return Z_OK;
 }
@@ -452,7 +530,7 @@
     int *bits;
     z_streamp strm;
 {
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
     if (pending != Z_NULL)
         *pending = strm->state->pending;
     if (bits != Z_NULL)
@@ -469,7 +547,7 @@
     deflate_state *s;
     int put;
 
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
     s = strm->state;
     if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
         return Z_BUF_ERROR;
@@ -494,9 +572,8 @@
 {
     deflate_state *s;
     compress_func func;
-    int err = Z_OK;
 
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
     s = strm->state;
 
 #ifdef FASTEST
@@ -510,13 +587,22 @@
     func = configuration_table[s->level].func;
 
     if ((strategy != s->strategy || func != configuration_table[level].func) &&
-        strm->total_in != 0) {
+        s->high_water) {
         /* Flush the last buffer: */
-        err = deflate(strm, Z_BLOCK);
-        if (err == Z_BUF_ERROR && s->pending == 0)
-            err = Z_OK;
+        int err = deflate(strm, Z_BLOCK);
+        if (err == Z_STREAM_ERROR)
+            return err;
+        if (strm->avail_out == 0)
+            return Z_BUF_ERROR;
     }
     if (s->level != level) {
+        if (s->level == 0 && s->matches != 0) {
+            if (s->matches == 1)
+                slide_hash(s);
+            else
+                CLEAR_HASH(s);
+            s->matches = 0;
+        }
         s->level = level;
         s->max_lazy_match   = configuration_table[level].max_lazy;
         s->good_match       = configuration_table[level].good_length;
@@ -524,7 +610,7 @@
         s->max_chain_length = configuration_table[level].max_chain;
     }
     s->strategy = strategy;
-    return err;
+    return Z_OK;
 }
 
 /* ========================================================================= */
@@ -537,12 +623,12 @@
 {
     deflate_state *s;
 
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
     s = strm->state;
-    s->good_match = good_length;
-    s->max_lazy_match = max_lazy;
+    s->good_match = (uInt)good_length;
+    s->max_lazy_match = (uInt)max_lazy;
     s->nice_match = nice_length;
-    s->max_chain_length = max_chain;
+    s->max_chain_length = (uInt)max_chain;
     return Z_OK;
 }
 
@@ -569,14 +655,13 @@
 {
     deflate_state *s;
     uLong complen, wraplen;
-    Bytef *str;
 
     /* conservative upper bound for compressed data */
     complen = sourceLen +
               ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
 
     /* if can't get parameters, return conservative bound plus zlib wrapper */
-    if (strm == Z_NULL || strm->state == Z_NULL)
+    if (deflateStateCheck(strm))
         return complen + 6;
 
     /* compute wrapper length */
@@ -588,9 +673,11 @@
     case 1:                                 /* zlib wrapper */
         wraplen = 6 + (s->strstart ? 4 : 0);
         break;
+#ifdef GZIP
     case 2:                                 /* gzip wrapper */
         wraplen = 18;
         if (s->gzhead != Z_NULL) {          /* user-supplied gzip header */
+            Bytef *str;
             if (s->gzhead->extra != Z_NULL)
                 wraplen += 2 + s->gzhead->extra_len;
             str = s->gzhead->name;
@@ -607,6 +694,7 @@
                 wraplen += 2;
         }
         break;
+#endif
     default:                                /* for compiler happiness */
         wraplen = 6;
     }
@@ -634,10 +722,10 @@
 }
 
 /* =========================================================================
- * Flush as much pending output as possible. All deflate() output goes
- * through this function so some applications may wish to modify it
- * to avoid allocating a large strm->next_out buffer and copying into it.
- * (See also read_buf()).
+ * Flush as much pending output as possible. All deflate() output, except for
+ * some deflate_stored() output, goes through this function so some
+ * applications may wish to modify it to avoid allocating a large
+ * strm->next_out buffer and copying into it. (See also read_buf()).
  */
 local void flush_pending(strm)
     z_streamp strm;
@@ -654,13 +742,23 @@
     strm->next_out  += len;
     s->pending_out  += len;
     strm->total_out += len;
-    strm->avail_out  -= len;
-    s->pending -= len;
+    strm->avail_out -= len;
+    s->pending      -= len;
     if (s->pending == 0) {
         s->pending_out = s->pending_buf;
     }
 }
 
+/* ===========================================================================
+ * Update the header CRC with the bytes s->pending_buf[beg..s->pending - 1].
+ */
+#define HCRC_UPDATE(beg) \
+    do { \
+        if (s->gzhead->hcrc && s->pending > (beg)) \
+            strm->adler = crc32(strm->adler, s->pending_buf + (beg), \
+                                s->pending - (beg)); \
+    } while (0)
+
 /* ========================================================================= */
 int ZEXPORT deflate (strm, flush)
     z_streamp strm;
@@ -669,203 +767,21 @@
     int old_flush; /* value of flush param for previous deflate call */
     deflate_state *s;
 
-    if (strm == Z_NULL || strm->state == Z_NULL ||
-        flush > Z_BLOCK || flush < 0) {
+    if (deflateStateCheck(strm) || flush > Z_BLOCK || flush < 0) {
         return Z_STREAM_ERROR;
     }
     s = strm->state;
 
     if (strm->next_out == Z_NULL ||
-        (strm->next_in == Z_NULL && strm->avail_in != 0) ||
+        (strm->avail_in != 0 && strm->next_in == Z_NULL) ||
         (s->status == FINISH_STATE && flush != Z_FINISH)) {
         ERR_RETURN(strm, Z_STREAM_ERROR);
     }
     if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
 
-    s->strm = strm; /* just in case */
     old_flush = s->last_flush;
     s->last_flush = flush;
 
-    /* Write the header */
-    if (s->status == INIT_STATE) {
-#ifdef GZIP
-        if (s->wrap == 2) {
-            strm->adler = crc32(0L, Z_NULL, 0);
-            put_byte(s, 31);
-            put_byte(s, 139);
-            put_byte(s, 8);
-            if (s->gzhead == Z_NULL) {
-                put_byte(s, 0);
-                put_byte(s, 0);
-                put_byte(s, 0);
-                put_byte(s, 0);
-                put_byte(s, 0);
-                put_byte(s, s->level == 9 ? 2 :
-                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
-                             4 : 0));
-                put_byte(s, OS_CODE);
-                s->status = BUSY_STATE;
-            }
-            else {
-                put_byte(s, (s->gzhead->text ? 1 : 0) +
-                            (s->gzhead->hcrc ? 2 : 0) +
-                            (s->gzhead->extra == Z_NULL ? 0 : 4) +
-                            (s->gzhead->name == Z_NULL ? 0 : 8) +
-                            (s->gzhead->comment == Z_NULL ? 0 : 16)
-                        );
-                put_byte(s, (Byte)(s->gzhead->time & 0xff));
-                put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
-                put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
-                put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
-                put_byte(s, s->level == 9 ? 2 :
-                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
-                             4 : 0));
-                put_byte(s, s->gzhead->os & 0xff);
-                if (s->gzhead->extra != Z_NULL) {
-                    put_byte(s, s->gzhead->extra_len & 0xff);
-                    put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
-                }
-                if (s->gzhead->hcrc)
-                    strm->adler = crc32(strm->adler, s->pending_buf,
-                                        s->pending);
-                s->gzindex = 0;
-                s->status = EXTRA_STATE;
-            }
-        }
-        else
-#endif
-        {
-            uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
-            uInt level_flags;
-
-            if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
-                level_flags = 0;
-            else if (s->level < 6)
-                level_flags = 1;
-            else if (s->level == 6)
-                level_flags = 2;
-            else
-                level_flags = 3;
-            header |= (level_flags << 6);
-            if (s->strstart != 0) header |= PRESET_DICT;
-            header += 31 - (header % 31);
-
-            s->status = BUSY_STATE;
-            putShortMSB(s, header);
-
-            /* Save the adler32 of the preset dictionary: */
-            if (s->strstart != 0) {
-                putShortMSB(s, (uInt)(strm->adler >> 16));
-                putShortMSB(s, (uInt)(strm->adler & 0xffff));
-            }
-            strm->adler = adler32(0L, Z_NULL, 0);
-        }
-    }
-#ifdef GZIP
-    if (s->status == EXTRA_STATE) {
-        if (s->gzhead->extra != Z_NULL) {
-            uInt beg = s->pending;  /* start of bytes to update crc */
-
-            while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {
-                if (s->pending == s->pending_buf_size) {
-                    if (s->gzhead->hcrc && s->pending > beg)
-                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                            s->pending - beg);
-                    flush_pending(strm);
-                    beg = s->pending;
-                    if (s->pending == s->pending_buf_size)
-                        break;
-                }
-                put_byte(s, s->gzhead->extra[s->gzindex]);
-                s->gzindex++;
-            }
-            if (s->gzhead->hcrc && s->pending > beg)
-                strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                    s->pending - beg);
-            if (s->gzindex == s->gzhead->extra_len) {
-                s->gzindex = 0;
-                s->status = NAME_STATE;
-            }
-        }
-        else
-            s->status = NAME_STATE;
-    }
-    if (s->status == NAME_STATE) {
-        if (s->gzhead->name != Z_NULL) {
-            uInt beg = s->pending;  /* start of bytes to update crc */
-            int val;
-
-            do {
-                if (s->pending == s->pending_buf_size) {
-                    if (s->gzhead->hcrc && s->pending > beg)
-                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                            s->pending - beg);
-                    flush_pending(strm);
-                    beg = s->pending;
-                    if (s->pending == s->pending_buf_size) {
-                        val = 1;
-                        break;
-                    }
-                }
-                val = s->gzhead->name[s->gzindex++];
-                put_byte(s, val);
-            } while (val != 0);
-            if (s->gzhead->hcrc && s->pending > beg)
-                strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                    s->pending - beg);
-            if (val == 0) {
-                s->gzindex = 0;
-                s->status = COMMENT_STATE;
-            }
-        }
-        else
-            s->status = COMMENT_STATE;
-    }
-    if (s->status == COMMENT_STATE) {
-        if (s->gzhead->comment != Z_NULL) {
-            uInt beg = s->pending;  /* start of bytes to update crc */
-            int val;
-
-            do {
-                if (s->pending == s->pending_buf_size) {
-                    if (s->gzhead->hcrc && s->pending > beg)
-                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                            s->pending - beg);
-                    flush_pending(strm);
-                    beg = s->pending;
-                    if (s->pending == s->pending_buf_size) {
-                        val = 1;
-                        break;
-                    }
-                }
-                val = s->gzhead->comment[s->gzindex++];
-                put_byte(s, val);
-            } while (val != 0);
-            if (s->gzhead->hcrc && s->pending > beg)
-                strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                    s->pending - beg);
-            if (val == 0)
-                s->status = HCRC_STATE;
-        }
-        else
-            s->status = HCRC_STATE;
-    }
-    if (s->status == HCRC_STATE) {
-        if (s->gzhead->hcrc) {
-            if (s->pending + 2 > s->pending_buf_size)
-                flush_pending(strm);
-            if (s->pending + 2 <= s->pending_buf_size) {
-                put_byte(s, (Byte)(strm->adler & 0xff));
-                put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
-                strm->adler = crc32(0L, Z_NULL, 0);
-                s->status = BUSY_STATE;
-            }
-        }
-        else
-            s->status = BUSY_STATE;
-    }
-#endif
-
     /* Flush as much pending output as possible */
     if (s->pending != 0) {
         flush_pending(strm);
@@ -894,15 +810,197 @@
         ERR_RETURN(strm, Z_BUF_ERROR);
     }
 
+    /* Write the header */
+    if (s->status == INIT_STATE) {
+        /* zlib header */
+        uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
+        uInt level_flags;
+
+        if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
+            level_flags = 0;
+        else if (s->level < 6)
+            level_flags = 1;
+        else if (s->level == 6)
+            level_flags = 2;
+        else
+            level_flags = 3;
+        header |= (level_flags << 6);
+        if (s->strstart != 0) header |= PRESET_DICT;
+        header += 31 - (header % 31);
+
+        putShortMSB(s, header);
+
+        /* Save the adler32 of the preset dictionary: */
+        if (s->strstart != 0) {
+            putShortMSB(s, (uInt)(strm->adler >> 16));
+            putShortMSB(s, (uInt)(strm->adler & 0xffff));
+        }
+        strm->adler = adler32(0L, Z_NULL, 0);
+        s->status = BUSY_STATE;
+
+        /* Compression must start with an empty pending buffer */
+        flush_pending(strm);
+        if (s->pending != 0) {
+            s->last_flush = -1;
+            return Z_OK;
+        }
+    }
+#ifdef GZIP
+    if (s->status == GZIP_STATE) {
+        /* gzip header */
+        strm->adler = crc32(0L, Z_NULL, 0);
+        put_byte(s, 31);
+        put_byte(s, 139);
+        put_byte(s, 8);
+        if (s->gzhead == Z_NULL) {
+            put_byte(s, 0);
+            put_byte(s, 0);
+            put_byte(s, 0);
+            put_byte(s, 0);
+            put_byte(s, 0);
+            put_byte(s, s->level == 9 ? 2 :
+                     (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+                      4 : 0));
+            put_byte(s, OS_CODE);
+            s->status = BUSY_STATE;
+
+            /* Compression must start with an empty pending buffer */
+            flush_pending(strm);
+            if (s->pending != 0) {
+                s->last_flush = -1;
+                return Z_OK;
+            }
+        }
+        else {
+            put_byte(s, (s->gzhead->text ? 1 : 0) +
+                     (s->gzhead->hcrc ? 2 : 0) +
+                     (s->gzhead->extra == Z_NULL ? 0 : 4) +
+                     (s->gzhead->name == Z_NULL ? 0 : 8) +
+                     (s->gzhead->comment == Z_NULL ? 0 : 16)
+                     );
+            put_byte(s, (Byte)(s->gzhead->time & 0xff));
+            put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
+            put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
+            put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
+            put_byte(s, s->level == 9 ? 2 :
+                     (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+                      4 : 0));
+            put_byte(s, s->gzhead->os & 0xff);
+            if (s->gzhead->extra != Z_NULL) {
+                put_byte(s, s->gzhead->extra_len & 0xff);
+                put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
+            }
+            if (s->gzhead->hcrc)
+                strm->adler = crc32(strm->adler, s->pending_buf,
+                                    s->pending);
+            s->gzindex = 0;
+            s->status = EXTRA_STATE;
+        }
+    }
+    if (s->status == EXTRA_STATE) {
+        if (s->gzhead->extra != Z_NULL) {
+            ulg beg = s->pending;   /* start of bytes to update crc */
+            uInt left = (s->gzhead->extra_len & 0xffff) - s->gzindex;
+            while (s->pending + left > s->pending_buf_size) {
+                uInt copy = s->pending_buf_size - s->pending;
+                zmemcpy(s->pending_buf + s->pending,
+                        s->gzhead->extra + s->gzindex, copy);
+                s->pending = s->pending_buf_size;
+                HCRC_UPDATE(beg);
+                s->gzindex += copy;
+                flush_pending(strm);
+                if (s->pending != 0) {
+                    s->last_flush = -1;
+                    return Z_OK;
+                }
+                beg = 0;
+                left -= copy;
+            }
+            zmemcpy(s->pending_buf + s->pending,
+                    s->gzhead->extra + s->gzindex, left);
+            s->pending += left;
+            HCRC_UPDATE(beg);
+            s->gzindex = 0;
+        }
+        s->status = NAME_STATE;
+    }
+    if (s->status == NAME_STATE) {
+        if (s->gzhead->name != Z_NULL) {
+            ulg beg = s->pending;   /* start of bytes to update crc */
+            int val;
+            do {
+                if (s->pending == s->pending_buf_size) {
+                    HCRC_UPDATE(beg);
+                    flush_pending(strm);
+                    if (s->pending != 0) {
+                        s->last_flush = -1;
+                        return Z_OK;
+                    }
+                    beg = 0;
+                }
+                val = s->gzhead->name[s->gzindex++];
+                put_byte(s, val);
+            } while (val != 0);
+            HCRC_UPDATE(beg);
+            s->gzindex = 0;
+        }
+        s->status = COMMENT_STATE;
+    }
+    if (s->status == COMMENT_STATE) {
+        if (s->gzhead->comment != Z_NULL) {
+            ulg beg = s->pending;   /* start of bytes to update crc */
+            int val;
+            do {
+                if (s->pending == s->pending_buf_size) {
+                    HCRC_UPDATE(beg);
+                    flush_pending(strm);
+                    if (s->pending != 0) {
+                        s->last_flush = -1;
+                        return Z_OK;
+                    }
+                    beg = 0;
+                }
+                val = s->gzhead->comment[s->gzindex++];
+                put_byte(s, val);
+            } while (val != 0);
+            HCRC_UPDATE(beg);
+        }
+        s->status = HCRC_STATE;
+    }
+    if (s->status == HCRC_STATE) {
+        if (s->gzhead->hcrc) {
+            if (s->pending + 2 > s->pending_buf_size) {
+                flush_pending(strm);
+                if (s->pending != 0) {
+                    s->last_flush = -1;
+                    return Z_OK;
+                }
+            }
+            put_byte(s, (Byte)(strm->adler & 0xff));
+            put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+            strm->adler = crc32(0L, Z_NULL, 0);
+        }
+        s->status = BUSY_STATE;
+
+        /* Compression must start with an empty pending buffer */
+        flush_pending(strm);
+        if (s->pending != 0) {
+            s->last_flush = -1;
+            return Z_OK;
+        }
+    }
+#endif
+
     /* Start a new block or continue the current one.
      */
     if (strm->avail_in != 0 || s->lookahead != 0 ||
         (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
         block_state bstate;
 
-        bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
-                    (s->strategy == Z_RLE ? deflate_rle(s, flush) :
-                        (*(configuration_table[s->level].func))(s, flush));
+        bstate = s->level == 0 ? deflate_stored(s, flush) :
+                 s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
+                 s->strategy == Z_RLE ? deflate_rle(s, flush) :
+                 (*(configuration_table[s->level].func))(s, flush);
 
         if (bstate == finish_started || bstate == finish_done) {
             s->status = FINISH_STATE;
@@ -944,7 +1042,6 @@
             }
         }
     }
-    Assert(strm->avail_out > 0, "bug2");
 
     if (flush != Z_FINISH) return Z_OK;
     if (s->wrap <= 0) return Z_STREAM_END;
@@ -981,18 +1078,9 @@
 {
     int status;
 
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
 
     status = strm->state->status;
-    if (status != INIT_STATE &&
-        status != EXTRA_STATE &&
-        status != NAME_STATE &&
-        status != COMMENT_STATE &&
-        status != HCRC_STATE &&
-        status != BUSY_STATE &&
-        status != FINISH_STATE) {
-      return Z_STREAM_ERROR;
-    }
 
     /* Deallocate in reverse order of allocations: */
     TRY_FREE(strm, strm->state->pending_buf);
@@ -1023,7 +1111,7 @@
     ushf *overlay;
 
 
-    if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
+    if (deflateStateCheck(source) || dest == Z_NULL) {
         return Z_STREAM_ERROR;
     }
 
@@ -1073,7 +1161,7 @@
  * allocating a large strm->next_in buffer and copying from it.
  * (See also flush_pending()).
  */
-local int read_buf(strm, buf, size)
+local unsigned read_buf(strm, buf, size)
     z_streamp strm;
     Bytef *buf;
     unsigned size;
@@ -1097,7 +1185,7 @@
     strm->next_in  += len;
     strm->total_in += len;
 
-    return (int)len;
+    return len;
 }
 
 /* ===========================================================================
@@ -1151,9 +1239,9 @@
 {
     unsigned chain_length = s->max_chain_length;/* max hash chain length */
     register Bytef *scan = s->window + s->strstart; /* current string */
-    register Bytef *match;                       /* matched string */
+    register Bytef *match;                      /* matched string */
     register int len;                           /* length of current match */
-    int best_len = s->prev_length;              /* best match length so far */
+    int best_len = (int)s->prev_length;         /* best match length so far */
     int nice_match = s->nice_match;             /* stop if match long enough */
     IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
         s->strstart - (IPos)MAX_DIST(s) : NIL;
@@ -1188,7 +1276,7 @@
     /* Do not look for matches beyond the end of the input. This is necessary
      * to make deflate deterministic.
      */
-    if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+    if ((uInt)nice_match > s->lookahead) nice_match = (int)s->lookahead;
 
     Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
 
@@ -1349,7 +1437,11 @@
 
 #endif /* FASTEST */
 
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
+
+#define EQUAL 0
+/* result of memcmp for equal strings */
+
 /* ===========================================================================
  * Check that the match at match_start is indeed a match.
  */
@@ -1375,7 +1467,7 @@
 }
 #else
 #  define check_match(s, start, match, length)
-#endif /* DEBUG */
+#endif /* ZLIB_DEBUG */
 
 /* ===========================================================================
  * Fill the window when the lookahead becomes insufficient.
@@ -1390,8 +1482,7 @@
 local void fill_window(s)
     deflate_state *s;
 {
-    register unsigned n, m;
-    register Posf *p;
+    unsigned n;
     unsigned more;    /* Amount of free space at the end of the window. */
     uInt wsize = s->w_size;
 
@@ -1418,35 +1509,11 @@
          */
         if (s->strstart >= wsize+MAX_DIST(s)) {
 
-            zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
+            zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more);
             s->match_start -= wsize;
             s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */
             s->block_start -= (long) wsize;
-
-            /* Slide the hash table (could be avoided with 32 bit values
-               at the expense of memory usage). We slide even when level == 0
-               to keep the hash table consistent if we switch back to level > 0
-               later. (Using level 0 permanently is not an optimal usage of
-               zlib, so we don't care about this pathological case.)
-             */
-            n = s->hash_size;
-            p = &s->head[n];
-            do {
-                m = *--p;
-                *p = (Pos)(m >= wsize ? m-wsize : NIL);
-            } while (--n);
-
-            n = wsize;
-#ifndef FASTEST
-            p = &s->prev[n];
-            do {
-                m = *--p;
-                *p = (Pos)(m >= wsize ? m-wsize : NIL);
-                /* If n is not on any hash chain, prev[n] is garbage but
-                 * its value will never be used.
-                 */
-            } while (--n);
-#endif
+            slide_hash(s);
             more += wsize;
         }
         if (s->strm->avail_in == 0) break;
@@ -1552,70 +1619,199 @@
    if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \
 }
 
+/* Maximum stored block length in deflate format (not including header). */
+#define MAX_STORED 65535
+
+/* Minimum of a and b. */
+#define MIN(a, b) ((a) > (b) ? (b) : (a))
+
 /* ===========================================================================
  * Copy without compression as much as possible from the input stream, return
  * the current block state.
- * This function does not insert new strings in the dictionary since
- * uncompressible data is probably not useful. This function is used
- * only for the level=0 compression option.
- * NOTE: this function should be optimized to avoid extra copying from
- * window to pending_buf.
+ *
+ * In case deflateParams() is used to later switch to a non-zero compression
+ * level, s->matches (otherwise unused when storing) keeps track of the number
+ * of hash table slides to perform. If s->matches is 1, then one hash table
+ * slide will be done when switching. If s->matches is 2, the maximum value
+ * allowed here, then the hash table will be cleared, since two or more slides
+ * is the same as a clear.
+ *
+ * deflate_stored() is written to minimize the number of times an input byte is
+ * copied. It is most efficient with large input and output buffers, which
+ * maximizes the opportunites to have a single copy from next_in to next_out.
  */
 local block_state deflate_stored(s, flush)
     deflate_state *s;
     int flush;
 {
-    /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
-     * to pending_buf_size, and each stored block has a 5 byte header:
+    /* Smallest worthy block size when not flushing or finishing. By default
+     * this is 32K. This can be as small as 507 bytes for memLevel == 1. For
+     * large input and output buffers, the stored block size will be larger.
      */
-    ulg max_block_size = 0xffff;
-    ulg max_start;
+    unsigned min_block = MIN(s->pending_buf_size - 5, s->w_size);
 
-    if (max_block_size > s->pending_buf_size - 5) {
-        max_block_size = s->pending_buf_size - 5;
-    }
-
-    /* Copy as much as possible from input to output: */
-    for (;;) {
-        /* Fill the window as much as possible: */
-        if (s->lookahead <= 1) {
-
-            Assert(s->strstart < s->w_size+MAX_DIST(s) ||
-                   s->block_start >= (long)s->w_size, "slide too late");
-
-            fill_window(s);
-            if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
-
-            if (s->lookahead == 0) break; /* flush the current block */
-        }
-        Assert(s->block_start >= 0L, "block gone");
-
-        s->strstart += s->lookahead;
-        s->lookahead = 0;
-
-        /* Emit a stored block if pending_buf will be full: */
-        max_start = s->block_start + max_block_size;
-        if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
-            /* strstart == 0 is possible when wraparound on 16-bit machine */
-            s->lookahead = (uInt)(s->strstart - max_start);
-            s->strstart = (uInt)max_start;
-            FLUSH_BLOCK(s, 0);
-        }
-        /* Flush if we may have to slide, otherwise block_start may become
-         * negative and the data will be gone:
+    /* Copy as many min_block or larger stored blocks directly to next_out as
+     * possible. If flushing, copy the remaining available input to next_out as
+     * stored blocks, if there is enough space.
+     */
+    unsigned len, left, have, last = 0;
+    unsigned used = s->strm->avail_in;
+    do {
+        /* Set len to the maximum size block that we can copy directly with the
+         * available input data and output space. Set left to how much of that
+         * would be copied from what's left in the window.
          */
-        if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
-            FLUSH_BLOCK(s, 0);
+        len = MAX_STORED;       /* maximum deflate stored block length */
+        have = (s->bi_valid + 42) >> 3;         /* number of header bytes */
+        if (s->strm->avail_out < have)          /* need room for header */
+            break;
+            /* maximum stored block length that will fit in avail_out: */
+        have = s->strm->avail_out - have;
+        left = s->strstart - s->block_start;    /* bytes left in window */
+        if (len > (ulg)left + s->strm->avail_in)
+            len = left + s->strm->avail_in;     /* limit len to the input */
+        if (len > have)
+            len = have;                         /* limit len to the output */
+
+        /* If the stored block would be less than min_block in length, or if
+         * unable to copy all of the available input when flushing, then try
+         * copying to the window and the pending buffer instead. Also don't
+         * write an empty block when flushing -- deflate() does that.
+         */
+        if (len < min_block && ((len == 0 && flush != Z_FINISH) ||
+                                flush == Z_NO_FLUSH ||
+                                len != left + s->strm->avail_in))
+            break;
+
+        /* Make a dummy stored block in pending to get the header bytes,
+         * including any pending bits. This also updates the debugging counts.
+         */
+        last = flush == Z_FINISH && len == left + s->strm->avail_in ? 1 : 0;
+        _tr_stored_block(s, (char *)0, 0L, last);
+
+        /* Replace the lengths in the dummy stored block with len. */
+        s->pending_buf[s->pending - 4] = len;
+        s->pending_buf[s->pending - 3] = len >> 8;
+        s->pending_buf[s->pending - 2] = ~len;
+        s->pending_buf[s->pending - 1] = ~len >> 8;
+
+        /* Write the stored block header bytes. */
+        flush_pending(s->strm);
+
+#ifdef ZLIB_DEBUG
+        /* Update debugging counts for the data about to be copied. */
+        s->compressed_len += len << 3;
+        s->bits_sent += len << 3;
+#endif
+
+        /* Copy uncompressed bytes from the window to next_out. */
+        if (left) {
+            if (left > len)
+                left = len;
+            zmemcpy(s->strm->next_out, s->window + s->block_start, left);
+            s->strm->next_out += left;
+            s->strm->avail_out -= left;
+            s->strm->total_out += left;
+            s->block_start += left;
+            len -= left;
         }
+
+        /* Copy uncompressed bytes directly from next_in to next_out, updating
+         * the check value.
+         */
+        if (len) {
+            read_buf(s->strm, s->strm->next_out, len);
+            s->strm->next_out += len;
+            s->strm->avail_out -= len;
+            s->strm->total_out += len;
+        }
+    } while (last == 0);
+
+    /* Update the sliding window with the last s->w_size bytes of the copied
+     * data, or append all of the copied data to the existing window if less
+     * than s->w_size bytes were copied. Also update the number of bytes to
+     * insert in the hash tables, in the event that deflateParams() switches to
+     * a non-zero compression level.
+     */
+    used -= s->strm->avail_in;      /* number of input bytes directly copied */
+    if (used) {
+        /* If any input was used, then no unused input remains in the window,
+         * therefore s->block_start == s->strstart.
+         */
+        if (used >= s->w_size) {    /* supplant the previous history */
+            s->matches = 2;         /* clear hash */
+            zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);
+            s->strstart = s->w_size;
+        }
+        else {
+            if (s->window_size - s->strstart <= used) {
+                /* Slide the window down. */
+                s->strstart -= s->w_size;
+                zmemcpy(s->window, s->window + s->w_size, s->strstart);
+                if (s->matches < 2)
+                    s->matches++;   /* add a pending slide_hash() */
+            }
+            zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);
+            s->strstart += used;
+        }
+        s->block_start = s->strstart;
+        s->insert += MIN(used, s->w_size - s->insert);
     }
-    s->insert = 0;
-    if (flush == Z_FINISH) {
-        FLUSH_BLOCK(s, 1);
+    if (s->high_water < s->strstart)
+        s->high_water = s->strstart;
+
+    /* If the last block was written to next_out, then done. */
+    if (last)
         return finish_done;
+
+    /* If flushing and all input has been consumed, then done. */
+    if (flush != Z_NO_FLUSH && flush != Z_FINISH &&
+        s->strm->avail_in == 0 && (long)s->strstart == s->block_start)
+        return block_done;
+
+    /* Fill the window with any remaining input. */
+    have = s->window_size - s->strstart - 1;
+    if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) {
+        /* Slide the window down. */
+        s->block_start -= s->w_size;
+        s->strstart -= s->w_size;
+        zmemcpy(s->window, s->window + s->w_size, s->strstart);
+        if (s->matches < 2)
+            s->matches++;           /* add a pending slide_hash() */
+        have += s->w_size;          /* more space now */
     }
-    if ((long)s->strstart > s->block_start)
-        FLUSH_BLOCK(s, 0);
-    return block_done;
+    if (have > s->strm->avail_in)
+        have = s->strm->avail_in;
+    if (have) {
+        read_buf(s->strm, s->window + s->strstart, have);
+        s->strstart += have;
+    }
+    if (s->high_water < s->strstart)
+        s->high_water = s->strstart;
+
+    /* There was not enough avail_out to write a complete worthy or flushed
+     * stored block to next_out. Write a stored block to pending instead, if we
+     * have enough input for a worthy block, or if flushing and there is enough
+     * room for the remaining input as a stored block in the pending buffer.
+     */
+    have = (s->bi_valid + 42) >> 3;         /* number of header bytes */
+        /* maximum stored block length that will fit in pending: */
+    have = MIN(s->pending_buf_size - have, MAX_STORED);
+    min_block = MIN(have, s->w_size);
+    left = s->strstart - s->block_start;
+    if (left >= min_block ||
+        ((left || flush == Z_FINISH) && flush != Z_NO_FLUSH &&
+         s->strm->avail_in == 0 && left <= have)) {
+        len = MIN(left, have);
+        last = flush == Z_FINISH && s->strm->avail_in == 0 &&
+               len == left ? 1 : 0;
+        _tr_stored_block(s, (charf *)s->window + s->block_start, len, last);
+        s->block_start += len;
+        flush_pending(s->strm);
+    }
+
+    /* We've done all we can with the available input and output. */
+    return last ? finish_started : need_more;
 }
 
 /* ===========================================================================
@@ -1892,7 +2088,7 @@
                          prev == *++scan && prev == *++scan &&
                          prev == *++scan && prev == *++scan &&
                          scan < strend);
-                s->match_length = MAX_MATCH - (int)(strend - scan);
+                s->match_length = MAX_MATCH - (uInt)(strend - scan);
                 if (s->match_length > s->lookahead)
                     s->match_length = s->lookahead;
             }
diff --git a/Modules/zlib/deflate.h b/Modules/zlib/deflate.h
index ce0299e..23ecdd3 100644
--- a/Modules/zlib/deflate.h
+++ b/Modules/zlib/deflate.h
@@ -1,5 +1,5 @@
 /* deflate.h -- internal compression state
- * Copyright (C) 1995-2012 Jean-loup Gailly
+ * Copyright (C) 1995-2016 Jean-loup Gailly
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -51,13 +51,16 @@
 #define Buf_size 16
 /* size of bit buffer in bi_buf */
 
-#define INIT_STATE    42
-#define EXTRA_STATE   69
-#define NAME_STATE    73
-#define COMMENT_STATE 91
-#define HCRC_STATE   103
-#define BUSY_STATE   113
-#define FINISH_STATE 666
+#define INIT_STATE    42    /* zlib header -> BUSY_STATE */
+#ifdef GZIP
+#  define GZIP_STATE  57    /* gzip header -> BUSY_STATE | EXTRA_STATE */
+#endif
+#define EXTRA_STATE   69    /* gzip extra block -> NAME_STATE */
+#define NAME_STATE    73    /* gzip file name -> COMMENT_STATE */
+#define COMMENT_STATE 91    /* gzip comment -> HCRC_STATE */
+#define HCRC_STATE   103    /* gzip header CRC -> BUSY_STATE */
+#define BUSY_STATE   113    /* deflate -> FINISH_STATE */
+#define FINISH_STATE 666    /* stream complete */
 /* Stream status */
 
 
@@ -83,7 +86,7 @@
 typedef struct tree_desc_s {
     ct_data *dyn_tree;           /* the dynamic tree */
     int     max_code;            /* largest code with non zero frequency */
-    static_tree_desc *stat_desc; /* the corresponding static tree */
+    const static_tree_desc *stat_desc;  /* the corresponding static tree */
 } FAR tree_desc;
 
 typedef ush Pos;
@@ -100,10 +103,10 @@
     Bytef *pending_buf;  /* output still pending */
     ulg   pending_buf_size; /* size of pending_buf */
     Bytef *pending_out;  /* next pending byte to output to the stream */
-    uInt   pending;      /* nb of bytes in the pending buffer */
+    ulg   pending;       /* nb of bytes in the pending buffer */
     int   wrap;          /* bit 0 true for zlib, bit 1 true for gzip */
     gz_headerp  gzhead;  /* gzip header information to write */
-    uInt   gzindex;      /* where in extra, name, or comment */
+    ulg   gzindex;       /* where in extra, name, or comment */
     Byte  method;        /* can only be DEFLATED */
     int   last_flush;    /* value of flush param for previous deflate call */
 
@@ -249,7 +252,7 @@
     uInt matches;       /* number of string matches in current block */
     uInt insert;        /* bytes at end of window left to insert */
 
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
     ulg compressed_len; /* total bit length of compressed file mod 2^32 */
     ulg bits_sent;      /* bit length of compressed data sent mod 2^32 */
 #endif
@@ -275,7 +278,7 @@
 /* Output a byte on the stream.
  * IN assertion: there is enough room in pending_buf.
  */
-#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
+#define put_byte(s, c) {s->pending_buf[s->pending++] = (Bytef)(c);}
 
 
 #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
@@ -309,7 +312,7 @@
  * used.
  */
 
-#ifndef DEBUG
+#ifndef ZLIB_DEBUG
 /* Inline versions of _tr_tally for speed: */
 
 #if defined(GEN_TREES_H) || !defined(STDC)
@@ -328,8 +331,8 @@
     flush = (s->last_lit == s->lit_bufsize-1); \
    }
 # define _tr_tally_dist(s, distance, length, flush) \
-  { uch len = (length); \
-    ush dist = (distance); \
+  { uch len = (uch)(length); \
+    ush dist = (ush)(distance); \
     s->d_buf[s->last_lit] = dist; \
     s->l_buf[s->last_lit++] = len; \
     dist--; \
diff --git a/Modules/zlib/gzguts.h b/Modules/zlib/gzguts.h
index d87659d..990a4d2 100644
--- a/Modules/zlib/gzguts.h
+++ b/Modules/zlib/gzguts.h
@@ -1,5 +1,5 @@
 /* gzguts.h -- zlib internal header definitions for gz* operations
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -25,6 +25,10 @@
 #  include <stdlib.h>
 #  include <limits.h>
 #endif
+
+#ifndef _POSIX_SOURCE
+#  define _POSIX_SOURCE
+#endif
 #include <fcntl.h>
 
 #ifdef _WIN32
@@ -35,6 +39,10 @@
 #  include <io.h>
 #endif
 
+#if defined(_WIN32) || defined(__CYGWIN__)
+#  define WIDECHAR
+#endif
+
 #ifdef WINAPI_FAMILY
 #  define open _open
 #  define read _read
@@ -95,18 +103,19 @@
 #  endif
 #endif
 
-/* unlike snprintf (which is required in C99, yet still not supported by
-   Microsoft more than a decade later!), _snprintf does not guarantee null
-   termination of the result -- however this is only used in gzlib.c where
+/* unlike snprintf (which is required in C99), _snprintf does not guarantee
+   null termination of the result -- however this is only used in gzlib.c where
    the result is assured to fit in the space provided */
-#ifdef _MSC_VER
+#if defined(_MSC_VER) && _MSC_VER < 1900
 #  define snprintf _snprintf
 #endif
 
 #ifndef local
 #  define local static
 #endif
-/* compile with -Dlocal if your debugger can't find static symbols */
+/* since "static" is used to mean two completely different things in C, we
+   define "local" for the non-static meaning of "static", for readability
+   (compile with -Dlocal if your debugger can't find static symbols) */
 
 /* gz* functions always use library allocation functions */
 #ifndef STDC
@@ -170,7 +179,7 @@
     char *path;             /* path or fd for error messages */
     unsigned size;          /* buffer size, zero if not allocated yet */
     unsigned want;          /* requested buffer size, default is GZBUFSIZE */
-    unsigned char *in;      /* input buffer */
+    unsigned char *in;      /* input buffer (double-sized when writing) */
     unsigned char *out;     /* output buffer (double-sized when reading) */
     int direct;             /* 0 if processing gzip, 1 if transparent */
         /* just for reading */
diff --git a/Modules/zlib/gzlib.c b/Modules/zlib/gzlib.c
index fae202e..4105e6a 100644
--- a/Modules/zlib/gzlib.c
+++ b/Modules/zlib/gzlib.c
@@ -1,11 +1,11 @@
 /* gzlib.c -- zlib functions common to reading and writing gzip files
- * Copyright (C) 2004, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004-2017 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
 #include "gzguts.h"
 
-#if defined(_WIN32) && !defined(__BORLANDC__)
+#if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__)
 #  define LSEEK _lseeki64
 #else
 #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
@@ -94,7 +94,7 @@
     const char *mode;
 {
     gz_statep state;
-    size_t len;
+    z_size_t len;
     int oflag;
 #ifdef O_CLOEXEC
     int cloexec = 0;
@@ -188,10 +188,10 @@
     }
 
     /* save the path name for error messages */
-#ifdef _WIN32
+#ifdef WIDECHAR
     if (fd == -2) {
         len = wcstombs(NULL, path, 0);
-        if (len == (size_t)-1)
+        if (len == (z_size_t)-1)
             len = 0;
     }
     else
@@ -202,7 +202,7 @@
         free(state);
         return NULL;
     }
-#ifdef _WIN32
+#ifdef WIDECHAR
     if (fd == -2)
         if (len)
             wcstombs(state->path, path, len + 1);
@@ -211,7 +211,7 @@
     else
 #endif
 #if !defined(NO_snprintf) && !defined(NO_vsnprintf)
-        snprintf(state->path, len + 1, "%s", (const char *)path);
+        (void)snprintf(state->path, len + 1, "%s", (const char *)path);
 #else
         strcpy(state->path, path);
 #endif
@@ -239,7 +239,7 @@
 
     /* open the file with the appropriate flags (or just use fd) */
     state->fd = fd > -1 ? fd : (
-#ifdef _WIN32
+#ifdef WIDECHAR
         fd == -2 ? _wopen(path, oflag, 0666) :
 #endif
         open((const char *)path, oflag, 0666));
@@ -248,8 +248,10 @@
         free(state);
         return NULL;
     }
-    if (state->mode == GZ_APPEND)
+    if (state->mode == GZ_APPEND) {
+        LSEEK(state->fd, 0, SEEK_END);  /* so gzoffset() is correct */
         state->mode = GZ_WRITE;         /* simplify later checks */
+    }
 
     /* save the current position for rewinding (only if reading) */
     if (state->mode == GZ_READ) {
@@ -291,7 +293,7 @@
     if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL)
         return NULL;
 #if !defined(NO_snprintf) && !defined(NO_vsnprintf)
-    snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd); /* for debugging */
+    (void)snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd);
 #else
     sprintf(path, "<fd:%d>", fd);   /* for debugging */
 #endif
@@ -301,7 +303,7 @@
 }
 
 /* -- see zlib.h -- */
-#ifdef _WIN32
+#ifdef WIDECHAR
 gzFile ZEXPORT gzopen_w(path, mode)
     const wchar_t *path;
     const char *mode;
@@ -329,6 +331,8 @@
         return -1;
 
     /* check and set requested size */
+    if ((size << 1) < size)
+        return -1;              /* need to be able to double it */
     if (size < 2)
         size = 2;               /* need two bytes to check magic header */
     state->want = size;
@@ -604,14 +608,13 @@
         return;
     }
 #if !defined(NO_snprintf) && !defined(NO_vsnprintf)
-    snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
-             "%s%s%s", state->path, ": ", msg);
+    (void)snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
+                   "%s%s%s", state->path, ": ", msg);
 #else
     strcpy(state->msg, state->path);
     strcat(state->msg, ": ");
     strcat(state->msg, msg);
 #endif
-    return;
 }
 
 #ifndef INT_MAX
diff --git a/Modules/zlib/gzread.c b/Modules/zlib/gzread.c
index bf4538e..956b91e 100644
--- a/Modules/zlib/gzread.c
+++ b/Modules/zlib/gzread.c
@@ -1,5 +1,5 @@
 /* gzread.c -- zlib functions for reading gzip files
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -12,6 +12,7 @@
 local int gz_decomp OF((gz_statep));
 local int gz_fetch OF((gz_statep));
 local int gz_skip OF((gz_statep, z_off64_t));
+local z_size_t gz_read OF((gz_statep, voidp, z_size_t));
 
 /* Use read() to load a buffer -- return -1 on error, otherwise 0.  Read from
    state->fd, and update state->eof, state->err, and state->msg as appropriate.
@@ -24,13 +25,17 @@
     unsigned *have;
 {
     int ret;
+    unsigned get, max = ((unsigned)-1 >> 2) + 1;
 
     *have = 0;
     do {
-        ret = read(state->fd, buf + *have, len - *have);
+        get = len - *have;
+        if (get > max)
+            get = max;
+        ret = read(state->fd, buf + *have, get);
         if (ret <= 0)
             break;
-        *have += ret;
+        *have += (unsigned)ret;
     } while (*have < len);
     if (ret < 0) {
         gz_error(state, Z_ERRNO, zstrerror());
@@ -94,10 +99,8 @@
         state->in = (unsigned char *)malloc(state->want);
         state->out = (unsigned char *)malloc(state->want << 1);
         if (state->in == NULL || state->out == NULL) {
-            if (state->out != NULL)
-                free(state->out);
-            if (state->in != NULL)
-                free(state->in);
+            free(state->out);
+            free(state->in);
             gz_error(state, Z_MEM_ERROR, "out of memory");
             return -1;
         }
@@ -284,33 +287,17 @@
     return 0;
 }
 
-/* -- see zlib.h -- */
-int ZEXPORT gzread(file, buf, len)
-    gzFile file;
-    voidp buf;
-    unsigned len;
-{
-    unsigned got, n;
+/* Read len bytes into buf from file, or less than len up to the end of the
+   input.  Return the number of bytes read.  If zero is returned, either the
+   end of file was reached, or there was an error.  state->err must be
+   consulted in that case to determine which. */
+local z_size_t gz_read(state, buf, len)
     gz_statep state;
-    z_streamp strm;
-
-    /* get internal structure */
-    if (file == NULL)
-        return -1;
-    state = (gz_statep)file;
-    strm = &(state->strm);
-
-    /* check that we're reading and that there's no (serious) error */
-    if (state->mode != GZ_READ ||
-            (state->err != Z_OK && state->err != Z_BUF_ERROR))
-        return -1;
-
-    /* since an int is returned, make sure len fits in one, otherwise return
-       with an error (this avoids the flaw in the interface) */
-    if ((int)len < 0) {
-        gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
-        return -1;
-    }
+    voidp buf;
+    z_size_t len;
+{
+    z_size_t got;
+    unsigned n;
 
     /* if len is zero, avoid unnecessary operations */
     if (len == 0)
@@ -320,32 +307,38 @@
     if (state->seek) {
         state->seek = 0;
         if (gz_skip(state, state->skip) == -1)
-            return -1;
+            return 0;
     }
 
     /* get len bytes to buf, or less than len if at the end */
     got = 0;
     do {
+        /* set n to the maximum amount of len that fits in an unsigned int */
+        n = -1;
+        if (n > len)
+            n = len;
+
         /* first just try copying data from the output buffer */
         if (state->x.have) {
-            n = state->x.have > len ? len : state->x.have;
+            if (state->x.have < n)
+                n = state->x.have;
             memcpy(buf, state->x.next, n);
             state->x.next += n;
             state->x.have -= n;
         }
 
         /* output buffer empty -- return if we're at the end of the input */
-        else if (state->eof && strm->avail_in == 0) {
+        else if (state->eof && state->strm.avail_in == 0) {
             state->past = 1;        /* tried to read past end */
             break;
         }
 
         /* need output data -- for small len or new stream load up our output
            buffer */
-        else if (state->how == LOOK || len < (state->size << 1)) {
+        else if (state->how == LOOK || n < (state->size << 1)) {
             /* get more output, looking for header if required */
             if (gz_fetch(state) == -1)
-                return -1;
+                return 0;
             continue;       /* no progress yet -- go back to copy above */
             /* the copy above assures that we will leave with space in the
                output buffer, allowing at least one gzungetc() to succeed */
@@ -353,16 +346,16 @@
 
         /* large len -- read directly into user buffer */
         else if (state->how == COPY) {      /* read directly */
-            if (gz_load(state, (unsigned char *)buf, len, &n) == -1)
-                return -1;
+            if (gz_load(state, (unsigned char *)buf, n, &n) == -1)
+                return 0;
         }
 
         /* large len -- decompress directly into user buffer */
         else {  /* state->how == GZIP */
-            strm->avail_out = len;
-            strm->next_out = (unsigned char *)buf;
+            state->strm.avail_out = n;
+            state->strm.next_out = (unsigned char *)buf;
             if (gz_decomp(state) == -1)
-                return -1;
+                return 0;
             n = state->x.have;
             state->x.have = 0;
         }
@@ -374,8 +367,75 @@
         state->x.pos += n;
     } while (len);
 
-    /* return number of bytes read into user buffer (will fit in int) */
-    return (int)got;
+    /* return number of bytes read into user buffer */
+    return got;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzread(file, buf, len)
+    gzFile file;
+    voidp buf;
+    unsigned len;
+{
+    gz_statep state;
+
+    /* get internal structure */
+    if (file == NULL)
+        return -1;
+    state = (gz_statep)file;
+
+    /* check that we're reading and that there's no (serious) error */
+    if (state->mode != GZ_READ ||
+            (state->err != Z_OK && state->err != Z_BUF_ERROR))
+        return -1;
+
+    /* since an int is returned, make sure len fits in one, otherwise return
+       with an error (this avoids a flaw in the interface) */
+    if ((int)len < 0) {
+        gz_error(state, Z_STREAM_ERROR, "request does not fit in an int");
+        return -1;
+    }
+
+    /* read len or fewer bytes to buf */
+    len = gz_read(state, buf, len);
+
+    /* check for an error */
+    if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR)
+        return -1;
+
+    /* return the number of bytes read (this is assured to fit in an int) */
+    return (int)len;
+}
+
+/* -- see zlib.h -- */
+z_size_t ZEXPORT gzfread(buf, size, nitems, file)
+    voidp buf;
+    z_size_t size;
+    z_size_t nitems;
+    gzFile file;
+{
+    z_size_t len;
+    gz_statep state;
+
+    /* get internal structure */
+    if (file == NULL)
+        return 0;
+    state = (gz_statep)file;
+
+    /* check that we're reading and that there's no (serious) error */
+    if (state->mode != GZ_READ ||
+            (state->err != Z_OK && state->err != Z_BUF_ERROR))
+        return 0;
+
+    /* compute bytes to read -- error on overflow */
+    len = nitems * size;
+    if (size && len / size != nitems) {
+        gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t");
+        return 0;
+    }
+
+    /* read len or fewer bytes to buf, return the number of full items read */
+    return len ? gz_read(state, buf, len) / size : 0;
 }
 
 /* -- see zlib.h -- */
@@ -408,8 +468,8 @@
         return *(state->x.next)++;
     }
 
-    /* nothing there -- try gzread() */
-    ret = gzread(file, buf, 1);
+    /* nothing there -- try gz_read() */
+    ret = gz_read(state, buf, 1);
     return ret < 1 ? -1 : buf[0];
 }
 
@@ -451,7 +511,7 @@
     if (state->x.have == 0) {
         state->x.have = 1;
         state->x.next = state->out + (state->size << 1) - 1;
-        state->x.next[0] = c;
+        state->x.next[0] = (unsigned char)c;
         state->x.pos--;
         state->past = 0;
         return c;
@@ -473,7 +533,7 @@
     }
     state->x.have++;
     state->x.next--;
-    state->x.next[0] = c;
+    state->x.next[0] = (unsigned char)c;
     state->x.pos--;
     state->past = 0;
     return c;
diff --git a/Modules/zlib/gzwrite.c b/Modules/zlib/gzwrite.c
index aa767fb..c7b5651 100644
--- a/Modules/zlib/gzwrite.c
+++ b/Modules/zlib/gzwrite.c
@@ -1,5 +1,5 @@
 /* gzwrite.c -- zlib functions for writing gzip files
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004-2017 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -9,17 +9,19 @@
 local int gz_init OF((gz_statep));
 local int gz_comp OF((gz_statep, int));
 local int gz_zero OF((gz_statep, z_off64_t));
+local z_size_t gz_write OF((gz_statep, voidpc, z_size_t));
 
 /* Initialize state for writing a gzip file.  Mark initialization by setting
-   state->size to non-zero.  Return -1 on failure or 0 on success. */
+   state->size to non-zero.  Return -1 on a memory allocation failure, or 0 on
+   success. */
 local int gz_init(state)
     gz_statep state;
 {
     int ret;
     z_streamp strm = &(state->strm);
 
-    /* allocate input buffer */
-    state->in = (unsigned char *)malloc(state->want);
+    /* allocate input buffer (double size for gzprintf) */
+    state->in = (unsigned char *)malloc(state->want << 1);
     if (state->in == NULL) {
         gz_error(state, Z_MEM_ERROR, "out of memory");
         return -1;
@@ -47,6 +49,7 @@
             gz_error(state, Z_MEM_ERROR, "out of memory");
             return -1;
         }
+        strm->next_in = NULL;
     }
 
     /* mark state as initialized */
@@ -62,17 +65,17 @@
 }
 
 /* Compress whatever is at avail_in and next_in and write to the output file.
-   Return -1 if there is an error writing to the output file, otherwise 0.
-   flush is assumed to be a valid deflate() flush value.  If flush is Z_FINISH,
-   then the deflate() state is reset to start a new gzip stream.  If gz->direct
-   is true, then simply write to the output file without compressing, and
-   ignore flush. */
+   Return -1 if there is an error writing to the output file or if gz_init()
+   fails to allocate memory, otherwise 0.  flush is assumed to be a valid
+   deflate() flush value.  If flush is Z_FINISH, then the deflate() state is
+   reset to start a new gzip stream.  If gz->direct is true, then simply write
+   to the output file without compressing, and ignore flush. */
 local int gz_comp(state, flush)
     gz_statep state;
     int flush;
 {
-    int ret, got;
-    unsigned have;
+    int ret, writ;
+    unsigned have, put, max = ((unsigned)-1 >> 2) + 1;
     z_streamp strm = &(state->strm);
 
     /* allocate memory if this is the first time through */
@@ -81,12 +84,16 @@
 
     /* write directly if requested */
     if (state->direct) {
-        got = write(state->fd, strm->next_in, strm->avail_in);
-        if (got < 0 || (unsigned)got != strm->avail_in) {
-            gz_error(state, Z_ERRNO, zstrerror());
-            return -1;
+        while (strm->avail_in) {
+            put = strm->avail_in > max ? max : strm->avail_in;
+            writ = write(state->fd, strm->next_in, put);
+            if (writ < 0) {
+                gz_error(state, Z_ERRNO, zstrerror());
+                return -1;
+            }
+            strm->avail_in -= (unsigned)writ;
+            strm->next_in += writ;
         }
-        strm->avail_in = 0;
         return 0;
     }
 
@@ -97,17 +104,21 @@
            doing Z_FINISH then don't write until we get to Z_STREAM_END */
         if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
             (flush != Z_FINISH || ret == Z_STREAM_END))) {
-            have = (unsigned)(strm->next_out - state->x.next);
-            if (have && ((got = write(state->fd, state->x.next, have)) < 0 ||
-                         (unsigned)got != have)) {
-                gz_error(state, Z_ERRNO, zstrerror());
-                return -1;
+            while (strm->next_out > state->x.next) {
+                put = strm->next_out - state->x.next > (int)max ? max :
+                      (unsigned)(strm->next_out - state->x.next);
+                writ = write(state->fd, state->x.next, put);
+                if (writ < 0) {
+                    gz_error(state, Z_ERRNO, zstrerror());
+                    return -1;
+                }
+                state->x.next += writ;
             }
             if (strm->avail_out == 0) {
                 strm->avail_out = state->size;
                 strm->next_out = state->out;
+                state->x.next = state->out;
             }
-            state->x.next = strm->next_out;
         }
 
         /* compress */
@@ -129,7 +140,8 @@
     return 0;
 }
 
-/* Compress len zeros to output.  Return -1 on error, 0 on success. */
+/* Compress len zeros to output.  Return -1 on a write error or memory
+   allocation failure by gz_comp(), or 0 on success. */
 local int gz_zero(state, len)
     gz_statep state;
     z_off64_t len;
@@ -161,32 +173,14 @@
     return 0;
 }
 
-/* -- see zlib.h -- */
-int ZEXPORT gzwrite(file, buf, len)
-    gzFile file;
-    voidpc buf;
-    unsigned len;
-{
-    unsigned put = len;
+/* Write len bytes from buf to file.  Return the number of bytes written.  If
+   the returned value is less than len, then there was an error. */
+local z_size_t gz_write(state, buf, len)
     gz_statep state;
-    z_streamp strm;
-
-    /* get internal structure */
-    if (file == NULL)
-        return 0;
-    state = (gz_statep)file;
-    strm = &(state->strm);
-
-    /* check that we're writing and that there's no error */
-    if (state->mode != GZ_WRITE || state->err != Z_OK)
-        return 0;
-
-    /* since an int is returned, make sure len fits in one, otherwise return
-       with an error (this avoids the flaw in the interface) */
-    if ((int)len < 0) {
-        gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
-        return 0;
-    }
+    voidpc buf;
+    z_size_t len;
+{
+    z_size_t put = len;
 
     /* if len is zero, avoid unnecessary operations */
     if (len == 0)
@@ -209,14 +203,15 @@
         do {
             unsigned have, copy;
 
-            if (strm->avail_in == 0)
-                strm->next_in = state->in;
-            have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
+            if (state->strm.avail_in == 0)
+                state->strm.next_in = state->in;
+            have = (unsigned)((state->strm.next_in + state->strm.avail_in) -
+                              state->in);
             copy = state->size - have;
             if (copy > len)
                 copy = len;
             memcpy(state->in + have, buf, copy);
-            strm->avail_in += copy;
+            state->strm.avail_in += copy;
             state->x.pos += copy;
             buf = (const char *)buf + copy;
             len -= copy;
@@ -226,19 +221,83 @@
     }
     else {
         /* consume whatever's left in the input buffer */
-        if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+        if (state->strm.avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
             return 0;
 
         /* directly compress user buffer to file */
-        strm->avail_in = len;
-        strm->next_in = (z_const Bytef *)buf;
-        state->x.pos += len;
-        if (gz_comp(state, Z_NO_FLUSH) == -1)
-            return 0;
+        state->strm.next_in = (z_const Bytef *)buf;
+        do {
+            unsigned n = (unsigned)-1;
+            if (n > len)
+                n = len;
+            state->strm.avail_in = n;
+            state->x.pos += n;
+            if (gz_comp(state, Z_NO_FLUSH) == -1)
+                return 0;
+            len -= n;
+        } while (len);
     }
 
-    /* input was all buffered or compressed (put will fit in int) */
-    return (int)put;
+    /* input was all buffered or compressed */
+    return put;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzwrite(file, buf, len)
+    gzFile file;
+    voidpc buf;
+    unsigned len;
+{
+    gz_statep state;
+
+    /* get internal structure */
+    if (file == NULL)
+        return 0;
+    state = (gz_statep)file;
+
+    /* check that we're writing and that there's no error */
+    if (state->mode != GZ_WRITE || state->err != Z_OK)
+        return 0;
+
+    /* since an int is returned, make sure len fits in one, otherwise return
+       with an error (this avoids a flaw in the interface) */
+    if ((int)len < 0) {
+        gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+        return 0;
+    }
+
+    /* write len bytes from buf (the return value will fit in an int) */
+    return (int)gz_write(state, buf, len);
+}
+
+/* -- see zlib.h -- */
+z_size_t ZEXPORT gzfwrite(buf, size, nitems, file)
+    voidpc buf;
+    z_size_t size;
+    z_size_t nitems;
+    gzFile file;
+{
+    z_size_t len;
+    gz_statep state;
+
+    /* get internal structure */
+    if (file == NULL)
+        return 0;
+    state = (gz_statep)file;
+
+    /* check that we're writing and that there's no error */
+    if (state->mode != GZ_WRITE || state->err != Z_OK)
+        return 0;
+
+    /* compute bytes to read -- error on overflow */
+    len = nitems * size;
+    if (size && len / size != nitems) {
+        gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t");
+        return 0;
+    }
+
+    /* write len bytes to buf, return the number of full items written */
+    return len ? gz_write(state, buf, len) / size : 0;
 }
 
 /* -- see zlib.h -- */
@@ -275,7 +334,7 @@
             strm->next_in = state->in;
         have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
         if (have < state->size) {
-            state->in[have] = c;
+            state->in[have] = (unsigned char)c;
             strm->avail_in++;
             state->x.pos++;
             return c & 0xff;
@@ -283,8 +342,8 @@
     }
 
     /* no room in buffer or not initialized, use gz_write() */
-    buf[0] = c;
-    if (gzwrite(file, buf, 1) != 1)
+    buf[0] = (unsigned char)c;
+    if (gz_write(state, buf, 1) != 1)
         return -1;
     return c & 0xff;
 }
@@ -295,11 +354,21 @@
     const char *str;
 {
     int ret;
-    unsigned len;
+    z_size_t len;
+    gz_statep state;
+
+    /* get internal structure */
+    if (file == NULL)
+        return -1;
+    state = (gz_statep)file;
+
+    /* check that we're writing and that there's no error */
+    if (state->mode != GZ_WRITE || state->err != Z_OK)
+        return -1;
 
     /* write string */
-    len = (unsigned)strlen(str);
-    ret = gzwrite(file, str, len);
+    len = strlen(str);
+    ret = gz_write(state, str, len);
     return ret == 0 && len != 0 ? -1 : ret;
 }
 
@@ -309,63 +378,73 @@
 /* -- see zlib.h -- */
 int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va)
 {
-    int size, len;
+    int len;
+    unsigned left;
+    char *next;
     gz_statep state;
     z_streamp strm;
 
     /* get internal structure */
     if (file == NULL)
-        return -1;
+        return Z_STREAM_ERROR;
     state = (gz_statep)file;
     strm = &(state->strm);
 
     /* check that we're writing and that there's no error */
     if (state->mode != GZ_WRITE || state->err != Z_OK)
-        return 0;
+        return Z_STREAM_ERROR;
 
     /* make sure we have some buffer space */
     if (state->size == 0 && gz_init(state) == -1)
-        return 0;
+        return state->err;
 
     /* check for seek request */
     if (state->seek) {
         state->seek = 0;
         if (gz_zero(state, state->skip) == -1)
-            return 0;
+            return state->err;
     }
 
-    /* consume whatever's left in the input buffer */
-    if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
-        return 0;
-
-    /* do the printf() into the input buffer, put length in len */
-    size = (int)(state->size);
-    state->in[size - 1] = 0;
+    /* do the printf() into the input buffer, put length in len -- the input
+       buffer is double-sized just for this function, so there is guaranteed to
+       be state->size bytes available after the current contents */
+    if (strm->avail_in == 0)
+        strm->next_in = state->in;
+    next = (char *)(state->in + (strm->next_in - state->in) + strm->avail_in);
+    next[state->size - 1] = 0;
 #ifdef NO_vsnprintf
 #  ifdef HAS_vsprintf_void
-    (void)vsprintf((char *)(state->in), format, va);
-    for (len = 0; len < size; len++)
-        if (state->in[len] == 0) break;
+    (void)vsprintf(next, format, va);
+    for (len = 0; len < state->size; len++)
+        if (next[len] == 0) break;
 #  else
-    len = vsprintf((char *)(state->in), format, va);
+    len = vsprintf(next, format, va);
 #  endif
 #else
 #  ifdef HAS_vsnprintf_void
-    (void)vsnprintf((char *)(state->in), size, format, va);
-    len = strlen((char *)(state->in));
+    (void)vsnprintf(next, state->size, format, va);
+    len = strlen(next);
 #  else
-    len = vsnprintf((char *)(state->in), size, format, va);
+    len = vsnprintf(next, state->size, format, va);
 #  endif
 #endif
 
     /* check that printf() results fit in buffer */
-    if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+    if (len == 0 || (unsigned)len >= state->size || next[state->size - 1] != 0)
         return 0;
 
-    /* update buffer and position, defer compression until needed */
-    strm->avail_in = (unsigned)len;
-    strm->next_in = state->in;
+    /* update buffer and position, compress first half if past that */
+    strm->avail_in += (unsigned)len;
     state->x.pos += len;
+    if (strm->avail_in >= state->size) {
+        left = strm->avail_in - state->size;
+        strm->avail_in = state->size;
+        if (gz_comp(state, Z_NO_FLUSH) == -1)
+            return state->err;
+        memcpy(state->in, state->in + state->size, left);
+        strm->next_in = state->in;
+        strm->avail_in = left;
+    }
     return len;
 }
 
@@ -390,73 +469,82 @@
     int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
         a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
 {
-    int size, len;
+    unsigned len, left;
+    char *next;
     gz_statep state;
     z_streamp strm;
 
     /* get internal structure */
     if (file == NULL)
-        return -1;
+        return Z_STREAM_ERROR;
     state = (gz_statep)file;
     strm = &(state->strm);
 
     /* check that can really pass pointer in ints */
     if (sizeof(int) != sizeof(void *))
-        return 0;
+        return Z_STREAM_ERROR;
 
     /* check that we're writing and that there's no error */
     if (state->mode != GZ_WRITE || state->err != Z_OK)
-        return 0;
+        return Z_STREAM_ERROR;
 
     /* make sure we have some buffer space */
     if (state->size == 0 && gz_init(state) == -1)
-        return 0;
+        return state->error;
 
     /* check for seek request */
     if (state->seek) {
         state->seek = 0;
         if (gz_zero(state, state->skip) == -1)
-            return 0;
+            return state->error;
     }
 
-    /* consume whatever's left in the input buffer */
-    if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
-        return 0;
-
-    /* do the printf() into the input buffer, put length in len */
-    size = (int)(state->size);
-    state->in[size - 1] = 0;
+    /* do the printf() into the input buffer, put length in len -- the input
+       buffer is double-sized just for this function, so there is guaranteed to
+       be state->size bytes available after the current contents */
+    if (strm->avail_in == 0)
+        strm->next_in = state->in;
+    next = (char *)(strm->next_in + strm->avail_in);
+    next[state->size - 1] = 0;
 #ifdef NO_snprintf
 #  ifdef HAS_sprintf_void
-    sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
-            a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+    sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12,
+            a13, a14, a15, a16, a17, a18, a19, a20);
     for (len = 0; len < size; len++)
-        if (state->in[len] == 0) break;
+        if (next[len] == 0)
+            break;
 #  else
-    len = sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
-                  a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+    len = sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11,
+                  a12, a13, a14, a15, a16, a17, a18, a19, a20);
 #  endif
 #else
 #  ifdef HAS_snprintf_void
-    snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6, a7, a8,
-             a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
-    len = strlen((char *)(state->in));
+    snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, a9,
+             a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+    len = strlen(next);
 #  else
-    len = snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6,
-                   a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18,
-                   a19, a20);
+    len = snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8,
+                   a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
 #  endif
 #endif
 
     /* check that printf() results fit in buffer */
-    if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+    if (len == 0 || len >= state->size || next[state->size - 1] != 0)
         return 0;
 
-    /* update buffer and position, defer compression until needed */
-    strm->avail_in = (unsigned)len;
-    strm->next_in = state->in;
+    /* update buffer and position, compress first half if past that */
+    strm->avail_in += len;
     state->x.pos += len;
-    return len;
+    if (strm->avail_in >= state->size) {
+        left = strm->avail_in - state->size;
+        strm->avail_in = state->size;
+        if (gz_comp(state, Z_NO_FLUSH) == -1)
+            return state->err;
+        memcpy(state->in, state->in + state->size, left);
+        strm->next_in = state->in;
+        strm->avail_in = left;
+    }
+    return (int)len;
 }
 
 #endif
@@ -470,7 +558,7 @@
 
     /* get internal structure */
     if (file == NULL)
-        return -1;
+        return Z_STREAM_ERROR;
     state = (gz_statep)file;
 
     /* check that we're writing and that there's no error */
@@ -485,11 +573,11 @@
     if (state->seek) {
         state->seek = 0;
         if (gz_zero(state, state->skip) == -1)
-            return -1;
+            return state->err;
     }
 
     /* compress remaining data with requested flush */
-    gz_comp(state, flush);
+    (void)gz_comp(state, flush);
     return state->err;
 }
 
@@ -520,13 +608,13 @@
     if (state->seek) {
         state->seek = 0;
         if (gz_zero(state, state->skip) == -1)
-            return -1;
+            return state->err;
     }
 
     /* change compression parameters for subsequent input */
     if (state->size) {
         /* flush previous input with previous parameters before changing */
-        if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1)
+        if (strm->avail_in && gz_comp(state, Z_BLOCK) == -1)
             return state->err;
         deflateParams(strm, level, strategy);
     }
diff --git a/Modules/zlib/infback.c b/Modules/zlib/infback.c
index f3833c2..59679ec 100644
--- a/Modules/zlib/infback.c
+++ b/Modules/zlib/infback.c
@@ -1,5 +1,5 @@
 /* infback.c -- inflate using a call-back interface
- * Copyright (C) 1995-2011 Mark Adler
+ * Copyright (C) 1995-2016 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -61,7 +61,7 @@
     Tracev((stderr, "inflate: allocated\n"));
     strm->state = (struct internal_state FAR *)state;
     state->dmax = 32768U;
-    state->wbits = windowBits;
+    state->wbits = (uInt)windowBits;
     state->wsize = 1U << windowBits;
     state->window = window;
     state->wnext = 0;
diff --git a/Modules/zlib/inffast.c b/Modules/zlib/inffast.c
index bda59ce..0dbd1db 100644
--- a/Modules/zlib/inffast.c
+++ b/Modules/zlib/inffast.c
@@ -1,5 +1,5 @@
 /* inffast.c -- fast decoding
- * Copyright (C) 1995-2008, 2010, 2013 Mark Adler
+ * Copyright (C) 1995-2017 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -8,26 +8,9 @@
 #include "inflate.h"
 #include "inffast.h"
 
-#ifndef ASMINF
-
-/* Allow machine dependent optimization for post-increment or pre-increment.
-   Based on testing to date,
-   Pre-increment preferred for:
-   - PowerPC G3 (Adler)
-   - MIPS R5000 (Randers-Pehrson)
-   Post-increment preferred for:
-   - none
-   No measurable difference:
-   - Pentium III (Anderson)
-   - M68060 (Nikl)
- */
-#ifdef POSTINC
-#  define OFF 0
-#  define PUP(a) *(a)++
+#ifdef ASMINF
+#  pragma message("Assembler code may have bugs -- use at your own risk")
 #else
-#  define OFF 1
-#  define PUP(a) *++(a)
-#endif
 
 /*
    Decode literal, length, and distance codes and write out the resulting
@@ -96,9 +79,9 @@
 
     /* copy state to local variables */
     state = (struct inflate_state FAR *)strm->state;
-    in = strm->next_in - OFF;
+    in = strm->next_in;
     last = in + (strm->avail_in - 5);
-    out = strm->next_out - OFF;
+    out = strm->next_out;
     beg = out - (start - strm->avail_out);
     end = out + (strm->avail_out - 257);
 #ifdef INFLATE_STRICT
@@ -119,9 +102,9 @@
        input data or output space */
     do {
         if (bits < 15) {
-            hold += (unsigned long)(PUP(in)) << bits;
+            hold += (unsigned long)(*in++) << bits;
             bits += 8;
-            hold += (unsigned long)(PUP(in)) << bits;
+            hold += (unsigned long)(*in++) << bits;
             bits += 8;
         }
         here = lcode[hold & lmask];
@@ -134,14 +117,14 @@
             Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
                     "inflate:         literal '%c'\n" :
                     "inflate:         literal 0x%02x\n", here.val));
-            PUP(out) = (unsigned char)(here.val);
+            *out++ = (unsigned char)(here.val);
         }
         else if (op & 16) {                     /* length base */
             len = (unsigned)(here.val);
             op &= 15;                           /* number of extra bits */
             if (op) {
                 if (bits < op) {
-                    hold += (unsigned long)(PUP(in)) << bits;
+                    hold += (unsigned long)(*in++) << bits;
                     bits += 8;
                 }
                 len += (unsigned)hold & ((1U << op) - 1);
@@ -150,9 +133,9 @@
             }
             Tracevv((stderr, "inflate:         length %u\n", len));
             if (bits < 15) {
-                hold += (unsigned long)(PUP(in)) << bits;
+                hold += (unsigned long)(*in++) << bits;
                 bits += 8;
-                hold += (unsigned long)(PUP(in)) << bits;
+                hold += (unsigned long)(*in++) << bits;
                 bits += 8;
             }
             here = dcode[hold & dmask];
@@ -165,10 +148,10 @@
                 dist = (unsigned)(here.val);
                 op &= 15;                       /* number of extra bits */
                 if (bits < op) {
-                    hold += (unsigned long)(PUP(in)) << bits;
+                    hold += (unsigned long)(*in++) << bits;
                     bits += 8;
                     if (bits < op) {
-                        hold += (unsigned long)(PUP(in)) << bits;
+                        hold += (unsigned long)(*in++) << bits;
                         bits += 8;
                     }
                 }
@@ -196,30 +179,30 @@
 #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
                         if (len <= op - whave) {
                             do {
-                                PUP(out) = 0;
+                                *out++ = 0;
                             } while (--len);
                             continue;
                         }
                         len -= op - whave;
                         do {
-                            PUP(out) = 0;
+                            *out++ = 0;
                         } while (--op > whave);
                         if (op == 0) {
                             from = out - dist;
                             do {
-                                PUP(out) = PUP(from);
+                                *out++ = *from++;
                             } while (--len);
                             continue;
                         }
 #endif
                     }
-                    from = window - OFF;
+                    from = window;
                     if (wnext == 0) {           /* very common case */
                         from += wsize - op;
                         if (op < len) {         /* some from window */
                             len -= op;
                             do {
-                                PUP(out) = PUP(from);
+                                *out++ = *from++;
                             } while (--op);
                             from = out - dist;  /* rest from output */
                         }
@@ -230,14 +213,14 @@
                         if (op < len) {         /* some from end of window */
                             len -= op;
                             do {
-                                PUP(out) = PUP(from);
+                                *out++ = *from++;
                             } while (--op);
-                            from = window - OFF;
+                            from = window;
                             if (wnext < len) {  /* some from start of window */
                                 op = wnext;
                                 len -= op;
                                 do {
-                                    PUP(out) = PUP(from);
+                                    *out++ = *from++;
                                 } while (--op);
                                 from = out - dist;      /* rest from output */
                             }
@@ -248,35 +231,35 @@
                         if (op < len) {         /* some from window */
                             len -= op;
                             do {
-                                PUP(out) = PUP(from);
+                                *out++ = *from++;
                             } while (--op);
                             from = out - dist;  /* rest from output */
                         }
                     }
                     while (len > 2) {
-                        PUP(out) = PUP(from);
-                        PUP(out) = PUP(from);
-                        PUP(out) = PUP(from);
+                        *out++ = *from++;
+                        *out++ = *from++;
+                        *out++ = *from++;
                         len -= 3;
                     }
                     if (len) {
-                        PUP(out) = PUP(from);
+                        *out++ = *from++;
                         if (len > 1)
-                            PUP(out) = PUP(from);
+                            *out++ = *from++;
                     }
                 }
                 else {
                     from = out - dist;          /* copy direct from output */
                     do {                        /* minimum length is three */
-                        PUP(out) = PUP(from);
-                        PUP(out) = PUP(from);
-                        PUP(out) = PUP(from);
+                        *out++ = *from++;
+                        *out++ = *from++;
+                        *out++ = *from++;
                         len -= 3;
                     } while (len > 2);
                     if (len) {
-                        PUP(out) = PUP(from);
+                        *out++ = *from++;
                         if (len > 1)
-                            PUP(out) = PUP(from);
+                            *out++ = *from++;
                     }
                 }
             }
@@ -313,8 +296,8 @@
     hold &= (1U << bits) - 1;
 
     /* update state and return */
-    strm->next_in = in + OFF;
-    strm->next_out = out + OFF;
+    strm->next_in = in;
+    strm->next_out = out;
     strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
     strm->avail_out = (unsigned)(out < end ?
                                  257 + (end - out) : 257 - (out - end));
diff --git a/Modules/zlib/inflate.c b/Modules/zlib/inflate.c
index 870f89b..ac333e8 100644
--- a/Modules/zlib/inflate.c
+++ b/Modules/zlib/inflate.c
@@ -1,5 +1,5 @@
 /* inflate.c -- zlib decompression
- * Copyright (C) 1995-2012 Mark Adler
+ * Copyright (C) 1995-2016 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -92,6 +92,7 @@
 #endif
 
 /* function prototypes */
+local int inflateStateCheck OF((z_streamp strm));
 local void fixedtables OF((struct inflate_state FAR *state));
 local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
                            unsigned copy));
@@ -101,12 +102,26 @@
 local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
                               unsigned len));
 
+local int inflateStateCheck(strm)
+z_streamp strm;
+{
+    struct inflate_state FAR *state;
+    if (strm == Z_NULL ||
+        strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
+        return 1;
+    state = (struct inflate_state FAR *)strm->state;
+    if (state == Z_NULL || state->strm != strm ||
+        state->mode < HEAD || state->mode > SYNC)
+        return 1;
+    return 0;
+}
+
 int ZEXPORT inflateResetKeep(strm)
 z_streamp strm;
 {
     struct inflate_state FAR *state;
 
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
     state = (struct inflate_state FAR *)strm->state;
     strm->total_in = strm->total_out = state->total = 0;
     strm->msg = Z_NULL;
@@ -131,7 +146,7 @@
 {
     struct inflate_state FAR *state;
 
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
     state = (struct inflate_state FAR *)strm->state;
     state->wsize = 0;
     state->whave = 0;
@@ -147,7 +162,7 @@
     struct inflate_state FAR *state;
 
     /* get the state */
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
     state = (struct inflate_state FAR *)strm->state;
 
     /* extract wrap request from windowBits parameter */
@@ -156,7 +171,7 @@
         windowBits = -windowBits;
     }
     else {
-        wrap = (windowBits >> 4) + 1;
+        wrap = (windowBits >> 4) + 5;
 #ifdef GUNZIP
         if (windowBits < 48)
             windowBits &= 15;
@@ -210,7 +225,9 @@
     if (state == Z_NULL) return Z_MEM_ERROR;
     Tracev((stderr, "inflate: allocated\n"));
     strm->state = (struct internal_state FAR *)state;
+    state->strm = strm;
     state->window = Z_NULL;
+    state->mode = HEAD;     /* to pass state test in inflateReset2() */
     ret = inflateReset2(strm, windowBits);
     if (ret != Z_OK) {
         ZFREE(strm, state);
@@ -234,17 +251,17 @@
 {
     struct inflate_state FAR *state;
 
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
     state = (struct inflate_state FAR *)strm->state;
     if (bits < 0) {
         state->hold = 0;
         state->bits = 0;
         return Z_OK;
     }
-    if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
+    if (bits > 16 || state->bits + (uInt)bits > 32) return Z_STREAM_ERROR;
     value &= (1L << bits) - 1;
-    state->hold += value << state->bits;
-    state->bits += bits;
+    state->hold += (unsigned)value << state->bits;
+    state->bits += (uInt)bits;
     return Z_OK;
 }
 
@@ -625,7 +642,7 @@
     static const unsigned short order[19] = /* permutation of code lengths */
         {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
 
-    if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
+    if (inflateStateCheck(strm) || strm->next_out == Z_NULL ||
         (strm->next_in == Z_NULL && strm->avail_in != 0))
         return Z_STREAM_ERROR;
 
@@ -645,6 +662,8 @@
             NEEDBITS(16);
 #ifdef GUNZIP
             if ((state->wrap & 2) && hold == 0x8b1f) {  /* gzip header */
+                if (state->wbits == 0)
+                    state->wbits = 15;
                 state->check = crc32(0L, Z_NULL, 0);
                 CRC2(state->check, hold);
                 INITBITS();
@@ -672,7 +691,7 @@
             len = BITS(4) + 8;
             if (state->wbits == 0)
                 state->wbits = len;
-            else if (len > state->wbits) {
+            if (len > 15 || len > state->wbits) {
                 strm->msg = (char *)"invalid window size";
                 state->mode = BAD;
                 break;
@@ -699,14 +718,16 @@
             }
             if (state->head != Z_NULL)
                 state->head->text = (int)((hold >> 8) & 1);
-            if (state->flags & 0x0200) CRC2(state->check, hold);
+            if ((state->flags & 0x0200) && (state->wrap & 4))
+                CRC2(state->check, hold);
             INITBITS();
             state->mode = TIME;
         case TIME:
             NEEDBITS(32);
             if (state->head != Z_NULL)
                 state->head->time = hold;
-            if (state->flags & 0x0200) CRC4(state->check, hold);
+            if ((state->flags & 0x0200) && (state->wrap & 4))
+                CRC4(state->check, hold);
             INITBITS();
             state->mode = OS;
         case OS:
@@ -715,7 +736,8 @@
                 state->head->xflags = (int)(hold & 0xff);
                 state->head->os = (int)(hold >> 8);
             }
-            if (state->flags & 0x0200) CRC2(state->check, hold);
+            if ((state->flags & 0x0200) && (state->wrap & 4))
+                CRC2(state->check, hold);
             INITBITS();
             state->mode = EXLEN;
         case EXLEN:
@@ -724,7 +746,8 @@
                 state->length = (unsigned)(hold);
                 if (state->head != Z_NULL)
                     state->head->extra_len = (unsigned)hold;
-                if (state->flags & 0x0200) CRC2(state->check, hold);
+                if ((state->flags & 0x0200) && (state->wrap & 4))
+                    CRC2(state->check, hold);
                 INITBITS();
             }
             else if (state->head != Z_NULL)
@@ -742,7 +765,7 @@
                                 len + copy > state->head->extra_max ?
                                 state->head->extra_max - len : copy);
                     }
-                    if (state->flags & 0x0200)
+                    if ((state->flags & 0x0200) && (state->wrap & 4))
                         state->check = crc32(state->check, next, copy);
                     have -= copy;
                     next += copy;
@@ -761,9 +784,9 @@
                     if (state->head != Z_NULL &&
                             state->head->name != Z_NULL &&
                             state->length < state->head->name_max)
-                        state->head->name[state->length++] = len;
+                        state->head->name[state->length++] = (Bytef)len;
                 } while (len && copy < have);
-                if (state->flags & 0x0200)
+                if ((state->flags & 0x0200) && (state->wrap & 4))
                     state->check = crc32(state->check, next, copy);
                 have -= copy;
                 next += copy;
@@ -782,9 +805,9 @@
                     if (state->head != Z_NULL &&
                             state->head->comment != Z_NULL &&
                             state->length < state->head->comm_max)
-                        state->head->comment[state->length++] = len;
+                        state->head->comment[state->length++] = (Bytef)len;
                 } while (len && copy < have);
-                if (state->flags & 0x0200)
+                if ((state->flags & 0x0200) && (state->wrap & 4))
                     state->check = crc32(state->check, next, copy);
                 have -= copy;
                 next += copy;
@@ -796,7 +819,7 @@
         case HCRC:
             if (state->flags & 0x0200) {
                 NEEDBITS(16);
-                if (hold != (state->check & 0xffff)) {
+                if ((state->wrap & 4) && hold != (state->check & 0xffff)) {
                     strm->msg = (char *)"header crc mismatch";
                     state->mode = BAD;
                     break;
@@ -1177,11 +1200,11 @@
                 out -= left;
                 strm->total_out += out;
                 state->total += out;
-                if (out)
+                if ((state->wrap & 4) && out)
                     strm->adler = state->check =
                         UPDATE(state->check, put - out, out);
                 out = left;
-                if ((
+                if ((state->wrap & 4) && (
 #ifdef GUNZIP
                      state->flags ? hold :
 #endif
@@ -1240,10 +1263,10 @@
     strm->total_in += in;
     strm->total_out += out;
     state->total += out;
-    if (state->wrap && out)
+    if ((state->wrap & 4) && out)
         strm->adler = state->check =
             UPDATE(state->check, strm->next_out - out, out);
-    strm->data_type = state->bits + (state->last ? 64 : 0) +
+    strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
                       (state->mode == TYPE ? 128 : 0) +
                       (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
     if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
@@ -1255,7 +1278,7 @@
 z_streamp strm;
 {
     struct inflate_state FAR *state;
-    if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+    if (inflateStateCheck(strm))
         return Z_STREAM_ERROR;
     state = (struct inflate_state FAR *)strm->state;
     if (state->window != Z_NULL) ZFREE(strm, state->window);
@@ -1273,7 +1296,7 @@
     struct inflate_state FAR *state;
 
     /* check state */
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
     state = (struct inflate_state FAR *)strm->state;
 
     /* copy dictionary */
@@ -1298,7 +1321,7 @@
     int ret;
 
     /* check state */
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
     state = (struct inflate_state FAR *)strm->state;
     if (state->wrap != 0 && state->mode != DICT)
         return Z_STREAM_ERROR;
@@ -1330,7 +1353,7 @@
     struct inflate_state FAR *state;
 
     /* check state */
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
     state = (struct inflate_state FAR *)strm->state;
     if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
 
@@ -1383,7 +1406,7 @@
     struct inflate_state FAR *state;
 
     /* check parameters */
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
     state = (struct inflate_state FAR *)strm->state;
     if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
 
@@ -1430,7 +1453,7 @@
 {
     struct inflate_state FAR *state;
 
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
     state = (struct inflate_state FAR *)strm->state;
     return state->mode == STORED && state->bits == 0;
 }
@@ -1445,8 +1468,7 @@
     unsigned wsize;
 
     /* check input */
-    if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
-        source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
+    if (inflateStateCheck(source) || dest == Z_NULL)
         return Z_STREAM_ERROR;
     state = (struct inflate_state FAR *)source->state;
 
@@ -1467,6 +1489,7 @@
     /* copy state */
     zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
     zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
+    copy->strm = dest;
     if (state->lencode >= state->codes &&
         state->lencode <= state->codes + ENOUGH - 1) {
         copy->lencode = copy->codes + (state->lencode - state->codes);
@@ -1488,25 +1511,51 @@
 {
     struct inflate_state FAR *state;
 
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
     state = (struct inflate_state FAR *)strm->state;
-    state->sane = !subvert;
 #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+    state->sane = !subvert;
     return Z_OK;
 #else
+    (void)subvert;
     state->sane = 1;
     return Z_DATA_ERROR;
 #endif
 }
 
+int ZEXPORT inflateValidate(strm, check)
+z_streamp strm;
+int check;
+{
+    struct inflate_state FAR *state;
+
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if (check)
+        state->wrap |= 4;
+    else
+        state->wrap &= ~4;
+    return Z_OK;
+}
+
 long ZEXPORT inflateMark(strm)
 z_streamp strm;
 {
     struct inflate_state FAR *state;
 
-    if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
+    if (inflateStateCheck(strm))
+        return -(1L << 16);
     state = (struct inflate_state FAR *)strm->state;
-    return ((long)(state->back) << 16) +
+    return (long)(((unsigned long)((long)state->back)) << 16) +
         (state->mode == COPY ? state->length :
             (state->mode == MATCH ? state->was - state->length : 0));
 }
+
+unsigned long ZEXPORT inflateCodesUsed(strm)
+z_streamp strm;
+{
+    struct inflate_state FAR *state;
+    if (inflateStateCheck(strm)) return (unsigned long)-1;
+    state = (struct inflate_state FAR *)strm->state;
+    return (unsigned long)(state->next - state->codes);
+}
diff --git a/Modules/zlib/inflate.h b/Modules/zlib/inflate.h
index 95f4986..a46cce6 100644
--- a/Modules/zlib/inflate.h
+++ b/Modules/zlib/inflate.h
@@ -1,5 +1,5 @@
 /* inflate.h -- internal inflate state definition
- * Copyright (C) 1995-2009 Mark Adler
+ * Copyright (C) 1995-2016 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -18,7 +18,7 @@
 
 /* Possible inflate modes between inflate() calls */
 typedef enum {
-    HEAD,       /* i: waiting for magic header */
+    HEAD = 16180,   /* i: waiting for magic header */
     FLAGS,      /* i: waiting for method and flags (gzip) */
     TIME,       /* i: waiting for modification time (gzip) */
     OS,         /* i: waiting for extra flags and operating system (gzip) */
@@ -77,11 +77,14 @@
         CHECK -> LENGTH -> DONE
  */
 
-/* state maintained between inflate() calls.  Approximately 10K bytes. */
+/* State maintained between inflate() calls -- approximately 7K bytes, not
+   including the allocated sliding window, which is up to 32K bytes. */
 struct inflate_state {
+    z_streamp strm;             /* pointer back to this zlib stream */
     inflate_mode mode;          /* current inflate mode */
     int last;                   /* true if processing last block */
-    int wrap;                   /* bit 0 true for zlib, bit 1 true for gzip */
+    int wrap;                   /* bit 0 true for zlib, bit 1 true for gzip,
+                                   bit 2 true to validate check value */
     int havedict;               /* true if dictionary provided */
     int flags;                  /* gzip header method and flags (0 if zlib) */
     unsigned dmax;              /* zlib header max distance (INFLATE_STRICT) */
diff --git a/Modules/zlib/inftrees.c b/Modules/zlib/inftrees.c
index 44d89cf..2ea08fc 100644
--- a/Modules/zlib/inftrees.c
+++ b/Modules/zlib/inftrees.c
@@ -1,5 +1,5 @@
 /* inftrees.c -- generate Huffman trees for efficient decoding
- * Copyright (C) 1995-2013 Mark Adler
+ * Copyright (C) 1995-2017 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -9,7 +9,7 @@
 #define MAXBITS 15
 
 const char inflate_copyright[] =
-   " inflate 1.2.8 Copyright 1995-2013 Mark Adler ";
+   " inflate 1.2.11 Copyright 1995-2017 Mark Adler ";
 /*
   If you use the zlib library in a product, an acknowledgment is welcome
   in the documentation of your product. If for some reason you cannot
@@ -54,7 +54,7 @@
     code FAR *next;             /* next available space in table */
     const unsigned short FAR *base;     /* base value table to use */
     const unsigned short FAR *extra;    /* extra bits table to use */
-    int end;                    /* use base and extra for symbol > end */
+    unsigned match;             /* use base and extra for symbol >= match */
     unsigned short count[MAXBITS+1];    /* number of codes of each length */
     unsigned short offs[MAXBITS+1];     /* offsets in table for each length */
     static const unsigned short lbase[31] = { /* Length codes 257..285 base */
@@ -62,7 +62,7 @@
         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
     static const unsigned short lext[31] = { /* Length codes 257..285 extra */
         16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
-        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78};
+        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202};
     static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
         257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
@@ -181,19 +181,17 @@
     switch (type) {
     case CODES:
         base = extra = work;    /* dummy value--not used */
-        end = 19;
+        match = 20;
         break;
     case LENS:
         base = lbase;
-        base -= 257;
         extra = lext;
-        extra -= 257;
-        end = 256;
+        match = 257;
         break;
-    default:            /* DISTS */
+    default:    /* DISTS */
         base = dbase;
         extra = dext;
-        end = -1;
+        match = 0;
     }
 
     /* initialize state for loop */
@@ -216,13 +214,13 @@
     for (;;) {
         /* create table entry */
         here.bits = (unsigned char)(len - drop);
-        if ((int)(work[sym]) < end) {
+        if (work[sym] + 1U < match) {
             here.op = (unsigned char)0;
             here.val = work[sym];
         }
-        else if ((int)(work[sym]) > end) {
-            here.op = (unsigned char)(extra[work[sym]]);
-            here.val = base[work[sym]];
+        else if (work[sym] >= match) {
+            here.op = (unsigned char)(extra[work[sym] - match]);
+            here.val = base[work[sym] - match];
         }
         else {
             here.op = (unsigned char)(32 + 64);         /* end of block */
diff --git a/Modules/zlib/trees.c b/Modules/zlib/trees.c
index 1fd7759..50cf4b4 100644
--- a/Modules/zlib/trees.c
+++ b/Modules/zlib/trees.c
@@ -1,5 +1,5 @@
 /* trees.c -- output deflated data using Huffman coding
- * Copyright (C) 1995-2012 Jean-loup Gailly
+ * Copyright (C) 1995-2017 Jean-loup Gailly
  * detect_data_type() function provided freely by Cosmin Truta, 2006
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
@@ -36,7 +36,7 @@
 
 #include "deflate.h"
 
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
 #  include <ctype.h>
 #endif
 
@@ -122,13 +122,13 @@
     int     max_length;          /* max bit length for the codes */
 };
 
-local static_tree_desc  static_l_desc =
+local const static_tree_desc  static_l_desc =
 {static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
 
-local static_tree_desc  static_d_desc =
+local const static_tree_desc  static_d_desc =
 {static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS};
 
-local static_tree_desc  static_bl_desc =
+local const static_tree_desc  static_bl_desc =
 {(const ct_data *)0, extra_blbits, 0,   BL_CODES, MAX_BL_BITS};
 
 /* ===========================================================================
@@ -152,18 +152,16 @@
 local unsigned bi_reverse OF((unsigned value, int length));
 local void bi_windup      OF((deflate_state *s));
 local void bi_flush       OF((deflate_state *s));
-local void copy_block     OF((deflate_state *s, charf *buf, unsigned len,
-                              int header));
 
 #ifdef GEN_TREES_H
 local void gen_trees_header OF((void));
 #endif
 
-#ifndef DEBUG
+#ifndef ZLIB_DEBUG
 #  define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
    /* Send a code of the given tree. c and tree must not have side effects */
 
-#else /* DEBUG */
+#else /* !ZLIB_DEBUG */
 #  define send_code(s, c, tree) \
      { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
        send_bits(s, tree[c].Code, tree[c].Len); }
@@ -182,7 +180,7 @@
  * Send a value on a given number of bits.
  * IN assertion: length <= 16 and value fits in length bits.
  */
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
 local void send_bits      OF((deflate_state *s, int value, int length));
 
 local void send_bits(s, value, length)
@@ -208,12 +206,12 @@
         s->bi_valid += length;
     }
 }
-#else /* !DEBUG */
+#else /* !ZLIB_DEBUG */
 
 #define send_bits(s, value, length) \
 { int len = length;\
   if (s->bi_valid > (int)Buf_size - len) {\
-    int val = value;\
+    int val = (int)value;\
     s->bi_buf |= (ush)val << s->bi_valid;\
     put_short(s, s->bi_buf);\
     s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
@@ -223,7 +221,7 @@
     s->bi_valid += len;\
   }\
 }
-#endif /* DEBUG */
+#endif /* ZLIB_DEBUG */
 
 
 /* the arguments must not have side effects */
@@ -317,7 +315,7 @@
  * Genererate the file trees.h describing the static trees.
  */
 #ifdef GEN_TREES_H
-#  ifndef DEBUG
+#  ifndef ZLIB_DEBUG
 #    include <stdio.h>
 #  endif
 
@@ -394,7 +392,7 @@
 
     s->bi_buf = 0;
     s->bi_valid = 0;
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
     s->compressed_len = 0L;
     s->bits_sent = 0L;
 #endif
@@ -522,12 +520,12 @@
         xbits = 0;
         if (n >= base) xbits = extra[n-base];
         f = tree[n].Freq;
-        s->opt_len += (ulg)f * (bits + xbits);
-        if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
+        s->opt_len += (ulg)f * (unsigned)(bits + xbits);
+        if (stree) s->static_len += (ulg)f * (unsigned)(stree[n].Len + xbits);
     }
     if (overflow == 0) return;
 
-    Trace((stderr,"\nbit length overflow\n"));
+    Tracev((stderr,"\nbit length overflow\n"));
     /* This happens for example on obj2 and pic of the Calgary corpus */
 
     /* Find the first bit length which could increase: */
@@ -554,9 +552,8 @@
             m = s->heap[--h];
             if (m > max_code) continue;
             if ((unsigned) tree[m].Len != (unsigned) bits) {
-                Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
-                s->opt_len += ((long)bits - (long)tree[m].Len)
-                              *(long)tree[m].Freq;
+                Tracev((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
+                s->opt_len += ((ulg)bits - tree[m].Len) * tree[m].Freq;
                 tree[m].Len = (ush)bits;
             }
             n--;
@@ -578,7 +575,7 @@
     ushf *bl_count;            /* number of codes at each bit length */
 {
     ush next_code[MAX_BITS+1]; /* next code value for each bit length */
-    ush code = 0;              /* running code value */
+    unsigned code = 0;         /* running code value */
     int bits;                  /* bit index */
     int n;                     /* code index */
 
@@ -586,7 +583,8 @@
      * without bit reversal.
      */
     for (bits = 1; bits <= MAX_BITS; bits++) {
-        next_code[bits] = code = (code + bl_count[bits-1]) << 1;
+        code = (code + bl_count[bits-1]) << 1;
+        next_code[bits] = (ush)code;
     }
     /* Check that the bit counts in bl_count are consistent. The last code
      * must be all ones.
@@ -599,7 +597,7 @@
         int len = tree[n].Len;
         if (len == 0) continue;
         /* Now reverse the bits */
-        tree[n].Code = bi_reverse(next_code[len]++, len);
+        tree[n].Code = (ush)bi_reverse(next_code[len]++, len);
 
         Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
              n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
@@ -821,7 +819,7 @@
         if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
     }
     /* Update opt_len to include the bit length tree and counts */
-    s->opt_len += 3*(max_blindex+1) + 5+5+4;
+    s->opt_len += 3*((ulg)max_blindex+1) + 5+5+4;
     Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
             s->opt_len, s->static_len));
 
@@ -869,11 +867,17 @@
     int last;         /* one if this is the last block for a file */
 {
     send_bits(s, (STORED_BLOCK<<1)+last, 3);    /* send block type */
-#ifdef DEBUG
+    bi_windup(s);        /* align on byte boundary */
+    put_short(s, (ush)stored_len);
+    put_short(s, (ush)~stored_len);
+    zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len);
+    s->pending += stored_len;
+#ifdef ZLIB_DEBUG
     s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
     s->compressed_len += (stored_len + 4) << 3;
+    s->bits_sent += 2*16;
+    s->bits_sent += stored_len<<3;
 #endif
-    copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
 }
 
 /* ===========================================================================
@@ -894,7 +898,7 @@
 {
     send_bits(s, STATIC_TREES<<1, 3);
     send_code(s, END_BLOCK, static_ltree);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
     s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
 #endif
     bi_flush(s);
@@ -902,7 +906,7 @@
 
 /* ===========================================================================
  * Determine the best encoding for the current block: dynamic trees, static
- * trees or store, and output the encoded block to the zip file.
+ * trees or store, and write out the encoded block.
  */
 void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
     deflate_state *s;
@@ -974,7 +978,7 @@
         send_bits(s, (STATIC_TREES<<1)+last, 3);
         compress_block(s, (const ct_data *)static_ltree,
                        (const ct_data *)static_dtree);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
         s->compressed_len += 3 + s->static_len;
 #endif
     } else {
@@ -983,7 +987,7 @@
                        max_blindex+1);
         compress_block(s, (const ct_data *)s->dyn_ltree,
                        (const ct_data *)s->dyn_dtree);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
         s->compressed_len += 3 + s->opt_len;
 #endif
     }
@@ -995,7 +999,7 @@
 
     if (last) {
         bi_windup(s);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
         s->compressed_len += 7;  /* align on byte boundary */
 #endif
     }
@@ -1090,7 +1094,7 @@
             send_code(s, code, dtree);       /* send the distance code */
             extra = extra_dbits[code];
             if (extra != 0) {
-                dist -= base_dist[code];
+                dist -= (unsigned)base_dist[code];
                 send_bits(s, dist, extra);   /* send the extra distance bits */
             }
         } /* literal or match pair ? */
@@ -1193,34 +1197,7 @@
     }
     s->bi_buf = 0;
     s->bi_valid = 0;
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
     s->bits_sent = (s->bits_sent+7) & ~7;
 #endif
 }
-
-/* ===========================================================================
- * Copy a stored block, storing first the length and its
- * one's complement if requested.
- */
-local void copy_block(s, buf, len, header)
-    deflate_state *s;
-    charf    *buf;    /* the input data */
-    unsigned len;     /* its length */
-    int      header;  /* true if block header must be written */
-{
-    bi_windup(s);        /* align on byte boundary */
-
-    if (header) {
-        put_short(s, (ush)len);
-        put_short(s, (ush)~len);
-#ifdef DEBUG
-        s->bits_sent += 2*16;
-#endif
-    }
-#ifdef DEBUG
-    s->bits_sent += (ulg)len<<3;
-#endif
-    while (len--) {
-        put_byte(s, *buf++);
-    }
-}
diff --git a/Modules/zlib/uncompr.c b/Modules/zlib/uncompr.c
index 242e949..f03a1a8 100644
--- a/Modules/zlib/uncompr.c
+++ b/Modules/zlib/uncompr.c
@@ -1,5 +1,5 @@
 /* uncompr.c -- decompress a memory buffer
- * Copyright (C) 1995-2003, 2010 Jean-loup Gailly.
+ * Copyright (C) 1995-2003, 2010, 2014, 2016 Jean-loup Gailly, Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -9,51 +9,85 @@
 #include "zlib.h"
 
 /* ===========================================================================
-     Decompresses the source buffer into the destination buffer.  sourceLen is
-   the byte length of the source buffer. Upon entry, destLen is the total
-   size of the destination buffer, which must be large enough to hold the
-   entire uncompressed data. (The size of the uncompressed data must have
-   been saved previously by the compressor and transmitted to the decompressor
-   by some mechanism outside the scope of this compression library.)
-   Upon exit, destLen is the actual size of the compressed buffer.
+     Decompresses the source buffer into the destination buffer.  *sourceLen is
+   the byte length of the source buffer. Upon entry, *destLen is the total size
+   of the destination buffer, which must be large enough to hold the entire
+   uncompressed data. (The size of the uncompressed data must have been saved
+   previously by the compressor and transmitted to the decompressor by some
+   mechanism outside the scope of this compression library.) Upon exit,
+   *destLen is the size of the decompressed data and *sourceLen is the number
+   of source bytes consumed. Upon return, source + *sourceLen points to the
+   first unused input byte.
 
-     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
-   enough memory, Z_BUF_ERROR if there was not enough room in the output
-   buffer, or Z_DATA_ERROR if the input data was corrupted.
+     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_BUF_ERROR if there was not enough room in the output buffer, or
+   Z_DATA_ERROR if the input data was corrupted, including if the input data is
+   an incomplete zlib stream.
 */
+int ZEXPORT uncompress2 (dest, destLen, source, sourceLen)
+    Bytef *dest;
+    uLongf *destLen;
+    const Bytef *source;
+    uLong *sourceLen;
+{
+    z_stream stream;
+    int err;
+    const uInt max = (uInt)-1;
+    uLong len, left;
+    Byte buf[1];    /* for detection of incomplete stream when *destLen == 0 */
+
+    len = *sourceLen;
+    if (*destLen) {
+        left = *destLen;
+        *destLen = 0;
+    }
+    else {
+        left = 1;
+        dest = buf;
+    }
+
+    stream.next_in = (z_const Bytef *)source;
+    stream.avail_in = 0;
+    stream.zalloc = (alloc_func)0;
+    stream.zfree = (free_func)0;
+    stream.opaque = (voidpf)0;
+
+    err = inflateInit(&stream);
+    if (err != Z_OK) return err;
+
+    stream.next_out = dest;
+    stream.avail_out = 0;
+
+    do {
+        if (stream.avail_out == 0) {
+            stream.avail_out = left > (uLong)max ? max : (uInt)left;
+            left -= stream.avail_out;
+        }
+        if (stream.avail_in == 0) {
+            stream.avail_in = len > (uLong)max ? max : (uInt)len;
+            len -= stream.avail_in;
+        }
+        err = inflate(&stream, Z_NO_FLUSH);
+    } while (err == Z_OK);
+
+    *sourceLen -= len + stream.avail_in;
+    if (dest != buf)
+        *destLen = stream.total_out;
+    else if (stream.total_out && err == Z_BUF_ERROR)
+        left = 1;
+
+    inflateEnd(&stream);
+    return err == Z_STREAM_END ? Z_OK :
+           err == Z_NEED_DICT ? Z_DATA_ERROR  :
+           err == Z_BUF_ERROR && left + stream.avail_out ? Z_DATA_ERROR :
+           err;
+}
+
 int ZEXPORT uncompress (dest, destLen, source, sourceLen)
     Bytef *dest;
     uLongf *destLen;
     const Bytef *source;
     uLong sourceLen;
 {
-    z_stream stream;
-    int err;
-
-    stream.next_in = (z_const Bytef *)source;
-    stream.avail_in = (uInt)sourceLen;
-    /* Check for source > 64K on 16-bit machine: */
-    if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-
-    stream.next_out = dest;
-    stream.avail_out = (uInt)*destLen;
-    if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
-
-    stream.zalloc = (alloc_func)0;
-    stream.zfree = (free_func)0;
-
-    err = inflateInit(&stream);
-    if (err != Z_OK) return err;
-
-    err = inflate(&stream, Z_FINISH);
-    if (err != Z_STREAM_END) {
-        inflateEnd(&stream);
-        if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
-            return Z_DATA_ERROR;
-        return err;
-    }
-    *destLen = stream.total_out;
-
-    err = inflateEnd(&stream);
-    return err;
+    return uncompress2(dest, destLen, source, &sourceLen);
 }
diff --git a/Modules/zlib/zconf.h b/Modules/zlib/zconf.h
index 9987a77..5e1d68a 100644
--- a/Modules/zlib/zconf.h
+++ b/Modules/zlib/zconf.h
@@ -1,5 +1,5 @@
 /* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -17,7 +17,7 @@
 #ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */
 #  define Z_PREFIX_SET
 
-/* all linked symbols */
+/* all linked symbols and init macros */
 #  define _dist_code            z__dist_code
 #  define _length_code          z__length_code
 #  define _tr_align             z__tr_align
@@ -29,6 +29,7 @@
 #  define adler32               z_adler32
 #  define adler32_combine       z_adler32_combine
 #  define adler32_combine64     z_adler32_combine64
+#  define adler32_z             z_adler32_z
 #  ifndef Z_SOLO
 #    define compress              z_compress
 #    define compress2             z_compress2
@@ -37,10 +38,14 @@
 #  define crc32                 z_crc32
 #  define crc32_combine         z_crc32_combine
 #  define crc32_combine64       z_crc32_combine64
+#  define crc32_z               z_crc32_z
 #  define deflate               z_deflate
 #  define deflateBound          z_deflateBound
 #  define deflateCopy           z_deflateCopy
 #  define deflateEnd            z_deflateEnd
+#  define deflateGetDictionary  z_deflateGetDictionary
+#  define deflateInit           z_deflateInit
+#  define deflateInit2          z_deflateInit2
 #  define deflateInit2_         z_deflateInit2_
 #  define deflateInit_          z_deflateInit_
 #  define deflateParams         z_deflateParams
@@ -67,6 +72,8 @@
 #    define gzeof                 z_gzeof
 #    define gzerror               z_gzerror
 #    define gzflush               z_gzflush
+#    define gzfread               z_gzfread
+#    define gzfwrite              z_gzfwrite
 #    define gzgetc                z_gzgetc
 #    define gzgetc_               z_gzgetc_
 #    define gzgets                z_gzgets
@@ -78,7 +85,6 @@
 #      define gzopen_w              z_gzopen_w
 #    endif
 #    define gzprintf              z_gzprintf
-#    define gzvprintf             z_gzvprintf
 #    define gzputc                z_gzputc
 #    define gzputs                z_gzputs
 #    define gzread                z_gzread
@@ -89,32 +95,39 @@
 #    define gztell                z_gztell
 #    define gztell64              z_gztell64
 #    define gzungetc              z_gzungetc
+#    define gzvprintf             z_gzvprintf
 #    define gzwrite               z_gzwrite
 #  endif
 #  define inflate               z_inflate
 #  define inflateBack           z_inflateBack
 #  define inflateBackEnd        z_inflateBackEnd
+#  define inflateBackInit       z_inflateBackInit
 #  define inflateBackInit_      z_inflateBackInit_
+#  define inflateCodesUsed      z_inflateCodesUsed
 #  define inflateCopy           z_inflateCopy
 #  define inflateEnd            z_inflateEnd
+#  define inflateGetDictionary  z_inflateGetDictionary
 #  define inflateGetHeader      z_inflateGetHeader
+#  define inflateInit           z_inflateInit
+#  define inflateInit2          z_inflateInit2
 #  define inflateInit2_         z_inflateInit2_
 #  define inflateInit_          z_inflateInit_
 #  define inflateMark           z_inflateMark
 #  define inflatePrime          z_inflatePrime
 #  define inflateReset          z_inflateReset
 #  define inflateReset2         z_inflateReset2
+#  define inflateResetKeep      z_inflateResetKeep
 #  define inflateSetDictionary  z_inflateSetDictionary
-#  define inflateGetDictionary  z_inflateGetDictionary
 #  define inflateSync           z_inflateSync
 #  define inflateSyncPoint      z_inflateSyncPoint
 #  define inflateUndermine      z_inflateUndermine
-#  define inflateResetKeep      z_inflateResetKeep
+#  define inflateValidate       z_inflateValidate
 #  define inflate_copyright     z_inflate_copyright
 #  define inflate_fast          z_inflate_fast
 #  define inflate_table         z_inflate_table
 #  ifndef Z_SOLO
 #    define uncompress            z_uncompress
+#    define uncompress2           z_uncompress2
 #  endif
 #  define zError                z_zError
 #  ifndef Z_SOLO
@@ -224,9 +237,19 @@
 #  define z_const
 #endif
 
-/* Some Mac compilers merge all .h files incorrectly: */
-#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
-#  define NO_DUMMY_DECL
+#ifdef Z_SOLO
+   typedef unsigned long z_size_t;
+#else
+#  define z_longlong long long
+#  if defined(NO_SIZE_T)
+     typedef unsigned NO_SIZE_T z_size_t;
+#  elif defined(STDC)
+#    include <stddef.h>
+     typedef size_t z_size_t;
+#  else
+     typedef unsigned long z_size_t;
+#  endif
+#  undef z_longlong
 #endif
 
 /* Maximum value for memLevel in deflateInit2 */
@@ -256,7 +279,7 @@
  Of course this will generally degrade compression (there's no free lunch).
 
    The memory requirements for inflate are (in bytes) 1 << windowBits
- that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ that is, 32K for windowBits=15 (default value) plus about 7 kilobytes
  for small objects.
 */
 
diff --git a/Modules/zlib/zconf.h.cmakein b/Modules/zlib/zconf.h.cmakein
index 043019c..a7f24cc 100644
--- a/Modules/zlib/zconf.h.cmakein
+++ b/Modules/zlib/zconf.h.cmakein
@@ -1,5 +1,5 @@
 /* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -19,7 +19,7 @@
 #ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */
 #  define Z_PREFIX_SET
 
-/* all linked symbols */
+/* all linked symbols and init macros */
 #  define _dist_code            z__dist_code
 #  define _length_code          z__length_code
 #  define _tr_align             z__tr_align
@@ -31,6 +31,7 @@
 #  define adler32               z_adler32
 #  define adler32_combine       z_adler32_combine
 #  define adler32_combine64     z_adler32_combine64
+#  define adler32_z             z_adler32_z
 #  ifndef Z_SOLO
 #    define compress              z_compress
 #    define compress2             z_compress2
@@ -39,10 +40,14 @@
 #  define crc32                 z_crc32
 #  define crc32_combine         z_crc32_combine
 #  define crc32_combine64       z_crc32_combine64
+#  define crc32_z               z_crc32_z
 #  define deflate               z_deflate
 #  define deflateBound          z_deflateBound
 #  define deflateCopy           z_deflateCopy
 #  define deflateEnd            z_deflateEnd
+#  define deflateGetDictionary  z_deflateGetDictionary
+#  define deflateInit           z_deflateInit
+#  define deflateInit2          z_deflateInit2
 #  define deflateInit2_         z_deflateInit2_
 #  define deflateInit_          z_deflateInit_
 #  define deflateParams         z_deflateParams
@@ -69,6 +74,8 @@
 #    define gzeof                 z_gzeof
 #    define gzerror               z_gzerror
 #    define gzflush               z_gzflush
+#    define gzfread               z_gzfread
+#    define gzfwrite              z_gzfwrite
 #    define gzgetc                z_gzgetc
 #    define gzgetc_               z_gzgetc_
 #    define gzgets                z_gzgets
@@ -80,7 +87,6 @@
 #      define gzopen_w              z_gzopen_w
 #    endif
 #    define gzprintf              z_gzprintf
-#    define gzvprintf             z_gzvprintf
 #    define gzputc                z_gzputc
 #    define gzputs                z_gzputs
 #    define gzread                z_gzread
@@ -91,32 +97,39 @@
 #    define gztell                z_gztell
 #    define gztell64              z_gztell64
 #    define gzungetc              z_gzungetc
+#    define gzvprintf             z_gzvprintf
 #    define gzwrite               z_gzwrite
 #  endif
 #  define inflate               z_inflate
 #  define inflateBack           z_inflateBack
 #  define inflateBackEnd        z_inflateBackEnd
+#  define inflateBackInit       z_inflateBackInit
 #  define inflateBackInit_      z_inflateBackInit_
+#  define inflateCodesUsed      z_inflateCodesUsed
 #  define inflateCopy           z_inflateCopy
 #  define inflateEnd            z_inflateEnd
+#  define inflateGetDictionary  z_inflateGetDictionary
 #  define inflateGetHeader      z_inflateGetHeader
+#  define inflateInit           z_inflateInit
+#  define inflateInit2          z_inflateInit2
 #  define inflateInit2_         z_inflateInit2_
 #  define inflateInit_          z_inflateInit_
 #  define inflateMark           z_inflateMark
 #  define inflatePrime          z_inflatePrime
 #  define inflateReset          z_inflateReset
 #  define inflateReset2         z_inflateReset2
+#  define inflateResetKeep      z_inflateResetKeep
 #  define inflateSetDictionary  z_inflateSetDictionary
-#  define inflateGetDictionary  z_inflateGetDictionary
 #  define inflateSync           z_inflateSync
 #  define inflateSyncPoint      z_inflateSyncPoint
 #  define inflateUndermine      z_inflateUndermine
-#  define inflateResetKeep      z_inflateResetKeep
+#  define inflateValidate       z_inflateValidate
 #  define inflate_copyright     z_inflate_copyright
 #  define inflate_fast          z_inflate_fast
 #  define inflate_table         z_inflate_table
 #  ifndef Z_SOLO
 #    define uncompress            z_uncompress
+#    define uncompress2           z_uncompress2
 #  endif
 #  define zError                z_zError
 #  ifndef Z_SOLO
@@ -226,9 +239,19 @@
 #  define z_const
 #endif
 
-/* Some Mac compilers merge all .h files incorrectly: */
-#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
-#  define NO_DUMMY_DECL
+#ifdef Z_SOLO
+   typedef unsigned long z_size_t;
+#else
+#  define z_longlong long long
+#  if defined(NO_SIZE_T)
+     typedef unsigned NO_SIZE_T z_size_t;
+#  elif defined(STDC)
+#    include <stddef.h>
+     typedef size_t z_size_t;
+#  else
+     typedef unsigned long z_size_t;
+#  endif
+#  undef z_longlong
 #endif
 
 /* Maximum value for memLevel in deflateInit2 */
@@ -258,7 +281,7 @@
  Of course this will generally degrade compression (there's no free lunch).
 
    The memory requirements for inflate are (in bytes) 1 << windowBits
- that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ that is, 32K for windowBits=15 (default value) plus about 7 kilobytes
  for small objects.
 */
 
diff --git a/Modules/zlib/zconf.h.in b/Modules/zlib/zconf.h.in
index 9987a77..5e1d68a 100644
--- a/Modules/zlib/zconf.h.in
+++ b/Modules/zlib/zconf.h.in
@@ -1,5 +1,5 @@
 /* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -17,7 +17,7 @@
 #ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */
 #  define Z_PREFIX_SET
 
-/* all linked symbols */
+/* all linked symbols and init macros */
 #  define _dist_code            z__dist_code
 #  define _length_code          z__length_code
 #  define _tr_align             z__tr_align
@@ -29,6 +29,7 @@
 #  define adler32               z_adler32
 #  define adler32_combine       z_adler32_combine
 #  define adler32_combine64     z_adler32_combine64
+#  define adler32_z             z_adler32_z
 #  ifndef Z_SOLO
 #    define compress              z_compress
 #    define compress2             z_compress2
@@ -37,10 +38,14 @@
 #  define crc32                 z_crc32
 #  define crc32_combine         z_crc32_combine
 #  define crc32_combine64       z_crc32_combine64
+#  define crc32_z               z_crc32_z
 #  define deflate               z_deflate
 #  define deflateBound          z_deflateBound
 #  define deflateCopy           z_deflateCopy
 #  define deflateEnd            z_deflateEnd
+#  define deflateGetDictionary  z_deflateGetDictionary
+#  define deflateInit           z_deflateInit
+#  define deflateInit2          z_deflateInit2
 #  define deflateInit2_         z_deflateInit2_
 #  define deflateInit_          z_deflateInit_
 #  define deflateParams         z_deflateParams
@@ -67,6 +72,8 @@
 #    define gzeof                 z_gzeof
 #    define gzerror               z_gzerror
 #    define gzflush               z_gzflush
+#    define gzfread               z_gzfread
+#    define gzfwrite              z_gzfwrite
 #    define gzgetc                z_gzgetc
 #    define gzgetc_               z_gzgetc_
 #    define gzgets                z_gzgets
@@ -78,7 +85,6 @@
 #      define gzopen_w              z_gzopen_w
 #    endif
 #    define gzprintf              z_gzprintf
-#    define gzvprintf             z_gzvprintf
 #    define gzputc                z_gzputc
 #    define gzputs                z_gzputs
 #    define gzread                z_gzread
@@ -89,32 +95,39 @@
 #    define gztell                z_gztell
 #    define gztell64              z_gztell64
 #    define gzungetc              z_gzungetc
+#    define gzvprintf             z_gzvprintf
 #    define gzwrite               z_gzwrite
 #  endif
 #  define inflate               z_inflate
 #  define inflateBack           z_inflateBack
 #  define inflateBackEnd        z_inflateBackEnd
+#  define inflateBackInit       z_inflateBackInit
 #  define inflateBackInit_      z_inflateBackInit_
+#  define inflateCodesUsed      z_inflateCodesUsed
 #  define inflateCopy           z_inflateCopy
 #  define inflateEnd            z_inflateEnd
+#  define inflateGetDictionary  z_inflateGetDictionary
 #  define inflateGetHeader      z_inflateGetHeader
+#  define inflateInit           z_inflateInit
+#  define inflateInit2          z_inflateInit2
 #  define inflateInit2_         z_inflateInit2_
 #  define inflateInit_          z_inflateInit_
 #  define inflateMark           z_inflateMark
 #  define inflatePrime          z_inflatePrime
 #  define inflateReset          z_inflateReset
 #  define inflateReset2         z_inflateReset2
+#  define inflateResetKeep      z_inflateResetKeep
 #  define inflateSetDictionary  z_inflateSetDictionary
-#  define inflateGetDictionary  z_inflateGetDictionary
 #  define inflateSync           z_inflateSync
 #  define inflateSyncPoint      z_inflateSyncPoint
 #  define inflateUndermine      z_inflateUndermine
-#  define inflateResetKeep      z_inflateResetKeep
+#  define inflateValidate       z_inflateValidate
 #  define inflate_copyright     z_inflate_copyright
 #  define inflate_fast          z_inflate_fast
 #  define inflate_table         z_inflate_table
 #  ifndef Z_SOLO
 #    define uncompress            z_uncompress
+#    define uncompress2           z_uncompress2
 #  endif
 #  define zError                z_zError
 #  ifndef Z_SOLO
@@ -224,9 +237,19 @@
 #  define z_const
 #endif
 
-/* Some Mac compilers merge all .h files incorrectly: */
-#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
-#  define NO_DUMMY_DECL
+#ifdef Z_SOLO
+   typedef unsigned long z_size_t;
+#else
+#  define z_longlong long long
+#  if defined(NO_SIZE_T)
+     typedef unsigned NO_SIZE_T z_size_t;
+#  elif defined(STDC)
+#    include <stddef.h>
+     typedef size_t z_size_t;
+#  else
+     typedef unsigned long z_size_t;
+#  endif
+#  undef z_longlong
 #endif
 
 /* Maximum value for memLevel in deflateInit2 */
@@ -256,7 +279,7 @@
  Of course this will generally degrade compression (there's no free lunch).
 
    The memory requirements for inflate are (in bytes) 1 << windowBits
- that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ that is, 32K for windowBits=15 (default value) plus about 7 kilobytes
  for small objects.
 */
 
diff --git a/Modules/zlib/zlib.3 b/Modules/zlib/zlib.3
index 0160e62..bda4eb0 100644
--- a/Modules/zlib/zlib.3
+++ b/Modules/zlib/zlib.3
@@ -1,4 +1,4 @@
-.TH ZLIB 3 "28 Apr 2013"
+.TH ZLIB 3 "15 Jan 2017"
 .SH NAME
 zlib \- compression/decompression library
 .SH SYNOPSIS
@@ -48,32 +48,10 @@
 that accompanies the source.
 .LP
 .I zlib
-is available in Java using the java.util.zip package:
-.IP
-http://java.sun.com/developer/technicalArticles/Programming/compression/
+is built in to many languages and operating systems, including but not limited to
+Java, Python, .NET, PHP, Perl, Ruby, Swift, and Go.
 .LP
-A Perl interface to
-.IR zlib ,
-written by Paul Marquess (pmqs@cpan.org),
-is available at CPAN (Comprehensive Perl Archive Network) sites,
-including:
-.IP
-http://search.cpan.org/~pmqs/IO-Compress-Zlib/
-.LP
-A Python interface to
-.IR zlib ,
-written by A.M. Kuchling (amk@magnet.com),
-is available in Python 1.5 and later versions:
-.IP
-http://docs.python.org/library/zlib.html
-.LP
-.I zlib
-is built into
-.IR tcl:
-.IP
-http://wiki.tcl.tk/4610
-.LP
-An experimental package to read and write files in .zip format,
+An experimental package to read and write files in the .zip format,
 written on top of
 .I zlib
 by Gilles Vollant (info@winimage.com),
@@ -92,7 +70,9 @@
 .IP
 http://zlib.net/
 .LP
-The data format used by the zlib library is described by RFC
+The data format used by the
+.I zlib
+library is described by RFC
 (Request for Comments) 1950 to 1952 in the files:
 .IP
 http://tools.ietf.org/html/rfc1950 (for the zlib header and trailer format)
@@ -124,17 +104,35 @@
 before asking for help.
 Send questions and/or comments to zlib@gzip.org,
 or (for the Windows DLL version) to Gilles Vollant (info@winimage.com).
-.SH AUTHORS
-Version 1.2.8
-Copyright (C) 1995-2013 Jean-loup Gailly (jloup@gzip.org)
-and Mark Adler (madler@alumni.caltech.edu).
+.SH AUTHORS AND LICENSE
+Version 1.2.11
 .LP
-This software is provided "as-is,"
-without any express or implied warranty.
-In no event will the authors be held liable for any damages
+Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
+.LP
+This software is provided 'as-is', without any express or implied
+warranty.  In no event will the authors be held liable for any damages
 arising from the use of this software.
-See the distribution directory with respect to requirements
-governing redistribution.
+.LP
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+.LP
+.nr step 1 1
+.IP \n[step]. 3
+The origin of this software must not be misrepresented; you must not
+claim that you wrote the original software. If you use this software
+in a product, an acknowledgment in the product documentation would be
+appreciated but is not required.
+.IP \n+[step].
+Altered source versions must be plainly marked as such, and must not be
+misrepresented as being the original software.
+.IP \n+[step].
+This notice may not be removed or altered from any source distribution.
+.LP
+Jean-loup Gailly        Mark Adler
+.br
+jloup@gzip.org          madler@alumni.caltech.edu
+.LP
 The deflate format used by
 .I zlib
 was defined by Phil Katz.
diff --git a/Modules/zlib/zlib.h b/Modules/zlib/zlib.h
index 3e0c767..f09cdaf 100644
--- a/Modules/zlib/zlib.h
+++ b/Modules/zlib/zlib.h
@@ -1,7 +1,7 @@
 /* zlib.h -- interface of the 'zlib' general purpose compression library
-  version 1.2.8, April 28th, 2013
+  version 1.2.11, January 15th, 2017
 
-  Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+  Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -37,11 +37,11 @@
 extern "C" {
 #endif
 
-#define ZLIB_VERSION "1.2.8"
-#define ZLIB_VERNUM 0x1280
+#define ZLIB_VERSION "1.2.11"
+#define ZLIB_VERNUM 0x12b0
 #define ZLIB_VER_MAJOR 1
 #define ZLIB_VER_MINOR 2
-#define ZLIB_VER_REVISION 8
+#define ZLIB_VER_REVISION 11
 #define ZLIB_VER_SUBREVISION 0
 
 /*
@@ -65,7 +65,8 @@
   with "gz".  The gzip format is different from the zlib format.  gzip is a
   gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
 
-    This library can optionally read and write gzip streams in memory as well.
+    This library can optionally read and write gzip and raw deflate streams in
+  memory as well.
 
     The zlib format was designed to be compact and fast for use in memory
   and on communications channels.  The gzip format was designed for single-
@@ -74,7 +75,7 @@
 
     The library does not install any signal handler.  The decoder checks
   the consistency of the compressed data, so the library should never crash
-  even in case of corrupted input.
+  even in the case of corrupted input.
 */
 
 typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
@@ -87,7 +88,7 @@
     uInt     avail_in;  /* number of bytes available at next_in */
     uLong    total_in;  /* total number of input bytes read so far */
 
-    Bytef    *next_out; /* next output byte should be put there */
+    Bytef    *next_out; /* next output byte will go here */
     uInt     avail_out; /* remaining free space at next_out */
     uLong    total_out; /* total number of bytes output so far */
 
@@ -98,8 +99,9 @@
     free_func  zfree;   /* used to free the internal state */
     voidpf     opaque;  /* private data object passed to zalloc and zfree */
 
-    int     data_type;  /* best guess about the data type: binary or text */
-    uLong   adler;      /* adler32 value of the uncompressed data */
+    int     data_type;  /* best guess about the data type: binary or text
+                           for deflate, or the decoding state for inflate */
+    uLong   adler;      /* Adler-32 or CRC-32 value of the uncompressed data */
     uLong   reserved;   /* reserved for future use */
 } z_stream;
 
@@ -142,7 +144,9 @@
 
      zalloc must return Z_NULL if there is not enough memory for the object.
    If zlib is used in a multi-threaded application, zalloc and zfree must be
-   thread safe.
+   thread safe.  In that case, zlib is thread-safe.  When zalloc and zfree are
+   Z_NULL on entry to the initialization function, they are set to internal
+   routines that use the standard library functions malloc() and free().
 
      On 16-bit systems, the functions zalloc and zfree must be able to allocate
    exactly 65536 bytes, but will not be required to allocate more than this if
@@ -155,7 +159,7 @@
 
      The fields total_in and total_out can be used for statistics or progress
    reports.  After compression, total_in holds the total size of the
-   uncompressed data and may be saved for use in the decompressor (particularly
+   uncompressed data and may be saved for use by the decompressor (particularly
    if the decompressor wants to decompress everything in a single step).
 */
 
@@ -200,7 +204,7 @@
 #define Z_TEXT     1
 #define Z_ASCII    Z_TEXT   /* for compatibility with 1.2.2 and earlier */
 #define Z_UNKNOWN  2
-/* Possible values of the data_type field (though see inflate()) */
+/* Possible values of the data_type field for deflate() */
 
 #define Z_DEFLATED   8
 /* The deflate compression method (the only one supported in this version) */
@@ -258,11 +262,11 @@
     enough room in the output buffer), next_in and avail_in are updated and
     processing will resume at this point for the next call of deflate().
 
-  - Provide more output starting at next_out and update next_out and avail_out
+  - Generate more output starting at next_out and update next_out and avail_out
     accordingly.  This action is forced if the parameter flush is non zero.
     Forcing flush frequently degrades the compression ratio, so this parameter
-    should be set only when necessary (in interactive applications).  Some
-    output may be provided even if flush is not set.
+    should be set only when necessary.  Some output may be provided even if
+    flush is zero.
 
     Before the call of deflate(), the application should ensure that at least
   one of the actions is possible, by providing more input and/or consuming more
@@ -271,7 +275,9 @@
   output when it wants, for example when the output buffer is full (avail_out
   == 0), or after each call of deflate().  If deflate returns Z_OK and with
   zero avail_out, it must be called again after making room in the output
-  buffer because there might be more output pending.
+  buffer because there might be more output pending. See deflatePending(),
+  which can be used if desired to determine whether or not there is more ouput
+  in that case.
 
     Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
   decide how much data to accumulate before producing output, in order to
@@ -292,8 +298,8 @@
   input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.
   This completes the current deflate block and follows it with an empty fixed
   codes block that is 10 bits long.  This assures that enough bytes are output
-  in order for the decompressor to finish the block before the empty fixed code
-  block.
+  in order for the decompressor to finish the block before the empty fixed
+  codes block.
 
     If flush is set to Z_BLOCK, a deflate block is completed and emitted, as
   for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to
@@ -319,34 +325,38 @@
 
     If the parameter flush is set to Z_FINISH, pending input is processed,
   pending output is flushed and deflate returns with Z_STREAM_END if there was
-  enough output space; if deflate returns with Z_OK, this function must be
-  called again with Z_FINISH and more output space (updated avail_out) but no
-  more input data, until it returns with Z_STREAM_END or an error.  After
-  deflate has returned Z_STREAM_END, the only possible operations on the stream
-  are deflateReset or deflateEnd.
+  enough output space.  If deflate returns with Z_OK or Z_BUF_ERROR, this
+  function must be called again with Z_FINISH and more output space (updated
+  avail_out) but no more input data, until it returns with Z_STREAM_END or an
+  error.  After deflate has returned Z_STREAM_END, the only possible operations
+  on the stream are deflateReset or deflateEnd.
 
-    Z_FINISH can be used immediately after deflateInit if all the compression
-  is to be done in a single step.  In this case, avail_out must be at least the
-  value returned by deflateBound (see below).  Then deflate is guaranteed to
-  return Z_STREAM_END.  If not enough output space is provided, deflate will
-  not return Z_STREAM_END, and it must be called again as described above.
+    Z_FINISH can be used in the first deflate call after deflateInit if all the
+  compression is to be done in a single step.  In order to complete in one
+  call, avail_out must be at least the value returned by deflateBound (see
+  below).  Then deflate is guaranteed to return Z_STREAM_END.  If not enough
+  output space is provided, deflate will not return Z_STREAM_END, and it must
+  be called again as described above.
 
-    deflate() sets strm->adler to the adler32 checksum of all input read
-  so far (that is, total_in bytes).
+    deflate() sets strm->adler to the Adler-32 checksum of all input read
+  so far (that is, total_in bytes).  If a gzip stream is being generated, then
+  strm->adler will be the CRC-32 checksum of the input read so far.  (See
+  deflateInit2 below.)
 
     deflate() may update strm->data_type if it can make a good guess about
-  the input data type (Z_BINARY or Z_TEXT).  In doubt, the data is considered
-  binary.  This field is only for information purposes and does not affect the
-  compression algorithm in any manner.
+  the input data type (Z_BINARY or Z_TEXT).  If in doubt, the data is
+  considered binary.  This field is only for information purposes and does not
+  affect the compression algorithm in any manner.
 
     deflate() returns Z_OK if some progress has been made (more input
   processed or more output produced), Z_STREAM_END if all input has been
   consumed and all output has been produced (only when flush is set to
   Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
-  if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible
-  (for example avail_in or avail_out was zero).  Note that Z_BUF_ERROR is not
-  fatal, and deflate() can be called again with more input and more output
-  space to continue compressing.
+  if next_in or next_out was Z_NULL or the state was inadvertently written over
+  by the application), or Z_BUF_ERROR if no progress is possible (for example
+  avail_in or avail_out was zero).  Note that Z_BUF_ERROR is not fatal, and
+  deflate() can be called again with more input and more output space to
+  continue compressing.
 */
 
 
@@ -369,23 +379,21 @@
 
      Initializes the internal stream state for decompression.  The fields
    next_in, avail_in, zalloc, zfree and opaque must be initialized before by
-   the caller.  If next_in is not Z_NULL and avail_in is large enough (the
-   exact value depends on the compression method), inflateInit determines the
-   compression method from the zlib header and allocates all data structures
-   accordingly; otherwise the allocation will be deferred to the first call of
-   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
-   use default allocation functions.
+   the caller.  In the current version of inflate, the provided input is not
+   read or consumed.  The allocation of a sliding window will be deferred to
+   the first call of inflate (if the decompression does not complete on the
+   first call).  If zalloc and zfree are set to Z_NULL, inflateInit updates
+   them to use default allocation functions.
 
      inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
    memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
    version assumed by the caller, or Z_STREAM_ERROR if the parameters are
    invalid, such as a null pointer to the structure.  msg is set to null if
-   there is no error message.  inflateInit does not perform any decompression
-   apart from possibly reading the zlib header if present: actual decompression
-   will be done by inflate().  (So next_in and avail_in may be modified, but
-   next_out and avail_out are unused and unchanged.) The current implementation
-   of inflateInit() does not process any header information -- that is deferred
-   until inflate() is called.
+   there is no error message.  inflateInit does not perform any decompression.
+   Actual decompression will be done by inflate().  So next_in, and avail_in,
+   next_out, and avail_out are unused and unchanged.  The current
+   implementation of inflateInit() does not process any header information --
+   that is deferred until inflate() is called.
 */
 
 
@@ -401,17 +409,20 @@
 
   - Decompress more input starting at next_in and update next_in and avail_in
     accordingly.  If not all input can be processed (because there is not
-    enough room in the output buffer), next_in is updated and processing will
-    resume at this point for the next call of inflate().
+    enough room in the output buffer), then next_in and avail_in are updated
+    accordingly, and processing will resume at this point for the next call of
+    inflate().
 
-  - Provide more output starting at next_out and update next_out and avail_out
+  - Generate more output starting at next_out and update next_out and avail_out
     accordingly.  inflate() provides as much output as possible, until there is
     no more input data or no more space in the output buffer (see below about
     the flush parameter).
 
     Before the call of inflate(), the application should ensure that at least
   one of the actions is possible, by providing more input and/or consuming more
-  output, and updating the next_* and avail_* values accordingly.  The
+  output, and updating the next_* and avail_* values accordingly.  If the
+  caller of inflate() does not provide both available input and available
+  output space, it is possible that there will be no progress made.  The
   application can consume the uncompressed output when it wants, for example
   when the output buffer is full (avail_out == 0), or after each call of
   inflate().  If inflate returns Z_OK and with zero avail_out, it must be
@@ -428,7 +439,7 @@
   gets to the end of that block, or when it runs out of data.
 
     The Z_BLOCK option assists in appending to or combining deflate streams.
-  Also to assist in this, on return inflate() will set strm->data_type to the
+  To assist in this, on return inflate() always sets strm->data_type to the
   number of unused bits in the last byte taken from strm->next_in, plus 64 if
   inflate() is currently decoding the last block in the deflate stream, plus
   128 if inflate() returned immediately after decoding an end-of-block code or
@@ -454,7 +465,7 @@
   this case all pending input is processed and all pending output is flushed;
   avail_out must be large enough to hold all of the uncompressed data for the
   operation to complete.  (The size of the uncompressed data may have been
-  saved by the compressor for this purpose.) The use of Z_FINISH is not
+  saved by the compressor for this purpose.)  The use of Z_FINISH is not
   required to perform an inflation in one step.  However it may be used to
   inform inflate that a faster approach can be used for the single inflate()
   call.  Z_FINISH also informs inflate to not maintain a sliding window if the
@@ -476,32 +487,33 @@
   chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
   strm->adler to the Adler-32 checksum of all output produced so far (that is,
   total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
-  below.  At the end of the stream, inflate() checks that its computed adler32
+  below.  At the end of the stream, inflate() checks that its computed Adler-32
   checksum is equal to that saved by the compressor and returns Z_STREAM_END
   only if the checksum is correct.
 
     inflate() can decompress and check either zlib-wrapped or gzip-wrapped
   deflate data.  The header type is detected automatically, if requested when
   initializing with inflateInit2().  Any information contained in the gzip
-  header is not retained, so applications that need that information should
-  instead use raw inflate, see inflateInit2() below, or inflateBack() and
-  perform their own processing of the gzip header and trailer.  When processing
+  header is not retained unless inflateGetHeader() is used.  When processing
   gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
-  producted so far.  The CRC-32 is checked against the gzip trailer.
+  produced so far.  The CRC-32 is checked against the gzip trailer, as is the
+  uncompressed length, modulo 2^32.
 
     inflate() returns Z_OK if some progress has been made (more input processed
   or more output produced), Z_STREAM_END if the end of the compressed data has
   been reached and all uncompressed output has been produced, Z_NEED_DICT if a
   preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
   corrupted (input stream not conforming to the zlib format or incorrect check
-  value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
-  next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory,
-  Z_BUF_ERROR if no progress is possible or if there was not enough room in the
-  output buffer when Z_FINISH is used.  Note that Z_BUF_ERROR is not fatal, and
+  value, in which case strm->msg points to a string with a more specific
+  error), Z_STREAM_ERROR if the stream structure was inconsistent (for example
+  next_in or next_out was Z_NULL, or the state was inadvertently written over
+  by the application), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR
+  if no progress was possible or if there was not enough room in the output
+  buffer when Z_FINISH is used.  Note that Z_BUF_ERROR is not fatal, and
   inflate() can be called again with more input and more output space to
   continue decompressing.  If Z_DATA_ERROR is returned, the application may
   then call inflateSync() to look for a good compression block if a partial
-  recovery of the data is desired.
+  recovery of the data is to be attempted.
 */
 
 
@@ -511,9 +523,8 @@
    This function discards any unprocessed input and does not flush any pending
    output.
 
-     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
-   was inconsistent.  In the error case, msg may be set but then points to a
-   static string (which must not be deallocated).
+     inflateEnd returns Z_OK if success, or Z_STREAM_ERROR if the stream state
+   was inconsistent.
 */
 
 
@@ -544,16 +555,29 @@
    compression at the expense of memory usage.  The default value is 15 if
    deflateInit is used instead.
 
+     For the current implementation of deflate(), a windowBits value of 8 (a
+   window size of 256 bytes) is not supported.  As a result, a request for 8
+   will result in 9 (a 512-byte window).  In that case, providing 8 to
+   inflateInit2() will result in an error when the zlib header with 9 is
+   checked against the initialization of inflate().  The remedy is to not use 8
+   with deflateInit2() with this initialization, or at least in that case use 9
+   with inflateInit2().
+
      windowBits can also be -8..-15 for raw deflate.  In this case, -windowBits
    determines the window size.  deflate() will then generate raw deflate data
-   with no zlib header or trailer, and will not compute an adler32 check value.
+   with no zlib header or trailer, and will not compute a check value.
 
      windowBits can also be greater than 15 for optional gzip encoding.  Add
    16 to windowBits to write a simple gzip header and trailer around the
    compressed data instead of a zlib wrapper.  The gzip header will have no
    file name, no extra data, no comment, no modification time (set to zero), no
-   header crc, and the operating system will be set to 255 (unknown).  If a
-   gzip stream is being written, strm->adler is a crc32 instead of an adler32.
+   header crc, and the operating system will be set to the appropriate value,
+   if the operating system was determined at compile time.  If a gzip stream is
+   being written, strm->adler is a CRC-32 instead of an Adler-32.
+
+     For raw deflate or gzip encoding, a request for a 256-byte window is
+   rejected as invalid, since only the zlib header provides a means of
+   transmitting the window size to the decompressor.
 
      The memLevel parameter specifies how much memory should be allocated
    for the internal compression state.  memLevel=1 uses minimum memory but is
@@ -614,12 +638,12 @@
    addition, the current implementation of deflate will use at most the window
    size minus 262 bytes of the provided dictionary.
 
-     Upon return of this function, strm->adler is set to the adler32 value
+     Upon return of this function, strm->adler is set to the Adler-32 value
    of the dictionary; the decompressor may later use this value to determine
-   which dictionary has been used by the compressor.  (The adler32 value
+   which dictionary has been used by the compressor.  (The Adler-32 value
    applies to the whole dictionary even if only a subset of the dictionary is
    actually used by the compressor.) If a raw deflate was requested, then the
-   adler32 value is not computed and strm->adler is not set.
+   Adler-32 value is not computed and strm->adler is not set.
 
      deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
    parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
@@ -628,6 +652,28 @@
    not perform any compression: this will be done by deflate().
 */
 
+ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm,
+                                             Bytef *dictionary,
+                                             uInt  *dictLength));
+/*
+     Returns the sliding dictionary being maintained by deflate.  dictLength is
+   set to the number of bytes in the dictionary, and that many bytes are copied
+   to dictionary.  dictionary must have enough space, where 32768 bytes is
+   always enough.  If deflateGetDictionary() is called with dictionary equal to
+   Z_NULL, then only the dictionary length is returned, and nothing is copied.
+   Similary, if dictLength is Z_NULL, then it is not set.
+
+     deflateGetDictionary() may return a length less than the window size, even
+   when more than the window size in input has been provided. It may return up
+   to 258 bytes less in that case, due to how zlib's implementation of deflate
+   manages the sliding window and lookahead for matches, where matches can be
+   up to 258 bytes long. If the application needs the last window-size bytes of
+   input, then that would need to be saved by the application outside of zlib.
+
+     deflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
+   stream state is inconsistent.
+*/
+
 ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
                                     z_streamp source));
 /*
@@ -648,10 +694,10 @@
 
 ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
 /*
-     This function is equivalent to deflateEnd followed by deflateInit,
-   but does not free and reallocate all the internal compression state.  The
-   stream will keep the same compression level and any other attributes that
-   may have been set by deflateInit2.
+     This function is equivalent to deflateEnd followed by deflateInit, but
+   does not free and reallocate the internal compression state.  The stream
+   will leave the compression level and any other attributes that may have been
+   set unchanged.
 
      deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
    stream state was inconsistent (such as zalloc or state being Z_NULL).
@@ -662,20 +708,36 @@
                                       int strategy));
 /*
      Dynamically update the compression level and compression strategy.  The
-   interpretation of level and strategy is as in deflateInit2.  This can be
+   interpretation of level and strategy is as in deflateInit2().  This can be
    used to switch between compression and straight copy of the input data, or
    to switch to a different kind of input data requiring a different strategy.
-   If the compression level is changed, the input available so far is
-   compressed with the old level (and may be flushed); the new level will take
-   effect only at the next call of deflate().
+   If the compression approach (which is a function of the level) or the
+   strategy is changed, and if any input has been consumed in a previous
+   deflate() call, then the input available so far is compressed with the old
+   level and strategy using deflate(strm, Z_BLOCK).  There are three approaches
+   for the compression levels 0, 1..3, and 4..9 respectively.  The new level
+   and strategy will take effect at the next call of deflate().
 
-     Before the call of deflateParams, the stream state must be set as for
-   a call of deflate(), since the currently available input may have to be
-   compressed and flushed.  In particular, strm->avail_out must be non-zero.
+     If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does
+   not have enough output space to complete, then the parameter change will not
+   take effect.  In this case, deflateParams() can be called again with the
+   same parameters and more output space to try again.
 
-     deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
-   stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if
-   strm->avail_out was zero.
+     In order to assure a change in the parameters on the first try, the
+   deflate stream should be flushed using deflate() with Z_BLOCK or other flush
+   request until strm.avail_out is not zero, before calling deflateParams().
+   Then no more input data should be provided before the deflateParams() call.
+   If this is done, the old level and strategy will be applied to the data
+   compressed before deflateParams(), and the new level and strategy will be
+   applied to the the data compressed after deflateParams().
+
+     deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream
+   state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if
+   there was not enough output space to complete the compression of the
+   available input data before a change in the strategy or approach.  Note that
+   in the case of a Z_BUF_ERROR, the parameters are not changed.  A return
+   value of Z_BUF_ERROR is not fatal, in which case deflateParams() can be
+   retried with more output space.
 */
 
 ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,
@@ -793,7 +855,7 @@
    is for use with other formats that use the deflate compressed data format
    such as zip.  Those formats provide their own check values.  If a custom
    format is developed using the raw deflate format for compressed data, it is
-   recommended that a check value such as an adler32 or a crc32 be applied to
+   recommended that a check value such as an Adler-32 or a CRC-32 be applied to
    the uncompressed data as is done in the zlib, gzip, and zip formats.  For
    most applications, the zlib format should be used as is.  Note that comments
    above on the use in deflateInit2() applies to the magnitude of windowBits.
@@ -802,7 +864,10 @@
    32 to windowBits to enable zlib and gzip decoding with automatic header
    detection, or add 16 to decode only the gzip format (the zlib format will
    return a Z_DATA_ERROR).  If a gzip stream is being decoded, strm->adler is a
-   crc32 instead of an adler32.
+   CRC-32 instead of an Adler-32.  Unlike the gunzip utility and gzread() (see
+   below), inflate() will not automatically decode concatenated gzip streams.
+   inflate() will return Z_STREAM_END at the end of the gzip stream.  The state
+   would need to be reset to continue decoding a subsequent gzip stream.
 
      inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
    memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
@@ -823,7 +888,7 @@
      Initializes the decompression dictionary from the given uncompressed byte
    sequence.  This function must be called immediately after a call of inflate,
    if that call returned Z_NEED_DICT.  The dictionary chosen by the compressor
-   can be determined from the adler32 value returned by that call of inflate.
+   can be determined from the Adler-32 value returned by that call of inflate.
    The compressor and decompressor must use exactly the same dictionary (see
    deflateSetDictionary).  For raw inflate, this function can be called at any
    time to set the dictionary.  If the provided dictionary is smaller than the
@@ -834,7 +899,7 @@
      inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
    parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
    inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
-   expected one (incorrect adler32 value).  inflateSetDictionary does not
+   expected one (incorrect Adler-32 value).  inflateSetDictionary does not
    perform any decompression: this will be done by subsequent calls of
    inflate().
 */
@@ -892,7 +957,7 @@
 ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
 /*
      This function is equivalent to inflateEnd followed by inflateInit,
-   but does not free and reallocate all the internal decompression state.  The
+   but does not free and reallocate the internal decompression state.  The
    stream will keep attributes that may have been set by inflateInit2.
 
      inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
@@ -904,7 +969,9 @@
 /*
      This function is the same as inflateReset, but it also permits changing
    the wrap and window size requests.  The windowBits parameter is interpreted
-   the same as it is for inflateInit2.
+   the same as it is for inflateInit2.  If the window size is changed, then the
+   memory allocated for the window is freed, and the window will be reallocated
+   by inflate() if needed.
 
      inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source
    stream state was inconsistent (such as zalloc or state being Z_NULL), or if
@@ -956,7 +1023,7 @@
    location in the input stream can be determined from avail_in and data_type
    as noted in the description for the Z_BLOCK flush parameter for inflate.
 
-     inflateMark returns the value noted above or -1 << 16 if the provided
+     inflateMark returns the value noted above, or -65536 if the provided
    source stream state was inconsistent.
 */
 
@@ -1048,9 +1115,9 @@
    This routine would normally be used in a utility that reads zip or gzip
    files and writes out uncompressed files.  The utility would decode the
    header and process the trailer on its own, hence this routine expects only
-   the raw deflate stream to decompress.  This is different from the normal
-   behavior of inflate(), which expects either a zlib or gzip header and
-   trailer around the deflate stream.
+   the raw deflate stream to decompress.  This is different from the default
+   behavior of inflate(), which expects a zlib header and trailer around the
+   deflate stream.
 
      inflateBack() uses two subroutines supplied by the caller that are then
    called by inflateBack() for input and output.  inflateBack() calls those
@@ -1059,12 +1126,12 @@
    parameters and return types are defined above in the in_func and out_func
    typedefs.  inflateBack() will call in(in_desc, &buf) which should return the
    number of bytes of provided input, and a pointer to that input in buf.  If
-   there is no input available, in() must return zero--buf is ignored in that
-   case--and inflateBack() will return a buffer error.  inflateBack() will call
-   out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].  out()
-   should return zero on success, or non-zero on failure.  If out() returns
-   non-zero, inflateBack() will return with an error.  Neither in() nor out()
-   are permitted to change the contents of the window provided to
+   there is no input available, in() must return zero -- buf is ignored in that
+   case -- and inflateBack() will return a buffer error.  inflateBack() will
+   call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].
+   out() should return zero on success, or non-zero on failure.  If out()
+   returns non-zero, inflateBack() will return with an error.  Neither in() nor
+   out() are permitted to change the contents of the window provided to
    inflateBackInit(), which is also the buffer that out() uses to write from.
    The length written by out() will be at most the window size.  Any non-zero
    amount of input may be provided by in().
@@ -1092,7 +1159,7 @@
    using strm->next_in which will be Z_NULL only if in() returned an error.  If
    strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning
    non-zero.  (in() will always be called before out(), so strm->next_in is
-   assured to be defined if out() returns non-zero.) Note that inflateBack()
+   assured to be defined if out() returns non-zero.)  Note that inflateBack()
    cannot return Z_OK.
 */
 
@@ -1114,7 +1181,7 @@
      7.6: size of z_off_t
 
     Compiler, assembler, and debug options:
-     8: DEBUG
+     8: ZLIB_DEBUG
      9: ASMV or ASMINF -- use ASM code
      10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
      11: 0 (reserved)
@@ -1164,7 +1231,8 @@
    the byte length of the source buffer.  Upon entry, destLen is the total size
    of the destination buffer, which must be at least the value returned by
    compressBound(sourceLen).  Upon exit, destLen is the actual size of the
-   compressed buffer.
+   compressed data.  compress() is equivalent to compress2() with a level
+   parameter of Z_DEFAULT_COMPRESSION.
 
      compress returns Z_OK if success, Z_MEM_ERROR if there was not
    enough memory, Z_BUF_ERROR if there was not enough room in the output
@@ -1180,7 +1248,7 @@
    length of the source buffer.  Upon entry, destLen is the total size of the
    destination buffer, which must be at least the value returned by
    compressBound(sourceLen).  Upon exit, destLen is the actual size of the
-   compressed buffer.
+   compressed data.
 
      compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
    memory, Z_BUF_ERROR if there was not enough room in the output buffer,
@@ -1203,7 +1271,7 @@
    uncompressed data.  (The size of the uncompressed data must have been saved
    previously by the compressor and transmitted to the decompressor by some
    mechanism outside the scope of this compression library.) Upon exit, destLen
-   is the actual size of the uncompressed buffer.
+   is the actual size of the uncompressed data.
 
      uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
    enough memory, Z_BUF_ERROR if there was not enough room in the output
@@ -1212,6 +1280,14 @@
    buffer with the uncompressed data up to that point.
 */
 
+ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest,   uLongf *destLen,
+                                    const Bytef *source, uLong *sourceLen));
+/*
+     Same as uncompress, except that sourceLen is a pointer, where the
+   length of the source is *sourceLen.  On return, *sourceLen is the number of
+   source bytes consumed.
+*/
+
                         /* gzip file access functions */
 
 /*
@@ -1290,10 +1366,9 @@
    default buffer size is 8192 bytes.  This function must be called after
    gzopen() or gzdopen(), and before any other calls that read or write the
    file.  The buffer memory allocation is always deferred to the first read or
-   write.  Two buffers are allocated, either both of the specified size when
-   writing, or one of the specified size and the other twice that size when
-   reading.  A larger buffer size of, for example, 64K or 128K bytes will
-   noticeably increase the speed of decompression (reading).
+   write.  Three times that size in buffer space is allocated.  A larger buffer
+   size of, for example, 64K or 128K bytes will noticeably increase the speed
+   of decompression (reading).
 
      The new buffer size also affects the maximum length for gzprintf().
 
@@ -1304,10 +1379,12 @@
 ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
 /*
      Dynamically update the compression level or strategy.  See the description
-   of deflateInit2 for the meaning of these parameters.
+   of deflateInit2 for the meaning of these parameters.  Previously provided
+   data is flushed before the parameter change.
 
-     gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
-   opened for writing.
+     gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not
+   opened for writing, Z_ERRNO if there is an error writing the flushed data,
+   or Z_MEM_ERROR if there is a memory allocation error.
 */
 
 ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
@@ -1335,7 +1412,35 @@
    case.
 
      gzread returns the number of uncompressed bytes actually read, less than
-   len for end of file, or -1 for error.
+   len for end of file, or -1 for error.  If len is too large to fit in an int,
+   then nothing is read, -1 is returned, and the error state is set to
+   Z_STREAM_ERROR.
+*/
+
+ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems,
+                                     gzFile file));
+/*
+     Read up to nitems items of size size from file to buf, otherwise operating
+   as gzread() does.  This duplicates the interface of stdio's fread(), with
+   size_t request and return types.  If the library defines size_t, then
+   z_size_t is identical to size_t.  If not, then z_size_t is an unsigned
+   integer type that can contain a pointer.
+
+     gzfread() returns the number of full items read of size size, or zero if
+   the end of the file was reached and a full item could not be read, or if
+   there was an error.  gzerror() must be consulted if zero is returned in
+   order to determine if there was an error.  If the multiplication of size and
+   nitems overflows, i.e. the product does not fit in a z_size_t, then nothing
+   is read, zero is returned, and the error state is set to Z_STREAM_ERROR.
+
+     In the event that the end of file is reached and only a partial item is
+   available at the end, i.e. the remaining uncompressed data length is not a
+   multiple of size, then the final partial item is nevetheless read into buf
+   and the end-of-file flag is set.  The length of the partial item read is not
+   provided, but could be inferred from the result of gztell().  This behavior
+   is the same as the behavior of fread() implementations in common libraries,
+   but it prevents the direct use of gzfread() to read a concurrently written
+   file, reseting and retrying on end-of-file, when size is not 1.
 */
 
 ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
@@ -1346,19 +1451,33 @@
    error.
 */
 
+ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size,
+                                      z_size_t nitems, gzFile file));
+/*
+     gzfwrite() writes nitems items of size size from buf to file, duplicating
+   the interface of stdio's fwrite(), with size_t request and return types.  If
+   the library defines size_t, then z_size_t is identical to size_t.  If not,
+   then z_size_t is an unsigned integer type that can contain a pointer.
+
+     gzfwrite() returns the number of full items written of size size, or zero
+   if there was an error.  If the multiplication of size and nitems overflows,
+   i.e. the product does not fit in a z_size_t, then nothing is written, zero
+   is returned, and the error state is set to Z_STREAM_ERROR.
+*/
+
 ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
 /*
      Converts, formats, and writes the arguments to the compressed file under
    control of the format string, as in fprintf.  gzprintf returns the number of
-   uncompressed bytes actually written, or 0 in case of error.  The number of
-   uncompressed bytes written is limited to 8191, or one less than the buffer
-   size given to gzbuffer().  The caller should assure that this limit is not
-   exceeded.  If it is exceeded, then gzprintf() will return an error (0) with
-   nothing written.  In this case, there may also be a buffer overflow with
-   unpredictable consequences, which is possible only if zlib was compiled with
-   the insecure functions sprintf() or vsprintf() because the secure snprintf()
-   or vsnprintf() functions were not available.  This can be determined using
-   zlibCompileFlags().
+   uncompressed bytes actually written, or a negative zlib error code in case
+   of error.  The number of uncompressed bytes written is limited to 8191, or
+   one less than the buffer size given to gzbuffer().  The caller should assure
+   that this limit is not exceeded.  If it is exceeded, then gzprintf() will
+   return an error (0) with nothing written.  In this case, there may also be a
+   buffer overflow with unpredictable consequences, which is possible only if
+   zlib was compiled with the insecure functions sprintf() or vsprintf()
+   because the secure snprintf() or vsnprintf() functions were not available.
+   This can be determined using zlibCompileFlags().
 */
 
 ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
@@ -1418,7 +1537,7 @@
      If the flush parameter is Z_FINISH, the remaining data is written and the
    gzip stream is completed in the output.  If gzwrite() is called again, a new
    gzip stream will be started in the output.  gzread() is able to read such
-   concatented gzip streams.
+   concatenated gzip streams.
 
      gzflush should be called only when strictly necessary because it will
    degrade compression if called too often.
@@ -1572,7 +1691,7 @@
    return the updated checksum.  If buf is Z_NULL, this function returns the
    required initial value for the checksum.
 
-     An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
+     An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed
    much faster.
 
    Usage example:
@@ -1585,6 +1704,12 @@
      if (adler != original_adler) error();
 */
 
+ZEXTERN uLong ZEXPORT adler32_z OF((uLong adler, const Bytef *buf,
+                                    z_size_t len));
+/*
+     Same as adler32(), but with a size_t length.
+*/
+
 /*
 ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
                                           z_off_t len2));
@@ -1614,6 +1739,12 @@
      if (crc != original_crc) error();
 */
 
+ZEXTERN uLong ZEXPORT crc32_z OF((uLong adler, const Bytef *buf,
+                                  z_size_t len));
+/*
+     Same as crc32(), but with a size_t length.
+*/
+
 /*
 ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
 
@@ -1644,19 +1775,35 @@
                                          unsigned char FAR *window,
                                          const char *version,
                                          int stream_size));
-#define deflateInit(strm, level) \
-        deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
-#define inflateInit(strm) \
-        inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
-#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
-        deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
-                      (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
-#define inflateInit2(strm, windowBits) \
-        inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
-                      (int)sizeof(z_stream))
-#define inflateBackInit(strm, windowBits, window) \
-        inflateBackInit_((strm), (windowBits), (window), \
-                      ZLIB_VERSION, (int)sizeof(z_stream))
+#ifdef Z_PREFIX_SET
+#  define z_deflateInit(strm, level) \
+          deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+#  define z_inflateInit(strm) \
+          inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+#  define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+          deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+                        (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+#  define z_inflateInit2(strm, windowBits) \
+          inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+                        (int)sizeof(z_stream))
+#  define z_inflateBackInit(strm, windowBits, window) \
+          inflateBackInit_((strm), (windowBits), (window), \
+                           ZLIB_VERSION, (int)sizeof(z_stream))
+#else
+#  define deflateInit(strm, level) \
+          deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+#  define inflateInit(strm) \
+          inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+#  define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+          deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+                        (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+#  define inflateInit2(strm, windowBits) \
+          inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+                        (int)sizeof(z_stream))
+#  define inflateBackInit(strm, windowBits, window) \
+          inflateBackInit_((strm), (windowBits), (window), \
+                           ZLIB_VERSION, (int)sizeof(z_stream))
+#endif
 
 #ifndef Z_SOLO
 
@@ -1676,10 +1823,10 @@
 #ifdef Z_PREFIX_SET
 #  undef z_gzgetc
 #  define z_gzgetc(g) \
-          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g))
 #else
 #  define gzgetc(g) \
-          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g))
 #endif
 
 /* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
@@ -1737,19 +1884,16 @@
 
 #endif /* !Z_SOLO */
 
-/* hack for buggy compilers */
-#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
-    struct internal_state {int dummy;};
-#endif
-
 /* undocumented functions */
 ZEXTERN const char   * ZEXPORT zError           OF((int));
 ZEXTERN int            ZEXPORT inflateSyncPoint OF((z_streamp));
 ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table    OF((void));
 ZEXTERN int            ZEXPORT inflateUndermine OF((z_streamp, int));
+ZEXTERN int            ZEXPORT inflateValidate OF((z_streamp, int));
+ZEXTERN unsigned long  ZEXPORT inflateCodesUsed OF ((z_streamp));
 ZEXTERN int            ZEXPORT inflateResetKeep OF((z_streamp));
 ZEXTERN int            ZEXPORT deflateResetKeep OF((z_streamp));
-#if defined(_WIN32) && !defined(Z_SOLO)
+#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(Z_SOLO)
 ZEXTERN gzFile         ZEXPORT gzopen_w OF((const wchar_t *path,
                                             const char *mode));
 #endif
diff --git a/Modules/zlib/zlib.map b/Modules/zlib/zlib.map
index 55c6647..40fa9db 100644
--- a/Modules/zlib/zlib.map
+++ b/Modules/zlib/zlib.map
@@ -1,83 +1,94 @@
-ZLIB_1.2.0 {
-  global:
-    compressBound;
-    deflateBound;
-    inflateBack;
-    inflateBackEnd;
-    inflateBackInit_;
-    inflateCopy;
-  local:
-    deflate_copyright;
-    inflate_copyright;
-    inflate_fast;
-    inflate_table;
-    zcalloc;
-    zcfree;
-    z_errmsg;
-    gz_error;
-    gz_intmax;
-    _*;
-};
-
-ZLIB_1.2.0.2 {
-    gzclearerr;
-    gzungetc;
-    zlibCompileFlags;
-} ZLIB_1.2.0;
-
-ZLIB_1.2.0.8 {
-    deflatePrime;
-} ZLIB_1.2.0.2;
-
-ZLIB_1.2.2 {
-    adler32_combine;
-    crc32_combine;
-    deflateSetHeader;
-    inflateGetHeader;
-} ZLIB_1.2.0.8;
-
-ZLIB_1.2.2.3 {
-    deflateTune;
-    gzdirect;
-} ZLIB_1.2.2;
-
-ZLIB_1.2.2.4 {
-    inflatePrime;
-} ZLIB_1.2.2.3;
-
-ZLIB_1.2.3.3 {
-    adler32_combine64;
-    crc32_combine64;
-    gzopen64;
-    gzseek64;
-    gztell64;
-    inflateUndermine;
-} ZLIB_1.2.2.4;
-
-ZLIB_1.2.3.4 {
-    inflateReset2;
-    inflateMark;
-} ZLIB_1.2.3.3;
-
-ZLIB_1.2.3.5 {
-    gzbuffer;
-    gzoffset;
-    gzoffset64;
-    gzclose_r;
-    gzclose_w;
-} ZLIB_1.2.3.4;
-
-ZLIB_1.2.5.1 {
-    deflatePending;
-} ZLIB_1.2.3.5;
-
-ZLIB_1.2.5.2 {
-    deflateResetKeep;
-    gzgetc_;
-    inflateResetKeep;
-} ZLIB_1.2.5.1;
-
-ZLIB_1.2.7.1 {
-    inflateGetDictionary;
-    gzvprintf;
-} ZLIB_1.2.5.2;
+ZLIB_1.2.0 {

+  global:

+    compressBound;

+    deflateBound;

+    inflateBack;

+    inflateBackEnd;

+    inflateBackInit_;

+    inflateCopy;

+  local:

+    deflate_copyright;

+    inflate_copyright;

+    inflate_fast;

+    inflate_table;

+    zcalloc;

+    zcfree;

+    z_errmsg;

+    gz_error;

+    gz_intmax;

+    _*;

+};

+

+ZLIB_1.2.0.2 {

+    gzclearerr;

+    gzungetc;

+    zlibCompileFlags;

+} ZLIB_1.2.0;

+

+ZLIB_1.2.0.8 {

+    deflatePrime;

+} ZLIB_1.2.0.2;

+

+ZLIB_1.2.2 {

+    adler32_combine;

+    crc32_combine;

+    deflateSetHeader;

+    inflateGetHeader;

+} ZLIB_1.2.0.8;

+

+ZLIB_1.2.2.3 {

+    deflateTune;

+    gzdirect;

+} ZLIB_1.2.2;

+

+ZLIB_1.2.2.4 {

+    inflatePrime;

+} ZLIB_1.2.2.3;

+

+ZLIB_1.2.3.3 {

+    adler32_combine64;

+    crc32_combine64;

+    gzopen64;

+    gzseek64;

+    gztell64;

+    inflateUndermine;

+} ZLIB_1.2.2.4;

+

+ZLIB_1.2.3.4 {

+    inflateReset2;

+    inflateMark;

+} ZLIB_1.2.3.3;

+

+ZLIB_1.2.3.5 {

+    gzbuffer;

+    gzoffset;

+    gzoffset64;

+    gzclose_r;

+    gzclose_w;

+} ZLIB_1.2.3.4;

+

+ZLIB_1.2.5.1 {

+    deflatePending;

+} ZLIB_1.2.3.5;

+

+ZLIB_1.2.5.2 {

+    deflateResetKeep;

+    gzgetc_;

+    inflateResetKeep;

+} ZLIB_1.2.5.1;

+

+ZLIB_1.2.7.1 {

+    inflateGetDictionary;

+    gzvprintf;

+} ZLIB_1.2.5.2;

+

+ZLIB_1.2.9 {

+    inflateCodesUsed;

+    inflateValidate;

+    uncompress2;

+    gzfread;

+    gzfwrite;

+    deflateGetDictionary;

+    adler32_z;

+    crc32_z;

+} ZLIB_1.2.7.1;

diff --git a/Modules/zlib/zutil.c b/Modules/zlib/zutil.c
index 23d2ebe..a76c6b0 100644
--- a/Modules/zlib/zutil.c
+++ b/Modules/zlib/zutil.c
@@ -1,5 +1,5 @@
 /* zutil.c -- target dependent utility functions for the compression library
- * Copyright (C) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly.
+ * Copyright (C) 1995-2017 Jean-loup Gailly
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -10,21 +10,18 @@
 #  include "gzguts.h"
 #endif
 
-#ifndef NO_DUMMY_DECL
-struct internal_state      {int dummy;}; /* for buggy compilers */
-#endif
-
 z_const char * const z_errmsg[10] = {
-"need dictionary",     /* Z_NEED_DICT       2  */
-"stream end",          /* Z_STREAM_END      1  */
-"",                    /* Z_OK              0  */
-"file error",          /* Z_ERRNO         (-1) */
-"stream error",        /* Z_STREAM_ERROR  (-2) */
-"data error",          /* Z_DATA_ERROR    (-3) */
-"insufficient memory", /* Z_MEM_ERROR     (-4) */
-"buffer error",        /* Z_BUF_ERROR     (-5) */
-"incompatible version",/* Z_VERSION_ERROR (-6) */
-""};
+    (z_const char *)"need dictionary",     /* Z_NEED_DICT       2  */
+    (z_const char *)"stream end",          /* Z_STREAM_END      1  */
+    (z_const char *)"",                    /* Z_OK              0  */
+    (z_const char *)"file error",          /* Z_ERRNO         (-1) */
+    (z_const char *)"stream error",        /* Z_STREAM_ERROR  (-2) */
+    (z_const char *)"data error",          /* Z_DATA_ERROR    (-3) */
+    (z_const char *)"insufficient memory", /* Z_MEM_ERROR     (-4) */
+    (z_const char *)"buffer error",        /* Z_BUF_ERROR     (-5) */
+    (z_const char *)"incompatible version",/* Z_VERSION_ERROR (-6) */
+    (z_const char *)""
+};
 
 
 const char * ZEXPORT zlibVersion()
@@ -61,7 +58,7 @@
     case 8:     flags += 2 << 6;        break;
     default:    flags += 3 << 6;
     }
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
     flags += 1 << 8;
 #endif
 #if defined(ASMV) || defined(ASMINF)
@@ -115,8 +112,8 @@
     return flags;
 }
 
-#ifdef DEBUG
-
+#ifdef ZLIB_DEBUG
+#include <stdlib.h>
 #  ifndef verbose
 #    define verbose 0
 #  endif
@@ -219,9 +216,11 @@
 
 voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
 {
-    voidpf buf = opaque; /* just to make some compilers happy */
+    voidpf buf;
     ulg bsize = (ulg)items*size;
 
+    (void)opaque;
+
     /* If we allocate less than 65520 bytes, we assume that farmalloc
      * will return a usable pointer which doesn't have to be normalized.
      */
@@ -244,6 +243,9 @@
 void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
 {
     int n;
+
+    (void)opaque;
+
     if (*(ush*)&ptr != 0) { /* object < 64K */
         farfree(ptr);
         return;
@@ -259,7 +261,6 @@
         next_ptr--;
         return;
     }
-    ptr = opaque; /* just to make some compilers happy */
     Assert(0, "zcfree: ptr not found");
 }
 
@@ -278,13 +279,13 @@
 
 voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
 {
-    if (opaque) opaque = 0; /* to make compiler happy */
+    (void)opaque;
     return _halloc((long)items, size);
 }
 
 void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
 {
-    if (opaque) opaque = 0; /* to make compiler happy */
+    (void)opaque;
     _hfree(ptr);
 }
 
@@ -306,7 +307,7 @@
     unsigned items;
     unsigned size;
 {
-    if (opaque) items += size - size; /* make compiler happy */
+    (void)opaque;
     return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
                               (voidpf)calloc(items, size);
 }
@@ -315,8 +316,8 @@
     voidpf opaque;
     voidpf ptr;
 {
+    (void)opaque;
     free(ptr);
-    if (opaque) return; /* make compiler happy */
 }
 
 #endif /* MY_ZCALLOC */
diff --git a/Modules/zlib/zutil.h b/Modules/zlib/zutil.h
index 24ab06b..b079ea6 100644
--- a/Modules/zlib/zutil.h
+++ b/Modules/zlib/zutil.h
@@ -1,5 +1,5 @@
 /* zutil.h -- internal interface and configuration of the compression library
- * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -36,7 +36,9 @@
 #ifndef local
 #  define local static
 #endif
-/* compile with -Dlocal if your debugger can't find static symbols */
+/* since "static" is used to mean two completely different things in C, we
+   define "local" for the non-static meaning of "static", for readability
+   (compile with -Dlocal if your debugger can't find static symbols) */
 
 typedef unsigned char  uch;
 typedef uch FAR uchf;
@@ -98,28 +100,38 @@
 #endif
 
 #ifdef AMIGA
-#  define OS_CODE  0x01
+#  define OS_CODE  1
 #endif
 
 #if defined(VAXC) || defined(VMS)
-#  define OS_CODE  0x02
+#  define OS_CODE  2
 #  define F_OPEN(name, mode) \
      fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
 #endif
 
+#ifdef __370__
+#  if __TARGET_LIB__ < 0x20000000
+#    define OS_CODE 4
+#  elif __TARGET_LIB__ < 0x40000000
+#    define OS_CODE 11
+#  else
+#    define OS_CODE 8
+#  endif
+#endif
+
 #if defined(ATARI) || defined(atarist)
-#  define OS_CODE  0x05
+#  define OS_CODE  5
 #endif
 
 #ifdef OS2
-#  define OS_CODE  0x06
+#  define OS_CODE  6
 #  if defined(M_I86) && !defined(Z_SOLO)
 #    include <malloc.h>
 #  endif
 #endif
 
 #if defined(MACOS) || defined(TARGET_OS_MAC)
-#  define OS_CODE  0x07
+#  define OS_CODE  7
 #  ifndef Z_SOLO
 #    if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
 #      include <unix.h> /* for fdopen */
@@ -131,18 +143,24 @@
 #  endif
 #endif
 
-#ifdef TOPS20
-#  define OS_CODE  0x0a
+#ifdef __acorn
+#  define OS_CODE 13
 #endif
 
-#ifdef WIN32
-#  ifndef __CYGWIN__  /* Cygwin is Unix, not Win32 */
-#    define OS_CODE  0x0b
-#  endif
+#if defined(WIN32) && !defined(__CYGWIN__)
+#  define OS_CODE  10
 #endif
 
-#ifdef __50SERIES /* Prime/PRIMOS */
-#  define OS_CODE  0x0f
+#ifdef _BEOS_
+#  define OS_CODE  16
+#endif
+
+#ifdef __TOS_OS400__
+#  define OS_CODE 18
+#endif
+
+#ifdef __APPLE__
+#  define OS_CODE 19
 #endif
 
 #if defined(_BEOS_) || defined(RISCOS)
@@ -177,7 +195,7 @@
         /* common defaults */
 
 #ifndef OS_CODE
-#  define OS_CODE  0x03  /* assume Unix */
+#  define OS_CODE  3     /* assume Unix */
 #endif
 
 #ifndef F_OPEN
@@ -216,7 +234,7 @@
 #endif
 
 /* Diagnostic functions */
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
 #  include <stdio.h>
    extern int ZLIB_INTERNAL z_verbose;
    extern void ZLIB_INTERNAL z_error OF((char *m));
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..989d165
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,6 @@
+# Default owners are top 3 or more active developers of the past 1 or 2 years
+# or people with more than 10 commits last year.
+# Please update this list if you find better owner candidates.
+nanzhang@google.com
+dwillemsen@google.com
+chh@google.com
diff --git a/Objects/abstract.c b/Objects/abstract.c
index aa92ea9..75c1a10 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -1492,14 +1492,13 @@
     PyObject *result = NULL;
     if (item == NULL)
         return null_error();
-    if (PyInt_Check(item) || PyLong_Check(item)) {
+    if (_PyAnyInt_Check(item)) {
         Py_INCREF(item);
         return item;
     }
     if (PyIndex_Check(item)) {
         result = item->ob_type->tp_as_number->nb_index(item);
-        if (result &&
-            !PyInt_Check(result) && !PyLong_Check(result)) {
+        if (result && !_PyAnyInt_Check(result)) {
             PyErr_Format(PyExc_TypeError,
                          "__index__ returned non-(int,long) " \
                          "(type %.200s)",
@@ -1574,8 +1573,7 @@
             return NULL;
     }
 
-    if (integral && (!PyInt_Check(integral) &&
-                     !PyLong_Check(integral))) {
+    if (integral && !_PyAnyInt_Check(integral)) {
         /* Don't go through tp_as_number->nb_int to avoid
            hitting the classic class fallback to __trunc__. */
         PyObject *int_func = PyObject_GetAttr(integral, int_name);
@@ -1586,8 +1584,7 @@
         Py_DECREF(integral);
         integral = PyEval_CallObject(int_func, NULL);
         Py_DECREF(int_func);
-        if (integral && (!PyInt_Check(integral) &&
-                          !PyLong_Check(integral))) {
+        if (integral && !_PyAnyInt_Check(integral)) {
             goto non_integral_error;
         }
     }
@@ -1632,7 +1629,7 @@
     if (m && m->nb_int) { /* This should include subclasses of int */
         /* Classic classes always take this branch. */
         PyObject *res = m->nb_int(o);
-        if (res && (!PyInt_Check(res) && !PyLong_Check(res))) {
+        if (res && !_PyAnyInt_Check(res)) {
             PyErr_Format(PyExc_TypeError,
                          "__int__ returned non-int (type %.200s)",
                          res->ob_type->tp_name);
diff --git a/Objects/bufferobject.c b/Objects/bufferobject.c
index bcfab71..d2297f3 100644
--- a/Objects/bufferobject.c
+++ b/Objects/bufferobject.c
@@ -34,7 +34,7 @@
     else {
         Py_ssize_t count, offset;
         readbufferproc proc = 0;
-        PyBufferProcs *bp = self->b_base->ob_type->tp_as_buffer;
+        PyBufferProcs *bp = Py_TYPE(self->b_base)->tp_as_buffer;
         if ((*bp->bf_getsegcount)(self->b_base, NULL) != 1) {
             PyErr_SetString(PyExc_TypeError,
                 "single-segment buffer object expected");
@@ -47,7 +47,7 @@
             (buffer_type == ANY_BUFFER))
             proc = (readbufferproc)bp->bf_getwritebuffer;
         else if (buffer_type == CHAR_BUFFER) {
-            if (!PyType_HasFeature(self->ob_type,
+            if (!PyType_HasFeature(Py_TYPE(self),
                         Py_TPFLAGS_HAVE_GETCHARBUFFER)) {
             PyErr_SetString(PyExc_TypeError,
                 "Py_TPFLAGS_HAVE_GETCHARBUFFER needed");
@@ -462,17 +462,23 @@
 }
 
 static PyObject *
+buffer_item_impl(void *ptr, Py_ssize_t size, Py_ssize_t idx)
+{
+    if ( idx < 0 || idx >= size ) {
+        PyErr_SetString(PyExc_IndexError, "buffer index out of range");
+        return NULL;
+    }
+    return PyString_FromStringAndSize((char *)ptr + idx, 1);
+}
+
+static PyObject *
 buffer_item(PyBufferObject *self, Py_ssize_t idx)
 {
     void *ptr;
     Py_ssize_t size;
     if (!get_buf(self, &ptr, &size, ANY_BUFFER))
         return NULL;
-    if ( idx < 0 || idx >= size ) {
-        PyErr_SetString(PyExc_IndexError, "buffer index out of range");
-        return NULL;
-    }
-    return PyString_FromStringAndSize((char *)ptr + idx, 1);
+    return buffer_item_impl(ptr, size, idx);
 }
 
 static PyObject *
@@ -500,24 +506,27 @@
     void *p;
     Py_ssize_t size;
 
-    if (!get_buf(self, &p, &size, ANY_BUFFER))
-        return NULL;
     if (PyIndex_Check(item)) {
         Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
         if (i == -1 && PyErr_Occurred())
             return NULL;
-        if (i < 0)
+        if (!get_buf(self, &p, &size, ANY_BUFFER))
+            return NULL;
+
+        if (i < 0) {
             i += size;
-        return buffer_item(self, i);
+        }
+        return buffer_item_impl(p, size, i);
     }
     else if (PySlice_Check(item)) {
         Py_ssize_t start, stop, step, slicelength, cur, i;
 
-        if (PySlice_GetIndicesEx((PySliceObject*)item, size,
-                         &start, &stop, &step, &slicelength) < 0) {
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0)
             return NULL;
-        }
+        if (!get_buf(self, &p, &size, ANY_BUFFER))
+            return NULL;
 
+        slicelength = _PySlice_AdjustIndices(size, &start, &stop, step);
         if (slicelength <= 0)
             return PyString_FromStringAndSize("", 0);
         else if (step == 1)
@@ -550,22 +559,12 @@
 }
 
 static int
-buffer_ass_item(PyBufferObject *self, Py_ssize_t idx, PyObject *other)
+buffer_ass_item_impl(void *ptr1, Py_ssize_t size, Py_ssize_t idx, PyObject *other)
 {
     PyBufferProcs *pb;
-    void *ptr1, *ptr2;
-    Py_ssize_t size;
+    void *ptr2;
     Py_ssize_t count;
 
-    if ( self->b_readonly ) {
-        PyErr_SetString(PyExc_TypeError,
-                        "buffer is read-only");
-        return -1;
-    }
-
-    if (!get_buf(self, &ptr1, &size, ANY_BUFFER))
-        return -1;
-
     if (idx < 0 || idx >= size) {
         PyErr_SetString(PyExc_IndexError,
                         "buffer assignment index out of range");
@@ -601,6 +600,23 @@
 }
 
 static int
+buffer_ass_item(PyBufferObject *self, Py_ssize_t idx, PyObject *other)
+{
+    void *ptr1;
+    Py_ssize_t size;
+
+    if ( self->b_readonly ) {
+        PyErr_SetString(PyExc_TypeError,
+                        "buffer is read-only");
+        return -1;
+    }
+
+    if (!get_buf(self, &ptr1, &size, ANY_BUFFER))
+        return -1;
+    return buffer_ass_item_impl(ptr1, size, idx, other);
+}
+
+static int
 buffer_ass_slice(PyBufferObject *self, Py_ssize_t left, Py_ssize_t right, PyObject *other)
 {
     PyBufferProcs *pb;
@@ -687,23 +703,26 @@
                         "single-segment buffer object expected");
         return -1;
     }
-    if (!get_buf(self, &ptr1, &selfsize, ANY_BUFFER))
-        return -1;
     if (PyIndex_Check(item)) {
         Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
         if (i == -1 && PyErr_Occurred())
             return -1;
+        if (!get_buf(self, &ptr1, &selfsize, ANY_BUFFER))
+            return -1;
+
         if (i < 0)
             i += selfsize;
-        return buffer_ass_item(self, i, value);
+        return buffer_ass_item_impl(ptr1, selfsize, i, value);
     }
     else if (PySlice_Check(item)) {
         Py_ssize_t start, stop, step, slicelength;
 
-        if (PySlice_GetIndicesEx((PySliceObject *)item, selfsize,
-                        &start, &stop, &step, &slicelength) < 0)
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0)
+            return -1;
+        if (!get_buf(self, &ptr1, &selfsize, ANY_BUFFER))
             return -1;
 
+        slicelength = _PySlice_AdjustIndices(selfsize, &start, &stop, step);
         if ((othersize = (*pb->bf_getreadbuffer)(value, 0, &ptr2)) < 0)
             return -1;
 
diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c
index 9e3cead..c178d9e 100644
--- a/Objects/bytearrayobject.c
+++ b/Objects/bytearrayobject.c
@@ -35,7 +35,7 @@
         *value = Py_CHARMASK(((PyBytesObject*)arg)->ob_sval[0]);
         return 1;
     }
-    else if (PyInt_Check(arg) || PyLong_Check(arg)) {
+    else if (_PyAnyInt_Check(arg)) {
         face_value = PyLong_AsLong(arg);
     }
     else {
@@ -164,6 +164,26 @@
                                         input, NULL);
 }
 
+static PyObject *
+_PyByteArray_FromBufferObject(PyObject *obj)
+{
+    PyObject *result;
+    Py_buffer view;
+
+    if (PyObject_GetBuffer(obj, &view, PyBUF_FULL_RO) < 0) {
+        return NULL;
+    }
+    result = PyByteArray_FromStringAndSize(NULL, view.len);
+    if (result != NULL &&
+        PyBuffer_ToContiguous(PyByteArray_AS_STRING(result),
+                              &view, view.len, 'C') < 0)
+    {
+        Py_CLEAR(result);
+    }
+    PyBuffer_Release(&view);
+    return result;
+}
+
 PyObject *
 PyByteArray_FromStringAndSize(const char *bytes, Py_ssize_t size)
 {
@@ -435,11 +455,11 @@
     }
     else if (PySlice_Check(index)) {
         Py_ssize_t start, stop, step, slicelength, cur, i;
-        if (PySlice_GetIndicesEx((PySliceObject *)index,
-                                 PyByteArray_GET_SIZE(self),
-                                 &start, &stop, &step, &slicelength) < 0) {
+        if (_PySlice_Unpack(index, &start, &stop, &step) < 0) {
             return NULL;
         }
+        slicelength = _PySlice_AdjustIndices(PyByteArray_GET_SIZE(self),
+                                            &start, &stop, step);
 
         if (slicelength <= 0)
             return PyByteArray_FromStringAndSize("", 0);
@@ -483,7 +503,8 @@
     if (values == (PyObject *)self) {
         /* Make a copy and call this function recursively */
         int err;
-        values = PyByteArray_FromObject(values);
+        values = PyByteArray_FromStringAndSize(PyByteArray_AS_STRING(values),
+                                               PyByteArray_GET_SIZE(values));
         if (values == NULL)
             return -1;
         err = bytearray_setslice(self, lo, hi, values);
@@ -619,11 +640,11 @@
         }
     }
     else if (PySlice_Check(index)) {
-        if (PySlice_GetIndicesEx((PySliceObject *)index,
-                                 PyByteArray_GET_SIZE(self),
-                                 &start, &stop, &step, &slicelen) < 0) {
+        if (_PySlice_Unpack(index, &start, &stop, &step) < 0) {
             return -1;
         }
+        slicelen = _PySlice_AdjustIndices(PyByteArray_GET_SIZE(self), &start,
+                                         &stop, step);
     }
     else {
         PyErr_SetString(PyExc_TypeError, "bytearray indices must be integer");
@@ -1571,31 +1592,30 @@
 {
     char *self_s, *result_s;
     Py_ssize_t self_len, result_len;
-    Py_ssize_t count, i, product;
+    Py_ssize_t count, i;
     PyByteArrayObject *result;
 
     self_len = PyByteArray_GET_SIZE(self);
 
-    /* 1 at the end plus 1 after every character */
-    count = self_len+1;
-    if (maxcount < count)
+    /* 1 at the end plus 1 after every character;
+       count = min(maxcount, self_len + 1) */
+    if (maxcount <= self_len) {
         count = maxcount;
+    }
+    else {
+        /* Can't overflow: self_len + 1 <= maxcount <= PY_SSIZE_T_MAX. */
+        count = self_len + 1;
+    }
 
     /* Check for overflow */
     /*   result_len = count * to_len + self_len; */
-    product = count * to_len;
-    if (product / to_len != count) {
+    assert(count > 0);
+    if (to_len > (PY_SSIZE_T_MAX - self_len) / count) {
         PyErr_SetString(PyExc_OverflowError,
-                        "replace string is too long");
+                        "replace bytes is too long");
         return NULL;
     }
-    result_len = product + self_len;
-    if (result_len < 0) {
-        PyErr_SetString(PyExc_OverflowError,
-                        "replace string is too long");
-        return NULL;
-    }
-
+    result_len = count * to_len + self_len;
     if (! (result = (PyByteArrayObject *)
                      PyByteArray_FromStringAndSize(NULL, result_len)) )
         return NULL;
@@ -1824,7 +1844,7 @@
     char *self_s, *result_s;
     char *start, *next, *end;
     Py_ssize_t self_len, result_len;
-    Py_ssize_t count, product;
+    Py_ssize_t count;
     PyByteArrayObject *result;
 
     self_s = PyByteArray_AS_STRING(self);
@@ -1838,16 +1858,12 @@
 
     /* use the difference between current and new, hence the "-1" */
     /*   result_len = self_len + count * (to_len-1)  */
-    product = count * (to_len-1);
-    if (product / (to_len-1) != count) {
+    assert(count > 0);
+    if (to_len - 1 > (PY_SSIZE_T_MAX - self_len) / count) {
         PyErr_SetString(PyExc_OverflowError, "replace bytes is too long");
         return NULL;
     }
-    result_len = self_len + product;
-    if (result_len < 0) {
-            PyErr_SetString(PyExc_OverflowError, "replace bytes is too long");
-            return NULL;
-    }
+    result_len = self_len + count * (to_len - 1);
 
     if ( (result = (PyByteArrayObject *)
           PyByteArray_FromStringAndSize(NULL, result_len)) == NULL)
@@ -1891,7 +1907,7 @@
     char *self_s, *result_s;
     char *start, *next, *end;
     Py_ssize_t self_len, result_len;
-    Py_ssize_t count, offset, product;
+    Py_ssize_t count, offset;
     PyByteArrayObject *result;
 
     self_s = PyByteArray_AS_STRING(self);
@@ -1908,16 +1924,12 @@
 
     /* Check for overflow */
     /*    result_len = self_len + count * (to_len-from_len) */
-    product = count * (to_len-from_len);
-    if (product / (to_len-from_len) != count) {
+    assert(count > 0);
+    if (to_len - from_len > (PY_SSIZE_T_MAX - self_len) / count) {
         PyErr_SetString(PyExc_OverflowError, "replace bytes is too long");
         return NULL;
     }
-    result_len = self_len + product;
-    if (result_len < 0) {
-        PyErr_SetString(PyExc_OverflowError, "replace bytes is too long");
-        return NULL;
-    }
+    result_len = self_len + count * (to_len - from_len);
 
     if ( (result = (PyByteArrayObject *)
           PyByteArray_FromStringAndSize(NULL, result_len)) == NULL)
@@ -2107,7 +2119,7 @@
 {
     PyObject *bytesep, *result;
 
-    bytesep = PyByteArray_FromObject(sep_obj);
+    bytesep = _PyByteArray_FromBufferObject(sep_obj);
     if (! bytesep)
         return NULL;
 
@@ -2135,7 +2147,7 @@
 {
     PyObject *bytesep, *result;
 
-    bytesep = PyByteArray_FromObject(sep_obj);
+    bytesep = _PyByteArray_FromBufferObject(sep_obj);
     if (! bytesep)
         return NULL;
 
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
new file mode 100644
index 0000000..7ba90aa
--- /dev/null
+++ b/Objects/bytesobject.c
@@ -0,0 +1,3432 @@
+/* bytes object implementation */
+
+#define PY_SSIZE_T_CLEAN
+
+#include "Python.h"
+#include "internal/mem.h"
+#include "internal/pystate.h"
+
+#include "bytes_methods.h"
+#include "pystrhex.h"
+#include <stddef.h>
+
+/*[clinic input]
+class bytes "PyBytesObject *" "&PyBytes_Type"
+[clinic start generated code]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=7a238f965d64892b]*/
+
+#include "clinic/bytesobject.c.h"
+
+#ifdef COUNT_ALLOCS
+Py_ssize_t null_strings, one_strings;
+#endif
+
+static PyBytesObject *characters[UCHAR_MAX + 1];
+static PyBytesObject *nullstring;
+
+/* PyBytesObject_SIZE gives the basic size of a string; any memory allocation
+   for a string of length n should request PyBytesObject_SIZE + n bytes.
+
+   Using PyBytesObject_SIZE instead of sizeof(PyBytesObject) saves
+   3 bytes per string allocation on a typical system.
+*/
+#define PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
+
+/* Forward declaration */
+Py_LOCAL_INLINE(Py_ssize_t) _PyBytesWriter_GetSize(_PyBytesWriter *writer,
+                                                   char *str);
+
+/*
+   For PyBytes_FromString(), the parameter `str' points to a null-terminated
+   string containing exactly `size' bytes.
+
+   For PyBytes_FromStringAndSize(), the parameter `str' is
+   either NULL or else points to a string containing at least `size' bytes.
+   For PyBytes_FromStringAndSize(), the string in the `str' parameter does
+   not have to be null-terminated.  (Therefore it is safe to construct a
+   substring by calling `PyBytes_FromStringAndSize(origstring, substrlen)'.)
+   If `str' is NULL then PyBytes_FromStringAndSize() will allocate `size+1'
+   bytes (setting the last byte to the null terminating character) and you can
+   fill in the data yourself.  If `str' is non-NULL then the resulting
+   PyBytes object must be treated as immutable and you must not fill in nor
+   alter the data yourself, since the strings may be shared.
+
+   The PyObject member `op->ob_size', which denotes the number of "extra
+   items" in a variable-size object, will contain the number of bytes
+   allocated for string data, not counting the null terminating character.
+   It is therefore equal to the `size' parameter (for
+   PyBytes_FromStringAndSize()) or the length of the string in the `str'
+   parameter (for PyBytes_FromString()).
+*/
+static PyObject *
+_PyBytes_FromSize(Py_ssize_t size, int use_calloc)
+{
+    PyBytesObject *op;
+    assert(size >= 0);
+
+    if (size == 0 && (op = nullstring) != NULL) {
+#ifdef COUNT_ALLOCS
+        null_strings++;
+#endif
+        Py_INCREF(op);
+        return (PyObject *)op;
+    }
+
+    if ((size_t)size > (size_t)PY_SSIZE_T_MAX - PyBytesObject_SIZE) {
+        PyErr_SetString(PyExc_OverflowError,
+                        "byte string is too large");
+        return NULL;
+    }
+
+    /* Inline PyObject_NewVar */
+    if (use_calloc)
+        op = (PyBytesObject *)PyObject_Calloc(1, PyBytesObject_SIZE + size);
+    else
+        op = (PyBytesObject *)PyObject_Malloc(PyBytesObject_SIZE + size);
+    if (op == NULL)
+        return PyErr_NoMemory();
+    (void)PyObject_INIT_VAR(op, &PyBytes_Type, size);
+    op->ob_shash = -1;
+    if (!use_calloc)
+        op->ob_sval[size] = '\0';
+    /* empty byte string singleton */
+    if (size == 0) {
+        nullstring = op;
+        Py_INCREF(op);
+    }
+    return (PyObject *) op;
+}
+
+PyObject *
+PyBytes_FromStringAndSize(const char *str, Py_ssize_t size)
+{
+    PyBytesObject *op;
+    if (size < 0) {
+        PyErr_SetString(PyExc_SystemError,
+            "Negative size passed to PyBytes_FromStringAndSize");
+        return NULL;
+    }
+    if (size == 1 && str != NULL &&
+        (op = characters[*str & UCHAR_MAX]) != NULL)
+    {
+#ifdef COUNT_ALLOCS
+        one_strings++;
+#endif
+        Py_INCREF(op);
+        return (PyObject *)op;
+    }
+
+    op = (PyBytesObject *)_PyBytes_FromSize(size, 0);
+    if (op == NULL)
+        return NULL;
+    if (str == NULL)
+        return (PyObject *) op;
+
+    memcpy(op->ob_sval, str, size);
+    /* share short strings */
+    if (size == 1) {
+        characters[*str & UCHAR_MAX] = op;
+        Py_INCREF(op);
+    }
+    return (PyObject *) op;
+}
+
+PyObject *
+PyBytes_FromString(const char *str)
+{
+    size_t size;
+    PyBytesObject *op;
+
+    assert(str != NULL);
+    size = strlen(str);
+    if (size > PY_SSIZE_T_MAX - PyBytesObject_SIZE) {
+        PyErr_SetString(PyExc_OverflowError,
+            "byte string is too long");
+        return NULL;
+    }
+    if (size == 0 && (op = nullstring) != NULL) {
+#ifdef COUNT_ALLOCS
+        null_strings++;
+#endif
+        Py_INCREF(op);
+        return (PyObject *)op;
+    }
+    if (size == 1 && (op = characters[*str & UCHAR_MAX]) != NULL) {
+#ifdef COUNT_ALLOCS
+        one_strings++;
+#endif
+        Py_INCREF(op);
+        return (PyObject *)op;
+    }
+
+    /* Inline PyObject_NewVar */
+    op = (PyBytesObject *)PyObject_MALLOC(PyBytesObject_SIZE + size);
+    if (op == NULL)
+        return PyErr_NoMemory();
+    (void)PyObject_INIT_VAR(op, &PyBytes_Type, size);
+    op->ob_shash = -1;
+    memcpy(op->ob_sval, str, size+1);
+    /* share short strings */
+    if (size == 0) {
+        nullstring = op;
+        Py_INCREF(op);
+    } else if (size == 1) {
+        characters[*str & UCHAR_MAX] = op;
+        Py_INCREF(op);
+    }
+    return (PyObject *) op;
+}
+
+PyObject *
+PyBytes_FromFormatV(const char *format, va_list vargs)
+{
+    char *s;
+    const char *f;
+    const char *p;
+    Py_ssize_t prec;
+    int longflag;
+    int size_tflag;
+    /* Longest 64-bit formatted numbers:
+       - "18446744073709551615\0" (21 bytes)
+       - "-9223372036854775808\0" (21 bytes)
+       Decimal takes the most space (it isn't enough for octal.)
+
+       Longest 64-bit pointer representation:
+       "0xffffffffffffffff\0" (19 bytes). */
+    char buffer[21];
+    _PyBytesWriter writer;
+
+    _PyBytesWriter_Init(&writer);
+
+    s = _PyBytesWriter_Alloc(&writer, strlen(format));
+    if (s == NULL)
+        return NULL;
+    writer.overallocate = 1;
+
+#define WRITE_BYTES(str) \
+    do { \
+        s = _PyBytesWriter_WriteBytes(&writer, s, (str), strlen(str)); \
+        if (s == NULL) \
+            goto error; \
+    } while (0)
+
+    for (f = format; *f; f++) {
+        if (*f != '%') {
+            *s++ = *f;
+            continue;
+        }
+
+        p = f++;
+
+        /* ignore the width (ex: 10 in "%10s") */
+        while (Py_ISDIGIT(*f))
+            f++;
+
+        /* parse the precision (ex: 10 in "%.10s") */
+        prec = 0;
+        if (*f == '.') {
+            f++;
+            for (; Py_ISDIGIT(*f); f++) {
+                prec = (prec * 10) + (*f - '0');
+            }
+        }
+
+        while (*f && *f != '%' && !Py_ISALPHA(*f))
+            f++;
+
+        /* handle the long flag ('l'), but only for %ld and %lu.
+           others can be added when necessary. */
+        longflag = 0;
+        if (*f == 'l' && (f[1] == 'd' || f[1] == 'u')) {
+            longflag = 1;
+            ++f;
+        }
+
+        /* handle the size_t flag ('z'). */
+        size_tflag = 0;
+        if (*f == 'z' && (f[1] == 'd' || f[1] == 'u')) {
+            size_tflag = 1;
+            ++f;
+        }
+
+        /* subtract bytes preallocated for the format string
+           (ex: 2 for "%s") */
+        writer.min_size -= (f - p + 1);
+
+        switch (*f) {
+        case 'c':
+        {
+            int c = va_arg(vargs, int);
+            if (c < 0 || c > 255) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "PyBytes_FromFormatV(): %c format "
+                                "expects an integer in range [0; 255]");
+                goto error;
+            }
+            writer.min_size++;
+            *s++ = (unsigned char)c;
+            break;
+        }
+
+        case 'd':
+            if (longflag)
+                sprintf(buffer, "%ld", va_arg(vargs, long));
+            else if (size_tflag)
+                sprintf(buffer, "%" PY_FORMAT_SIZE_T "d",
+                    va_arg(vargs, Py_ssize_t));
+            else
+                sprintf(buffer, "%d", va_arg(vargs, int));
+            assert(strlen(buffer) < sizeof(buffer));
+            WRITE_BYTES(buffer);
+            break;
+
+        case 'u':
+            if (longflag)
+                sprintf(buffer, "%lu",
+                    va_arg(vargs, unsigned long));
+            else if (size_tflag)
+                sprintf(buffer, "%" PY_FORMAT_SIZE_T "u",
+                    va_arg(vargs, size_t));
+            else
+                sprintf(buffer, "%u",
+                    va_arg(vargs, unsigned int));
+            assert(strlen(buffer) < sizeof(buffer));
+            WRITE_BYTES(buffer);
+            break;
+
+        case 'i':
+            sprintf(buffer, "%i", va_arg(vargs, int));
+            assert(strlen(buffer) < sizeof(buffer));
+            WRITE_BYTES(buffer);
+            break;
+
+        case 'x':
+            sprintf(buffer, "%x", va_arg(vargs, int));
+            assert(strlen(buffer) < sizeof(buffer));
+            WRITE_BYTES(buffer);
+            break;
+
+        case 's':
+        {
+            Py_ssize_t i;
+
+            p = va_arg(vargs, const char*);
+            i = strlen(p);
+            if (prec > 0 && i > prec)
+                i = prec;
+            s = _PyBytesWriter_WriteBytes(&writer, s, p, i);
+            if (s == NULL)
+                goto error;
+            break;
+        }
+
+        case 'p':
+            sprintf(buffer, "%p", va_arg(vargs, void*));
+            assert(strlen(buffer) < sizeof(buffer));
+            /* %p is ill-defined:  ensure leading 0x. */
+            if (buffer[1] == 'X')
+                buffer[1] = 'x';
+            else if (buffer[1] != 'x') {
+                memmove(buffer+2, buffer, strlen(buffer)+1);
+                buffer[0] = '0';
+                buffer[1] = 'x';
+            }
+            WRITE_BYTES(buffer);
+            break;
+
+        case '%':
+            writer.min_size++;
+            *s++ = '%';
+            break;
+
+        default:
+            if (*f == 0) {
+                /* fix min_size if we reached the end of the format string */
+                writer.min_size++;
+            }
+
+            /* invalid format string: copy unformatted string and exit */
+            WRITE_BYTES(p);
+            return _PyBytesWriter_Finish(&writer, s);
+        }
+    }
+
+#undef WRITE_BYTES
+
+    return _PyBytesWriter_Finish(&writer, s);
+
+ error:
+    _PyBytesWriter_Dealloc(&writer);
+    return NULL;
+}
+
+PyObject *
+PyBytes_FromFormat(const char *format, ...)
+{
+    PyObject* ret;
+    va_list vargs;
+
+#ifdef HAVE_STDARG_PROTOTYPES
+    va_start(vargs, format);
+#else
+    va_start(vargs);
+#endif
+    ret = PyBytes_FromFormatV(format, vargs);
+    va_end(vargs);
+    return ret;
+}
+
+/* Helpers for formatstring */
+
+Py_LOCAL_INLINE(PyObject *)
+getnextarg(PyObject *args, Py_ssize_t arglen, Py_ssize_t *p_argidx)
+{
+    Py_ssize_t argidx = *p_argidx;
+    if (argidx < arglen) {
+        (*p_argidx)++;
+        if (arglen < 0)
+            return args;
+        else
+            return PyTuple_GetItem(args, argidx);
+    }
+    PyErr_SetString(PyExc_TypeError,
+                    "not enough arguments for format string");
+    return NULL;
+}
+
+/* Format codes
+ * F_LJUST      '-'
+ * F_SIGN       '+'
+ * F_BLANK      ' '
+ * F_ALT        '#'
+ * F_ZERO       '0'
+ */
+#define F_LJUST (1<<0)
+#define F_SIGN  (1<<1)
+#define F_BLANK (1<<2)
+#define F_ALT   (1<<3)
+#define F_ZERO  (1<<4)
+
+/* Returns a new reference to a PyBytes object, or NULL on failure. */
+
+static char*
+formatfloat(PyObject *v, int flags, int prec, int type,
+            PyObject **p_result, _PyBytesWriter *writer, char *str)
+{
+    char *p;
+    PyObject *result;
+    double x;
+    size_t len;
+
+    x = PyFloat_AsDouble(v);
+    if (x == -1.0 && PyErr_Occurred()) {
+        PyErr_Format(PyExc_TypeError, "float argument required, "
+                     "not %.200s", Py_TYPE(v)->tp_name);
+        return NULL;
+    }
+
+    if (prec < 0)
+        prec = 6;
+
+    p = PyOS_double_to_string(x, type, prec,
+                              (flags & F_ALT) ? Py_DTSF_ALT : 0, NULL);
+
+    if (p == NULL)
+        return NULL;
+
+    len = strlen(p);
+    if (writer != NULL) {
+        str = _PyBytesWriter_Prepare(writer, str, len);
+        if (str == NULL)
+            return NULL;
+        memcpy(str, p, len);
+        PyMem_Free(p);
+        str += len;
+        return str;
+    }
+
+    result = PyBytes_FromStringAndSize(p, len);
+    PyMem_Free(p);
+    *p_result = result;
+    return str;
+}
+
+static PyObject *
+formatlong(PyObject *v, int flags, int prec, int type)
+{
+    PyObject *result, *iobj;
+    if (type == 'i')
+        type = 'd';
+    if (PyLong_Check(v))
+        return _PyUnicode_FormatLong(v, flags & F_ALT, prec, type);
+    if (PyNumber_Check(v)) {
+        /* make sure number is a type of integer for o, x, and X */
+        if (type == 'o' || type == 'x' || type == 'X')
+            iobj = PyNumber_Index(v);
+        else
+            iobj = PyNumber_Long(v);
+        if (iobj == NULL) {
+            if (!PyErr_ExceptionMatches(PyExc_TypeError))
+                return NULL;
+        }
+        else if (!PyLong_Check(iobj))
+            Py_CLEAR(iobj);
+        if (iobj != NULL) {
+            result = _PyUnicode_FormatLong(iobj, flags & F_ALT, prec, type);
+            Py_DECREF(iobj);
+            return result;
+        }
+    }
+    PyErr_Format(PyExc_TypeError,
+        "%%%c format: %s is required, not %.200s", type,
+        (type == 'o' || type == 'x' || type == 'X') ? "an integer"
+                                                    : "a number",
+        Py_TYPE(v)->tp_name);
+    return NULL;
+}
+
+static int
+byte_converter(PyObject *arg, char *p)
+{
+    if (PyBytes_Check(arg) && PyBytes_GET_SIZE(arg) == 1) {
+        *p = PyBytes_AS_STRING(arg)[0];
+        return 1;
+    }
+    else if (PyByteArray_Check(arg) && PyByteArray_GET_SIZE(arg) == 1) {
+        *p = PyByteArray_AS_STRING(arg)[0];
+        return 1;
+    }
+    else {
+        PyObject *iobj;
+        long ival;
+        int overflow;
+        /* make sure number is a type of integer */
+        if (PyLong_Check(arg)) {
+            ival = PyLong_AsLongAndOverflow(arg, &overflow);
+        }
+        else {
+            iobj = PyNumber_Index(arg);
+            if (iobj == NULL) {
+                if (!PyErr_ExceptionMatches(PyExc_TypeError))
+                    return 0;
+                goto onError;
+            }
+            ival = PyLong_AsLongAndOverflow(iobj, &overflow);
+            Py_DECREF(iobj);
+        }
+        if (!overflow && ival == -1 && PyErr_Occurred())
+            goto onError;
+        if (overflow || !(0 <= ival && ival <= 255)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "%c arg not in range(256)");
+            return 0;
+        }
+        *p = (char)ival;
+        return 1;
+    }
+  onError:
+    PyErr_SetString(PyExc_TypeError,
+        "%c requires an integer in range(256) or a single byte");
+    return 0;
+}
+
+static PyObject *_PyBytes_FromBuffer(PyObject *x);
+
+static PyObject *
+format_obj(PyObject *v, const char **pbuf, Py_ssize_t *plen)
+{
+    PyObject *func, *result;
+    _Py_IDENTIFIER(__bytes__);
+    /* is it a bytes object? */
+    if (PyBytes_Check(v)) {
+        *pbuf = PyBytes_AS_STRING(v);
+        *plen = PyBytes_GET_SIZE(v);
+        Py_INCREF(v);
+        return v;
+    }
+    if (PyByteArray_Check(v)) {
+        *pbuf = PyByteArray_AS_STRING(v);
+        *plen = PyByteArray_GET_SIZE(v);
+        Py_INCREF(v);
+        return v;
+    }
+    /* does it support __bytes__? */
+    func = _PyObject_LookupSpecial(v, &PyId___bytes__);
+    if (func != NULL) {
+        result = _PyObject_CallNoArg(func);
+        Py_DECREF(func);
+        if (result == NULL)
+            return NULL;
+        if (!PyBytes_Check(result)) {
+            PyErr_Format(PyExc_TypeError,
+                         "__bytes__ returned non-bytes (type %.200s)",
+                         Py_TYPE(result)->tp_name);
+            Py_DECREF(result);
+            return NULL;
+        }
+        *pbuf = PyBytes_AS_STRING(result);
+        *plen = PyBytes_GET_SIZE(result);
+        return result;
+    }
+    /* does it support buffer protocol? */
+    if (PyObject_CheckBuffer(v)) {
+        /* maybe we can avoid making a copy of the buffer object here? */
+        result = _PyBytes_FromBuffer(v);
+        if (result == NULL)
+            return NULL;
+        *pbuf = PyBytes_AS_STRING(result);
+        *plen = PyBytes_GET_SIZE(result);
+        return result;
+    }
+    PyErr_Format(PyExc_TypeError,
+                 "%%b requires a bytes-like object, "
+                 "or an object that implements __bytes__, not '%.100s'",
+                 Py_TYPE(v)->tp_name);
+    return NULL;
+}
+
+/* fmt%(v1,v2,...) is roughly equivalent to sprintf(fmt, v1, v2, ...) */
+
+PyObject *
+_PyBytes_FormatEx(const char *format, Py_ssize_t format_len,
+                  PyObject *args, int use_bytearray)
+{
+    const char *fmt;
+    char *res;
+    Py_ssize_t arglen, argidx;
+    Py_ssize_t fmtcnt;
+    int args_owned = 0;
+    PyObject *dict = NULL;
+    _PyBytesWriter writer;
+
+    if (args == NULL) {
+        PyErr_BadInternalCall();
+        return NULL;
+    }
+    fmt = format;
+    fmtcnt = format_len;
+
+    _PyBytesWriter_Init(&writer);
+    writer.use_bytearray = use_bytearray;
+
+    res = _PyBytesWriter_Alloc(&writer, fmtcnt);
+    if (res == NULL)
+        return NULL;
+    if (!use_bytearray)
+        writer.overallocate = 1;
+
+    if (PyTuple_Check(args)) {
+        arglen = PyTuple_GET_SIZE(args);
+        argidx = 0;
+    }
+    else {
+        arglen = -1;
+        argidx = -2;
+    }
+    if (Py_TYPE(args)->tp_as_mapping && Py_TYPE(args)->tp_as_mapping->mp_subscript &&
+        !PyTuple_Check(args) && !PyBytes_Check(args) && !PyUnicode_Check(args) &&
+        !PyByteArray_Check(args)) {
+            dict = args;
+    }
+
+    while (--fmtcnt >= 0) {
+        if (*fmt != '%') {
+            Py_ssize_t len;
+            char *pos;
+
+            pos = (char *)memchr(fmt + 1, '%', fmtcnt);
+            if (pos != NULL)
+                len = pos - fmt;
+            else
+                len = fmtcnt + 1;
+            assert(len != 0);
+
+            memcpy(res, fmt, len);
+            res += len;
+            fmt += len;
+            fmtcnt -= (len - 1);
+        }
+        else {
+            /* Got a format specifier */
+            int flags = 0;
+            Py_ssize_t width = -1;
+            int prec = -1;
+            int c = '\0';
+            int fill;
+            PyObject *v = NULL;
+            PyObject *temp = NULL;
+            const char *pbuf = NULL;
+            int sign;
+            Py_ssize_t len = 0;
+            char onechar; /* For byte_converter() */
+            Py_ssize_t alloc;
+#ifdef Py_DEBUG
+            char *before;
+#endif
+
+            fmt++;
+            if (*fmt == '%') {
+                *res++ = '%';
+                fmt++;
+                fmtcnt--;
+                continue;
+            }
+            if (*fmt == '(') {
+                const char *keystart;
+                Py_ssize_t keylen;
+                PyObject *key;
+                int pcount = 1;
+
+                if (dict == NULL) {
+                    PyErr_SetString(PyExc_TypeError,
+                             "format requires a mapping");
+                    goto error;
+                }
+                ++fmt;
+                --fmtcnt;
+                keystart = fmt;
+                /* Skip over balanced parentheses */
+                while (pcount > 0 && --fmtcnt >= 0) {
+                    if (*fmt == ')')
+                        --pcount;
+                    else if (*fmt == '(')
+                        ++pcount;
+                    fmt++;
+                }
+                keylen = fmt - keystart - 1;
+                if (fmtcnt < 0 || pcount > 0) {
+                    PyErr_SetString(PyExc_ValueError,
+                               "incomplete format key");
+                    goto error;
+                }
+                key = PyBytes_FromStringAndSize(keystart,
+                                                 keylen);
+                if (key == NULL)
+                    goto error;
+                if (args_owned) {
+                    Py_DECREF(args);
+                    args_owned = 0;
+                }
+                args = PyObject_GetItem(dict, key);
+                Py_DECREF(key);
+                if (args == NULL) {
+                    goto error;
+                }
+                args_owned = 1;
+                arglen = -1;
+                argidx = -2;
+            }
+
+            /* Parse flags. Example: "%+i" => flags=F_SIGN. */
+            while (--fmtcnt >= 0) {
+                switch (c = *fmt++) {
+                case '-': flags |= F_LJUST; continue;
+                case '+': flags |= F_SIGN; continue;
+                case ' ': flags |= F_BLANK; continue;
+                case '#': flags |= F_ALT; continue;
+                case '0': flags |= F_ZERO; continue;
+                }
+                break;
+            }
+
+            /* Parse width. Example: "%10s" => width=10 */
+            if (c == '*') {
+                v = getnextarg(args, arglen, &argidx);
+                if (v == NULL)
+                    goto error;
+                if (!PyLong_Check(v)) {
+                    PyErr_SetString(PyExc_TypeError,
+                                    "* wants int");
+                    goto error;
+                }
+                width = PyLong_AsSsize_t(v);
+                if (width == -1 && PyErr_Occurred())
+                    goto error;
+                if (width < 0) {
+                    flags |= F_LJUST;
+                    width = -width;
+                }
+                if (--fmtcnt >= 0)
+                    c = *fmt++;
+            }
+            else if (c >= 0 && isdigit(c)) {
+                width = c - '0';
+                while (--fmtcnt >= 0) {
+                    c = Py_CHARMASK(*fmt++);
+                    if (!isdigit(c))
+                        break;
+                    if (width > (PY_SSIZE_T_MAX - ((int)c - '0')) / 10) {
+                        PyErr_SetString(
+                            PyExc_ValueError,
+                            "width too big");
+                        goto error;
+                    }
+                    width = width*10 + (c - '0');
+                }
+            }
+
+            /* Parse precision. Example: "%.3f" => prec=3 */
+            if (c == '.') {
+                prec = 0;
+                if (--fmtcnt >= 0)
+                    c = *fmt++;
+                if (c == '*') {
+                    v = getnextarg(args, arglen, &argidx);
+                    if (v == NULL)
+                        goto error;
+                    if (!PyLong_Check(v)) {
+                        PyErr_SetString(
+                            PyExc_TypeError,
+                            "* wants int");
+                        goto error;
+                    }
+                    prec = _PyLong_AsInt(v);
+                    if (prec == -1 && PyErr_Occurred())
+                        goto error;
+                    if (prec < 0)
+                        prec = 0;
+                    if (--fmtcnt >= 0)
+                        c = *fmt++;
+                }
+                else if (c >= 0 && isdigit(c)) {
+                    prec = c - '0';
+                    while (--fmtcnt >= 0) {
+                        c = Py_CHARMASK(*fmt++);
+                        if (!isdigit(c))
+                            break;
+                        if (prec > (INT_MAX - ((int)c - '0')) / 10) {
+                            PyErr_SetString(
+                                PyExc_ValueError,
+                                "prec too big");
+                            goto error;
+                        }
+                        prec = prec*10 + (c - '0');
+                    }
+                }
+            } /* prec */
+            if (fmtcnt >= 0) {
+                if (c == 'h' || c == 'l' || c == 'L') {
+                    if (--fmtcnt >= 0)
+                        c = *fmt++;
+                }
+            }
+            if (fmtcnt < 0) {
+                PyErr_SetString(PyExc_ValueError,
+                                "incomplete format");
+                goto error;
+            }
+            v = getnextarg(args, arglen, &argidx);
+            if (v == NULL)
+                goto error;
+
+            if (fmtcnt < 0) {
+                /* last writer: disable writer overallocation */
+                writer.overallocate = 0;
+            }
+
+            sign = 0;
+            fill = ' ';
+            switch (c) {
+            case 'r':
+                // %r is only for 2/3 code; 3 only code should use %a
+            case 'a':
+                temp = PyObject_ASCII(v);
+                if (temp == NULL)
+                    goto error;
+                assert(PyUnicode_IS_ASCII(temp));
+                pbuf = (const char *)PyUnicode_1BYTE_DATA(temp);
+                len = PyUnicode_GET_LENGTH(temp);
+                if (prec >= 0 && len > prec)
+                    len = prec;
+                break;
+
+            case 's':
+                // %s is only for 2/3 code; 3 only code should use %b
+            case 'b':
+                temp = format_obj(v, &pbuf, &len);
+                if (temp == NULL)
+                    goto error;
+                if (prec >= 0 && len > prec)
+                    len = prec;
+                break;
+
+            case 'i':
+            case 'd':
+            case 'u':
+            case 'o':
+            case 'x':
+            case 'X':
+                if (PyLong_CheckExact(v)
+                    && width == -1 && prec == -1
+                    && !(flags & (F_SIGN | F_BLANK))
+                    && c != 'X')
+                {
+                    /* Fast path */
+                    int alternate = flags & F_ALT;
+                    int base;
+
+                    switch(c)
+                    {
+                        default:
+                            Py_UNREACHABLE();
+                        case 'd':
+                        case 'i':
+                        case 'u':
+                            base = 10;
+                            break;
+                        case 'o':
+                            base = 8;
+                            break;
+                        case 'x':
+                        case 'X':
+                            base = 16;
+                            break;
+                    }
+
+                    /* Fast path */
+                    writer.min_size -= 2; /* size preallocated for "%d" */
+                    res = _PyLong_FormatBytesWriter(&writer, res,
+                                                    v, base, alternate);
+                    if (res == NULL)
+                        goto error;
+                    continue;
+                }
+
+                temp = formatlong(v, flags, prec, c);
+                if (!temp)
+                    goto error;
+                assert(PyUnicode_IS_ASCII(temp));
+                pbuf = (const char *)PyUnicode_1BYTE_DATA(temp);
+                len = PyUnicode_GET_LENGTH(temp);
+                sign = 1;
+                if (flags & F_ZERO)
+                    fill = '0';
+                break;
+
+            case 'e':
+            case 'E':
+            case 'f':
+            case 'F':
+            case 'g':
+            case 'G':
+                if (width == -1 && prec == -1
+                    && !(flags & (F_SIGN | F_BLANK)))
+                {
+                    /* Fast path */
+                    writer.min_size -= 2; /* size preallocated for "%f" */
+                    res = formatfloat(v, flags, prec, c, NULL, &writer, res);
+                    if (res == NULL)
+                        goto error;
+                    continue;
+                }
+
+                if (!formatfloat(v, flags, prec, c, &temp, NULL, res))
+                    goto error;
+                pbuf = PyBytes_AS_STRING(temp);
+                len = PyBytes_GET_SIZE(temp);
+                sign = 1;
+                if (flags & F_ZERO)
+                    fill = '0';
+                break;
+
+            case 'c':
+                pbuf = &onechar;
+                len = byte_converter(v, &onechar);
+                if (!len)
+                    goto error;
+                if (width == -1) {
+                    /* Fast path */
+                    *res++ = onechar;
+                    continue;
+                }
+                break;
+
+            default:
+                PyErr_Format(PyExc_ValueError,
+                  "unsupported format character '%c' (0x%x) "
+                  "at index %zd",
+                  c, c,
+                  (Py_ssize_t)(fmt - 1 - format));
+                goto error;
+            }
+
+            if (sign) {
+                if (*pbuf == '-' || *pbuf == '+') {
+                    sign = *pbuf++;
+                    len--;
+                }
+                else if (flags & F_SIGN)
+                    sign = '+';
+                else if (flags & F_BLANK)
+                    sign = ' ';
+                else
+                    sign = 0;
+            }
+            if (width < len)
+                width = len;
+
+            alloc = width;
+            if (sign != 0 && len == width)
+                alloc++;
+            /* 2: size preallocated for %s */
+            if (alloc > 2) {
+                res = _PyBytesWriter_Prepare(&writer, res, alloc - 2);
+                if (res == NULL)
+                    goto error;
+            }
+#ifdef Py_DEBUG
+            before = res;
+#endif
+
+            /* Write the sign if needed */
+            if (sign) {
+                if (fill != ' ')
+                    *res++ = sign;
+                if (width > len)
+                    width--;
+            }
+
+            /* Write the numeric prefix for "x", "X" and "o" formats
+               if the alternate form is used.
+               For example, write "0x" for the "%#x" format. */
+            if ((flags & F_ALT) && (c == 'o' || c == 'x' || c == 'X')) {
+                assert(pbuf[0] == '0');
+                assert(pbuf[1] == c);
+                if (fill != ' ') {
+                    *res++ = *pbuf++;
+                    *res++ = *pbuf++;
+                }
+                width -= 2;
+                if (width < 0)
+                    width = 0;
+                len -= 2;
+            }
+
+            /* Pad left with the fill character if needed */
+            if (width > len && !(flags & F_LJUST)) {
+                memset(res, fill, width - len);
+                res += (width - len);
+                width = len;
+            }
+
+            /* If padding with spaces: write sign if needed and/or numeric
+               prefix if the alternate form is used */
+            if (fill == ' ') {
+                if (sign)
+                    *res++ = sign;
+                if ((flags & F_ALT) && (c == 'o' || c == 'x' || c == 'X')) {
+                    assert(pbuf[0] == '0');
+                    assert(pbuf[1] == c);
+                    *res++ = *pbuf++;
+                    *res++ = *pbuf++;
+                }
+            }
+
+            /* Copy bytes */
+            memcpy(res, pbuf, len);
+            res += len;
+
+            /* Pad right with the fill character if needed */
+            if (width > len) {
+                memset(res, ' ', width - len);
+                res += (width - len);
+            }
+
+            if (dict && (argidx < arglen)) {
+                PyErr_SetString(PyExc_TypeError,
+                           "not all arguments converted during bytes formatting");
+                Py_XDECREF(temp);
+                goto error;
+            }
+            Py_XDECREF(temp);
+
+#ifdef Py_DEBUG
+            /* check that we computed the exact size for this write */
+            assert((res - before) == alloc);
+#endif
+        } /* '%' */
+
+        /* If overallocation was disabled, ensure that it was the last
+           write. Otherwise, we missed an optimization */
+        assert(writer.overallocate || fmtcnt < 0 || use_bytearray);
+    } /* until end */
+
+    if (argidx < arglen && !dict) {
+        PyErr_SetString(PyExc_TypeError,
+                        "not all arguments converted during bytes formatting");
+        goto error;
+    }
+
+    if (args_owned) {
+        Py_DECREF(args);
+    }
+    return _PyBytesWriter_Finish(&writer, res);
+
+ error:
+    _PyBytesWriter_Dealloc(&writer);
+    if (args_owned) {
+        Py_DECREF(args);
+    }
+    return NULL;
+}
+
+/* =-= */
+
+static void
+bytes_dealloc(PyObject *op)
+{
+    Py_TYPE(op)->tp_free(op);
+}
+
+/* Unescape a backslash-escaped string. If unicode is non-zero,
+   the string is a u-literal. If recode_encoding is non-zero,
+   the string is UTF-8 encoded and should be re-encoded in the
+   specified encoding.  */
+
+static char *
+_PyBytes_DecodeEscapeRecode(const char **s, const char *end,
+                            const char *errors, const char *recode_encoding,
+                            _PyBytesWriter *writer, char *p)
+{
+    PyObject *u, *w;
+    const char* t;
+
+    t = *s;
+    /* Decode non-ASCII bytes as UTF-8. */
+    while (t < end && (*t & 0x80))
+        t++;
+    u = PyUnicode_DecodeUTF8(*s, t - *s, errors);
+    if (u == NULL)
+        return NULL;
+
+    /* Recode them in target encoding. */
+    w = PyUnicode_AsEncodedString(u, recode_encoding, errors);
+    Py_DECREF(u);
+    if  (w == NULL)
+        return NULL;
+    assert(PyBytes_Check(w));
+
+    /* Append bytes to output buffer. */
+    writer->min_size--;   /* subtract 1 preallocated byte */
+    p = _PyBytesWriter_WriteBytes(writer, p,
+                                  PyBytes_AS_STRING(w),
+                                  PyBytes_GET_SIZE(w));
+    Py_DECREF(w);
+    if (p == NULL)
+        return NULL;
+
+    *s = t;
+    return p;
+}
+
+PyObject *_PyBytes_DecodeEscape(const char *s,
+                                Py_ssize_t len,
+                                const char *errors,
+                                Py_ssize_t unicode,
+                                const char *recode_encoding,
+                                const char **first_invalid_escape)
+{
+    int c;
+    char *p;
+    const char *end;
+    _PyBytesWriter writer;
+
+    _PyBytesWriter_Init(&writer);
+
+    p = _PyBytesWriter_Alloc(&writer, len);
+    if (p == NULL)
+        return NULL;
+    writer.overallocate = 1;
+
+    *first_invalid_escape = NULL;
+
+    end = s + len;
+    while (s < end) {
+        if (*s != '\\') {
+          non_esc:
+            if (!(recode_encoding && (*s & 0x80))) {
+                *p++ = *s++;
+            }
+            else {
+                /* non-ASCII character and need to recode */
+                p = _PyBytes_DecodeEscapeRecode(&s, end,
+                                                errors, recode_encoding,
+                                                &writer, p);
+                if (p == NULL)
+                    goto failed;
+            }
+            continue;
+        }
+
+        s++;
+        if (s == end) {
+            PyErr_SetString(PyExc_ValueError,
+                            "Trailing \\ in string");
+            goto failed;
+        }
+
+        switch (*s++) {
+        /* XXX This assumes ASCII! */
+        case '\n': break;
+        case '\\': *p++ = '\\'; break;
+        case '\'': *p++ = '\''; break;
+        case '\"': *p++ = '\"'; break;
+        case 'b': *p++ = '\b'; break;
+        case 'f': *p++ = '\014'; break; /* FF */
+        case 't': *p++ = '\t'; break;
+        case 'n': *p++ = '\n'; break;
+        case 'r': *p++ = '\r'; break;
+        case 'v': *p++ = '\013'; break; /* VT */
+        case 'a': *p++ = '\007'; break; /* BEL, not classic C */
+        case '0': case '1': case '2': case '3':
+        case '4': case '5': case '6': case '7':
+            c = s[-1] - '0';
+            if (s < end && '0' <= *s && *s <= '7') {
+                c = (c<<3) + *s++ - '0';
+                if (s < end && '0' <= *s && *s <= '7')
+                    c = (c<<3) + *s++ - '0';
+            }
+            *p++ = c;
+            break;
+        case 'x':
+            if (s+1 < end) {
+                int digit1, digit2;
+                digit1 = _PyLong_DigitValue[Py_CHARMASK(s[0])];
+                digit2 = _PyLong_DigitValue[Py_CHARMASK(s[1])];
+                if (digit1 < 16 && digit2 < 16) {
+                    *p++ = (unsigned char)((digit1 << 4) + digit2);
+                    s += 2;
+                    break;
+                }
+            }
+            /* invalid hexadecimal digits */
+
+            if (!errors || strcmp(errors, "strict") == 0) {
+                PyErr_Format(PyExc_ValueError,
+                             "invalid \\x escape at position %d",
+                             s - 2 - (end - len));
+                goto failed;
+            }
+            if (strcmp(errors, "replace") == 0) {
+                *p++ = '?';
+            } else if (strcmp(errors, "ignore") == 0)
+                /* do nothing */;
+            else {
+                PyErr_Format(PyExc_ValueError,
+                             "decoding error; unknown "
+                             "error handling code: %.400s",
+                             errors);
+                goto failed;
+            }
+            /* skip \x */
+            if (s < end && Py_ISXDIGIT(s[0]))
+                s++; /* and a hexdigit */
+            break;
+
+        default:
+            if (*first_invalid_escape == NULL) {
+                *first_invalid_escape = s-1; /* Back up one char, since we've
+                                                already incremented s. */
+            }
+            *p++ = '\\';
+            s--;
+            goto non_esc; /* an arbitrary number of unescaped
+                             UTF-8 bytes may follow. */
+        }
+    }
+
+    return _PyBytesWriter_Finish(&writer, p);
+
+  failed:
+    _PyBytesWriter_Dealloc(&writer);
+    return NULL;
+}
+
+PyObject *PyBytes_DecodeEscape(const char *s,
+                                Py_ssize_t len,
+                                const char *errors,
+                                Py_ssize_t unicode,
+                                const char *recode_encoding)
+{
+    const char* first_invalid_escape;
+    PyObject *result = _PyBytes_DecodeEscape(s, len, errors, unicode,
+                                             recode_encoding,
+                                             &first_invalid_escape);
+    if (result == NULL)
+        return NULL;
+    if (first_invalid_escape != NULL) {
+        if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
+                             "invalid escape sequence '\\%c'",
+                             (unsigned char)*first_invalid_escape) < 0) {
+            Py_DECREF(result);
+            return NULL;
+        }
+    }
+    return result;
+
+}
+/* -------------------------------------------------------------------- */
+/* object api */
+
+Py_ssize_t
+PyBytes_Size(PyObject *op)
+{
+    if (!PyBytes_Check(op)) {
+        PyErr_Format(PyExc_TypeError,
+             "expected bytes, %.200s found", Py_TYPE(op)->tp_name);
+        return -1;
+    }
+    return Py_SIZE(op);
+}
+
+char *
+PyBytes_AsString(PyObject *op)
+{
+    if (!PyBytes_Check(op)) {
+        PyErr_Format(PyExc_TypeError,
+             "expected bytes, %.200s found", Py_TYPE(op)->tp_name);
+        return NULL;
+    }
+    return ((PyBytesObject *)op)->ob_sval;
+}
+
+int
+PyBytes_AsStringAndSize(PyObject *obj,
+                         char **s,
+                         Py_ssize_t *len)
+{
+    if (s == NULL) {
+        PyErr_BadInternalCall();
+        return -1;
+    }
+
+    if (!PyBytes_Check(obj)) {
+        PyErr_Format(PyExc_TypeError,
+             "expected bytes, %.200s found", Py_TYPE(obj)->tp_name);
+        return -1;
+    }
+
+    *s = PyBytes_AS_STRING(obj);
+    if (len != NULL)
+        *len = PyBytes_GET_SIZE(obj);
+    else if (strlen(*s) != (size_t)PyBytes_GET_SIZE(obj)) {
+        PyErr_SetString(PyExc_ValueError,
+                        "embedded null byte");
+        return -1;
+    }
+    return 0;
+}
+
+/* -------------------------------------------------------------------- */
+/* Methods */
+
+#include "stringlib/stringdefs.h"
+
+#include "stringlib/fastsearch.h"
+#include "stringlib/count.h"
+#include "stringlib/find.h"
+#include "stringlib/join.h"
+#include "stringlib/partition.h"
+#include "stringlib/split.h"
+#include "stringlib/ctype.h"
+
+#include "stringlib/transmogrify.h"
+
+PyObject *
+PyBytes_Repr(PyObject *obj, int smartquotes)
+{
+    PyBytesObject* op = (PyBytesObject*) obj;
+    Py_ssize_t i, length = Py_SIZE(op);
+    Py_ssize_t newsize, squotes, dquotes;
+    PyObject *v;
+    unsigned char quote, *s, *p;
+
+    /* Compute size of output string */
+    squotes = dquotes = 0;
+    newsize = 3; /* b'' */
+    s = (unsigned char*)op->ob_sval;
+    for (i = 0; i < length; i++) {
+        Py_ssize_t incr = 1;
+        switch(s[i]) {
+        case '\'': squotes++; break;
+        case '"':  dquotes++; break;
+        case '\\': case '\t': case '\n': case '\r':
+            incr = 2; break; /* \C */
+        default:
+            if (s[i] < ' ' || s[i] >= 0x7f)
+                incr = 4; /* \xHH */
+        }
+        if (newsize > PY_SSIZE_T_MAX - incr)
+            goto overflow;
+        newsize += incr;
+    }
+    quote = '\'';
+    if (smartquotes && squotes && !dquotes)
+        quote = '"';
+    if (squotes && quote == '\'') {
+        if (newsize > PY_SSIZE_T_MAX - squotes)
+            goto overflow;
+        newsize += squotes;
+    }
+
+    v = PyUnicode_New(newsize, 127);
+    if (v == NULL) {
+        return NULL;
+    }
+    p = PyUnicode_1BYTE_DATA(v);
+
+    *p++ = 'b', *p++ = quote;
+    for (i = 0; i < length; i++) {
+        unsigned char c = op->ob_sval[i];
+        if (c == quote || c == '\\')
+            *p++ = '\\', *p++ = c;
+        else if (c == '\t')
+            *p++ = '\\', *p++ = 't';
+        else if (c == '\n')
+            *p++ = '\\', *p++ = 'n';
+        else if (c == '\r')
+            *p++ = '\\', *p++ = 'r';
+        else if (c < ' ' || c >= 0x7f) {
+            *p++ = '\\';
+            *p++ = 'x';
+            *p++ = Py_hexdigits[(c & 0xf0) >> 4];
+            *p++ = Py_hexdigits[c & 0xf];
+        }
+        else
+            *p++ = c;
+    }
+    *p++ = quote;
+    assert(_PyUnicode_CheckConsistency(v, 1));
+    return v;
+
+  overflow:
+    PyErr_SetString(PyExc_OverflowError,
+                    "bytes object is too large to make repr");
+    return NULL;
+}
+
+static PyObject *
+bytes_repr(PyObject *op)
+{
+    return PyBytes_Repr(op, 1);
+}
+
+static PyObject *
+bytes_str(PyObject *op)
+{
+    if (Py_BytesWarningFlag) {
+        if (PyErr_WarnEx(PyExc_BytesWarning,
+                         "str() on a bytes instance", 1))
+            return NULL;
+    }
+    return bytes_repr(op);
+}
+
+static Py_ssize_t
+bytes_length(PyBytesObject *a)
+{
+    return Py_SIZE(a);
+}
+
+/* This is also used by PyBytes_Concat() */
+static PyObject *
+bytes_concat(PyObject *a, PyObject *b)
+{
+    Py_buffer va, vb;
+    PyObject *result = NULL;
+
+    va.len = -1;
+    vb.len = -1;
+    if (PyObject_GetBuffer(a, &va, PyBUF_SIMPLE) != 0 ||
+        PyObject_GetBuffer(b, &vb, PyBUF_SIMPLE) != 0) {
+        PyErr_Format(PyExc_TypeError, "can't concat %.100s to %.100s",
+                     Py_TYPE(b)->tp_name, Py_TYPE(a)->tp_name);
+        goto done;
+    }
+
+    /* Optimize end cases */
+    if (va.len == 0 && PyBytes_CheckExact(b)) {
+        result = b;
+        Py_INCREF(result);
+        goto done;
+    }
+    if (vb.len == 0 && PyBytes_CheckExact(a)) {
+        result = a;
+        Py_INCREF(result);
+        goto done;
+    }
+
+    if (va.len > PY_SSIZE_T_MAX - vb.len) {
+        PyErr_NoMemory();
+        goto done;
+    }
+
+    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);
+    }
+
+  done:
+    if (va.len != -1)
+        PyBuffer_Release(&va);
+    if (vb.len != -1)
+        PyBuffer_Release(&vb);
+    return result;
+}
+
+static PyObject *
+bytes_repeat(PyBytesObject *a, Py_ssize_t n)
+{
+    Py_ssize_t i;
+    Py_ssize_t j;
+    Py_ssize_t size;
+    PyBytesObject *op;
+    size_t nbytes;
+    if (n < 0)
+        n = 0;
+    /* watch out for overflows:  the size can overflow int,
+     * and the # of bytes needed can overflow size_t
+     */
+    if (n > 0 && Py_SIZE(a) > PY_SSIZE_T_MAX / n) {
+        PyErr_SetString(PyExc_OverflowError,
+            "repeated bytes are too long");
+        return NULL;
+    }
+    size = Py_SIZE(a) * n;
+    if (size == Py_SIZE(a) && PyBytes_CheckExact(a)) {
+        Py_INCREF(a);
+        return (PyObject *)a;
+    }
+    nbytes = (size_t)size;
+    if (nbytes + PyBytesObject_SIZE <= nbytes) {
+        PyErr_SetString(PyExc_OverflowError,
+            "repeated bytes are too long");
+        return NULL;
+    }
+    op = (PyBytesObject *)PyObject_MALLOC(PyBytesObject_SIZE + nbytes);
+    if (op == NULL)
+        return PyErr_NoMemory();
+    (void)PyObject_INIT_VAR(op, &PyBytes_Type, size);
+    op->ob_shash = -1;
+    op->ob_sval[size] = '\0';
+    if (Py_SIZE(a) == 1 && n > 0) {
+        memset(op->ob_sval, a->ob_sval[0] , n);
+        return (PyObject *) op;
+    }
+    i = 0;
+    if (i < size) {
+        memcpy(op->ob_sval, a->ob_sval, Py_SIZE(a));
+        i = Py_SIZE(a);
+    }
+    while (i < size) {
+        j = (i <= size-i)  ?  i  :  size-i;
+        memcpy(op->ob_sval+i, op->ob_sval, j);
+        i += j;
+    }
+    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)
+{
+    if (i < 0 || i >= Py_SIZE(a)) {
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return NULL;
+    }
+    return PyLong_FromLong((unsigned char)a->ob_sval[i]);
+}
+
+static int
+bytes_compare_eq(PyBytesObject *a, PyBytesObject *b)
+{
+    int cmp;
+    Py_ssize_t len;
+
+    len = Py_SIZE(a);
+    if (Py_SIZE(b) != len)
+        return 0;
+
+    if (a->ob_sval[0] != b->ob_sval[0])
+        return 0;
+
+    cmp = memcmp(a->ob_sval, b->ob_sval, len);
+    return (cmp == 0);
+}
+
+static PyObject*
+bytes_richcompare(PyBytesObject *a, PyBytesObject *b, int op)
+{
+    int c;
+    Py_ssize_t len_a, len_b;
+    Py_ssize_t min_len;
+    PyObject *result;
+    int rc;
+
+    /* Make sure both arguments are strings. */
+    if (!(PyBytes_Check(a) && PyBytes_Check(b))) {
+        if (Py_BytesWarningFlag && (op == Py_EQ || op == Py_NE)) {
+            rc = PyObject_IsInstance((PyObject*)a,
+                                     (PyObject*)&PyUnicode_Type);
+            if (!rc)
+                rc = PyObject_IsInstance((PyObject*)b,
+                                         (PyObject*)&PyUnicode_Type);
+            if (rc < 0)
+                return NULL;
+            if (rc) {
+                if (PyErr_WarnEx(PyExc_BytesWarning,
+                                 "Comparison between bytes and string", 1))
+                    return NULL;
+            }
+            else {
+                rc = PyObject_IsInstance((PyObject*)a,
+                                         (PyObject*)&PyLong_Type);
+                if (!rc)
+                    rc = PyObject_IsInstance((PyObject*)b,
+                                             (PyObject*)&PyLong_Type);
+                if (rc < 0)
+                    return NULL;
+                if (rc) {
+                    if (PyErr_WarnEx(PyExc_BytesWarning,
+                                     "Comparison between bytes and int", 1))
+                        return NULL;
+                }
+            }
+        }
+        result = Py_NotImplemented;
+    }
+    else if (a == b) {
+        switch (op) {
+        case Py_EQ:
+        case Py_LE:
+        case Py_GE:
+            /* a string is equal to itself */
+            result = Py_True;
+            break;
+        case Py_NE:
+        case Py_LT:
+        case Py_GT:
+            result = Py_False;
+            break;
+        default:
+            PyErr_BadArgument();
+            return NULL;
+        }
+    }
+    else if (op == Py_EQ || op == Py_NE) {
+        int eq = bytes_compare_eq(a, b);
+        eq ^= (op == Py_NE);
+        result = eq ? Py_True : Py_False;
+    }
+    else {
+        len_a = Py_SIZE(a);
+        len_b = Py_SIZE(b);
+        min_len = Py_MIN(len_a, len_b);
+        if (min_len > 0) {
+            c = Py_CHARMASK(*a->ob_sval) - Py_CHARMASK(*b->ob_sval);
+            if (c == 0)
+                c = memcmp(a->ob_sval, b->ob_sval, min_len);
+        }
+        else
+            c = 0;
+        if (c == 0)
+            c = (len_a < len_b) ? -1 : (len_a > len_b) ? 1 : 0;
+        switch (op) {
+        case Py_LT: c = c <  0; break;
+        case Py_LE: c = c <= 0; break;
+        case Py_GT: c = c >  0; break;
+        case Py_GE: c = c >= 0; break;
+        default:
+            PyErr_BadArgument();
+            return NULL;
+        }
+        result = c ? Py_True : Py_False;
+    }
+
+    Py_INCREF(result);
+    return result;
+}
+
+static Py_hash_t
+bytes_hash(PyBytesObject *a)
+{
+    if (a->ob_shash == -1) {
+        /* Can't fail */
+        a->ob_shash = _Py_HashBytes(a->ob_sval, Py_SIZE(a));
+    }
+    return a->ob_shash;
+}
+
+static PyObject*
+bytes_subscript(PyBytesObject* self, PyObject* item)
+{
+    if (PyIndex_Check(item)) {
+        Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
+        if (i == -1 && PyErr_Occurred())
+            return NULL;
+        if (i < 0)
+            i += PyBytes_GET_SIZE(self);
+        if (i < 0 || i >= PyBytes_GET_SIZE(self)) {
+            PyErr_SetString(PyExc_IndexError,
+                            "index out of range");
+            return NULL;
+        }
+        return PyLong_FromLong((unsigned char)self->ob_sval[i]);
+    }
+    else if (PySlice_Check(item)) {
+        Py_ssize_t start, stop, step, slicelength, cur, i;
+        char* source_buf;
+        char* result_buf;
+        PyObject* result;
+
+        if (PySlice_Unpack(item, &start, &stop, &step) < 0) {
+            return NULL;
+        }
+        slicelength = PySlice_AdjustIndices(PyBytes_GET_SIZE(self), &start,
+                                            &stop, step);
+
+        if (slicelength <= 0) {
+            return PyBytes_FromStringAndSize("", 0);
+        }
+        else if (start == 0 && step == 1 &&
+                 slicelength == PyBytes_GET_SIZE(self) &&
+                 PyBytes_CheckExact(self)) {
+            Py_INCREF(self);
+            return (PyObject *)self;
+        }
+        else if (step == 1) {
+            return PyBytes_FromStringAndSize(
+                PyBytes_AS_STRING(self) + start,
+                slicelength);
+        }
+        else {
+            source_buf = PyBytes_AS_STRING(self);
+            result = PyBytes_FromStringAndSize(NULL, slicelength);
+            if (result == NULL)
+                return NULL;
+
+            result_buf = PyBytes_AS_STRING(result);
+            for (cur = start, i = 0; i < slicelength;
+                 cur += step, i++) {
+                result_buf[i] = source_buf[cur];
+            }
+
+            return result;
+        }
+    }
+    else {
+        PyErr_Format(PyExc_TypeError,
+                     "byte indices must be integers or slices, not %.200s",
+                     Py_TYPE(item)->tp_name);
+        return NULL;
+    }
+}
+
+static int
+bytes_buffer_getbuffer(PyBytesObject *self, Py_buffer *view, int flags)
+{
+    return PyBuffer_FillInfo(view, (PyObject*)self, (void *)self->ob_sval, Py_SIZE(self),
+                             1, flags);
+}
+
+static PySequenceMethods bytes_as_sequence = {
+    (lenfunc)bytes_length, /*sq_length*/
+    (binaryfunc)bytes_concat, /*sq_concat*/
+    (ssizeargfunc)bytes_repeat, /*sq_repeat*/
+    (ssizeargfunc)bytes_item, /*sq_item*/
+    0,                  /*sq_slice*/
+    0,                  /*sq_ass_item*/
+    0,                  /*sq_ass_slice*/
+    (objobjproc)bytes_contains /*sq_contains*/
+};
+
+static PyMappingMethods bytes_as_mapping = {
+    (lenfunc)bytes_length,
+    (binaryfunc)bytes_subscript,
+    0,
+};
+
+static PyBufferProcs bytes_as_buffer = {
+    (getbufferproc)bytes_buffer_getbuffer,
+    NULL,
+};
+
+
+#define LEFTSTRIP 0
+#define RIGHTSTRIP 1
+#define BOTHSTRIP 2
+
+/*[clinic input]
+bytes.split
+
+    sep: object = None
+        The delimiter according which to split the bytes.
+        None (the default value) means split on ASCII whitespace characters
+        (space, tab, return, newline, formfeed, vertical tab).
+    maxsplit: Py_ssize_t = -1
+        Maximum number of splits to do.
+        -1 (the default value) means no limit.
+
+Return a list of the sections in the bytes, using sep as the delimiter.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_split_impl(PyBytesObject *self, PyObject *sep, Py_ssize_t maxsplit)
+/*[clinic end generated code: output=52126b5844c1d8ef input=8b809b39074abbfa]*/
+{
+    Py_ssize_t len = PyBytes_GET_SIZE(self), n;
+    const char *s = PyBytes_AS_STRING(self), *sub;
+    Py_buffer vsub;
+    PyObject *list;
+
+    if (maxsplit < 0)
+        maxsplit = PY_SSIZE_T_MAX;
+    if (sep == Py_None)
+        return stringlib_split_whitespace((PyObject*) self, s, len, maxsplit);
+    if (PyObject_GetBuffer(sep, &vsub, PyBUF_SIMPLE) != 0)
+        return NULL;
+    sub = vsub.buf;
+    n = vsub.len;
+
+    list = stringlib_split((PyObject*) self, s, len, sub, n, maxsplit);
+    PyBuffer_Release(&vsub);
+    return list;
+}
+
+/*[clinic input]
+bytes.partition
+
+    sep: Py_buffer
+    /
+
+Partition the bytes into three parts using the given separator.
+
+This will search for the separator sep in the bytes. If the separator is found,
+returns a 3-tuple containing the part before the separator, the separator
+itself, and the part after it.
+
+If the separator is not found, returns a 3-tuple containing the original bytes
+object and two empty bytes objects.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_partition_impl(PyBytesObject *self, Py_buffer *sep)
+/*[clinic end generated code: output=f532b392a17ff695 input=61cca95519406099]*/
+{
+    return stringlib_partition(
+        (PyObject*) self,
+        PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self),
+        sep->obj, (const char *)sep->buf, sep->len
+        );
+}
+
+/*[clinic input]
+bytes.rpartition
+
+    sep: Py_buffer
+    /
+
+Partition the bytes into three parts using the given separator.
+
+This will search for the separator sep in the bytes, starting at the end. If
+the separator is found, returns a 3-tuple containing the part before the
+separator, the separator itself, and the part after it.
+
+If the separator is not found, returns a 3-tuple containing two empty bytes
+objects and the original bytes object.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_rpartition_impl(PyBytesObject *self, Py_buffer *sep)
+/*[clinic end generated code: output=191b114cbb028e50 input=d78db010c8cfdbe1]*/
+{
+    return stringlib_rpartition(
+        (PyObject*) self,
+        PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self),
+        sep->obj, (const char *)sep->buf, sep->len
+        );
+}
+
+/*[clinic input]
+bytes.rsplit = bytes.split
+
+Return a list of the sections in the bytes, using sep as the delimiter.
+
+Splitting is done starting at the end of the bytes and working to the front.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_rsplit_impl(PyBytesObject *self, PyObject *sep, Py_ssize_t maxsplit)
+/*[clinic end generated code: output=ba698d9ea01e1c8f input=0f86c9f28f7d7b7b]*/
+{
+    Py_ssize_t len = PyBytes_GET_SIZE(self), n;
+    const char *s = PyBytes_AS_STRING(self), *sub;
+    Py_buffer vsub;
+    PyObject *list;
+
+    if (maxsplit < 0)
+        maxsplit = PY_SSIZE_T_MAX;
+    if (sep == Py_None)
+        return stringlib_rsplit_whitespace((PyObject*) self, s, len, maxsplit);
+    if (PyObject_GetBuffer(sep, &vsub, PyBUF_SIMPLE) != 0)
+        return NULL;
+    sub = vsub.buf;
+    n = vsub.len;
+
+    list = stringlib_rsplit((PyObject*) self, s, len, sub, n, maxsplit);
+    PyBuffer_Release(&vsub);
+    return list;
+}
+
+
+/*[clinic input]
+bytes.join
+
+    iterable_of_bytes: object
+    /
+
+Concatenate any number of bytes objects.
+
+The bytes whose method is called is inserted in between each pair.
+
+The result is returned as a new bytes object.
+
+Example: b'.'.join([b'ab', b'pq', b'rs']) -> b'ab.pq.rs'.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_join(PyBytesObject *self, PyObject *iterable_of_bytes)
+/*[clinic end generated code: output=a046f379f626f6f8 input=7fe377b95bd549d2]*/
+{
+    return stringlib_bytes_join((PyObject*)self, iterable_of_bytes);
+}
+
+PyObject *
+_PyBytes_Join(PyObject *sep, PyObject *x)
+{
+    assert(sep != NULL && PyBytes_Check(sep));
+    assert(x != NULL);
+    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)
+{
+    Py_buffer vsep;
+    char *s = PyBytes_AS_STRING(self);
+    Py_ssize_t len = PyBytes_GET_SIZE(self);
+    char *sep;
+    Py_ssize_t seplen;
+    Py_ssize_t i, j;
+
+    if (PyObject_GetBuffer(sepobj, &vsep, PyBUF_SIMPLE) != 0)
+        return NULL;
+    sep = vsep.buf;
+    seplen = vsep.len;
+
+    i = 0;
+    if (striptype != RIGHTSTRIP) {
+        while (i < len && memchr(sep, Py_CHARMASK(s[i]), seplen)) {
+            i++;
+        }
+    }
+
+    j = len;
+    if (striptype != LEFTSTRIP) {
+        do {
+            j--;
+        } while (j >= i && memchr(sep, Py_CHARMASK(s[j]), seplen));
+        j++;
+    }
+
+    PyBuffer_Release(&vsep);
+
+    if (i == 0 && j == len && PyBytes_CheckExact(self)) {
+        Py_INCREF(self);
+        return (PyObject*)self;
+    }
+    else
+        return PyBytes_FromStringAndSize(s+i, j-i);
+}
+
+
+Py_LOCAL_INLINE(PyObject *)
+do_strip(PyBytesObject *self, int striptype)
+{
+    char *s = PyBytes_AS_STRING(self);
+    Py_ssize_t len = PyBytes_GET_SIZE(self), i, j;
+
+    i = 0;
+    if (striptype != RIGHTSTRIP) {
+        while (i < len && Py_ISSPACE(s[i])) {
+            i++;
+        }
+    }
+
+    j = len;
+    if (striptype != LEFTSTRIP) {
+        do {
+            j--;
+        } while (j >= i && Py_ISSPACE(s[j]));
+        j++;
+    }
+
+    if (i == 0 && j == len && PyBytes_CheckExact(self)) {
+        Py_INCREF(self);
+        return (PyObject*)self;
+    }
+    else
+        return PyBytes_FromStringAndSize(s+i, j-i);
+}
+
+
+Py_LOCAL_INLINE(PyObject *)
+do_argstrip(PyBytesObject *self, int striptype, PyObject *bytes)
+{
+    if (bytes != NULL && bytes != Py_None) {
+        return do_xstrip(self, striptype, bytes);
+    }
+    return do_strip(self, striptype);
+}
+
+/*[clinic input]
+bytes.strip
+
+    bytes: object = None
+    /
+
+Strip leading and trailing bytes contained in the argument.
+
+If the argument is omitted or None, strip leading and trailing ASCII whitespace.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_strip_impl(PyBytesObject *self, PyObject *bytes)
+/*[clinic end generated code: output=c7c228d3bd104a1b input=8a354640e4e0b3ef]*/
+{
+    return do_argstrip(self, BOTHSTRIP, bytes);
+}
+
+/*[clinic input]
+bytes.lstrip
+
+    bytes: object = None
+    /
+
+Strip leading bytes contained in the argument.
+
+If the argument is omitted or None, strip leading  ASCII whitespace.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_lstrip_impl(PyBytesObject *self, PyObject *bytes)
+/*[clinic end generated code: output=28602e586f524e82 input=9baff4398c3f6857]*/
+{
+    return do_argstrip(self, LEFTSTRIP, bytes);
+}
+
+/*[clinic input]
+bytes.rstrip
+
+    bytes: object = None
+    /
+
+Strip trailing bytes contained in the argument.
+
+If the argument is omitted or None, strip trailing ASCII whitespace.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_rstrip_impl(PyBytesObject *self, PyObject *bytes)
+/*[clinic end generated code: output=547e3815c95447da input=b78af445c727e32b]*/
+{
+    return do_argstrip(self, RIGHTSTRIP, bytes);
+}
+
+
+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
+
+    table: object
+        Translation table, which must be a bytes object of length 256.
+    /
+    delete as deletechars: object(c_default="NULL") = b''
+
+Return a copy with each character mapped by the given translation table.
+
+All characters occurring in the optional argument delete are removed.
+The remaining characters are mapped through the given translation table.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_translate_impl(PyBytesObject *self, PyObject *table,
+                     PyObject *deletechars)
+/*[clinic end generated code: output=43be3437f1956211 input=0ecdf159f654233c]*/
+{
+    char *input, *output;
+    Py_buffer table_view = {NULL, NULL};
+    Py_buffer del_table_view = {NULL, NULL};
+    const char *table_chars;
+    Py_ssize_t i, c, changed = 0;
+    PyObject *input_obj = (PyObject*)self;
+    const char *output_start, *del_table_chars=NULL;
+    Py_ssize_t inlen, tablen, dellen = 0;
+    PyObject *result;
+    int trans_table[256];
+
+    if (PyBytes_Check(table)) {
+        table_chars = PyBytes_AS_STRING(table);
+        tablen = PyBytes_GET_SIZE(table);
+    }
+    else if (table == Py_None) {
+        table_chars = NULL;
+        tablen = 256;
+    }
+    else {
+        if (PyObject_GetBuffer(table, &table_view, PyBUF_SIMPLE) != 0)
+            return NULL;
+        table_chars = table_view.buf;
+        tablen = table_view.len;
+    }
+
+    if (tablen != 256) {
+        PyErr_SetString(PyExc_ValueError,
+          "translation table must be 256 characters long");
+        PyBuffer_Release(&table_view);
+        return NULL;
+    }
+
+    if (deletechars != NULL) {
+        if (PyBytes_Check(deletechars)) {
+            del_table_chars = PyBytes_AS_STRING(deletechars);
+            dellen = PyBytes_GET_SIZE(deletechars);
+        }
+        else {
+            if (PyObject_GetBuffer(deletechars, &del_table_view, PyBUF_SIMPLE) != 0) {
+                PyBuffer_Release(&table_view);
+                return NULL;
+            }
+            del_table_chars = del_table_view.buf;
+            dellen = del_table_view.len;
+        }
+    }
+    else {
+        del_table_chars = NULL;
+        dellen = 0;
+    }
+
+    inlen = PyBytes_GET_SIZE(input_obj);
+    result = PyBytes_FromStringAndSize((char *)NULL, inlen);
+    if (result == NULL) {
+        PyBuffer_Release(&del_table_view);
+        PyBuffer_Release(&table_view);
+        return NULL;
+    }
+    output_start = output = PyBytes_AS_STRING(result);
+    input = PyBytes_AS_STRING(input_obj);
+
+    if (dellen == 0 && table_chars != NULL) {
+        /* If no deletions are required, use faster code */
+        for (i = inlen; --i >= 0; ) {
+            c = Py_CHARMASK(*input++);
+            if (Py_CHARMASK((*output++ = table_chars[c])) != c)
+                changed = 1;
+        }
+        if (!changed && PyBytes_CheckExact(input_obj)) {
+            Py_INCREF(input_obj);
+            Py_DECREF(result);
+            result = input_obj;
+        }
+        PyBuffer_Release(&del_table_view);
+        PyBuffer_Release(&table_view);
+        return result;
+    }
+
+    if (table_chars == NULL) {
+        for (i = 0; i < 256; i++)
+            trans_table[i] = Py_CHARMASK(i);
+    } else {
+        for (i = 0; i < 256; i++)
+            trans_table[i] = Py_CHARMASK(table_chars[i]);
+    }
+    PyBuffer_Release(&table_view);
+
+    for (i = 0; i < dellen; i++)
+        trans_table[(int) Py_CHARMASK(del_table_chars[i])] = -1;
+    PyBuffer_Release(&del_table_view);
+
+    for (i = inlen; --i >= 0; ) {
+        c = Py_CHARMASK(*input++);
+        if (trans_table[c] != -1)
+            if (Py_CHARMASK(*output++ = (char)trans_table[c]) == c)
+                continue;
+        changed = 1;
+    }
+    if (!changed && PyBytes_CheckExact(input_obj)) {
+        Py_DECREF(result);
+        Py_INCREF(input_obj);
+        return input_obj;
+    }
+    /* Fix the size of the resulting string */
+    if (inlen > 0)
+        _PyBytes_Resize(&result, output - output_start);
+    return result;
+}
+
+
+/*[clinic input]
+
+@staticmethod
+bytes.maketrans
+
+    frm: Py_buffer
+    to: Py_buffer
+    /
+
+Return a translation table useable for the bytes or bytearray translate method.
+
+The returned table will be one where each byte in frm is mapped to the byte at
+the same position in to.
+
+The bytes objects frm and to must be of the same length.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_maketrans_impl(Py_buffer *frm, Py_buffer *to)
+/*[clinic end generated code: output=a36f6399d4b77f6f input=de7a8fc5632bb8f1]*/
+{
+    return _Py_bytes_maketrans(frm, to);
+}
+
+
+/*[clinic input]
+bytes.replace
+
+    old: Py_buffer
+    new: Py_buffer
+    count: Py_ssize_t = -1
+        Maximum number of occurrences to replace.
+        -1 (the default value) means replace all occurrences.
+    /
+
+Return a copy with all occurrences of substring old replaced by new.
+
+If the optional argument count is given, only the first count occurrences are
+replaced.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_replace_impl(PyBytesObject *self, Py_buffer *old, Py_buffer *new,
+                   Py_ssize_t count)
+/*[clinic end generated code: output=994fa588b6b9c104 input=b2fbbf0bf04de8e5]*/
+{
+    return stringlib_replace((PyObject *)self,
+                             (const char *)old->buf, old->len,
+                             (const char *)new->buf, new->len, count);
+}
+
+/** 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
+
+    encoding: str(c_default="NULL") = 'utf-8'
+        The encoding with which to decode the bytes.
+    errors: str(c_default="NULL") = 'strict'
+        The error handling scheme to use for the handling of decoding errors.
+        The default is 'strict' meaning that decoding errors raise a
+        UnicodeDecodeError. Other possible values are 'ignore' and 'replace'
+        as well as any other name registered with codecs.register_error that
+        can handle UnicodeDecodeErrors.
+
+Decode the bytes using the codec registered for encoding.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_decode_impl(PyBytesObject *self, const char *encoding,
+                  const char *errors)
+/*[clinic end generated code: output=5649a53dde27b314 input=958174769d2a40ca]*/
+{
+    return PyUnicode_FromEncodedObject((PyObject*)self, encoding, errors);
+}
+
+
+/*[clinic input]
+bytes.splitlines
+
+    keepends: bool(accept={int}) = False
+
+Return a list of the lines in the bytes, breaking at line boundaries.
+
+Line breaks are not included in the resulting list unless keepends is given and
+true.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_splitlines_impl(PyBytesObject *self, int keepends)
+/*[clinic end generated code: output=3484149a5d880ffb input=a8b32eb01ff5a5ed]*/
+{
+    return stringlib_splitlines(
+        (PyObject*) self, PyBytes_AS_STRING(self),
+        PyBytes_GET_SIZE(self), keepends
+        );
+}
+
+/*[clinic input]
+@classmethod
+bytes.fromhex
+
+    string: unicode
+    /
+
+Create a bytes object from a string of hexadecimal numbers.
+
+Spaces between two numbers are accepted.
+Example: bytes.fromhex('B9 01EF') -> b'\\xb9\\x01\\xef'.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_fromhex_impl(PyTypeObject *type, PyObject *string)
+/*[clinic end generated code: output=0973acc63661bb2e input=bf4d1c361670acd3]*/
+{
+    PyObject *result = _PyBytes_FromHex(string, 0);
+    if (type != &PyBytes_Type && result != NULL) {
+        Py_SETREF(result, PyObject_CallFunctionObjArgs((PyObject *)type,
+                                                       result, NULL));
+    }
+    return result;
+}
+
+PyObject*
+_PyBytes_FromHex(PyObject *string, int use_bytearray)
+{
+    char *buf;
+    Py_ssize_t hexlen, invalid_char;
+    unsigned int top, bot;
+    Py_UCS1 *str, *end;
+    _PyBytesWriter writer;
+
+    _PyBytesWriter_Init(&writer);
+    writer.use_bytearray = use_bytearray;
+
+    assert(PyUnicode_Check(string));
+    if (PyUnicode_READY(string))
+        return NULL;
+    hexlen = PyUnicode_GET_LENGTH(string);
+
+    if (!PyUnicode_IS_ASCII(string)) {
+        void *data = PyUnicode_DATA(string);
+        unsigned int kind = PyUnicode_KIND(string);
+        Py_ssize_t i;
+
+        /* search for the first non-ASCII character */
+        for (i = 0; i < hexlen; i++) {
+            if (PyUnicode_READ(kind, data, i) >= 128)
+                break;
+        }
+        invalid_char = i;
+        goto error;
+    }
+
+    assert(PyUnicode_KIND(string) == PyUnicode_1BYTE_KIND);
+    str = PyUnicode_1BYTE_DATA(string);
+
+    /* This overestimates if there are spaces */
+    buf = _PyBytesWriter_Alloc(&writer, hexlen / 2);
+    if (buf == NULL)
+        return NULL;
+
+    end = str + hexlen;
+    while (str < end) {
+        /* skip over spaces in the input */
+        if (Py_ISSPACE(*str)) {
+            do {
+                str++;
+            } while (Py_ISSPACE(*str));
+            if (str >= end)
+                break;
+        }
+
+        top = _PyLong_DigitValue[*str];
+        if (top >= 16) {
+            invalid_char = str - PyUnicode_1BYTE_DATA(string);
+            goto error;
+        }
+        str++;
+
+        bot = _PyLong_DigitValue[*str];
+        if (bot >= 16) {
+            invalid_char = str - PyUnicode_1BYTE_DATA(string);
+            goto error;
+        }
+        str++;
+
+        *buf++ = (unsigned char)((top << 4) + bot);
+    }
+
+    return _PyBytesWriter_Finish(&writer, buf);
+
+  error:
+    PyErr_Format(PyExc_ValueError,
+                 "non-hexadecimal number found in "
+                 "fromhex() arg at position %zd", invalid_char);
+    _PyBytesWriter_Dealloc(&writer);
+    return NULL;
+}
+
+PyDoc_STRVAR(hex__doc__,
+"B.hex() -> string\n\
+\n\
+Create a string of hexadecimal numbers from a bytes object.\n\
+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));
+}
+
+
+static PyMethodDef
+bytes_methods[] = {
+    {"__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,
+     _Py_count__doc__},
+    BYTES_DECODE_METHODDEF
+    {"endswith", (PyCFunction)bytes_endswith, METH_VARARGS,
+     _Py_endswith__doc__},
+    {"expandtabs", (PyCFunction)stringlib_expandtabs, METH_VARARGS | METH_KEYWORDS,
+     _Py_expandtabs__doc__},
+    {"find", (PyCFunction)bytes_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__},
+    {"isalnum", (PyCFunction)stringlib_isalnum, METH_NOARGS,
+     _Py_isalnum__doc__},
+    {"isalpha", (PyCFunction)stringlib_isalpha, METH_NOARGS,
+     _Py_isalpha__doc__},
+    {"isdigit", (PyCFunction)stringlib_isdigit, METH_NOARGS,
+     _Py_isdigit__doc__},
+    {"islower", (PyCFunction)stringlib_islower, METH_NOARGS,
+     _Py_islower__doc__},
+    {"isspace", (PyCFunction)stringlib_isspace, METH_NOARGS,
+     _Py_isspace__doc__},
+    {"istitle", (PyCFunction)stringlib_istitle, METH_NOARGS,
+     _Py_istitle__doc__},
+    {"isupper", (PyCFunction)stringlib_isupper, METH_NOARGS,
+     _Py_isupper__doc__},
+    BYTES_JOIN_METHODDEF
+    {"ljust", (PyCFunction)stringlib_ljust, METH_VARARGS, _Py_ljust__doc__},
+    {"lower", (PyCFunction)stringlib_lower, METH_NOARGS, _Py_lower__doc__},
+    BYTES_LSTRIP_METHODDEF
+    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__},
+    {"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,
+     _Py_startswith__doc__},
+    BYTES_STRIP_METHODDEF
+    {"swapcase", (PyCFunction)stringlib_swapcase, METH_NOARGS,
+     _Py_swapcase__doc__},
+    {"title", (PyCFunction)stringlib_title, METH_NOARGS, _Py_title__doc__},
+    BYTES_TRANSLATE_METHODDEF
+    {"upper", (PyCFunction)stringlib_upper, METH_NOARGS, _Py_upper__doc__},
+    {"zfill", (PyCFunction)stringlib_zfill, METH_VARARGS, _Py_zfill__doc__},
+    {NULL,     NULL}                         /* sentinel */
+};
+
+static PyObject *
+bytes_mod(PyObject *self, PyObject *arg)
+{
+    if (!PyBytes_Check(self)) {
+        Py_RETURN_NOTIMPLEMENTED;
+    }
+    return _PyBytes_FormatEx(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self),
+                             arg, 0);
+}
+
+static PyNumberMethods bytes_as_number = {
+    0,              /*nb_add*/
+    0,              /*nb_subtract*/
+    0,              /*nb_multiply*/
+    bytes_mod,      /*nb_remainder*/
+};
+
+static PyObject *
+bytes_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
+
+static PyObject *
+bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    PyObject *x = NULL;
+    const char *encoding = NULL;
+    const char *errors = NULL;
+    PyObject *new = NULL;
+    PyObject *func;
+    Py_ssize_t size;
+    static char *kwlist[] = {"source", "encoding", "errors", 0};
+    _Py_IDENTIFIER(__bytes__);
+
+    if (type != &PyBytes_Type)
+        return bytes_subtype_new(type, args, kwds);
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oss:bytes", kwlist, &x,
+                                     &encoding, &errors))
+        return NULL;
+    if (x == NULL) {
+        if (encoding != NULL || errors != NULL) {
+            PyErr_SetString(PyExc_TypeError,
+                            "encoding or errors without sequence "
+                            "argument");
+            return NULL;
+        }
+        return PyBytes_FromStringAndSize(NULL, 0);
+    }
+
+    if (encoding != NULL) {
+        /* Encode via the codec registry */
+        if (!PyUnicode_Check(x)) {
+            PyErr_SetString(PyExc_TypeError,
+                            "encoding without a string argument");
+            return NULL;
+        }
+        new = PyUnicode_AsEncodedString(x, encoding, errors);
+        if (new == NULL)
+            return NULL;
+        assert(PyBytes_Check(new));
+        return new;
+    }
+
+    if (errors != NULL) {
+        PyErr_SetString(PyExc_TypeError,
+                        PyUnicode_Check(x) ?
+                        "string argument without an encoding" :
+                        "errors without a string argument");
+        return NULL;
+    }
+
+    /* We'd like to call PyObject_Bytes here, but we need to check for an
+       integer argument before deferring to PyBytes_FromObject, something
+       PyObject_Bytes doesn't do. */
+    func = _PyObject_LookupSpecial(x, &PyId___bytes__);
+    if (func != NULL) {
+        new = _PyObject_CallNoArg(func);
+        Py_DECREF(func);
+        if (new == NULL)
+            return NULL;
+        if (!PyBytes_Check(new)) {
+            PyErr_Format(PyExc_TypeError,
+                         "__bytes__ returned non-bytes (type %.200s)",
+                         Py_TYPE(new)->tp_name);
+            Py_DECREF(new);
+            return NULL;
+        }
+        return new;
+    }
+    else if (PyErr_Occurred())
+        return NULL;
+
+    if (PyUnicode_Check(x)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "string argument without an encoding");
+        return NULL;
+    }
+    /* Is it an integer? */
+    if (PyIndex_Check(x)) {
+        size = PyNumber_AsSsize_t(x, PyExc_OverflowError);
+        if (size == -1 && PyErr_Occurred()) {
+            if (PyErr_ExceptionMatches(PyExc_OverflowError))
+                return NULL;
+            PyErr_Clear();  /* fall through */
+        }
+        else {
+            if (size < 0) {
+                PyErr_SetString(PyExc_ValueError, "negative count");
+                return NULL;
+            }
+            new = _PyBytes_FromSize(size, 1);
+            if (new == NULL)
+                return NULL;
+            return new;
+        }
+    }
+
+    return PyBytes_FromObject(x);
+}
+
+static PyObject*
+_PyBytes_FromBuffer(PyObject *x)
+{
+    PyObject *new;
+    Py_buffer view;
+
+    if (PyObject_GetBuffer(x, &view, PyBUF_FULL_RO) < 0)
+        return NULL;
+
+    new = PyBytes_FromStringAndSize(NULL, view.len);
+    if (!new)
+        goto fail;
+    if (PyBuffer_ToContiguous(((PyBytesObject *)new)->ob_sval,
+                &view, view.len, 'C') < 0)
+        goto fail;
+    PyBuffer_Release(&view);
+    return new;
+
+fail:
+    Py_XDECREF(new);
+    PyBuffer_Release(&view);
+    return NULL;
+}
+
+#define _PyBytes_FROM_LIST_BODY(x, GET_ITEM)                                \
+    do {                                                                    \
+        PyObject *bytes;                                                    \
+        Py_ssize_t i;                                                       \
+        Py_ssize_t value;                                                   \
+        char *str;                                                          \
+        PyObject *item;                                                     \
+                                                                            \
+        bytes = PyBytes_FromStringAndSize(NULL, Py_SIZE(x));                \
+        if (bytes == NULL)                                                  \
+            return NULL;                                                    \
+        str = ((PyBytesObject *)bytes)->ob_sval;                            \
+                                                                            \
+        for (i = 0; i < Py_SIZE(x); i++) {                                  \
+            item = GET_ITEM((x), i);                                        \
+            value = PyNumber_AsSsize_t(item, NULL);                         \
+            if (value == -1 && PyErr_Occurred())                            \
+                goto error;                                                 \
+                                                                            \
+            if (value < 0 || value >= 256) {                                \
+                PyErr_SetString(PyExc_ValueError,                           \
+                                "bytes must be in range(0, 256)");          \
+                goto error;                                                 \
+            }                                                               \
+            *str++ = (char) value;                                          \
+        }                                                                   \
+        return bytes;                                                       \
+                                                                            \
+    error:                                                                  \
+        Py_DECREF(bytes);                                                   \
+        return NULL;                                                        \
+    } while (0)
+
+static PyObject*
+_PyBytes_FromList(PyObject *x)
+{
+    _PyBytes_FROM_LIST_BODY(x, PyList_GET_ITEM);
+}
+
+static PyObject*
+_PyBytes_FromTuple(PyObject *x)
+{
+    _PyBytes_FROM_LIST_BODY(x, PyTuple_GET_ITEM);
+}
+
+static PyObject *
+_PyBytes_FromIterator(PyObject *it, PyObject *x)
+{
+    char *str;
+    Py_ssize_t i, size;
+    _PyBytesWriter writer;
+
+    /* For iterator version, create a string object and resize as needed */
+    size = PyObject_LengthHint(x, 64);
+    if (size == -1 && PyErr_Occurred())
+        return NULL;
+
+    _PyBytesWriter_Init(&writer);
+    str = _PyBytesWriter_Alloc(&writer, size);
+    if (str == NULL)
+        return NULL;
+    writer.overallocate = 1;
+    size = writer.allocated;
+
+    /* Run the iterator to exhaustion */
+    for (i = 0; ; i++) {
+        PyObject *item;
+        Py_ssize_t value;
+
+        /* Get the next item */
+        item = PyIter_Next(it);
+        if (item == NULL) {
+            if (PyErr_Occurred())
+                goto error;
+            break;
+        }
+
+        /* Interpret it as an int (__index__) */
+        value = PyNumber_AsSsize_t(item, NULL);
+        Py_DECREF(item);
+        if (value == -1 && PyErr_Occurred())
+            goto error;
+
+        /* Range check */
+        if (value < 0 || value >= 256) {
+            PyErr_SetString(PyExc_ValueError,
+                            "bytes must be in range(0, 256)");
+            goto error;
+        }
+
+        /* Append the byte */
+        if (i >= size) {
+            str = _PyBytesWriter_Resize(&writer, str, size+1);
+            if (str == NULL)
+                return NULL;
+            size = writer.allocated;
+        }
+        *str++ = (char) value;
+    }
+
+    return _PyBytesWriter_Finish(&writer, str);
+
+  error:
+    _PyBytesWriter_Dealloc(&writer);
+    return NULL;
+}
+
+PyObject *
+PyBytes_FromObject(PyObject *x)
+{
+    PyObject *it, *result;
+
+    if (x == NULL) {
+        PyErr_BadInternalCall();
+        return NULL;
+    }
+
+    if (PyBytes_CheckExact(x)) {
+        Py_INCREF(x);
+        return x;
+    }
+
+    /* Use the modern buffer interface */
+    if (PyObject_CheckBuffer(x))
+        return _PyBytes_FromBuffer(x);
+
+    if (PyList_CheckExact(x))
+        return _PyBytes_FromList(x);
+
+    if (PyTuple_CheckExact(x))
+        return _PyBytes_FromTuple(x);
+
+    if (!PyUnicode_Check(x)) {
+        it = PyObject_GetIter(x);
+        if (it != NULL) {
+            result = _PyBytes_FromIterator(it, x);
+            Py_DECREF(it);
+            return result;
+        }
+    }
+
+    PyErr_Format(PyExc_TypeError,
+                 "cannot convert '%.200s' object to bytes",
+                 x->ob_type->tp_name);
+    return NULL;
+}
+
+static PyObject *
+bytes_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    PyObject *tmp, *pnew;
+    Py_ssize_t n;
+
+    assert(PyType_IsSubtype(type, &PyBytes_Type));
+    tmp = bytes_new(&PyBytes_Type, args, kwds);
+    if (tmp == NULL)
+        return NULL;
+    assert(PyBytes_Check(tmp));
+    n = PyBytes_GET_SIZE(tmp);
+    pnew = type->tp_alloc(type, n);
+    if (pnew != NULL) {
+        memcpy(PyBytes_AS_STRING(pnew),
+                  PyBytes_AS_STRING(tmp), n+1);
+        ((PyBytesObject *)pnew)->ob_shash =
+            ((PyBytesObject *)tmp)->ob_shash;
+    }
+    Py_DECREF(tmp);
+    return pnew;
+}
+
+PyDoc_STRVAR(bytes_doc,
+"bytes(iterable_of_ints) -> bytes\n\
+bytes(string, encoding[, errors]) -> bytes\n\
+bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer\n\
+bytes(int) -> bytes object of size given by the parameter initialized with null bytes\n\
+bytes() -> empty bytes object\n\
+\n\
+Construct an immutable array of bytes from:\n\
+  - an iterable yielding integers in range(256)\n\
+  - a text string encoded using the specified encoding\n\
+  - any object implementing the buffer API.\n\
+  - an integer");
+
+static PyObject *bytes_iter(PyObject *seq);
+
+PyTypeObject PyBytes_Type = {
+    PyVarObject_HEAD_INIT(&PyType_Type, 0)
+    "bytes",
+    PyBytesObject_SIZE,
+    sizeof(char),
+    bytes_dealloc,                      /* tp_dealloc */
+    0,                                          /* tp_print */
+    0,                                          /* tp_getattr */
+    0,                                          /* tp_setattr */
+    0,                                          /* tp_reserved */
+    (reprfunc)bytes_repr,                       /* tp_repr */
+    &bytes_as_number,                           /* tp_as_number */
+    &bytes_as_sequence,                         /* tp_as_sequence */
+    &bytes_as_mapping,                          /* tp_as_mapping */
+    (hashfunc)bytes_hash,                       /* tp_hash */
+    0,                                          /* tp_call */
+    bytes_str,                                  /* tp_str */
+    PyObject_GenericGetAttr,                    /* tp_getattro */
+    0,                                          /* tp_setattro */
+    &bytes_as_buffer,                           /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
+        Py_TPFLAGS_BYTES_SUBCLASS,              /* tp_flags */
+    bytes_doc,                                  /* tp_doc */
+    0,                                          /* tp_traverse */
+    0,                                          /* tp_clear */
+    (richcmpfunc)bytes_richcompare,             /* tp_richcompare */
+    0,                                          /* tp_weaklistoffset */
+    bytes_iter,                                 /* tp_iter */
+    0,                                          /* tp_iternext */
+    bytes_methods,                              /* tp_methods */
+    0,                                          /* tp_members */
+    0,                                          /* tp_getset */
+    &PyBaseObject_Type,                         /* tp_base */
+    0,                                          /* tp_dict */
+    0,                                          /* tp_descr_get */
+    0,                                          /* tp_descr_set */
+    0,                                          /* tp_dictoffset */
+    0,                                          /* tp_init */
+    0,                                          /* tp_alloc */
+    bytes_new,                                  /* tp_new */
+    PyObject_Del,                               /* tp_free */
+};
+
+void
+PyBytes_Concat(PyObject **pv, PyObject *w)
+{
+    assert(pv != NULL);
+    if (*pv == NULL)
+        return;
+    if (w == NULL) {
+        Py_CLEAR(*pv);
+        return;
+    }
+
+    if (Py_REFCNT(*pv) == 1 && PyBytes_CheckExact(*pv)) {
+        /* Only one reference, so we can resize in place */
+        Py_ssize_t oldsize;
+        Py_buffer wb;
+
+        wb.len = -1;
+        if (PyObject_GetBuffer(w, &wb, PyBUF_SIMPLE) != 0) {
+            PyErr_Format(PyExc_TypeError, "can't concat %.100s to %.100s",
+                         Py_TYPE(w)->tp_name, Py_TYPE(*pv)->tp_name);
+            Py_CLEAR(*pv);
+            return;
+        }
+
+        oldsize = PyBytes_GET_SIZE(*pv);
+        if (oldsize > PY_SSIZE_T_MAX - wb.len) {
+            PyErr_NoMemory();
+            goto error;
+        }
+        if (_PyBytes_Resize(pv, oldsize + wb.len) < 0)
+            goto error;
+
+        memcpy(PyBytes_AS_STRING(*pv) + oldsize, wb.buf, wb.len);
+        PyBuffer_Release(&wb);
+        return;
+
+      error:
+        PyBuffer_Release(&wb);
+        Py_CLEAR(*pv);
+        return;
+    }
+
+    else {
+        /* Multiple references, need to create new object */
+        PyObject *v;
+        v = bytes_concat(*pv, w);
+        Py_SETREF(*pv, v);
+    }
+}
+
+void
+PyBytes_ConcatAndDel(PyObject **pv, PyObject *w)
+{
+    PyBytes_Concat(pv, w);
+    Py_XDECREF(w);
+}
+
+
+/* The following function breaks the notion that bytes are immutable:
+   it changes the size of a bytes object.  We get away with this only if there
+   is only one module referencing the object.  You can also think of it
+   as creating a new bytes object and destroying the old one, only
+   more efficiently.  In any case, don't use this if the bytes object may
+   already be known to some other part of the code...
+   Note that if there's not enough memory to resize the bytes object, the
+   original bytes object at *pv is deallocated, *pv is set to NULL, an "out of
+   memory" exception is set, and -1 is returned.  Else (on success) 0 is
+   returned, and the value in *pv may or may not be the same as on input.
+   As always, an extra byte is allocated for a trailing \0 byte (newsize
+   does *not* include that), and a trailing \0 byte is stored.
+*/
+
+int
+_PyBytes_Resize(PyObject **pv, Py_ssize_t newsize)
+{
+    PyObject *v;
+    PyBytesObject *sv;
+    v = *pv;
+    if (!PyBytes_Check(v) || newsize < 0) {
+        goto error;
+    }
+    if (Py_SIZE(v) == newsize) {
+        /* return early if newsize equals to v->ob_size */
+        return 0;
+    }
+    if (Py_REFCNT(v) != 1) {
+        goto error;
+    }
+    /* XXX UNREF/NEWREF interface should be more symmetrical */
+    _Py_DEC_REFTOTAL;
+    _Py_ForgetReference(v);
+    *pv = (PyObject *)
+        PyObject_REALLOC(v, PyBytesObject_SIZE + newsize);
+    if (*pv == NULL) {
+        PyObject_Del(v);
+        PyErr_NoMemory();
+        return -1;
+    }
+    _Py_NewReference(*pv);
+    sv = (PyBytesObject *) *pv;
+    Py_SIZE(sv) = newsize;
+    sv->ob_sval[newsize] = '\0';
+    sv->ob_shash = -1;          /* invalidate cached hash value */
+    return 0;
+error:
+    *pv = 0;
+    Py_DECREF(v);
+    PyErr_BadInternalCall();
+    return -1;
+}
+
+void
+PyBytes_Fini(void)
+{
+    int i;
+    for (i = 0; i < UCHAR_MAX + 1; i++)
+        Py_CLEAR(characters[i]);
+    Py_CLEAR(nullstring);
+}
+
+/*********************** Bytes Iterator ****************************/
+
+typedef struct {
+    PyObject_HEAD
+    Py_ssize_t it_index;
+    PyBytesObject *it_seq; /* Set to NULL when iterator is exhausted */
+} striterobject;
+
+static void
+striter_dealloc(striterobject *it)
+{
+    _PyObject_GC_UNTRACK(it);
+    Py_XDECREF(it->it_seq);
+    PyObject_GC_Del(it);
+}
+
+static int
+striter_traverse(striterobject *it, visitproc visit, void *arg)
+{
+    Py_VISIT(it->it_seq);
+    return 0;
+}
+
+static PyObject *
+striter_next(striterobject *it)
+{
+    PyBytesObject *seq;
+    PyObject *item;
+
+    assert(it != NULL);
+    seq = it->it_seq;
+    if (seq == NULL)
+        return NULL;
+    assert(PyBytes_Check(seq));
+
+    if (it->it_index < PyBytes_GET_SIZE(seq)) {
+        item = PyLong_FromLong(
+            (unsigned char)seq->ob_sval[it->it_index]);
+        if (item != NULL)
+            ++it->it_index;
+        return item;
+    }
+
+    it->it_seq = NULL;
+    Py_DECREF(seq);
+    return NULL;
+}
+
+static PyObject *
+striter_len(striterobject *it)
+{
+    Py_ssize_t len = 0;
+    if (it->it_seq)
+        len = PyBytes_GET_SIZE(it->it_seq) - it->it_index;
+    return PyLong_FromSsize_t(len);
+}
+
+PyDoc_STRVAR(length_hint_doc,
+             "Private method returning an estimate of len(list(it)).");
+
+static PyObject *
+striter_reduce(striterobject *it)
+{
+    if (it->it_seq != NULL) {
+        return Py_BuildValue("N(O)n", _PyObject_GetBuiltin("iter"),
+                             it->it_seq, it->it_index);
+    } else {
+        return Py_BuildValue("N(())", _PyObject_GetBuiltin("iter"));
+    }
+}
+
+PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
+
+static PyObject *
+striter_setstate(striterobject *it, PyObject *state)
+{
+    Py_ssize_t index = PyLong_AsSsize_t(state);
+    if (index == -1 && PyErr_Occurred())
+        return NULL;
+    if (it->it_seq != NULL) {
+        if (index < 0)
+            index = 0;
+        else if (index > PyBytes_GET_SIZE(it->it_seq))
+            index = PyBytes_GET_SIZE(it->it_seq); /* iterator exhausted */
+        it->it_index = index;
+    }
+    Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(setstate_doc, "Set state information for unpickling.");
+
+static PyMethodDef striter_methods[] = {
+    {"__length_hint__", (PyCFunction)striter_len, METH_NOARGS,
+     length_hint_doc},
+    {"__reduce__",      (PyCFunction)striter_reduce, METH_NOARGS,
+     reduce_doc},
+    {"__setstate__",    (PyCFunction)striter_setstate, METH_O,
+     setstate_doc},
+    {NULL,              NULL}           /* sentinel */
+};
+
+PyTypeObject PyBytesIter_Type = {
+    PyVarObject_HEAD_INIT(&PyType_Type, 0)
+    "bytes_iterator",                           /* tp_name */
+    sizeof(striterobject),                      /* tp_basicsize */
+    0,                                          /* tp_itemsize */
+    /* methods */
+    (destructor)striter_dealloc,                /* tp_dealloc */
+    0,                                          /* tp_print */
+    0,                                          /* tp_getattr */
+    0,                                          /* tp_setattr */
+    0,                                          /* tp_reserved */
+    0,                                          /* tp_repr */
+    0,                                          /* tp_as_number */
+    0,                                          /* tp_as_sequence */
+    0,                                          /* tp_as_mapping */
+    0,                                          /* tp_hash */
+    0,                                          /* tp_call */
+    0,                                          /* tp_str */
+    PyObject_GenericGetAttr,                    /* tp_getattro */
+    0,                                          /* tp_setattro */
+    0,                                          /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
+    0,                                          /* tp_doc */
+    (traverseproc)striter_traverse,     /* tp_traverse */
+    0,                                          /* tp_clear */
+    0,                                          /* tp_richcompare */
+    0,                                          /* tp_weaklistoffset */
+    PyObject_SelfIter,                          /* tp_iter */
+    (iternextfunc)striter_next,                 /* tp_iternext */
+    striter_methods,                            /* tp_methods */
+    0,
+};
+
+static PyObject *
+bytes_iter(PyObject *seq)
+{
+    striterobject *it;
+
+    if (!PyBytes_Check(seq)) {
+        PyErr_BadInternalCall();
+        return NULL;
+    }
+    it = PyObject_GC_New(striterobject, &PyBytesIter_Type);
+    if (it == NULL)
+        return NULL;
+    it->it_index = 0;
+    Py_INCREF(seq);
+    it->it_seq = (PyBytesObject *)seq;
+    _PyObject_GC_TRACK(it);
+    return (PyObject *)it;
+}
+
+
+/* _PyBytesWriter API */
+
+#ifdef MS_WINDOWS
+   /* On Windows, overallocate by 50% is the best factor */
+#  define OVERALLOCATE_FACTOR 2
+#else
+   /* On Linux, overallocate by 25% is the best factor */
+#  define OVERALLOCATE_FACTOR 4
+#endif
+
+void
+_PyBytesWriter_Init(_PyBytesWriter *writer)
+{
+    /* Set all attributes before small_buffer to 0 */
+    memset(writer, 0, offsetof(_PyBytesWriter, small_buffer));
+#ifdef Py_DEBUG
+    memset(writer->small_buffer, 0xCB, sizeof(writer->small_buffer));
+#endif
+}
+
+void
+_PyBytesWriter_Dealloc(_PyBytesWriter *writer)
+{
+    Py_CLEAR(writer->buffer);
+}
+
+Py_LOCAL_INLINE(char*)
+_PyBytesWriter_AsString(_PyBytesWriter *writer)
+{
+    if (writer->use_small_buffer) {
+        assert(writer->buffer == NULL);
+        return writer->small_buffer;
+    }
+    else if (writer->use_bytearray) {
+        assert(writer->buffer != NULL);
+        return PyByteArray_AS_STRING(writer->buffer);
+    }
+    else {
+        assert(writer->buffer != NULL);
+        return PyBytes_AS_STRING(writer->buffer);
+    }
+}
+
+Py_LOCAL_INLINE(Py_ssize_t)
+_PyBytesWriter_GetSize(_PyBytesWriter *writer, char *str)
+{
+    char *start = _PyBytesWriter_AsString(writer);
+    assert(str != NULL);
+    assert(str >= start);
+    assert(str - start <= writer->allocated);
+    return str - start;
+}
+
+Py_LOCAL_INLINE(void)
+_PyBytesWriter_CheckConsistency(_PyBytesWriter *writer, char *str)
+{
+#ifdef Py_DEBUG
+    char *start, *end;
+
+    if (writer->use_small_buffer) {
+        assert(writer->buffer == NULL);
+    }
+    else {
+        assert(writer->buffer != NULL);
+        if (writer->use_bytearray)
+            assert(PyByteArray_CheckExact(writer->buffer));
+        else
+            assert(PyBytes_CheckExact(writer->buffer));
+        assert(Py_REFCNT(writer->buffer) == 1);
+    }
+
+    if (writer->use_bytearray) {
+        /* bytearray has its own overallocation algorithm,
+           writer overallocation must be disabled */
+        assert(!writer->overallocate);
+    }
+
+    assert(0 <= writer->allocated);
+    assert(0 <= writer->min_size && writer->min_size <= writer->allocated);
+    /* the last byte must always be null */
+    start = _PyBytesWriter_AsString(writer);
+    assert(start[writer->allocated] == 0);
+
+    end = start + writer->allocated;
+    assert(str != NULL);
+    assert(start <= str && str <= end);
+#endif
+}
+
+void*
+_PyBytesWriter_Resize(_PyBytesWriter *writer, void *str, Py_ssize_t size)
+{
+    Py_ssize_t allocated, pos;
+
+    _PyBytesWriter_CheckConsistency(writer, str);
+    assert(writer->allocated < size);
+
+    allocated = size;
+    if (writer->overallocate
+        && allocated <= (PY_SSIZE_T_MAX - allocated / OVERALLOCATE_FACTOR)) {
+        /* overallocate to limit the number of realloc() */
+        allocated += allocated / OVERALLOCATE_FACTOR;
+    }
+
+    pos = _PyBytesWriter_GetSize(writer, str);
+    if (!writer->use_small_buffer) {
+        if (writer->use_bytearray) {
+            if (PyByteArray_Resize(writer->buffer, allocated))
+                goto error;
+            /* writer->allocated can be smaller than writer->buffer->ob_alloc,
+               but we cannot use ob_alloc because bytes may need to be moved
+               to use the whole buffer. bytearray uses an internal optimization
+               to avoid moving or copying bytes when bytes are removed at the
+               beginning (ex: del bytearray[:1]). */
+        }
+        else {
+            if (_PyBytes_Resize(&writer->buffer, allocated))
+                goto error;
+        }
+    }
+    else {
+        /* convert from stack buffer to bytes object buffer */
+        assert(writer->buffer == NULL);
+
+        if (writer->use_bytearray)
+            writer->buffer = PyByteArray_FromStringAndSize(NULL, allocated);
+        else
+            writer->buffer = PyBytes_FromStringAndSize(NULL, allocated);
+        if (writer->buffer == NULL)
+            goto error;
+
+        if (pos != 0) {
+            char *dest;
+            if (writer->use_bytearray)
+                dest = PyByteArray_AS_STRING(writer->buffer);
+            else
+                dest = PyBytes_AS_STRING(writer->buffer);
+            memcpy(dest,
+                      writer->small_buffer,
+                      pos);
+        }
+
+        writer->use_small_buffer = 0;
+#ifdef Py_DEBUG
+        memset(writer->small_buffer, 0xDB, sizeof(writer->small_buffer));
+#endif
+    }
+    writer->allocated = allocated;
+
+    str = _PyBytesWriter_AsString(writer) + pos;
+    _PyBytesWriter_CheckConsistency(writer, str);
+    return str;
+
+error:
+    _PyBytesWriter_Dealloc(writer);
+    return NULL;
+}
+
+void*
+_PyBytesWriter_Prepare(_PyBytesWriter *writer, void *str, Py_ssize_t size)
+{
+    Py_ssize_t new_min_size;
+
+    _PyBytesWriter_CheckConsistency(writer, str);
+    assert(size >= 0);
+
+    if (size == 0) {
+        /* nothing to do */
+        return str;
+    }
+
+    if (writer->min_size > PY_SSIZE_T_MAX - size) {
+        PyErr_NoMemory();
+        _PyBytesWriter_Dealloc(writer);
+        return NULL;
+    }
+    new_min_size = writer->min_size + size;
+
+    if (new_min_size > writer->allocated)
+        str = _PyBytesWriter_Resize(writer, str, new_min_size);
+
+    writer->min_size = new_min_size;
+    return str;
+}
+
+/* Allocate the buffer to write size bytes.
+   Return the pointer to the beginning of buffer data.
+   Raise an exception and return NULL on error. */
+void*
+_PyBytesWriter_Alloc(_PyBytesWriter *writer, Py_ssize_t size)
+{
+    /* ensure that _PyBytesWriter_Alloc() is only called once */
+    assert(writer->min_size == 0 && writer->buffer == NULL);
+    assert(size >= 0);
+
+    writer->use_small_buffer = 1;
+#ifdef Py_DEBUG
+    writer->allocated = sizeof(writer->small_buffer) - 1;
+    /* In debug mode, don't use the full small buffer because it is less
+       efficient than bytes and bytearray objects to detect buffer underflow
+       and buffer overflow. Use 10 bytes of the small buffer to test also
+       code using the smaller buffer in debug mode.
+
+       Don't modify the _PyBytesWriter structure (use a shorter small buffer)
+       in debug mode to also be able to detect stack overflow when running
+       tests in debug mode. The _PyBytesWriter is large (more than 512 bytes),
+       if Py_EnterRecursiveCall() is not used in deep C callback, we may hit a
+       stack overflow. */
+    writer->allocated = Py_MIN(writer->allocated, 10);
+    /* _PyBytesWriter_CheckConsistency() requires the last byte to be 0,
+       to detect buffer overflow */
+    writer->small_buffer[writer->allocated] = 0;
+#else
+    writer->allocated = sizeof(writer->small_buffer);
+#endif
+    return _PyBytesWriter_Prepare(writer, writer->small_buffer, size);
+}
+
+PyObject *
+_PyBytesWriter_Finish(_PyBytesWriter *writer, void *str)
+{
+    Py_ssize_t size;
+    PyObject *result;
+
+    _PyBytesWriter_CheckConsistency(writer, str);
+
+    size = _PyBytesWriter_GetSize(writer, str);
+    if (size == 0 && !writer->use_bytearray) {
+        Py_CLEAR(writer->buffer);
+        /* Get the empty byte string singleton */
+        result = PyBytes_FromStringAndSize(NULL, 0);
+    }
+    else if (writer->use_small_buffer) {
+        if (writer->use_bytearray) {
+            result = PyByteArray_FromStringAndSize(writer->small_buffer, size);
+        }
+        else {
+            result = PyBytes_FromStringAndSize(writer->small_buffer, size);
+        }
+    }
+    else {
+        result = writer->buffer;
+        writer->buffer = NULL;
+
+        if (size != writer->allocated) {
+            if (writer->use_bytearray) {
+                if (PyByteArray_Resize(result, size)) {
+                    Py_DECREF(result);
+                    return NULL;
+                }
+            }
+            else {
+                if (_PyBytes_Resize(&result, size)) {
+                    assert(result == NULL);
+                    return NULL;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+void*
+_PyBytesWriter_WriteBytes(_PyBytesWriter *writer, void *ptr,
+                          const void *bytes, Py_ssize_t size)
+{
+    char *str = (char *)ptr;
+
+    str = _PyBytesWriter_Prepare(writer, str, size);
+    if (str == NULL)
+        return NULL;
+
+    memcpy(str, bytes, size);
+    str += size;
+
+    return str;
+}
diff --git a/Objects/classobject.c b/Objects/classobject.c
index 738e613..02d7cfd 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -88,9 +88,9 @@
             base = PyTuple_GET_ITEM(bases, i);
             if (!PyClass_Check(base)) {
                 if (PyCallable_Check(
-                    (PyObject *) base->ob_type))
+                        (PyObject *) Py_TYPE(base)))
                     return PyObject_CallFunctionObjArgs(
-                        (PyObject *) base->ob_type,
+                        (PyObject *) Py_TYPE(base),
                         name, bases, dict, NULL);
                 PyErr_SetString(PyExc_TypeError,
                     "PyClass_New: base must be a class");
@@ -265,7 +265,7 @@
                      PyString_AS_STRING(op->cl_name), sname);
         return NULL;
     }
-    f = TP_DESCR_GET(v->ob_type);
+    f = TP_DESCR_GET(Py_TYPE(v));
     if (f == NULL)
         Py_INCREF(v);
     else
@@ -442,8 +442,7 @@
 }
 
 PyTypeObject PyClass_Type = {
-    PyObject_HEAD_INIT(&PyType_Type)
-    0,
+    PyVarObject_HEAD_INIT(&PyType_Type, 0)
     "classobj",
     sizeof(PyClassObject),
     0,
@@ -639,9 +638,9 @@
         PyObject_ClearWeakRefs((PyObject *) inst);
 
     /* Temporarily resurrect the object. */
-    assert(inst->ob_type == &PyInstance_Type);
-    assert(inst->ob_refcnt == 0);
-    inst->ob_refcnt = 1;
+    assert(Py_TYPE(inst) == &PyInstance_Type);
+    assert(Py_REFCNT(inst) == 0);
+    Py_REFCNT(inst) = 1;
 
     /* Save the current exception, if any. */
     PyErr_Fetch(&error_type, &error_value, &error_traceback);
@@ -665,8 +664,8 @@
     /* Undo the temporary resurrection; can't use DECREF here, it would
      * cause a recursive call.
      */
-    assert(inst->ob_refcnt > 0);
-    if (--inst->ob_refcnt == 0) {
+    assert(Py_REFCNT(inst) > 0);
+    if (--Py_REFCNT(inst) == 0) {
 
         /* New weakrefs could be created during the finalizer call.
             If this occurs, clear them out without calling their
@@ -682,12 +681,12 @@
         PyObject_GC_Del(inst);
     }
     else {
-        Py_ssize_t refcnt = inst->ob_refcnt;
+        Py_ssize_t refcnt = Py_REFCNT(inst);
         /* __del__ resurrected it!  Make it look like the original
          * Py_DECREF never happened.
          */
         _Py_NewReference((PyObject *)inst);
-        inst->ob_refcnt = refcnt;
+        Py_REFCNT(inst) = refcnt;
         _PyObject_GC_TRACK(inst);
         /* If Py_REF_DEBUG, _Py_NewReference bumped _Py_RefTotal, so
          * we need to undo that. */
@@ -699,8 +698,8 @@
          * undone.
          */
 #ifdef COUNT_ALLOCS
-        --inst->ob_type->tp_frees;
-        --inst->ob_type->tp_allocs;
+        --Py_TYPE(inst)->tp_frees;
+        --Py_TYPE(inst)->tp_allocs;
 #endif
     }
 }
@@ -756,7 +755,7 @@
     v = class_lookup(inst->in_class, name, &klass);
     if (v != NULL) {
         Py_INCREF(v);
-        f = TP_DESCR_GET(v->ob_type);
+        f = TP_DESCR_GET(Py_TYPE(v));
         if (f != NULL) {
             PyObject *w = f(v, (PyObject *)inst,
                             (PyObject *)(inst->in_class));
@@ -1010,9 +1009,9 @@
     Py_DECREF(func);
     if (res == NULL)
         return -1;
-    if (PyInt_Check(res) || PyLong_Check(res))
+    if (_PyAnyInt_Check(res))
         /* This already converts a -1 result to -2. */
-        outcome = res->ob_type->tp_hash(res);
+        outcome = Py_TYPE(res)->tp_hash(res);
     else {
         PyErr_SetString(PyExc_TypeError,
                         "__hash__() should return an int");
@@ -1500,7 +1499,7 @@
     }
     v1 = PyTuple_GetItem(coerced, 0);
     w = PyTuple_GetItem(coerced, 1);
-    if (v1->ob_type == v->ob_type && PyInstance_Check(v)) {
+    if (Py_TYPE(v1) == Py_TYPE(v) && PyInstance_Check(v)) {
         /* prevent recursion if __coerce__ returns self as the first
          * argument */
         result = generic_binary_op(v1, w, opname);
@@ -2077,7 +2076,7 @@
             PyErr_Format(PyExc_TypeError,
                          "__iter__ returned non-iterator "
                          "of type '%.100s'",
-                         res->ob_type->tp_name);
+                         Py_TYPE(res)->tp_name);
             Py_DECREF(res);
             res = NULL;
         }
@@ -2201,8 +2200,7 @@
 };
 
 PyTypeObject PyInstance_Type = {
-    PyObject_HEAD_INIT(&PyType_Type)
-    0,
+    PyVarObject_HEAD_INIT(&PyType_Type, 0)
     "instance",
     sizeof(PyInstanceObject),
     0,
@@ -2321,7 +2319,7 @@
 instancemethod_getattro(PyObject *obj, PyObject *name)
 {
     PyMethodObject *im = (PyMethodObject *)obj;
-    PyTypeObject *tp = obj->ob_type;
+    PyTypeObject *tp = Py_TYPE(obj);
     PyObject *descr = NULL;
 
     if (PyType_HasFeature(tp, Py_TPFLAGS_HAVE_CLASS)) {
@@ -2333,9 +2331,9 @@
     }
 
     if (descr != NULL) {
-        descrgetfunc f = TP_DESCR_GET(descr->ob_type);
+        descrgetfunc f = TP_DESCR_GET(Py_TYPE(descr));
         if (f != NULL)
-            return f(descr, obj, (PyObject *)obj->ob_type);
+            return f(descr, obj, (PyObject *)Py_TYPE(obj));
         else {
             Py_INCREF(descr);
             return descr;
@@ -2538,7 +2536,7 @@
     if (klass == NULL) {
         /* This function cannot return an exception */
         PyErr_Clear();
-        klass = (PyObject *)(inst->ob_type);
+        klass = (PyObject *)Py_TYPE(inst);
         Py_INCREF(klass);
     }
     getclassname(klass, buf, bufsize);
@@ -2631,8 +2629,7 @@
 }
 
 PyTypeObject PyMethod_Type = {
-    PyObject_HEAD_INIT(&PyType_Type)
-    0,
+    PyVarObject_HEAD_INIT(&PyType_Type, 0)
     "instancemethod",
     sizeof(PyMethodObject),
     0,
diff --git a/Objects/codeobject.c b/Objects/codeobject.c
index a66aa69..d50e4c6 100644
--- a/Objects/codeobject.c
+++ b/Objects/codeobject.c
@@ -423,10 +423,9 @@
 
     /* Py_None is a singleton */
     if (op == Py_None
-       || PyInt_CheckExact(op)
-       || PyLong_CheckExact(op)
-       || PyBool_Check(op)
-       || PyBytes_CheckExact(op)
+        || _PyAnyInt_CheckExact(op)
+        || PyBool_Check(op)
+        || PyBytes_CheckExact(op)
 #ifdef Py_USING_UNICODE
        || PyUnicode_CheckExact(op)
 #endif
diff --git a/Objects/complexobject.c b/Objects/complexobject.c
index ef18e3f..871eea3 100644
--- a/Objects/complexobject.c
+++ b/Objects/complexobject.c
@@ -796,7 +796,7 @@
          * NotImplemented.  Only comparisons with core numeric types raise
          * TypeError.
          */
-        if (PyInt_Check(w) || PyLong_Check(w) ||
+        if (_PyAnyInt_Check(w) ||
             PyFloat_Check(w) || PyComplex_Check(w)) {
             PyErr_SetString(PyExc_TypeError,
                             "no ordering relation is defined "
@@ -809,7 +809,7 @@
     assert(PyComplex_Check(v));
     TO_COMPLEX(v, i);
 
-    if (PyInt_Check(w) || PyLong_Check(w)) {
+    if (_PyAnyInt_Check(w)) {
         /* Check for 0.0 imaginary part first to avoid the rich
          * comparison when possible.
          */
@@ -1232,11 +1232,11 @@
             return NULL;
         }
         cr.real = PyFloat_AsDouble(tmp);
-        cr.imag = 0.0; /* Shut up compiler warning */
+        cr.imag = 0.0;
         Py_DECREF(tmp);
     }
     if (i == NULL) {
-        ci.real = 0.0;
+        ci.real = cr.imag;
     }
     else if (PyComplex_Check(i)) {
         ci = ((PyComplexObject*)i)->cval;
@@ -1258,7 +1258,7 @@
     if (ci_is_complex) {
         cr.real -= ci.imag;
     }
-    if (cr_is_complex) {
+    if (cr_is_complex && i != NULL) {
         ci.real += cr.imag;
     }
     return complex_subtype_from_doubles(type, cr.real, ci.real);
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index e3e4765..c544ecd 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -848,13 +848,28 @@
     return dict_set_item_by_hash_or_entry(op, key, hash, NULL, value);
 }
 
+static int
+delitem_common(PyDictObject *mp, PyDictEntry *ep)
+{
+    PyObject *old_value, *old_key;
+
+    old_key = ep->me_key;
+    Py_INCREF(dummy);
+    ep->me_key = dummy;
+    old_value = ep->me_value;
+    ep->me_value = NULL;
+    mp->ma_used--;
+    Py_DECREF(old_value);
+    Py_DECREF(old_key);
+    return 0;
+}
+
 int
 PyDict_DelItem(PyObject *op, PyObject *key)
 {
     register PyDictObject *mp;
     register long hash;
     register PyDictEntry *ep;
-    PyObject *old_value, *old_key;
 
     if (!PyDict_Check(op)) {
         PyErr_BadInternalCall();
@@ -875,15 +890,45 @@
         set_key_error(key);
         return -1;
     }
-    old_key = ep->me_key;
-    Py_INCREF(dummy);
-    ep->me_key = dummy;
-    old_value = ep->me_value;
-    ep->me_value = NULL;
-    mp->ma_used--;
-    Py_DECREF(old_value);
-    Py_DECREF(old_key);
-    return 0;
+
+    return delitem_common(mp, ep);
+}
+
+int
+_PyDict_DelItemIf(PyObject *op, PyObject *key,
+                  int (*predicate)(PyObject *value))
+{
+    register PyDictObject *mp;
+    register long hash;
+    register PyDictEntry *ep;
+    int res;
+
+    if (!PyDict_Check(op)) {
+        PyErr_BadInternalCall();
+        return -1;
+    }
+    assert(key);
+    if (!PyString_CheckExact(key) ||
+        (hash = ((PyStringObject *) key)->ob_shash) == -1) {
+        hash = PyObject_Hash(key);
+        if (hash == -1)
+            return -1;
+    }
+    mp = (PyDictObject *)op;
+    ep = (mp->ma_lookup)(mp, key, hash);
+    if (ep == NULL)
+        return -1;
+    if (ep->me_value == NULL) {
+        set_key_error(key);
+        return -1;
+    }
+    res = predicate(ep->me_value);
+    if (res == -1)
+        return -1;
+    if (res > 0)
+        return delitem_common(mp, ep);
+    else
+        return 0;
 }
 
 void
@@ -1031,6 +1076,7 @@
 {
     register PyDictEntry *ep;
     Py_ssize_t fill = mp->ma_fill;
+    /* bpo-31095: UnTrack is needed before calling any callbacks */
     PyObject_GC_UnTrack(mp);
     Py_TRASHCAN_SAFE_BEGIN(mp)
     for (ep = mp->ma_table; fill > 0; ep++) {
@@ -1391,7 +1437,7 @@
             PyObject *key;
             long hash;
 
-            if (dictresize(mp, Py_SIZE(seq) / 2 * 3)) {
+            if (dictresize(mp, ((PyDictObject *)seq)->ma_used / 2 * 3)) {
                 Py_DECREF(d);
                 return NULL;
             }
@@ -1550,11 +1596,18 @@
         /* Update/merge with this (key, value) pair. */
         key = PySequence_Fast_GET_ITEM(fast, 0);
         value = PySequence_Fast_GET_ITEM(fast, 1);
+        Py_INCREF(key);
+        Py_INCREF(value);
         if (override || PyDict_GetItem(d, key) == NULL) {
             int status = PyDict_SetItem(d, key, value);
-            if (status < 0)
+            if (status < 0) {
+                Py_DECREF(key);
+                Py_DECREF(value);
                 goto Fail;
+            }
         }
+        Py_DECREF(key);
+        Py_DECREF(value);
         Py_DECREF(fast);
         Py_DECREF(item);
     }
@@ -1893,12 +1946,13 @@
             /* ditto for key */
             Py_INCREF(key);
             bval = PyDict_GetItem((PyObject *)b, key);
-            Py_DECREF(key);
             if (bval == NULL) {
+                Py_DECREF(key);
                 Py_DECREF(aval);
                 return 0;
             }
             cmp = PyObject_RichCompareBool(aval, bval, Py_EQ);
+            Py_DECREF(key);
             Py_DECREF(aval);
             if (cmp <= 0)  /* error or not equal */
                 return cmp;
@@ -2523,6 +2577,8 @@
 static void
 dictiter_dealloc(dictiterobject *di)
 {
+    /* bpo-31095: UnTrack is needed before calling any callbacks */
+    _PyObject_GC_UNTRACK(di);
     Py_XDECREF(di->di_dict);
     Py_XDECREF(di->di_result);
     PyObject_GC_Del(di);
@@ -2698,7 +2754,7 @@
 
 static PyObject *dictiter_iternextitem(dictiterobject *di)
 {
-    PyObject *key, *value, *result = di->di_result;
+    PyObject *key, *value, *result;
     register Py_ssize_t i, mask;
     register PyDictEntry *ep;
     PyDictObject *d = di->di_dict;
@@ -2725,22 +2781,27 @@
     if (i > mask)
         goto fail;
 
-    if (result->ob_refcnt == 1) {
-        Py_INCREF(result);
-        Py_DECREF(PyTuple_GET_ITEM(result, 0));
-        Py_DECREF(PyTuple_GET_ITEM(result, 1));
-    } else {
-        result = PyTuple_New(2);
-        if (result == NULL)
-            return NULL;
-    }
     di->len--;
     key = ep[i].me_key;
     value = ep[i].me_value;
     Py_INCREF(key);
     Py_INCREF(value);
-    PyTuple_SET_ITEM(result, 0, key);
-    PyTuple_SET_ITEM(result, 1, value);
+    result = di->di_result;
+    if (Py_REFCNT(result) == 1) {
+        PyObject *oldkey = PyTuple_GET_ITEM(result, 0);
+        PyObject *oldvalue = PyTuple_GET_ITEM(result, 1);
+        PyTuple_SET_ITEM(result, 0, key);  /* steals reference */
+        PyTuple_SET_ITEM(result, 1, value);  /* steals reference */
+        Py_INCREF(result);
+        Py_DECREF(oldkey);
+        Py_DECREF(oldvalue);
+    } else {
+        result = PyTuple_New(2);
+        if (result == NULL)
+            return NULL;
+        PyTuple_SET_ITEM(result, 0, key);  /* steals reference */
+        PyTuple_SET_ITEM(result, 1, value);  /* steals reference */
+    }
     return result;
 
 fail:
@@ -2797,6 +2858,8 @@
 static void
 dictview_dealloc(dictviewobject *dv)
 {
+    /* bpo-31095: UnTrack is needed before calling any callbacks */
+    _PyObject_GC_UNTRACK(dv);
     Py_XDECREF(dv->dv_dict);
     PyObject_GC_Del(dv);
 }
@@ -2942,21 +3005,29 @@
 {
     PyObject *seq;
     PyObject *seq_str;
-    PyObject *result;
+    PyObject *result = NULL;
+    Py_ssize_t rc;
 
+    rc = Py_ReprEnter((PyObject *)dv);
+    if (rc != 0) {
+        return rc > 0 ? PyString_FromString("...") : NULL;
+    }
     seq = PySequence_List((PyObject *)dv);
-    if (seq == NULL)
-        return NULL;
-
+    if (seq == NULL) {
+        goto Done;
+    }
     seq_str = PyObject_Repr(seq);
+    Py_DECREF(seq);
+
     if (seq_str == NULL) {
-        Py_DECREF(seq);
-        return NULL;
+        goto Done;
     }
     result = PyString_FromFormat("%s(%s)", Py_TYPE(dv)->tp_name,
                                  PyString_AS_STRING(seq_str));
     Py_DECREF(seq_str);
-    Py_DECREF(seq);
+
+Done:
+    Py_ReprLeave((PyObject *)dv);
     return result;
 }
 
@@ -3141,6 +3212,7 @@
 static int
 dictitems_contains(dictviewobject *dv, PyObject *obj)
 {
+    int result;
     PyObject *key, *value, *found;
     if (dv->dv_dict == NULL)
         return 0;
@@ -3154,7 +3226,10 @@
             return -1;
         return 0;
     }
-    return PyObject_RichCompareBool(value, found, Py_EQ);
+    Py_INCREF(found);
+    result = PyObject_RichCompareBool(value, found, Py_EQ);
+    Py_DECREF(found);
+    return result;
 }
 
 static PySequenceMethods dictitems_as_sequence = {
diff --git a/Objects/enumobject.c b/Objects/enumobject.c
index 1ef381f..73b656b 100644
--- a/Objects/enumobject.c
+++ b/Objects/enumobject.c
@@ -31,7 +31,7 @@
             Py_DECREF(en);
             return NULL;
         }
-        assert(PyInt_Check(start) || PyLong_Check(start));
+        assert(_PyAnyInt_Check(start));
         en->en_index = PyInt_AsSsize_t(start);
         if (en->en_index == -1 && PyErr_Occurred()) {
             PyErr_Clear();
@@ -87,19 +87,25 @@
 
     if (en->en_longindex == NULL) {
         en->en_longindex = PyInt_FromSsize_t(PY_SSIZE_T_MAX);
-        if (en->en_longindex == NULL)
+        if (en->en_longindex == NULL) {
+            Py_DECREF(next_item);
             return NULL;
+        }
     }
     if (one == NULL) {
         one = PyInt_FromLong(1);
-        if (one == NULL)
+        if (one == NULL) {
+            Py_DECREF(next_item);
             return NULL;
+        }
     }
     next_index = en->en_longindex;
     assert(next_index != NULL);
     stepped_up = PyNumber_Add(next_index, one);
-    if (stepped_up == NULL)
+    if (stepped_up == NULL) {
+        Py_DECREF(next_item);
         return NULL;
+    }
     en->en_longindex = stepped_up;
 
     if (result->ob_refcnt == 1) {
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
index 1929777..224d1ba 100644
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -368,8 +368,7 @@
 
 
 static PyTypeObject _PyExc_BaseException = {
-    PyObject_HEAD_INIT(NULL)
-    0,                          /*ob_size*/
+    PyVarObject_HEAD_INIT(NULL, 0)
     EXC_MODULE_NAME "BaseException", /*tp_name*/
     sizeof(PyBaseExceptionObject), /*tp_basicsize*/
     0,                          /*tp_itemsize*/
@@ -419,8 +418,7 @@
  */
 #define SimpleExtendsException(EXCBASE, EXCNAME, EXCDOC) \
 static PyTypeObject _PyExc_ ## EXCNAME = { \
-    PyObject_HEAD_INIT(NULL) \
-    0, \
+    PyVarObject_HEAD_INIT(NULL, 0) \
     EXC_MODULE_NAME # EXCNAME, \
     sizeof(PyBaseExceptionObject), \
     0, (destructor)BaseException_dealloc, 0, 0, 0, 0, 0, 0, 0, \
@@ -435,8 +433,7 @@
 
 #define MiddlingExtendsException(EXCBASE, EXCNAME, EXCSTORE, EXCDOC) \
 static PyTypeObject _PyExc_ ## EXCNAME = { \
-    PyObject_HEAD_INIT(NULL) \
-    0, \
+    PyVarObject_HEAD_INIT(NULL, 0) \
     EXC_MODULE_NAME # EXCNAME, \
     sizeof(Py ## EXCSTORE ## Object), \
     0, (destructor)EXCSTORE ## _dealloc, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -451,8 +448,7 @@
 
 #define ComplexExtendsException(EXCBASE, EXCNAME, EXCSTORE, EXCDEALLOC, EXCMETHODS, EXCMEMBERS, EXCSTR, EXCDOC) \
 static PyTypeObject _PyExc_ ## EXCNAME = { \
-    PyObject_HEAD_INIT(NULL) \
-    0, \
+    PyVarObject_HEAD_INIT(NULL, 0) \
     EXC_MODULE_NAME # EXCNAME, \
     sizeof(Py ## EXCSTORE ## Object), 0, \
     (destructor)EXCSTORE ## _dealloc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1679,8 +1675,7 @@
 }
 
 static PyTypeObject _PyExc_UnicodeEncodeError = {
-    PyObject_HEAD_INIT(NULL)
-    0,
+    PyVarObject_HEAD_INIT(NULL, 0)
     EXC_MODULE_NAME "UnicodeEncodeError",
     sizeof(PyUnicodeErrorObject), 0,
     (destructor)UnicodeError_dealloc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1764,8 +1759,7 @@
 }
 
 static PyTypeObject _PyExc_UnicodeDecodeError = {
-    PyObject_HEAD_INIT(NULL)
-    0,
+    PyVarObject_HEAD_INIT(NULL, 0)
     EXC_MODULE_NAME "UnicodeDecodeError",
     sizeof(PyUnicodeErrorObject), 0,
     (destructor)UnicodeError_dealloc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1862,8 +1856,7 @@
 }
 
 static PyTypeObject _PyExc_UnicodeTranslateError = {
-    PyObject_HEAD_INIT(NULL)
-    0,
+    PyVarObject_HEAD_INIT(NULL, 0)
     EXC_MODULE_NAME "UnicodeTranslateError",
     sizeof(PyUnicodeErrorObject), 0,
     (destructor)UnicodeError_dealloc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index a7d64ba..b524f09 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -121,10 +121,15 @@
 {
 #if defined(HAVE_FSTAT) && defined(S_IFDIR) && defined(EISDIR)
     struct stat buf;
+    int res;
     if (f->f_fp == NULL)
         return f;
-    if (fstat(fileno(f->f_fp), &buf) == 0 &&
-        S_ISDIR(buf.st_mode)) {
+
+    Py_BEGIN_ALLOW_THREADS
+    res = fstat(fileno(f->f_fp), &buf);
+    Py_END_ALLOW_THREADS
+
+    if (res == 0 && S_ISDIR(buf.st_mode)) {
         char *msg = strerror(EISDIR);
         PyObject *exc = PyObject_CallFunction(PyExc_IOError, "(isO)",
                                               EISDIR, msg, f->f_name);
@@ -427,10 +432,10 @@
     if (local_fp != NULL) {
         local_close = f->f_close;
         if (local_close != NULL && f->unlocked_count > 0) {
-            if (f->ob_refcnt > 0) {
+            if (Py_REFCNT(f) > 0) {
                 PyErr_SetString(PyExc_IOError,
                     "close() called during concurrent "
-                    "operation on the same file object.");
+                    "operation on the same file object");
             } else {
                 /* This should not happen unless someone is
                  * carelessly playing with the PyFileObject
@@ -438,7 +443,7 @@
                  * pointer. */
                 PyErr_SetString(PyExc_SystemError,
                     "PyFileObject locking error in "
-                    "destructor (refcnt <= 0 at close).");
+                    "destructor (refcnt <= 0 at close)");
             }
             return NULL;
         }
@@ -604,7 +609,12 @@
     return NULL;
 }
 
-static void drop_readahead(PyFileObject *);
+static void
+drop_file_readahead(PyFileObject *f)
+{
+    PyMem_FREE(f->f_buf);
+    f->f_buf = NULL;
+}
 
 /* Methods */
 
@@ -627,7 +637,7 @@
     Py_XDECREF(f->f_mode);
     Py_XDECREF(f->f_encoding);
     Py_XDECREF(f->f_errors);
-    drop_readahead(f);
+    drop_file_readahead(f);
     Py_TYPE(f)->tp_free((PyObject *)f);
 }
 
@@ -762,7 +772,7 @@
 
     if (f->f_fp == NULL)
         return err_closed();
-    drop_readahead(f);
+    drop_file_readahead(f);
     whence = 0;
     if (!PyArg_ParseTuple(args, "O|i:seek", &offobj, &whence))
         return NULL;
@@ -1004,7 +1014,13 @@
 #ifdef HAVE_FSTAT
     off_t pos, end;
     struct stat st;
-    if (fstat(fileno(f->f_fp), &st) == 0) {
+    int res;
+    size_t bufsize = 0;
+
+    FILE_BEGIN_ALLOW_THREADS(f)
+    res = fstat(fileno(f->f_fp), &st);
+
+    if (res == 0) {
         end = st.st_size;
         /* The following is not a bug: we really need to call lseek()
            *and* ftell().  The reason is that some stdio libraries
@@ -1015,16 +1031,21 @@
            works.  We can't use the lseek() value either, because we
            need to take the amount of buffered data into account.
            (Yet another reason why stdio stinks. :-) */
+
         pos = lseek(fileno(f->f_fp), 0L, SEEK_CUR);
+
         if (pos >= 0) {
             pos = ftell(f->f_fp);
         }
         if (pos < 0)
             clearerr(f->f_fp);
         if (end > pos && pos >= 0)
-            return currentsize + end - pos + 1;
+            bufsize = currentsize + end - pos + 1;
         /* Add 1 so if the file were to grow we'd notice. */
     }
+    FILE_END_ALLOW_THREADS(f)
+    if (bufsize != 0)
+        return bufsize;
 #endif
     /* Expand the buffer by an amount proportional to the current size,
        giving us amortized linear-time behavior. Use a less-than-double
@@ -2221,12 +2242,16 @@
     {0},
 };
 
+typedef struct {
+    char *buf, *bufptr, *bufend;
+} readaheadbuffer;
+
 static void
-drop_readahead(PyFileObject *f)
+drop_readaheadbuffer(readaheadbuffer *rab)
 {
-    if (f->f_buf != NULL) {
-        PyMem_Free(f->f_buf);
-        f->f_buf = NULL;
+    if (rab->buf != NULL) {
+        PyMem_FREE(rab->buf);
+        rab->buf = NULL;
     }
 }
 
@@ -2234,35 +2259,34 @@
    (unless at EOF) and no more than bufsize.  Returns negative value on
    error, will set MemoryError if bufsize bytes cannot be allocated. */
 static int
-readahead(PyFileObject *f, Py_ssize_t bufsize)
+readahead(PyFileObject *f, readaheadbuffer *rab, Py_ssize_t bufsize)
 {
     Py_ssize_t chunksize;
 
-    if (f->f_buf != NULL) {
-        if( (f->f_bufend - f->f_bufptr) >= 1)
+    if (rab->buf != NULL) {
+        if ((rab->bufend - rab->bufptr) >= 1)
             return 0;
         else
-            drop_readahead(f);
+            drop_readaheadbuffer(rab);
     }
-    if ((f->f_buf = (char *)PyMem_Malloc(bufsize)) == NULL) {
+    if ((rab->buf = PyMem_MALLOC(bufsize)) == NULL) {
         PyErr_NoMemory();
         return -1;
     }
     FILE_BEGIN_ALLOW_THREADS(f)
     errno = 0;
-    chunksize = Py_UniversalNewlineFread(
-        f->f_buf, bufsize, f->f_fp, (PyObject *)f);
+    chunksize = Py_UniversalNewlineFread(rab->buf, bufsize, f->f_fp, (PyObject *)f);
     FILE_END_ALLOW_THREADS(f)
     if (chunksize == 0) {
         if (ferror(f->f_fp)) {
             PyErr_SetFromErrno(PyExc_IOError);
             clearerr(f->f_fp);
-            drop_readahead(f);
+            drop_readaheadbuffer(rab);
             return -1;
         }
     }
-    f->f_bufptr = f->f_buf;
-    f->f_bufend = f->f_buf + chunksize;
+    rab->bufptr = rab->buf;
+    rab->bufend = rab->buf + chunksize;
     return 0;
 }
 
@@ -2272,45 +2296,43 @@
    logarithmic buffer growth to about 50 even when reading a 1gb line. */
 
 static PyStringObject *
-readahead_get_line_skip(PyFileObject *f, Py_ssize_t skip, Py_ssize_t bufsize)
+readahead_get_line_skip(PyFileObject *f, readaheadbuffer *rab, Py_ssize_t skip, Py_ssize_t bufsize)
 {
     PyStringObject* s;
     char *bufptr;
     char *buf;
     Py_ssize_t len;
 
-    if (f->f_buf == NULL)
-        if (readahead(f, bufsize) < 0)
+    if (rab->buf == NULL)
+        if (readahead(f, rab, bufsize) < 0)
             return NULL;
 
-    len = f->f_bufend - f->f_bufptr;
+    len = rab->bufend - rab->bufptr;
     if (len == 0)
-        return (PyStringObject *)
-            PyString_FromStringAndSize(NULL, skip);
-    bufptr = (char *)memchr(f->f_bufptr, '\n', len);
+        return (PyStringObject *)PyString_FromStringAndSize(NULL, skip);
+    bufptr = (char *)memchr(rab->bufptr, '\n', len);
     if (bufptr != NULL) {
         bufptr++;                               /* Count the '\n' */
-        len = bufptr - f->f_bufptr;
-        s = (PyStringObject *)
-            PyString_FromStringAndSize(NULL, skip + len);
+        len = bufptr - rab->bufptr;
+        s = (PyStringObject *)PyString_FromStringAndSize(NULL, skip + len);
         if (s == NULL)
             return NULL;
-        memcpy(PyString_AS_STRING(s) + skip, f->f_bufptr, len);
-        f->f_bufptr = bufptr;
-        if (bufptr == f->f_bufend)
-            drop_readahead(f);
+        memcpy(PyString_AS_STRING(s) + skip, rab->bufptr, len);
+        rab->bufptr = bufptr;
+        if (bufptr == rab->bufend)
+            drop_readaheadbuffer(rab);
     } else {
-        bufptr = f->f_bufptr;
-        buf = f->f_buf;
-        f->f_buf = NULL;                /* Force new readahead buffer */
+        bufptr = rab->bufptr;
+        buf = rab->buf;
+        rab->buf = NULL;                /* Force new readahead buffer */
         assert(len <= PY_SSIZE_T_MAX - skip);
-        s = readahead_get_line_skip(f, skip + len, bufsize + (bufsize>>2));
+        s = readahead_get_line_skip(f, rab, skip + len, bufsize + (bufsize>>2));
         if (s == NULL) {
-            PyMem_Free(buf);
+            PyMem_FREE(buf);
             return NULL;
         }
         memcpy(PyString_AS_STRING(s) + skip, bufptr, len);
-        PyMem_Free(buf);
+        PyMem_FREE(buf);
     }
     return s;
 }
@@ -2328,7 +2350,30 @@
     if (!f->readable)
         return err_mode("reading");
 
-    l = readahead_get_line_skip(f, 0, READAHEAD_BUFSIZE);
+    {
+        /*
+          Multiple threads can enter this method while the GIL is released
+          during file read and wreak havoc on the file object's readahead
+          buffer. To avoid dealing with cross-thread coordination issues, we
+          cache the file buffer state locally and only set it back on the file
+          object when we're done.
+        */
+        readaheadbuffer rab = {f->f_buf, f->f_bufptr, f->f_bufend};
+        f->f_buf = NULL;
+        l = readahead_get_line_skip(f, &rab, 0, READAHEAD_BUFSIZE);
+        /*
+          Make sure the file's internal read buffer is cleared out. This will
+          only do anything if some other thread interleaved with us during
+          readahead. We want to drop any changeling buffer, so we don't leak
+          memory. We may lose data, but that's what you get for reading the same
+          file object in multiple threads.
+        */
+        drop_file_readahead(f);
+        f->f_buf = rab.buf;
+        f->f_bufptr = rab.bufptr;
+        f->f_bufend = rab.bufend;
+    }
+
     if (l == NULL || PyString_GET_SIZE(l) == 0) {
         Py_XDECREF(l);
         return NULL;
@@ -2692,7 +2737,7 @@
     }
     else {
         PyErr_SetString(PyExc_TypeError,
-                        "argument must be an int, or have a fileno() method.");
+                        "argument must be an int, or have a fileno() method");
         return -1;
     }
 
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 801f286..5954d39 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -1,4 +1,3 @@
-
 /* Float object implementation */
 
 /* XXX There should be overflow checks here, but it's hard to check
@@ -65,7 +64,7 @@
     return DBL_MIN;
 }
 
-static PyTypeObject FloatInfoType = {0, 0, 0, 0, 0, 0};
+static PyTypeObject FloatInfoType;
 
 PyDoc_STRVAR(floatinfo__doc__,
 "sys.float_info\n\
@@ -80,7 +79,7 @@
                     "is representable"},
     {"max_10_exp",      "DBL_MAX_10_EXP -- maximum int e such that 10**e "
                     "is representable"},
-    {"min",             "DBL_MIN -- Minimum positive normalizer float"},
+    {"min",             "DBL_MIN -- Minimum positive normalized float"},
     {"min_exp",         "DBL_MIN_EXP -- minimum int e such that radix**(e-1) "
                     "is a normalized float"},
     {"min_10_exp",      "DBL_MIN_10_EXP -- minimum int e such that 10**e is "
@@ -90,7 +89,7 @@
     {"epsilon",         "DBL_EPSILON -- Difference between 1 and the next "
                     "representable float"},
     {"radix",           "FLT_RADIX -- radix of exponent"},
-    {"rounds",          "FLT_ROUNDS -- addition rounds"},
+    {"rounds",          "FLT_ROUNDS -- rounding mode"},
     {0}
 };
 
@@ -429,7 +428,7 @@
         j = PyFloat_AS_DOUBLE(w);
 
     else if (!Py_IS_FINITE(i)) {
-        if (PyInt_Check(w) || PyLong_Check(w))
+        if (_PyAnyInt_Check(w))
             /* If i is an infinity, its magnitude exceeds any
              * finite integer, so it doesn't matter which int we
              * compare i with.  If i is a NaN, similarly.
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index 2c8fb01..1758745 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -89,6 +89,9 @@
  *  o 'try'/'for'/'while' blocks can't be jumped into because the blockstack
  *    needs to be set up before their code runs, and for 'for' loops the
  *    iterator needs to be on the stack.
+ *  o Jumps cannot be made from within a trace function invoked with a
+ *    'return' or 'exception' event since the eval loop has been exited at
+ *    that time.
  */
 static int
 frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno)
@@ -122,13 +125,32 @@
         return -1;
     }
 
+    /* Upon the 'call' trace event of a new frame, f->f_lasti is -1 and
+     * f->f_trace is NULL, check first on the first condition.
+     * Forbidding jumps from the 'call' event of a new frame is a side effect
+     * of allowing to set f_lineno only from trace functions. */
+    if (f->f_lasti == -1) {
+        PyErr_Format(PyExc_ValueError,
+                     "can't jump from the 'call' trace event of a new frame");
+        return -1;
+    }
+
     /* You can only do this from within a trace function, not via
      * _getframe or similar hackery. */
-    if (!f->f_trace)
-    {
+    if (!f->f_trace) {
         PyErr_Format(PyExc_ValueError,
-                     "f_lineno can only be set by a"
-                     " line trace function");
+                     "f_lineno can only be set by a trace function");
+        return -1;
+    }
+
+    /* Forbid jumps upon a 'return' trace event (except after executing a
+     * YIELD_VALUE opcode, f_stacktop is not NULL in that case) and upon an
+     * 'exception' trace event.
+     * Jumps from 'call' trace events have already been forbidden above for new
+     * frames, so this check does not change anything for 'call' events. */
+    if (f->f_stacktop == NULL) {
+        PyErr_SetString(PyExc_ValueError,
+                "can only jump from a 'line' trace event");
         return -1;
     }
 
@@ -178,6 +200,15 @@
     min_addr = MIN(new_lasti, f->f_lasti);
     max_addr = MAX(new_lasti, f->f_lasti);
 
+    /* The trace function is called with a 'return' trace event after the
+     * execution of a yield statement. */
+    assert(f->f_lasti != -1);
+    if (code[f->f_lasti] == YIELD_VALUE) {
+        PyErr_SetString(PyExc_ValueError,
+                "can't jump from a yield statement");
+        return -1;
+    }
+
     /* You can't jump onto a line with an 'except' statement on it -
      * they expect to have an exception on the top of the stack, which
      * won't be true if you jump to them.  They always start with code
@@ -340,6 +371,11 @@
             PyObject *v = (*--f->f_stacktop);
             Py_DECREF(v);
         }
+        if (b->b_type == SETUP_WITH) {
+            /* Pop the exit function. */
+            PyObject *v = (*--f->f_stacktop);
+            Py_DECREF(v);
+        }
     }
 
     /* Finally set the new f_lineno and f_lasti and return OK. */
diff --git a/Objects/intobject.c b/Objects/intobject.c
index 0c5ea65..9b27c35 100644
--- a/Objects/intobject.c
+++ b/Objects/intobject.c
@@ -155,6 +155,11 @@
         return -1;
     }
 
+    if (PyLong_CheckExact(op)) {
+        /* avoid creating temporary int object */
+        return PyLong_AsLong(op);
+    }
+
     io = (PyIntObject*) (*nb->nb_int) (op);
     if (io == NULL)
         return -1;
@@ -163,8 +168,6 @@
             /* got a long? => retry int conversion */
             val = PyLong_AsLong((PyObject *)io);
             Py_DECREF(io);
-            if ((val == -1) && PyErr_Occurred())
-                return -1;
             return val;
         }
         else
@@ -355,7 +358,7 @@
 
     if ((base != 0 && base < 2) || base > 36) {
         PyErr_SetString(PyExc_ValueError,
-                        "int() base must be >= 2 and <= 36");
+                        "int() base must be >= 2 and <= 36, or 0");
         return NULL;
     }
 
@@ -1483,7 +1486,7 @@
         for (i = 0, p = &list->objects[0];
              i < N_INTOBJECTS;
              i++, p++) {
-            if (PyInt_CheckExact(p) && p->ob_refcnt != 0)
+            if (PyInt_CheckExact(p) && Py_REFCNT(p) != 0)
                 u++;
         }
         next = list->next;
@@ -1494,7 +1497,7 @@
                  i < N_INTOBJECTS;
                  i++, p++) {
                 if (!PyInt_CheckExact(p) ||
-                    p->ob_refcnt == 0) {
+                    Py_REFCNT(p) == 0) {
                     Py_TYPE(p) = (struct _typeobject *)
                         free_list;
                     free_list = p;
@@ -1557,14 +1560,14 @@
             for (i = 0, p = &list->objects[0];
                  i < N_INTOBJECTS;
                  i++, p++) {
-                if (PyInt_CheckExact(p) && p->ob_refcnt != 0)
+                if (PyInt_CheckExact(p) && Py_REFCNT(p) != 0)
                     /* XXX(twouters) cast refcount to
                        long until %zd is universally
                        available
                      */
                     fprintf(stderr,
                 "#   <int at %p, refcnt=%ld, val=%ld>\n",
-                                p, (long)p->ob_refcnt,
+                                p, (long)Py_REFCNT(p),
                                 p->ob_ival);
             }
             list = list->next;
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 8ee86c6..24eff76 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -383,10 +383,7 @@
        so must refetch the list size on each iteration. */
     for (i = 0; i < Py_SIZE(v); ++i) {
         int status;
-        if (Py_EnterRecursiveCall(" while getting the repr of a list"))
-            goto Done;
         s = PyObject_Repr(v->ob_item[i]);
-        Py_LeaveRecursiveCall();
         if (s == NULL)
             goto Done;
         status = PyList_Append(pieces, s);
@@ -2284,8 +2281,8 @@
     static PyObject *err_format = NULL;
 
     if (!PyArg_ParseTuple(args, "O|O&O&:index", &v,
-                                _PyEval_SliceIndex, &start,
-                                _PyEval_SliceIndex, &stop))
+                                _PyEval_SliceIndexNotNone, &start,
+                                _PyEval_SliceIndexNotNone, &stop))
         return NULL;
     if (start < 0) {
         start += Py_SIZE(self);
@@ -2562,10 +2559,11 @@
         PyObject* it;
         PyObject **src, **dest;
 
-        if (PySlice_GetIndicesEx((PySliceObject*)item, Py_SIZE(self),
-                         &start, &stop, &step, &slicelength) < 0) {
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0) {
             return NULL;
         }
+        slicelength = _PySlice_AdjustIndices(Py_SIZE(self), &start, &stop,
+                                            step);
 
         if (slicelength <= 0) {
             return PyList_New(0);
@@ -2611,10 +2609,11 @@
     else if (PySlice_Check(item)) {
         Py_ssize_t start, stop, step, slicelength;
 
-        if (PySlice_GetIndicesEx((PySliceObject*)item, Py_SIZE(self),
-                         &start, &stop, &step, &slicelength) < 0) {
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0) {
             return -1;
         }
+        slicelength = _PySlice_AdjustIndices(Py_SIZE(self), &start, &stop,
+                                            step);
 
         if (step == 1)
             return list_ass_slice(self, start, stop, value);
diff --git a/Objects/longobject.c b/Objects/longobject.c
index 768a92a..f40ad7a 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -83,12 +83,12 @@
     Py_ssize_t i;
 
     assert(src != NULL);
-    i = src->ob_size;
+    i = Py_SIZE(src);
     if (i < 0)
         i = -(i);
     result = _PyLong_New(i);
     if (result != NULL) {
-        result->ob_size = src->ob_size;
+        Py_SIZE(result) = Py_SIZE(src);
         while (--i >= 0)
             result->ob_digit[i] = src->ob_digit[i];
     }
@@ -129,7 +129,7 @@
     v = _PyLong_New(ndigits);
     if (v != NULL) {
         digit *p = v->ob_digit;
-        v->ob_size = negative ? -ndigits : ndigits;
+        Py_SIZE(v) = negative ? -ndigits : ndigits;
         t = abs_ival;
         while (t) {
             *p++ = (digit)(t & PyLong_MASK);
@@ -372,7 +372,7 @@
         return -1;
     }
     v = (PyLongObject *)vv;
-    i = v->ob_size;
+    i = Py_SIZE(v);
     sign = 1;
     x = 0;
     if (i < 0) {
@@ -464,7 +464,7 @@
         return (unsigned long) -1;
     }
     v = (PyLongObject *)vv;
-    i = v->ob_size;
+    i = Py_SIZE(v);
     sign = 1;
     x = 0;
     if (i < 0) {
@@ -951,7 +951,7 @@
         PyObject *io;
         if (PyInt_Check(vv))
             return (PY_LONG_LONG)PyInt_AsLong(vv);
-        if ((nb = vv->ob_type->tp_as_number) == NULL ||
+        if ((nb = Py_TYPE(vv)->tp_as_number) == NULL ||
             nb->nb_int == NULL) {
             PyErr_SetString(PyExc_TypeError, "an integer is required");
             return -1;
@@ -1025,7 +1025,7 @@
         return (unsigned long) -1;
     }
     v = (PyLongObject *)vv;
-    i = v->ob_size;
+    i = Py_SIZE(v);
     sign = 1;
     x = 0;
     if (i < 0) {
@@ -1068,7 +1068,7 @@
 
     if (!PyLong_Check(vv)) {
         PyNumberMethods *nb;
-        nb = vv->ob_type->tp_as_number;
+        nb = Py_TYPE(vv)->tp_as_number;
         if (nb == NULL || nb->nb_int == NULL) {
             PyErr_SetString(PyExc_TypeError,
                             "an integer is required");
@@ -1495,10 +1495,10 @@
     *p = '\0';
     if (addL)
         *--p = 'L';
-    if (a->ob_size < 0)
+    if (Py_SIZE(a) < 0)
         sign = '-';
 
-    if (a->ob_size == 0) {
+    if (Py_SIZE(a) == 0) {
         *--p = '0';
     }
     else if ((base & (base - 1)) == 0) {
@@ -1722,7 +1722,7 @@
 
     if ((base != 0 && base < 2) || base > 36) {
         PyErr_SetString(PyExc_ValueError,
-                        "long() arg 2 must be >= 2 and <= 36");
+                        "long() base must be >= 2 and <= 36, or 0");
         return NULL;
     }
     while (*str != '\0' && isspace(Py_CHARMASK(*str)))
@@ -2063,10 +2063,10 @@
        The quotient z has the sign of a*b;
        the remainder r has the sign of a,
        so a = b*z + r. */
-    if ((a->ob_size < 0) != (b->ob_size < 0))
-        z->ob_size = -(z->ob_size);
-    if (a->ob_size < 0 && (*prem)->ob_size != 0)
-        (*prem)->ob_size = -((*prem)->ob_size);
+    if ((Py_SIZE(a) < 0) != (Py_SIZE(b) < 0))
+        Py_SIZE(z) = -(Py_SIZE(z));
+    if (Py_SIZE(a) < 0 && Py_SIZE(*prem) != 0)
+        Py_SIZE(*prem) = -Py_SIZE(*prem);
     *pdiv = z;
     return 0;
 }
@@ -2398,7 +2398,7 @@
     /* This is designed so that Python ints and longs with the
        same value hash to the same value, otherwise comparisons
        of mapping keys will turn out weird */
-    i = v->ob_size;
+    i = Py_SIZE(v);
     sign = 1;
     x = 0;
     if (i < 0) {
@@ -2510,7 +2510,7 @@
     }
     assert(borrow == 0);
     if (sign < 0)
-        z->ob_size = -(z->ob_size);
+        Py_SIZE(z) = -(Py_SIZE(z));
     return long_normalize(z);
 }
 
@@ -2521,17 +2521,17 @@
 
     CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
 
-    if (a->ob_size < 0) {
-        if (b->ob_size < 0) {
+    if (Py_SIZE(a) < 0) {
+        if (Py_SIZE(b) < 0) {
             z = x_add(a, b);
-            if (z != NULL && z->ob_size != 0)
-                z->ob_size = -(z->ob_size);
+            if (z != NULL && Py_SIZE(z) != 0)
+                Py_SIZE(z) = -(Py_SIZE(z));
         }
         else
             z = x_sub(b, a);
     }
     else {
-        if (b->ob_size < 0)
+        if (Py_SIZE(b) < 0)
             z = x_sub(a, b);
         else
             z = x_add(a, b);
@@ -2548,16 +2548,16 @@
 
     CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
 
-    if (a->ob_size < 0) {
-        if (b->ob_size < 0)
+    if (Py_SIZE(a) < 0) {
+        if (Py_SIZE(b) < 0)
             z = x_sub(a, b);
         else
             z = x_add(a, b);
-        if (z != NULL && z->ob_size != 0)
-            z->ob_size = -(z->ob_size);
+        if (z != NULL && Py_SIZE(z) != 0)
+            Py_SIZE(z) = -(Py_SIZE(z));
     }
     else {
-        if (b->ob_size < 0)
+        if (Py_SIZE(b) < 0)
             z = x_add(a, b);
         else
             z = x_sub(a, b);
@@ -2742,7 +2742,7 @@
     /* If a is small compared to b, splitting on b gives a degenerate
      * case with ah==0, and Karatsuba may be (even much) less efficient
      * than "grade school" then.  However, we can still win, by viewing
-     * b as a string of "big digits", each of width a->ob_size.  That
+     * b as a string of "big digits", each of width Py_SIZE(a).  That
      * leads to a sequence of balanced calls to k_mul.
      */
     if (2 * asize <= bsize)
@@ -2910,7 +2910,7 @@
 
 /* b has at least twice the digits of a, and a is big enough that Karatsuba
  * would pay off *if* the inputs had balanced sizes.  View b as a sequence
- * of slices, each with a->ob_size digits, and multiply the slices by a,
+ * of slices, each with Py_SIZE(a) digits, and multiply the slices by a,
  * one at a time.  This gives k_mul balanced inputs to work with, and is
  * also cache-friendly (we compute one double-width slice of the result
  * at a time, then move on, never backtracking except for the helpful
@@ -2982,8 +2982,8 @@
 
     z = k_mul(a, b);
     /* Negate if exactly one of the inputs is negative. */
-    if (((a->ob_size ^ b->ob_size) < 0) && z)
-        z->ob_size = -(z->ob_size);
+    if (((Py_SIZE(a) ^ Py_SIZE(b)) < 0) && z)
+        Py_SIZE(z) = -(Py_SIZE(z));
     Py_DECREF(a);
     Py_DECREF(b);
     return (PyObject *)z;
@@ -3464,7 +3464,7 @@
             Py_DECREF(c);
             c = temp;
             temp = NULL;
-            c->ob_size = - c->ob_size;
+            Py_SIZE(c) = - Py_SIZE(c);
         }
 
         /* if modulus == 1:
@@ -3608,21 +3608,21 @@
 long_neg(PyLongObject *v)
 {
     PyLongObject *z;
-    if (v->ob_size == 0 && PyLong_CheckExact(v)) {
+    if (Py_SIZE(v) == 0 && PyLong_CheckExact(v)) {
         /* -0 == 0 */
         Py_INCREF(v);
         return (PyObject *) v;
     }
     z = (PyLongObject *)_PyLong_Copy(v);
     if (z != NULL)
-        z->ob_size = -(v->ob_size);
+        Py_SIZE(z) = -(Py_SIZE(v));
     return (PyObject *)z;
 }
 
 static PyObject *
 long_abs(PyLongObject *v)
 {
-    if (v->ob_size < 0)
+    if (Py_SIZE(v) < 0)
         return long_neg(v);
     else
         return long_long((PyObject *)v);
@@ -3725,15 +3725,15 @@
     wordshift = shiftby / PyLong_SHIFT;
     remshift  = shiftby - wordshift * PyLong_SHIFT;
 
-    oldsize = ABS(a->ob_size);
+    oldsize = ABS(Py_SIZE(a));
     newsize = oldsize + wordshift;
     if (remshift)
         ++newsize;
     z = _PyLong_New(newsize);
     if (z == NULL)
         goto out;
-    if (a->ob_size < 0)
-        z->ob_size = -(z->ob_size);
+    if (Py_SIZE(a) < 0)
+        Py_SIZE(z) = -(Py_SIZE(z));
     for (i = 0; i < wordshift; i++)
         z->ob_digit[i] = 0;
     accum = 0;
@@ -4142,7 +4142,7 @@
 {
     Py_ssize_t res;
 
-    res = v->ob_type->tp_basicsize + ABS(Py_SIZE(v))*sizeof(digit);
+    res = Py_TYPE(v)->tp_basicsize + ABS(Py_SIZE(v))*sizeof(digit);
     return PyInt_FromSsize_t(res);
 }
 
@@ -4314,8 +4314,7 @@
 };
 
 PyTypeObject PyLong_Type = {
-    PyObject_HEAD_INIT(&PyType_Type)
-    0,                                          /* ob_size */
+    PyVarObject_HEAD_INIT(&PyType_Type, 0)
     "long",                                     /* tp_name */
     offsetof(PyLongObject, ob_digit),           /* tp_basicsize */
     sizeof(digit),                              /* tp_itemsize */
diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c
index 2bac266..6fcd995 100644
--- a/Objects/memoryobject.c
+++ b/Objects/memoryobject.c
@@ -584,10 +584,11 @@
     else if (PySlice_Check(key)) {
         Py_ssize_t start, stop, step, slicelength;
 
-        if (PySlice_GetIndicesEx((PySliceObject*)key, get_shape0(view),
-                                 &start, &stop, &step, &slicelength) < 0) {
+        if (_PySlice_Unpack(key, &start, &stop, &step) < 0) {
             return NULL;
         }
+        slicelength = _PySlice_AdjustIndices(get_shape0(view), &start, &stop,
+                                            step);
     
         if (step == 1 && view->ndim == 1) {
             Py_buffer newview;
@@ -662,10 +663,10 @@
     else if (PySlice_Check(key)) {
         Py_ssize_t stop, step;
 
-        if (PySlice_GetIndicesEx((PySliceObject*)key, get_shape0(view),
-                         &start, &stop, &step, &len) < 0) {
+        if (_PySlice_Unpack(key, &start, &stop, &step) < 0) {
             return -1;
         }
+        len = _PySlice_AdjustIndices(get_shape0(view), &start, &stop, step);
         if (step != 1) {
             PyErr_SetNone(PyExc_NotImplementedError);
             return -1;
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c
index f2fed30..fd48ff1 100644
--- a/Objects/moduleobject.c
+++ b/Objects/moduleobject.c
@@ -221,7 +221,7 @@
 PyTypeObject PyModule_Type = {
     PyVarObject_HEAD_INIT(&PyType_Type, 0)
     "module",                                   /* tp_name */
-    sizeof(PyModuleObject),                     /* tp_size */
+    sizeof(PyModuleObject),                     /* tp_basicsize */
     0,                                          /* tp_itemsize */
     (destructor)module_dealloc,                 /* tp_dealloc */
     0,                                          /* tp_print */
diff --git a/Objects/object.c b/Objects/object.c
index 7a28218..65366b0 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -378,7 +378,12 @@
                                    Py_TYPE(v)->tp_name, v);
     else {
         PyObject *res;
+        /* It is possible for a type to have a tp_repr representation that
+           loops infinitely. */
+        if (Py_EnterRecursiveCall(" while getting the repr of an object"))
+            return NULL;
         res = (*Py_TYPE(v)->tp_repr)(v);
+        Py_LeaveRecursiveCall();
         if (res == NULL)
             return NULL;
 #ifdef Py_USING_UNICODE
diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c
index 1bb1866..9adcff7 100644
--- a/Objects/obmalloc.c
+++ b/Objects/obmalloc.c
@@ -101,7 +101,7 @@
  *
  * For small requests, the allocator sub-allocates <Big> blocks of memory.
  * Requests greater than SMALL_REQUEST_THRESHOLD bytes are routed to the
- * system's allocator. 
+ * system's allocator.
  *
  * Small requests are grouped in size classes spaced 8 bytes apart, due
  * to the required valid alignment of the returned address. Requests of
@@ -134,7 +134,7 @@
  *       65-72                   72                       8
  *        ...                   ...                     ...
  *      497-504                 504                      62
- *      505-512                 512                      63 
+ *      505-512                 512                      63
  *
  *      0, SMALL_REQUEST_THRESHOLD + 1 and up: routed to the underlying
  *      allocator.
@@ -176,7 +176,7 @@
  * Although not required, for better performance and space efficiency,
  * it is recommended that SMALL_REQUEST_THRESHOLD is set to a power of 2.
  */
-#define SMALL_REQUEST_THRESHOLD 512 
+#define SMALL_REQUEST_THRESHOLD 512
 #define NB_SMALL_SIZE_CLASSES   (SMALL_REQUEST_THRESHOLD / ALIGNMENT)
 
 /*
@@ -209,12 +209,12 @@
  * usually an address range reservation for <Big> bytes, unless all pages within
  * this space are referenced subsequently. So malloc'ing big blocks and not
  * using them does not mean "wasting memory". It's an addressable range
- * wastage... 
+ * wastage...
  *
  * Arenas are allocated with mmap() on systems supporting anonymous memory
  * mappings to reduce heap fragmentation.
  */
-#define ARENA_SIZE              (256 << 10)     /* 256KB */
+#define ARENA_SIZE              (256 << 10)     /* 256KiB */
 
 #ifdef WITH_MEMORY_LIMITS
 #define MAX_ARENAS              (SMALL_MEMORY_LIMIT / ARENA_SIZE)
@@ -619,7 +619,7 @@
 #else
     address = malloc(ARENA_SIZE);
     err = (address == 0);
-#endif    
+#endif
     if (err) {
         /* The allocation failed: return NULL after putting the
          * arenaobj back.
@@ -1552,7 +1552,7 @@
         /* overflow:  can't represent total as a size_t */
         return NULL;
 
-    if (nbytes < original_nbytes) {
+    if (nbytes <= original_nbytes) {
         /* shrinking:  mark old extra memory dead */
         memset(q + nbytes, DEADBYTE, original_nbytes - nbytes + 2*SST);
     }
@@ -1562,8 +1562,14 @@
      * but we live with that.
      */
     q = (uchar *)PyObject_Realloc(q - 2*SST, total);
-    if (q == NULL)
+    if (q == NULL) {
+        if (nbytes <= original_nbytes) {
+            /* bpo-31626: the memset() above expects that realloc never fails
+               on shrinking a memory block. */
+            Py_FatalError("Shrinking reallocation failed");
+        }
         return NULL;
+    }
 
     write_size_t(q, nbytes);
     assert(q[SST] == (uchar)api);
diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c
index baa8dee..888069a 100644
--- a/Objects/rangeobject.c
+++ b/Objects/rangeobject.c
@@ -183,8 +183,7 @@
 };
 
 PyTypeObject PyRange_Type = {
-    PyObject_HEAD_INIT(&PyType_Type)
-    0,                          /* Number of items for varobject */
+    PyVarObject_HEAD_INIT(&PyType_Type, 0)
     "xrange",                   /* Name of this type */
     sizeof(rangeobject),        /* Basic object size */
     0,                          /* Item size for varobject */
@@ -256,8 +255,7 @@
 };
 
 static PyTypeObject Pyrangeiter_Type = {
-    PyObject_HEAD_INIT(&PyType_Type)
-    0,                                      /* ob_size */
+    PyVarObject_HEAD_INIT(&PyType_Type, 0)
     "rangeiterator",                        /* tp_name */
     sizeof(rangeiterobject),                /* tp_basicsize */
     0,                                      /* tp_itemsize */
diff --git a/Objects/setobject.c b/Objects/setobject.c
index b3ca643..31da3db 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -549,6 +549,7 @@
 {
     register setentry *entry;
     Py_ssize_t fill = so->fill;
+    /* bpo-31095: UnTrack is needed before calling any callbacks */
     PyObject_GC_UnTrack(so);
     Py_TRASHCAN_SAFE_BEGIN(so)
     if (so->weakreflist != NULL)
@@ -582,13 +583,13 @@
         if (status < 0)
             return status;
         Py_BEGIN_ALLOW_THREADS
-        fprintf(fp, "%s(...)", so->ob_type->tp_name);
+        fprintf(fp, "%s(...)", Py_TYPE(so)->tp_name);
         Py_END_ALLOW_THREADS
         return 0;
     }
 
     Py_BEGIN_ALLOW_THREADS
-    fprintf(fp, "%s([", so->ob_type->tp_name);
+    fprintf(fp, "%s([", Py_TYPE(so)->tp_name);
     Py_END_ALLOW_THREADS
     while (set_next(so, &pos, &entry)) {
         Py_BEGIN_ALLOW_THREADS
@@ -616,7 +617,7 @@
     if (status != 0) {
         if (status < 0)
             return NULL;
-        return PyString_FromFormat("%s(...)", so->ob_type->tp_name);
+        return PyString_FromFormat("%s(...)", Py_TYPE(so)->tp_name);
     }
 
     keys = PySequence_List((PyObject *)so);
@@ -627,7 +628,7 @@
     if (listrepr == NULL)
         goto done;
 
-    result = PyString_FromFormat("%s(%s)", so->ob_type->tp_name,
+    result = PyString_FromFormat("%s(%s)", Py_TYPE(so)->tp_name,
         PyString_AS_STRING(listrepr));
     Py_DECREF(listrepr);
 done:
@@ -811,6 +812,8 @@
 static void
 setiter_dealloc(setiterobject *si)
 {
+    /* bpo-31095: UnTrack is needed before calling any callbacks */
+    _PyObject_GC_UNTRACK(si);
     Py_XDECREF(si->si_set);
     PyObject_GC_Del(si);
 }
@@ -1707,8 +1710,10 @@
     if (otherset == NULL)
         return NULL;
     rv = set_symmetric_difference_update(otherset, (PyObject *)so);
-    if (rv == NULL)
+    if (rv == NULL) {
+        Py_DECREF(otherset);
         return NULL;
+    }
     Py_DECREF(rv);
     return (PyObject *)otherset;
 }
diff --git a/Objects/sliceobject.c b/Objects/sliceobject.c
index 3c996f9..dc18211 100644
--- a/Objects/sliceobject.c
+++ b/Objects/sliceobject.c
@@ -107,20 +107,20 @@
     if (r->step == Py_None) {
         *step = 1;
     } else {
-        if (!PyInt_Check(r->step) && !PyLong_Check(r->step)) return -1;
+        if (!_PyAnyInt_Check(r->step)) return -1;
         *step = PyInt_AsSsize_t(r->step);
     }
     if (r->start == Py_None) {
         *start = *step < 0 ? length-1 : 0;
     } else {
-        if (!PyInt_Check(r->start) && !PyLong_Check(r->step)) return -1;
+        if (!_PyAnyInt_Check(r->start)) return -1;
         *start = PyInt_AsSsize_t(r->start);
         if (*start < 0) *start += length;
     }
     if (r->stop == Py_None) {
         *stop = *step < 0 ? -1 : length;
     } else {
-        if (!PyInt_Check(r->stop) && !PyLong_Check(r->step)) return -1;
+        if (!_PyAnyInt_Check(r->stop)) return -1;
         *stop = PyInt_AsSsize_t(r->stop);
         if (*stop < 0) *stop += length;
     }
@@ -131,12 +131,13 @@
 }
 
 int
-PySlice_GetIndicesEx(PySliceObject *r, Py_ssize_t length,
-                     Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength)
+_PySlice_Unpack(PyObject *_r,
+                Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
 {
+    PySliceObject *r = (PySliceObject *)_r;
     /* this is harder to get right than you might think */
 
-    Py_ssize_t defstart, defstop;
+    assert(PY_SSIZE_T_MIN + 1 <= -PY_SSIZE_T_MAX);
 
     if (r->step == Py_None) {
         *step = 1;
@@ -148,44 +149,84 @@
                             "slice step cannot be zero");
             return -1;
         }
+        /* Here *step might be -PY_SSIZE_T_MAX-1; in this case we replace it
+         * with -PY_SSIZE_T_MAX.  This doesn't affect the semantics, and it
+         * guards against later undefined behaviour resulting from code that
+         * does "step = -step" as part of a slice reversal.
+         */
+        if (*step < -PY_SSIZE_T_MAX)
+            *step = -PY_SSIZE_T_MAX;
     }
 
-    defstart = *step < 0 ? length-1 : 0;
-    defstop = *step < 0 ? -1 : length;
-
     if (r->start == Py_None) {
-        *start = defstart;
+        *start = *step < 0 ? PY_SSIZE_T_MAX : 0;
     }
     else {
         if (!_PyEval_SliceIndex(r->start, start)) return -1;
-        if (*start < 0) *start += length;
-        if (*start < 0) *start = (*step < 0) ? -1 : 0;
-        if (*start >= length)
-            *start = (*step < 0) ? length - 1 : length;
     }
 
     if (r->stop == Py_None) {
-        *stop = defstop;
+        *stop = *step < 0 ? PY_SSIZE_T_MIN : PY_SSIZE_T_MAX;
     }
     else {
         if (!_PyEval_SliceIndex(r->stop, stop)) return -1;
-        if (*stop < 0) *stop += length;
-        if (*stop < 0) *stop = (*step < 0) ? -1 : 0;
-        if (*stop >= length)
-            *stop = (*step < 0) ? length - 1 : length;
     }
 
-    if ((*step < 0 && *stop >= *start)
-        || (*step > 0 && *start >= *stop)) {
-        *slicelength = 0;
+    return 0;
+}
+
+Py_ssize_t
+_PySlice_AdjustIndices(Py_ssize_t length,
+                       Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t step)
+{
+    /* this is harder to get right than you might think */
+
+    assert(step != 0);
+    assert(step >= -PY_SSIZE_T_MAX);
+
+    if (*start < 0) {
+        *start += length;
+        if (*start < 0) {
+            *start = (step < 0) ? -1 : 0;
+        }
     }
-    else if (*step < 0) {
-        *slicelength = (*stop-*start+1)/(*step)+1;
+    else if (*start >= length) {
+        *start = (step < 0) ? length - 1 : length;
+    }
+
+    if (*stop < 0) {
+        *stop += length;
+        if (*stop < 0) {
+            *stop = (step < 0) ? -1 : 0;
+        }
+    }
+    else if (*stop >= length) {
+        *stop = (step < 0) ? length - 1 : length;
+    }
+
+    if (step < 0) {
+        if (*stop < *start) {
+            return (*start - *stop - 1) / (-step) + 1;
+        }
     }
     else {
-        *slicelength = (*stop-*start-1)/(*step)+1;
+        if (*start < *stop) {
+            return (*stop - *start - 1) / step + 1;
+        }
     }
+    return 0;
+}
 
+#undef PySlice_GetIndicesEx
+
+int
+PySlice_GetIndicesEx(PySliceObject *r, Py_ssize_t length,
+                     Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step,
+                     Py_ssize_t *slicelength)
+{
+    if (_PySlice_Unpack((PyObject *)r, start, stop, step) < 0)
+        return -1;
+    *slicelength = _PySlice_AdjustIndices(length, start, stop, *step);
     return 0;
 }
 
@@ -254,7 +295,7 @@
 static PyObject*
 slice_indices(PySliceObject* self, PyObject* len)
 {
-    Py_ssize_t ilen, start, stop, step, slicelength;
+    Py_ssize_t ilen, start, stop, step;
 
     ilen = PyNumber_AsSsize_t(len, PyExc_OverflowError);
 
@@ -262,10 +303,10 @@
         return NULL;
     }
 
-    if (PySlice_GetIndicesEx(self, ilen, &start, &stop,
-                             &step, &slicelength) < 0) {
+    if (_PySlice_Unpack((PyObject *)self, &start, &stop, &step) < 0) {
         return NULL;
     }
+    _PySlice_AdjustIndices(ilen, &start, &stop, step);
 
     return Py_BuildValue("(nnn)", start, stop, step);
 }
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 4e38735..b21afb4 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -612,7 +612,13 @@
     char *p, *buf;
     const char *end;
     PyObject *v;
-    Py_ssize_t newlen = recode_encoding ? 4*len:len;
+    Py_ssize_t newlen;
+    /* Check for integer overflow */
+    if (recode_encoding && (len > PY_SSIZE_T_MAX / 4)) {
+        PyErr_SetString(PyExc_OverflowError, "string is too large");
+        return NULL;
+    }
+    newlen = recode_encoding ? 4*len:len;
     v = PyString_FromStringAndSize((char *)NULL, newlen);
     if (v == NULL)
         return NULL;
@@ -1310,11 +1316,11 @@
         char* result_buf;
         PyObject* result;
 
-        if (PySlice_GetIndicesEx((PySliceObject*)item,
-                         PyString_GET_SIZE(self),
-                         &start, &stop, &step, &slicelength) < 0) {
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0) {
             return NULL;
         }
+        slicelength = _PySlice_AdjustIndices(PyString_GET_SIZE(self), &start,
+                                            &stop, step);
 
         if (slicelength <= 0) {
             return PyString_FromStringAndSize("", 0);
@@ -2358,31 +2364,30 @@
 {
     char *self_s, *result_s;
     Py_ssize_t self_len, result_len;
-    Py_ssize_t count, i, product;
+    Py_ssize_t count, i;
     PyStringObject *result;
 
     self_len = PyString_GET_SIZE(self);
 
-    /* 1 at the end plus 1 after every character */
-    count = self_len+1;
-    if (maxcount < count)
+    /* 1 at the end plus 1 after every character;
+       count = min(maxcount, self_len + 1) */
+    if (maxcount <= self_len) {
         count = maxcount;
+    }
+    else {
+        /* Can't overflow: self_len + 1 <= maxcount <= PY_SSIZE_T_MAX. */
+        count = self_len + 1;
+    }
 
     /* Check for overflow */
     /*   result_len = count * to_len + self_len; */
-    product = count * to_len;
-    if (product / to_len != count) {
+    assert(count > 0);
+    if (to_len > (PY_SSIZE_T_MAX - self_len) / count) {
         PyErr_SetString(PyExc_OverflowError,
                         "replace string is too long");
         return NULL;
     }
-    result_len = product + self_len;
-    if (result_len < 0) {
-        PyErr_SetString(PyExc_OverflowError,
-                        "replace string is too long");
-        return NULL;
-    }
-
+    result_len = count * to_len + self_len;
     if (! (result = (PyStringObject *)
                      PyString_FromStringAndSize(NULL, result_len)) )
         return NULL;
@@ -2610,7 +2615,7 @@
     char *self_s, *result_s;
     char *start, *next, *end;
     Py_ssize_t self_len, result_len;
-    Py_ssize_t count, product;
+    Py_ssize_t count;
     PyStringObject *result;
 
     self_s = PyString_AS_STRING(self);
@@ -2624,16 +2629,12 @@
 
     /* use the difference between current and new, hence the "-1" */
     /*   result_len = self_len + count * (to_len-1)  */
-    product = count * (to_len-1);
-    if (product / (to_len-1) != count) {
+    assert(count > 0);
+    if (to_len - 1 > (PY_SSIZE_T_MAX - self_len) / count) {
         PyErr_SetString(PyExc_OverflowError, "replace string is too long");
         return NULL;
     }
-    result_len = self_len + product;
-    if (result_len < 0) {
-        PyErr_SetString(PyExc_OverflowError, "replace string is too long");
-        return NULL;
-    }
+    result_len = self_len + count * (to_len - 1);
 
     if ( (result = (PyStringObject *)
           PyString_FromStringAndSize(NULL, result_len)) == NULL)
@@ -2676,7 +2677,7 @@
     char *self_s, *result_s;
     char *start, *next, *end;
     Py_ssize_t self_len, result_len;
-    Py_ssize_t count, offset, product;
+    Py_ssize_t count, offset;
     PyStringObject *result;
 
     self_s = PyString_AS_STRING(self);
@@ -2693,16 +2694,12 @@
 
     /* Check for overflow */
     /*    result_len = self_len + count * (to_len-from_len) */
-    product = count * (to_len-from_len);
-    if (product / (to_len-from_len) != count) {
+    assert(count > 0);
+    if (to_len - from_len > (PY_SSIZE_T_MAX - self_len) / count) {
         PyErr_SetString(PyExc_OverflowError, "replace string is too long");
         return NULL;
     }
-    result_len = self_len + product;
-    if (result_len < 0) {
-        PyErr_SetString(PyExc_OverflowError, "replace string is too long");
-        return NULL;
-    }
+    result_len = self_len + count * (to_len - from_len);
 
     if ( (result = (PyStringObject *)
           PyString_FromStringAndSize(NULL, result_len)) == NULL)
@@ -4507,7 +4504,7 @@
                 if (PyNumber_Check(v)) {
                     PyObject *iobj=NULL;
 
-                    if (PyInt_Check(v) || (PyLong_Check(v))) {
+                    if (_PyAnyInt_Check(v)) {
                         iobj = v;
                         Py_INCREF(iobj);
                     }
diff --git a/Objects/structseq.c b/Objects/structseq.c
index 75c1ffb..3e45840 100644
--- a/Objects/structseq.c
+++ b/Objects/structseq.c
@@ -114,11 +114,11 @@
         Py_ssize_t start, stop, step, slicelen, cur, i;
         PyObject *result;
 
-        if (PySlice_GetIndicesEx((PySliceObject *)item,
-                                 VISIBLE_SIZE(self), &start, &stop,
-                                 &step, &slicelen) < 0) {
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0) {
             return NULL;
         }
+        slicelen = _PySlice_AdjustIndices(VISIBLE_SIZE(self), &start, &stop,
+                                         step);
         if (slicelen <= 0)
             return PyTuple_New(0);
         result = PyTuple_New(slicelen);
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index 550719f..6f4b18c 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -288,10 +288,7 @@
 
     /* Do repr() on each element. */
     for (i = 0; i < n; ++i) {
-        if (Py_EnterRecursiveCall(" while getting the repr of a tuple"))
-            goto Done;
         s = PyObject_Repr(v->ob_item[i]);
-        Py_LeaveRecursiveCall();
         if (s == NULL)
             goto Done;
         PyTuple_SET_ITEM(pieces, i, s);
@@ -515,8 +512,8 @@
     PyObject *v;
 
     if (!PyArg_ParseTuple(args, "O|O&O&:index", &v,
-                                _PyEval_SliceIndex, &start,
-                                _PyEval_SliceIndex, &stop))
+                                _PyEval_SliceIndexNotNone, &start,
+                                _PyEval_SliceIndexNotNone, &stop))
         return NULL;
     if (start < 0) {
         start += Py_SIZE(self);
@@ -715,11 +712,11 @@
         PyObject* it;
         PyObject **src, **dest;
 
-        if (PySlice_GetIndicesEx((PySliceObject*)item,
-                         PyTuple_GET_SIZE(self),
-                         &start, &stop, &step, &slicelength) < 0) {
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0) {
             return NULL;
         }
+        slicelength = _PySlice_AdjustIndices(PyTuple_GET_SIZE(self), &start,
+                                            &stop, step);
 
         if (slicelength <= 0) {
             return PyTuple_New(0);
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 3494fa9..844fb00 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -2082,6 +2082,9 @@
     /* Call object.__init__(self) now. */
     /* XXX Could call super(type, cls).__init__() but what's the point? */
     args = PyTuple_GetSlice(args, 0, 0);
+    if (args == NULL) {
+        return -1;
+    }
     res = object_init(cls, args, NULL);
     Py_DECREF(args);
     return res;
@@ -2608,6 +2611,7 @@
     PyTypeObject *metatype = Py_TYPE(type);
     PyObject *meta_attribute, *attribute;
     descrgetfunc meta_get;
+    PyObject* res;
 
     if (!PyString_Check(name)) {
         PyErr_Format(PyExc_TypeError,
@@ -2629,6 +2633,7 @@
     meta_attribute = _PyType_Lookup(metatype, name);
 
     if (meta_attribute != NULL) {
+        Py_INCREF(meta_attribute);
         meta_get = Py_TYPE(meta_attribute)->tp_descr_get;
 
         if (meta_get != NULL && PyDescr_IsData(meta_attribute)) {
@@ -2636,10 +2641,11 @@
              * writes. Assume the attribute is not overridden in
              * type's tp_dict (and bases): call the descriptor now.
              */
-            return meta_get(meta_attribute, (PyObject *)type,
-                            (PyObject *)metatype);
+            res = meta_get(meta_attribute, (PyObject *)type,
+                           (PyObject *)metatype);
+            Py_DECREF(meta_attribute);
+            return res;
         }
-        Py_INCREF(meta_attribute);
     }
 
     /* No data descriptor found on metatype. Look in tp_dict of this
@@ -2647,18 +2653,21 @@
     attribute = _PyType_Lookup(type, name);
     if (attribute != NULL) {
         /* Implement descriptor functionality, if any */
-        descrgetfunc local_get = Py_TYPE(attribute)->tp_descr_get;
+        descrgetfunc local_get;
+        Py_INCREF(attribute);
+        local_get = Py_TYPE(attribute)->tp_descr_get;
 
         Py_XDECREF(meta_attribute);
 
         if (local_get != NULL) {
             /* NULL 2nd argument indicates the descriptor was
              * found on the target object itself (or a base)  */
-            return local_get(attribute, (PyObject *)NULL,
-                             (PyObject *)type);
+            res = local_get(attribute, (PyObject *)NULL,
+                            (PyObject *)type);
+            Py_DECREF(attribute);
+            return res;
         }
 
-        Py_INCREF(attribute);
         return attribute;
     }
 
@@ -2687,6 +2696,7 @@
 static int
 type_setattro(PyTypeObject *type, PyObject *name, PyObject *value)
 {
+    int res;
     if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
         PyErr_Format(
             PyExc_TypeError,
@@ -2694,9 +2704,39 @@
             type->tp_name);
         return -1;
     }
-    if (PyObject_GenericSetAttr((PyObject *)type, name, value) < 0)
-        return -1;
-    return update_slot(type, name);
+#ifdef Py_USING_UNICODE
+    if (PyUnicode_Check(name)) {
+        name = PyUnicode_AsEncodedString(name, NULL, NULL);
+        if (name == NULL)
+            return -1;
+    }
+    else
+#endif
+        Py_INCREF(name);
+
+    if (PyString_Check(name)) {
+        if (!PyString_CheckExact(name)) {
+            Py_SETREF(name,
+                      PyString_FromStringAndSize(PyString_AS_STRING(name),
+                                                 PyString_GET_SIZE(name))
+            );
+            if (name == NULL)
+                return -1;
+        }
+        PyString_InternInPlace(&name);
+        if (!PyString_CHECK_INTERNED(name)) {
+            PyErr_SetString(PyExc_MemoryError,
+                            "Out of memory interning an attribute name");
+            Py_DECREF(name);
+            return -1;
+        }
+    }
+    res = PyObject_GenericSetAttr((PyObject *)type, name, value);
+    if (res == 0) {
+        res = update_slot(type, name);
+    }
+    Py_DECREF(name);
+    return res;
 }
 
 static void
@@ -3335,6 +3375,29 @@
             goto end;
         assert(names == Py_None || PyList_Check(names));
 
+        if (required_state && Py_Py3kWarningFlag) {
+            Py_ssize_t basicsize = PyBaseObject_Type.tp_basicsize;
+            if (obj->ob_type->tp_dictoffset)
+                basicsize += sizeof(PyObject *);
+            if (obj->ob_type->tp_weaklistoffset)
+                basicsize += sizeof(PyObject *);
+            if (names != Py_None)
+                basicsize += sizeof(PyObject *) * PyList_GET_SIZE(names);
+            if (obj->ob_type->tp_basicsize > basicsize) {
+                PyObject *msg = PyString_FromFormat(
+                            "can't pickle %.200s objects",
+                             Py_TYPE(obj)->tp_name);
+                if (msg == NULL) {
+                    goto end;
+                }
+                if (PyErr_WarnPy3k(PyString_AS_STRING(msg), 1) < 0) {
+                    Py_DECREF(msg);
+                    goto end;
+                }
+                Py_DECREF(msg);
+            }
+        }
+
         if (names != Py_None) {
             slots = PyDict_New();
             if (slots == NULL)
@@ -6355,7 +6418,7 @@
         /* Slots must be ordered by their offset in the PyHeapTypeObject. */
         assert(!p[1].name || p->offset <= p[1].offset);
         p->name_strobj = PyString_InternFromString(p->name);
-        if (!p->name_strobj)
+        if (!p->name_strobj || !PyString_CHECK_INTERNED(p->name_strobj))
             Py_FatalError("Out of memory interning slotdef names");
     }
     initialized = 1;
@@ -6370,6 +6433,9 @@
     slotdef **pp;
     int offset;
 
+    assert(PyString_CheckExact(name));
+    assert(PyString_CHECK_INTERNED(name));
+
     /* Clear the VALID_VERSION flag of 'type' and all its
        subclasses.  This could possibly be unified with the
        update_subclasses() recursion below, but carefully:
@@ -6380,7 +6446,6 @@
     init_slotdefs();
     pp = ptrs;
     for (p = slotdefs; p->name; p++) {
-        /* XXX assume name is interned! */
         if (p->name_strobj == name)
             *pp++ = p;
     }
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index ca609a9..b76db61 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -4222,7 +4222,7 @@
                         p = PyUnicode_AS_UNICODE(v) + oldpos;
                     }
                     value -= 0x10000;
-                    *p++ = 0xD800 | (value >> 10);
+                    *p++ = 0xD800 | (Py_UNICODE)(value >> 10);
                     *p++ = 0xDC00 | (value & 0x3FF);
                     extrachars -= 2;
                 }
@@ -5732,20 +5732,20 @@
 
         /* Make sure we have enough space for the separator and the item. */
         itemlen = PyUnicode_GET_SIZE(item);
-        new_res_used = res_used + itemlen;
-        if (new_res_used < 0)
+        if (res_used > PY_SSIZE_T_MAX - itemlen)
             goto Overflow;
+        new_res_used = res_used + itemlen;
         if (i < seqlen - 1) {
-            new_res_used += seplen;
-            if (new_res_used < 0)
+            if (new_res_used > PY_SSIZE_T_MAX - seplen)
                 goto Overflow;
+            new_res_used += seplen;
         }
         if (new_res_used > res_alloc) {
             /* double allocated size until it's big enough */
             do {
-                res_alloc += res_alloc;
-                if (res_alloc <= 0)
+                if (res_alloc > PY_SSIZE_T_MAX / 2)
                     goto Overflow;
+                res_alloc += res_alloc;
             } while (new_res_used > res_alloc);
             if (_PyUnicode_Resize(&res, res_alloc) < 0) {
                 Py_DECREF(item);
@@ -5943,7 +5943,7 @@
     } else {
 
         Py_ssize_t n, i, j;
-        Py_ssize_t product, new_size, delta;
+        Py_ssize_t new_size, delta;
         Py_UNICODE *p;
 
         /* replace strings */
@@ -5956,18 +5956,13 @@
         if (delta == 0) {
             new_size = self->length;
         } else {
-            product = n * (str2->length - str1->length);
-            if ((product / (str2->length - str1->length)) != n) {
+            assert(n > 0);
+            if (delta > (PY_SSIZE_T_MAX - self->length) / n) {
                 PyErr_SetString(PyExc_OverflowError,
                                 "replace string is too long");
                 return NULL;
             }
-            new_size = self->length + product;
-            if (new_size < 0) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "replace string is too long");
-                return NULL;
-            }
+            new_size = self->length + delta * n;
         }
         u = _PyUnicode_New(new_size);
         if (!u)
@@ -8013,10 +8008,11 @@
         Py_UNICODE* result_buf;
         PyObject* result;
 
-        if (PySlice_GetIndicesEx((PySliceObject*)item, PyUnicode_GET_SIZE(self),
-                                 &start, &stop, &step, &slicelength) < 0) {
+        if (_PySlice_Unpack(item, &start, &stop, &step) < 0) {
             return NULL;
         }
+        slicelength = _PySlice_AdjustIndices(PyUnicode_GET_SIZE(self), &start,
+                                            &stop, step);
 
         if (slicelength <= 0) {
             return PyUnicode_FromUnicode(NULL, 0);
@@ -8632,7 +8628,7 @@
                 if (PyNumber_Check(v)) {
                     PyObject *iobj=NULL;
 
-                    if (PyInt_Check(v) || (PyLong_Check(v))) {
+                    if (_PyAnyInt_Check(v)) {
                         iobj = v;
                         Py_INCREF(iobj);
                     }
diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c
index c8b982f..344e6f2 100644
--- a/Objects/weakrefobject.c
+++ b/Objects/weakrefobject.c
@@ -24,6 +24,8 @@
 {
     self->hash = -1;
     self->wr_object = ob;
+    self->wr_prev = NULL;
+    self->wr_next = NULL;
     Py_XINCREF(callback);
     self->wr_callback = callback;
 }
@@ -194,7 +196,7 @@
 static PyObject *
 weakref_richcompare(PyWeakReference* self, PyWeakReference* other, int op)
 {
-    if ((op != Py_EQ && op != Py_NE) || self->ob_type != other->ob_type) {
+    if ((op != Py_EQ && op != Py_NE) || Py_TYPE(self) != Py_TYPE(other)) {
         Py_INCREF(Py_NotImplemented);
         return Py_NotImplemented;
     }
@@ -912,7 +914,7 @@
 
     if (object == NULL
         || !PyType_SUPPORTS_WEAKREFS(Py_TYPE(object))
-        || object->ob_refcnt != 0) {
+        || Py_REFCNT(object) != 0) {
         PyErr_BadInternalCall();
         return;
     }
@@ -935,7 +937,7 @@
             current->wr_callback = NULL;
             clear_weakref(current);
             if (callback != NULL) {
-                if (current->ob_refcnt > 0)
+                if (Py_REFCNT(current) > 0)
                     handle_callback(current, callback);
                 Py_DECREF(callback);
             }
@@ -953,7 +955,7 @@
             for (i = 0; i < count; ++i) {
                 PyWeakReference *next = current->wr_next;
 
-                if (current->ob_refcnt > 0)
+                if (Py_REFCNT(current) > 0)
                 {
                     Py_INCREF(current);
                     PyTuple_SET_ITEM(tuple, i * 2, (PyObject *) current);
diff --git a/PC/VC6/rt.bat b/PC/VC6/rt.bat
index 65488b1..dfdea67 100755
--- a/PC/VC6/rt.bat
+++ b/PC/VC6/rt.bat
@@ -1,41 +1,41 @@
-@rem Run Tests.  Run the regression test suite.

-@rem Usage:  rt [-d] [-O] [-q] regrtest_args

-@rem -d   Run Debug build (python_d.exe).  Else release build.

-@rem -O   Run python.exe or python_d.exe (see -d) with -O.

-@rem -q   "quick" -- normally the tests are run twice, the first time

-@rem      after deleting all the .py[co] files reachable from Lib/.

-@rem      -q runs the tests just once, and without deleting .py[co] files.

-@rem All leading instances of these switches are shifted off, and

-@rem whatever remains is passed to regrtest.py.  For example,

-@rem     rt -O -d -x test_thread

-@rem runs

-@rem     python_d -O ../../lib/test/regrtest.py -x test_thread

-@rem twice, and

-@rem     rt -q -g test_binascii

-@rem runs

-@rem     python_d ../../lib/test/regrtest.py -g test_binascii

-@rem to generate the expected-output file for binascii quickly.

-@set _exe=python

-@set _qmode=no

-@set _dashO=

-@goto CheckOpts

-:Again

-@shift

-:CheckOpts

-@if "%1"=="-O" set _dashO=-O

-@if "%1"=="-O" goto Again

-@if "%1"=="-q" set _qmode=yes

-@if "%1"=="-q" goto Again

-@if "%1"=="-d" set _exe=python_d

-@if "%1"=="-d" goto Again

-@if "%_qmode%"=="yes" goto Qmode

-@echo Deleting .pyc/.pyo files ...

-@%_exe% rmpyc.py

-%_exe% %_dashO% -E -tt ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9

-@echo About to run again without deleting .pyc/.pyo first:

-@pause

-:Qmode

-%_exe% %_dashO% -E -tt ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9

-@set _exe=

-@set _qmode=

-@set _dashO=

+@rem Run Tests.  Run the regression test suite.
+@rem Usage:  rt [-d] [-O] [-q] regrtest_args
+@rem -d   Run Debug build (python_d.exe).  Else release build.
+@rem -O   Run python.exe or python_d.exe (see -d) with -O.
+@rem -q   "quick" -- normally the tests are run twice, the first time
+@rem      after deleting all the .py[co] files reachable from Lib/.
+@rem      -q runs the tests just once, and without deleting .py[co] files.
+@rem All leading instances of these switches are shifted off, and
+@rem whatever remains is passed to regrtest.py.  For example,
+@rem     rt -O -d -x test_thread
+@rem runs
+@rem     python_d -O ../../lib/test/regrtest.py -x test_thread
+@rem twice, and
+@rem     rt -q -g test_binascii
+@rem runs
+@rem     python_d ../../lib/test/regrtest.py -g test_binascii
+@rem to generate the expected-output file for binascii quickly.
+@set _exe=python
+@set _qmode=no
+@set _dashO=
+@goto CheckOpts
+:Again
+@shift
+:CheckOpts
+@if "%1"=="-O" set _dashO=-O
+@if "%1"=="-O" goto Again
+@if "%1"=="-q" set _qmode=yes
+@if "%1"=="-q" goto Again
+@if "%1"=="-d" set _exe=python_d
+@if "%1"=="-d" goto Again
+@if "%_qmode%"=="yes" goto Qmode
+@echo Deleting .pyc/.pyo files ...
+@%_exe% rmpyc.py
+%_exe% %_dashO% -E -tt ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9
+@echo About to run again without deleting .pyc/.pyo first:
+@pause
+:Qmode
+%_exe% %_dashO% -E -tt ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9
+@set _exe=
+@set _qmode=
+@set _dashO=
diff --git a/PC/VS7.1/_bsddb.vcproj b/PC/VS7.1/_bsddb.vcproj
index 87e4bc9..b535e4c 100644
--- a/PC/VS7.1/_bsddb.vcproj
+++ b/PC/VS7.1/_bsddb.vcproj
@@ -1,258 +1,258 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="_bsddb"

-	SccProjectName="_bsddb"

-	SccLocalPath="..">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\_bsddb"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include;..\..\PC;&quot;..\..\..\db-4.4.20\build_win32&quot;"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;WIN32;_WINDOWS"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="..\..\..\db-4.4.20\build_win32\Debug\libdb44sd.lib"

-				OutputFile="./_bsddb_d.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames=""

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_bsddb_d.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e180000"

-				ImportLibrary=".\./_bsddb_d.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\_bsddb"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include;..\..\PC;&quot;..\..\..\db-4.4.20\build_win32&quot;"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="..\..\..\db-4.4.20\build_win32\Release\libdb44s.lib"

-				OutputFile="./_bsddb.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames=""

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_bsddb.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e180000"

-				ImportLibrary=".\./_bsddb.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory="./."

-			IntermediateDirectory=".\ia64-temp-release\_bsddb"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include;..\..\PC;&quot;..\..\..\db-4.4.20\build_win32&quot;"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"

-				AdditionalDependencies="..\..\..\db-4.4.20\build_win32\Release_IA64\libdb44s.lib"

-				OutputFile="./_bsddb.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames=""

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_bsddb.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e180000"

-				ImportLibrary=".\./_bsddb.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\_bsddb"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include;..\..\PC;&quot;..\..\..\db-4.4.20\build_win32&quot;"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				AdditionalDependencies="..\..\..\db-4.4.20\build_win32\Release_AMD64\libdb44s.lib bufferoverflowU.lib"

-				OutputFile="./_bsddb.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames=""

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_bsddb.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e180000"

-				ImportLibrary=".\./_bsddb.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\Modules\_bsddb.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="_bsddb"
+	SccProjectName="_bsddb"
+	SccLocalPath="..">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\_bsddb"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include;..\..\PC;&quot;..\..\..\db-4.4.20\build_win32&quot;"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;WIN32;_WINDOWS"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="..\..\..\db-4.4.20\build_win32\Debug\libdb44sd.lib"
+				OutputFile="./_bsddb_d.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_bsddb_d.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e180000"
+				ImportLibrary=".\./_bsddb_d.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\_bsddb"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include;..\..\PC;&quot;..\..\..\db-4.4.20\build_win32&quot;"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="..\..\..\db-4.4.20\build_win32\Release\libdb44s.lib"
+				OutputFile="./_bsddb.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_bsddb.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e180000"
+				ImportLibrary=".\./_bsddb.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory="./."
+			IntermediateDirectory=".\ia64-temp-release\_bsddb"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include;..\..\PC;&quot;..\..\..\db-4.4.20\build_win32&quot;"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
+				AdditionalDependencies="..\..\..\db-4.4.20\build_win32\Release_IA64\libdb44s.lib"
+				OutputFile="./_bsddb.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_bsddb.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e180000"
+				ImportLibrary=".\./_bsddb.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\_bsddb"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include;..\..\PC;&quot;..\..\..\db-4.4.20\build_win32&quot;"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				AdditionalDependencies="..\..\..\db-4.4.20\build_win32\Release_AMD64\libdb44s.lib bufferoverflowU.lib"
+				OutputFile="./_bsddb.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_bsddb.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e180000"
+				ImportLibrary=".\./_bsddb.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\Modules\_bsddb.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/_ctypes.vcproj b/PC/VS7.1/_ctypes.vcproj
index c359d88..7dad3e1 100644
--- a/PC/VS7.1/_ctypes.vcproj
+++ b/PC/VS7.1/_ctypes.vcproj
@@ -1,311 +1,311 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="_ctypes"

-	ProjectGUID="{F22F40F4-D318-40DC-96B3-88DC81CE0894}"

-	RootNamespace="_ctypes"

-	Keyword="Win32Proj">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\_ctypes"

-			ConfigurationType="2"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\_ctypes\libffi_msvc"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS"

-				MinimalRebuild="FALSE"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="0"

-				WarningLevel="3"

-				Detect64BitPortabilityProblems="FALSE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				OutputFile="./_ctypes_d.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_ctypes_d.pdb"

-				SubSystem="0"

-				BaseAddress="0x1D1A0000"

-				ImportLibrary=".\./_ctypes_d.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\_ctypes"

-			ConfigurationType="2"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\_ctypes\libffi_msvc"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="0"

-				WarningLevel="3"

-				Detect64BitPortabilityProblems="FALSE"

-				DebugInformationFormat="0"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				OutputFile="./_ctypes.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="FALSE"

-				ProgramDatabaseFile=".\./_ctypes.pdb"

-				SubSystem="0"

-				OptimizeReferences="0"

-				EnableCOMDATFolding="0"

-				BaseAddress="0x1D1A0000"

-				ImportLibrary=".\./_ctypes.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\_ctypes"

-			ConfigurationType="2"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON /GS-"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\_ctypes\libffi_msvc"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="0"

-				WarningLevel="3"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK /EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				OutputFile="./_ctypes.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="FALSE"

-				ProgramDatabaseFile=".\./_ctypes.pdb"

-				SubSystem="0"

-				OptimizeReferences="0"

-				EnableCOMDATFolding="0"

-				BaseAddress="0x1D1A0000"

-				ImportLibrary=".\./_ctypes.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="ia64-temp-release\_ctypes"

-			ConfigurationType="2"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\_ctypes\libffi_msvc"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="0"

-				WarningLevel="3"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK /EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				OutputFile="./_ctypes.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="FALSE"

-				ProgramDatabaseFile=".\./_ctypes.pdb"

-				SubSystem="0"

-				OptimizeReferences="0"

-				EnableCOMDATFolding="0"

-				BaseAddress="0x1D1A0000"

-				ImportLibrary=".\./_ctypes.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\Modules\_ctypes\_ctypes.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_ctypes\callbacks.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_ctypes\callproc.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_ctypes\cfield.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffi.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_ctypes\malloc_closure.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_ctypes\libffi_msvc\prep_cif.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_ctypes\stgdict.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_ctypes\libffi_msvc\win32.c">

-			<FileConfiguration

-				Name="ReleaseAMD64|Win32"

-				ExcludedFromBuild="TRUE">

-				<Tool

-					Name="VCCLCompilerTool"/>

-			</FileConfiguration>

-		</File>

-		<File

-			RelativePath="..\..\Modules\_ctypes\libffi_msvc\win64.asm">

-			<FileConfiguration

-				Name="Debug|Win32"

-				ExcludedFromBuild="TRUE">

-				<Tool

-					Name="VCCustomBuildTool"/>

-			</FileConfiguration>

-			<FileConfiguration

-				Name="Release|Win32"

-				ExcludedFromBuild="TRUE">

-				<Tool

-					Name="VCCustomBuildTool"/>

-			</FileConfiguration>

-			<FileConfiguration

-				Name="ReleaseAMD64|Win32">

-				<Tool

-					Name="VCCustomBuildTool"

-					CommandLine="amd64_ml64 /nologo /c /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;

-"

-					Outputs="&quot;$(IntDir)\win64.obj&quot;"/>

-			</FileConfiguration>

-			<FileConfiguration

-				Name="ReleaseItanium|Win32"

-				ExcludedFromBuild="TRUE">

-				<Tool

-					Name="VCCustomBuildTool"/>

-			</FileConfiguration>

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="_ctypes"
+	ProjectGUID="{F22F40F4-D318-40DC-96B3-88DC81CE0894}"
+	RootNamespace="_ctypes"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\_ctypes"
+			ConfigurationType="2"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\_ctypes\libffi_msvc"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS"
+				MinimalRebuild="FALSE"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="FALSE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				OutputFile="./_ctypes_d.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_ctypes_d.pdb"
+				SubSystem="0"
+				BaseAddress="0x1D1A0000"
+				ImportLibrary=".\./_ctypes_d.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\_ctypes"
+			ConfigurationType="2"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\_ctypes\libffi_msvc"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="FALSE"
+				DebugInformationFormat="0"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				OutputFile="./_ctypes.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="FALSE"
+				ProgramDatabaseFile=".\./_ctypes.pdb"
+				SubSystem="0"
+				OptimizeReferences="0"
+				EnableCOMDATFolding="0"
+				BaseAddress="0x1D1A0000"
+				ImportLibrary=".\./_ctypes.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\_ctypes"
+			ConfigurationType="2"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON /GS-"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\_ctypes\libffi_msvc"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK /EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				OutputFile="./_ctypes.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="FALSE"
+				ProgramDatabaseFile=".\./_ctypes.pdb"
+				SubSystem="0"
+				OptimizeReferences="0"
+				EnableCOMDATFolding="0"
+				BaseAddress="0x1D1A0000"
+				ImportLibrary=".\./_ctypes.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="ia64-temp-release\_ctypes"
+			ConfigurationType="2"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\_ctypes\libffi_msvc"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK /EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				OutputFile="./_ctypes.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="FALSE"
+				ProgramDatabaseFile=".\./_ctypes.pdb"
+				SubSystem="0"
+				OptimizeReferences="0"
+				EnableCOMDATFolding="0"
+				BaseAddress="0x1D1A0000"
+				ImportLibrary=".\./_ctypes.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\Modules\_ctypes\_ctypes.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_ctypes\callbacks.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_ctypes\callproc.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_ctypes\cfield.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffi.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_ctypes\malloc_closure.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_ctypes\libffi_msvc\prep_cif.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_ctypes\stgdict.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_ctypes\libffi_msvc\win32.c">
+			<FileConfiguration
+				Name="ReleaseAMD64|Win32"
+				ExcludedFromBuild="TRUE">
+				<Tool
+					Name="VCCLCompilerTool"/>
+			</FileConfiguration>
+		</File>
+		<File
+			RelativePath="..\..\Modules\_ctypes\libffi_msvc\win64.asm">
+			<FileConfiguration
+				Name="Debug|Win32"
+				ExcludedFromBuild="TRUE">
+				<Tool
+					Name="VCCustomBuildTool"/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				ExcludedFromBuild="TRUE">
+				<Tool
+					Name="VCCustomBuildTool"/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="ReleaseAMD64|Win32">
+				<Tool
+					Name="VCCustomBuildTool"
+					CommandLine="amd64_ml64 /nologo /c /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;
+"
+					Outputs="&quot;$(IntDir)\win64.obj&quot;"/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="ReleaseItanium|Win32"
+				ExcludedFromBuild="TRUE">
+				<Tool
+					Name="VCCustomBuildTool"/>
+			</FileConfiguration>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/_ctypes_test.vcproj b/PC/VS7.1/_ctypes_test.vcproj
index e8e8a2c..b85b5d2 100644
--- a/PC/VS7.1/_ctypes_test.vcproj
+++ b/PC/VS7.1/_ctypes_test.vcproj
@@ -1,242 +1,242 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="_ctypes_test"

-	ProjectGUID="{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}"

-	Keyword="Win32Proj">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\_ctypes_test"

-			ConfigurationType="2"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS"

-				MinimalRebuild="FALSE"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="0"

-				WarningLevel="3"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="./_ctypes_test_d.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_ctypes_test_d.pdb"

-				SubSystem="0"

-				ImportLibrary=".\./_ctypes_test_d.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\_ctypes_test"

-			ConfigurationType="2"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="0"

-				WarningLevel="3"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="0"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="./_ctypes_test.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="FALSE"

-				ProgramDatabaseFile=".\./_ctypes_test.pdb"

-				SubSystem="0"

-				OptimizeReferences="0"

-				EnableCOMDATFolding="0"

-				ImportLibrary=".\./_ctypes_test.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="ia64-temp-release\_ctypes_test"

-			ConfigurationType="2"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS"

-				MinimalRebuild="FALSE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="3"

-				BufferSecurityCheck="FALSE"

-				UsePrecompiledHeader="0"

-				WarningLevel="3"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"

-				OutputFile="./_ctypes_test_d.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_ctypes_test_d.pdb"

-				SubSystem="0"

-				ImportLibrary=".\./_ctypes_test_d.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\_ctypes_test"

-			ConfigurationType="2"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="0"

-				WarningLevel="3"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				OutputFile="./_ctypes_test.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="FALSE"

-				ProgramDatabaseFile=".\./_ctypes_test.pdb"

-				SubSystem="0"

-				OptimizeReferences="0"

-				EnableCOMDATFolding="0"

-				ImportLibrary=".\./_ctypes_test.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\Modules\_ctypes\_ctypes_test.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="_ctypes_test"
+	ProjectGUID="{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\_ctypes_test"
+			ConfigurationType="2"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS"
+				MinimalRebuild="FALSE"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="./_ctypes_test_d.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_ctypes_test_d.pdb"
+				SubSystem="0"
+				ImportLibrary=".\./_ctypes_test_d.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\_ctypes_test"
+			ConfigurationType="2"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="0"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="./_ctypes_test.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="FALSE"
+				ProgramDatabaseFile=".\./_ctypes_test.pdb"
+				SubSystem="0"
+				OptimizeReferences="0"
+				EnableCOMDATFolding="0"
+				ImportLibrary=".\./_ctypes_test.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="ia64-temp-release\_ctypes_test"
+			ConfigurationType="2"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS"
+				MinimalRebuild="FALSE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="3"
+				BufferSecurityCheck="FALSE"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
+				OutputFile="./_ctypes_test_d.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_ctypes_test_d.pdb"
+				SubSystem="0"
+				ImportLibrary=".\./_ctypes_test_d.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\_ctypes_test"
+			ConfigurationType="2"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				OutputFile="./_ctypes_test.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="FALSE"
+				ProgramDatabaseFile=".\./_ctypes_test.pdb"
+				SubSystem="0"
+				OptimizeReferences="0"
+				EnableCOMDATFolding="0"
+				ImportLibrary=".\./_ctypes_test.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\Modules\_ctypes\_ctypes_test.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/_elementtree.vcproj b/PC/VS7.1/_elementtree.vcproj
index 21d5cfd..fe22102 100644
--- a/PC/VS7.1/_elementtree.vcproj
+++ b/PC/VS7.1/_elementtree.vcproj
@@ -1,260 +1,260 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="_elementtree"

-	ProjectGUID="{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}"

-	SccProjectName="_elementtree"

-	SccLocalPath="..">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\_elementtree"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;HAVE_EXPAT_H;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="./_elementtree_d.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_elementtree_d.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D100000"

-				ImportLibrary=".\./_elementtree_d.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\_elementtree"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="./_elementtree.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_elementtree.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D100000"

-				ImportLibrary=".\./_elementtree.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory="./."

-			IntermediateDirectory=".\ia64-temp-release\_elementtree"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"

-				OutputFile="./_elementtree.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_elementtree.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D100000"

-				ImportLibrary=".\./_elementtree.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\_elementtree"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				OutputFile="./_elementtree.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_elementtree.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D100000"

-				ImportLibrary=".\./_elementtree.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\Modules\_elementtree.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\expat\xmlparse.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\expat\xmlrole.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\expat\xmltok.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="_elementtree"
+	ProjectGUID="{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}"
+	SccProjectName="_elementtree"
+	SccLocalPath="..">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\_elementtree"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;HAVE_EXPAT_H;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="./_elementtree_d.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_elementtree_d.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D100000"
+				ImportLibrary=".\./_elementtree_d.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\_elementtree"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="./_elementtree.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_elementtree.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D100000"
+				ImportLibrary=".\./_elementtree.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory="./."
+			IntermediateDirectory=".\ia64-temp-release\_elementtree"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
+				OutputFile="./_elementtree.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_elementtree.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D100000"
+				ImportLibrary=".\./_elementtree.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\_elementtree"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				OutputFile="./_elementtree.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_elementtree.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D100000"
+				ImportLibrary=".\./_elementtree.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\Modules\_elementtree.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\expat\xmlparse.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\expat\xmlrole.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\expat\xmltok.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/_msi.vcproj b/PC/VS7.1/_msi.vcproj
index d4fd447..ecbcb85 100644
--- a/PC/VS7.1/_msi.vcproj
+++ b/PC/VS7.1/_msi.vcproj
@@ -1,252 +1,252 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="_msi"

-	ProjectGUID="{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}"

-	SccProjectName="_msi"

-	SccLocalPath="..\..\pc">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\_msi"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS;_USRDLL"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				OutputFile="./_msi_d.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_msi_d.pdb"

-				BaseAddress="0x1D160000"

-				ImportLibrary=".\./_msi_d.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\_msi"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				OutputFile="./_msi.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				ProgramDatabaseFile=".\./_msi.pdb"

-				BaseAddress="0x1D160000"

-				ImportLibrary=".\./_msi.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\ia64-temp-release\_msi"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib bufferoverflowU.lib"

-				OutputFile="./_msi.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				ProgramDatabaseFile=".\./_msi.pdb"

-				BaseAddress="0x1D160000"

-				ImportLibrary=".\./_msi.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\_msi"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib bufferoverflowU.lib"

-				OutputFile="./_msi.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				ProgramDatabaseFile=".\./_msi.pdb"

-				BaseAddress="0x1D160000"

-				ImportLibrary=".\./_msi.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\PC\_msi.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="_msi"
+	ProjectGUID="{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}"
+	SccProjectName="_msi"
+	SccLocalPath="..\..\pc">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\_msi"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS;_USRDLL"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				OutputFile="./_msi_d.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_msi_d.pdb"
+				BaseAddress="0x1D160000"
+				ImportLibrary=".\./_msi_d.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\_msi"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				OutputFile="./_msi.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				ProgramDatabaseFile=".\./_msi.pdb"
+				BaseAddress="0x1D160000"
+				ImportLibrary=".\./_msi.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\ia64-temp-release\_msi"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib bufferoverflowU.lib"
+				OutputFile="./_msi.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				ProgramDatabaseFile=".\./_msi.pdb"
+				BaseAddress="0x1D160000"
+				ImportLibrary=".\./_msi.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\_msi"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib bufferoverflowU.lib"
+				OutputFile="./_msi.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				ProgramDatabaseFile=".\./_msi.pdb"
+				BaseAddress="0x1D160000"
+				ImportLibrary=".\./_msi.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\PC\_msi.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/_socket.vcproj b/PC/VS7.1/_socket.vcproj
index ffed8e4..157d7d9 100644
--- a/PC/VS7.1/_socket.vcproj
+++ b/PC/VS7.1/_socket.vcproj
@@ -1,254 +1,254 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="_socket"

-	SccProjectName="_socket"

-	SccLocalPath="..">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\_socket"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;WIN32;_WINDOWS"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				OutputFile="./_socket_d.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_socket_d.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e1D0000"

-				ImportLibrary=".\./_socket_d.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\_socket"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				OutputFile="./_socket.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_socket.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e1D0000"

-				ImportLibrary=".\./_socket.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory="./."

-			IntermediateDirectory=".\ia64-temp-release\_socket"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"

-				AdditionalDependencies="ws2_32.lib"

-				OutputFile="./_socket.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_socket.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e1D0000"

-				ImportLibrary=".\./_socket.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\_socket"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				AdditionalDependencies="ws2_32.lib"

-				OutputFile="./_socket.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_socket.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e1D0000"

-				ImportLibrary=".\./_socket.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\Modules\socketmodule.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="_socket"
+	SccProjectName="_socket"
+	SccLocalPath="..">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\_socket"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;WIN32;_WINDOWS"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				OutputFile="./_socket_d.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_socket_d.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e1D0000"
+				ImportLibrary=".\./_socket_d.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\_socket"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				OutputFile="./_socket.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_socket.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e1D0000"
+				ImportLibrary=".\./_socket.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory="./."
+			IntermediateDirectory=".\ia64-temp-release\_socket"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
+				AdditionalDependencies="ws2_32.lib"
+				OutputFile="./_socket.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_socket.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e1D0000"
+				ImportLibrary=".\./_socket.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\_socket"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				AdditionalDependencies="ws2_32.lib"
+				OutputFile="./_socket.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_socket.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e1D0000"
+				ImportLibrary=".\./_socket.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\Modules\socketmodule.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/_sqlite3.vcproj b/PC/VS7.1/_sqlite3.vcproj
index 9f7d991..de86c6f 100644
--- a/PC/VS7.1/_sqlite3.vcproj
+++ b/PC/VS7.1/_sqlite3.vcproj
@@ -1,283 +1,283 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="_sqlite3"

-	ProjectGUID="{2FF0A312-22F9-4C34-B070-842916DE27A9}"

-	SccProjectName="_sqlite3"

-	SccLocalPath="..">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\_sqlite3"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include;..\..\PC;..\..\..\sqlite-source-3.3.4"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;WIN32;_WINDOWS;MODULE_NAME=\&quot;sqlite3\&quot;"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="..\..\..\sqlite-source-3.3.4\sqlite3.lib"

-				OutputFile="./_sqlite3_d.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames=""

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_sqlite3_d.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e180000"

-				ImportLibrary=".\./_sqlite3_d.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\_sqlite3"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include;..\..\PC;..\..\..\sqlite-source-3.3.4"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;MODULE_NAME=\&quot;sqlite3\&quot;"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="..\..\..\sqlite-source-3.3.4\sqlite3.lib"

-				OutputFile="./_sqlite3.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames=""

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_sqlite3.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e180000"

-				ImportLibrary=".\./_sqlite3.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory="./."

-			IntermediateDirectory=".\ia64-temp-release\_sqlite3"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include;..\..\PC;..\..\..\sqlite-source-3.3.4"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;MODULE_NAME=\&quot;sqlite3\&quot;"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"

-				AdditionalDependencies="..\..\..\sqlite-source-3.3.4\ia64\sqlite3.lib"

-				OutputFile="./_sqlite3.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames=""

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_sqlite3.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e180000"

-				ImportLibrary=".\./_sqlite3.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\_sqlite3"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include;..\..\PC;..\..\..\sqlite-source-3.3.4"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;MODULE_NAME=\&quot;sqlite3\&quot;"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				AdditionalDependencies="..\..\..\sqlite-source-3.3.4\amd64\sqlite3.lib"

-				OutputFile="./_sqlite3.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames=""

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_sqlite3.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e180000"

-				ImportLibrary=".\./_sqlite3.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\Modules\_sqlite\cache.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_sqlite\connection.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_sqlite\cursor.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_sqlite\microprotocols.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_sqlite\module.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_sqlite\prepare_protocol.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_sqlite\row.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_sqlite\statement.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_sqlite\util.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="_sqlite3"
+	ProjectGUID="{2FF0A312-22F9-4C34-B070-842916DE27A9}"
+	SccProjectName="_sqlite3"
+	SccLocalPath="..">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\_sqlite3"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include;..\..\PC;..\..\..\sqlite-source-3.3.4"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;WIN32;_WINDOWS;MODULE_NAME=\&quot;sqlite3\&quot;"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="..\..\..\sqlite-source-3.3.4\sqlite3.lib"
+				OutputFile="./_sqlite3_d.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_sqlite3_d.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e180000"
+				ImportLibrary=".\./_sqlite3_d.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\_sqlite3"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include;..\..\PC;..\..\..\sqlite-source-3.3.4"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;MODULE_NAME=\&quot;sqlite3\&quot;"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="..\..\..\sqlite-source-3.3.4\sqlite3.lib"
+				OutputFile="./_sqlite3.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_sqlite3.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e180000"
+				ImportLibrary=".\./_sqlite3.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory="./."
+			IntermediateDirectory=".\ia64-temp-release\_sqlite3"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include;..\..\PC;..\..\..\sqlite-source-3.3.4"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;MODULE_NAME=\&quot;sqlite3\&quot;"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
+				AdditionalDependencies="..\..\..\sqlite-source-3.3.4\ia64\sqlite3.lib"
+				OutputFile="./_sqlite3.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_sqlite3.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e180000"
+				ImportLibrary=".\./_sqlite3.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\_sqlite3"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include;..\..\PC;..\..\..\sqlite-source-3.3.4"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;MODULE_NAME=\&quot;sqlite3\&quot;"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				AdditionalDependencies="..\..\..\sqlite-source-3.3.4\amd64\sqlite3.lib"
+				OutputFile="./_sqlite3.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_sqlite3.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e180000"
+				ImportLibrary=".\./_sqlite3.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\Modules\_sqlite\cache.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_sqlite\connection.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_sqlite\cursor.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_sqlite\microprotocols.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_sqlite\module.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_sqlite\prepare_protocol.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_sqlite\row.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_sqlite\statement.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_sqlite\util.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/_ssl.vcproj b/PC/VS7.1/_ssl.vcproj
index 56d65fe..78eadd2 100644
--- a/PC/VS7.1/_ssl.vcproj
+++ b/PC/VS7.1/_ssl.vcproj
@@ -1,84 +1,84 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="_ssl"

-	RootNamespace="_ssl"

-	SccProjectName=""

-	SccLocalPath=""

-	Keyword="MakeFileProj">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\_ssl"

-			ConfigurationType="0"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCNMakeTool"

-				BuildCommandLine="build_ssl.bat $(ConfigurationName)"

-				ReBuildCommandLine="build_ssl.bat $(ConfigurationName) -a"

-				CleanCommandLine="echo Nothing to do"

-				Output="_ssl.pyd"/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\_ssl"

-			ConfigurationType="0"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCNMakeTool"

-				BuildCommandLine="build_ssl.bat $(ConfigurationName)"

-				ReBuildCommandLine="build_ssl.bat $(ConfigurationName) -a"

-				CleanCommandLine="echo Nothing to do"

-				Output="_ssl_d.pyd"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory="./."

-			IntermediateDirectory=".\ia64-temp-release\_ssl"

-			ConfigurationType="0"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCNMakeTool"

-				BuildCommandLine="build_ssl.bat $(ConfigurationName)"

-				ReBuildCommandLine="build_ssl.bat $(ConfigurationName) -a"

-				CleanCommandLine="echo Nothing to do"

-				Output="_ssl.pyd"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\_ssl"

-			ConfigurationType="0"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCNMakeTool"

-				BuildCommandLine="build_ssl.bat $(ConfigurationName)"

-				ReBuildCommandLine="build_ssl.bat $(ConfigurationName) -a"

-				CleanCommandLine="echo Nothing to do"

-				Output="_ssl.pyd"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\Modules\_ssl.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_hashopenssl.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="_ssl"
+	RootNamespace="_ssl"
+	SccProjectName=""
+	SccLocalPath=""
+	Keyword="MakeFileProj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\_ssl"
+			ConfigurationType="0"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="build_ssl.bat $(ConfigurationName)"
+				ReBuildCommandLine="build_ssl.bat $(ConfigurationName) -a"
+				CleanCommandLine="echo Nothing to do"
+				Output="_ssl.pyd"/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\_ssl"
+			ConfigurationType="0"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="build_ssl.bat $(ConfigurationName)"
+				ReBuildCommandLine="build_ssl.bat $(ConfigurationName) -a"
+				CleanCommandLine="echo Nothing to do"
+				Output="_ssl_d.pyd"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory="./."
+			IntermediateDirectory=".\ia64-temp-release\_ssl"
+			ConfigurationType="0"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="build_ssl.bat $(ConfigurationName)"
+				ReBuildCommandLine="build_ssl.bat $(ConfigurationName) -a"
+				CleanCommandLine="echo Nothing to do"
+				Output="_ssl.pyd"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\_ssl"
+			ConfigurationType="0"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="build_ssl.bat $(ConfigurationName)"
+				ReBuildCommandLine="build_ssl.bat $(ConfigurationName) -a"
+				CleanCommandLine="echo Nothing to do"
+				Output="_ssl.pyd"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\Modules\_ssl.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_hashopenssl.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/_testcapi.vcproj b/PC/VS7.1/_testcapi.vcproj
index 0197842..5261597 100644
--- a/PC/VS7.1/_testcapi.vcproj
+++ b/PC/VS7.1/_testcapi.vcproj
@@ -1,247 +1,247 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="_testcapi"

-	SccProjectName="_testcapi"

-	SccLocalPath="..">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\_testcapi"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="./_testcapi.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				ProgramDatabaseFile=".\./_testcapi.pdb"

-				BaseAddress="0x1e1F0000"

-				ImportLibrary=".\./_testcapi.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\_testcapi"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="./_testcapi_d.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_testcapi_d.pdb"

-				BaseAddress="0x1e1F0000"

-				ImportLibrary=".\./_testcapi_d.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory="./."

-			IntermediateDirectory=".\ia64-temp-release\_testcapi"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"

-				OutputFile="./_testcapi.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				ProgramDatabaseFile=".\./_testcapi.pdb"

-				BaseAddress="0x1e1F0000"

-				ImportLibrary=".\./_testcapi.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\_testcapi"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				OutputFile="./_testcapi.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				ProgramDatabaseFile=".\./_testcapi.pdb"

-				BaseAddress="0x1e1F0000"

-				ImportLibrary=".\./_testcapi.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\Modules\_testcapimodule.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="_testcapi"
+	SccProjectName="_testcapi"
+	SccLocalPath="..">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\_testcapi"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="./_testcapi.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				ProgramDatabaseFile=".\./_testcapi.pdb"
+				BaseAddress="0x1e1F0000"
+				ImportLibrary=".\./_testcapi.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\_testcapi"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="./_testcapi_d.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_testcapi_d.pdb"
+				BaseAddress="0x1e1F0000"
+				ImportLibrary=".\./_testcapi_d.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory="./."
+			IntermediateDirectory=".\ia64-temp-release\_testcapi"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
+				OutputFile="./_testcapi.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				ProgramDatabaseFile=".\./_testcapi.pdb"
+				BaseAddress="0x1e1F0000"
+				ImportLibrary=".\./_testcapi.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\_testcapi"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				OutputFile="./_testcapi.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				ProgramDatabaseFile=".\./_testcapi.pdb"
+				BaseAddress="0x1e1F0000"
+				ImportLibrary=".\./_testcapi.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\Modules\_testcapimodule.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/_tkinter.vcproj b/PC/VS7.1/_tkinter.vcproj
index fe16e85..07fc6c3 100644
--- a/PC/VS7.1/_tkinter.vcproj
+++ b/PC/VS7.1/_tkinter.vcproj
@@ -1,261 +1,261 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="_tkinter"

-	SccProjectName="_tkinter"

-	SccLocalPath="..\..\..\..">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\_tkinter"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\..\tcltk\include,..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;WITH_APPINIT"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="..\..\..\tcltk\lib\tk84.lib ..\..\..\tcltk\lib\tcl84.lib"

-				OutputFile="./_tkinter.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				AdditionalLibraryDirectories=""

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_tkinter.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e190000"

-				ImportLibrary=".\./_tkinter.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\_tkinter"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\..\tcltk\include,..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;WIN32;_WINDOWS;WITH_APPINIT"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="..\..\..\tcltk\lib\tk84.lib ..\..\..\tcltk\lib\tcl84.lib"

-				OutputFile="./_tkinter_d.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				AdditionalLibraryDirectories=""

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_tkinter_d.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e190000"

-				ImportLibrary=".\./_tkinter_d.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory="./."

-			IntermediateDirectory=".\ia64-temp-release\_tkinter"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\..\tcltk\include,..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;WITH_APPINIT"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"

-				AdditionalDependencies="..\..\..\tcltk\lib\tk84.lib ..\..\..\tcltk\lib\tcl84.lib"

-				OutputFile="./_tkinter.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				AdditionalLibraryDirectories=""

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_tkinter.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e190000"

-				ImportLibrary=".\./_tkinter.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\_tkinter"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\..\tcltk\include,..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;WITH_APPINIT"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				AdditionalDependencies="..\..\..\tcltk\lib\tk84.lib ..\..\..\tcltk\lib\tcl84.lib"

-				OutputFile="./_tkinter.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				AdditionalLibraryDirectories=""

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./_tkinter.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e190000"

-				ImportLibrary=".\./_tkinter.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\Modules\_tkinter.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\tkappinit.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="_tkinter"
+	SccProjectName="_tkinter"
+	SccLocalPath="..\..\..\..">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\_tkinter"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\..\tcltk\include,..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;WITH_APPINIT"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="..\..\..\tcltk\lib\tk84.lib ..\..\..\tcltk\lib\tcl84.lib"
+				OutputFile="./_tkinter.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				AdditionalLibraryDirectories=""
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_tkinter.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e190000"
+				ImportLibrary=".\./_tkinter.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\_tkinter"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\..\tcltk\include,..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;WIN32;_WINDOWS;WITH_APPINIT"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="..\..\..\tcltk\lib\tk84.lib ..\..\..\tcltk\lib\tcl84.lib"
+				OutputFile="./_tkinter_d.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				AdditionalLibraryDirectories=""
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_tkinter_d.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e190000"
+				ImportLibrary=".\./_tkinter_d.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory="./."
+			IntermediateDirectory=".\ia64-temp-release\_tkinter"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\..\tcltk\include,..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;WITH_APPINIT"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
+				AdditionalDependencies="..\..\..\tcltk\lib\tk84.lib ..\..\..\tcltk\lib\tcl84.lib"
+				OutputFile="./_tkinter.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				AdditionalLibraryDirectories=""
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_tkinter.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e190000"
+				ImportLibrary=".\./_tkinter.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\_tkinter"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\..\tcltk\include,..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;WITH_APPINIT"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				AdditionalDependencies="..\..\..\tcltk\lib\tk84.lib ..\..\..\tcltk\lib\tcl84.lib"
+				OutputFile="./_tkinter.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				AdditionalLibraryDirectories=""
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./_tkinter.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e190000"
+				ImportLibrary=".\./_tkinter.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\Modules\_tkinter.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\tkappinit.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/amd64_ml64.bat b/PC/VS7.1/amd64_ml64.bat
index aa77017..fa9acf1 100644
--- a/PC/VS7.1/amd64_ml64.bat
+++ b/PC/VS7.1/amd64_ml64.bat
@@ -1,17 +1,17 @@
-@echo off

-rem Try to find the AMD64 assembler and call it with the supplied arguments.

-

-set MLEXE=Microsoft Platform SDK\Bin\Win64\x86\AMD64\ml64.EXE

-

-rem For the environment variables see also

-rem http://msdn.microsoft.com/library/en-us/win64/win64/wow64_implementation_details.asp

-

-if exist "%ProgramFiles%\%MLEXE%" (

-  set ML64="%ProgramFiles%\%MLEXE%"

-) else if exist "%ProgramW6432%\%MLEXE%" (

-  set ML64="%ProgramW6432%\%MLEXE%"

-) else (

-  set ML64=ml64.exe

-)

-

-%ML64% %*

+@echo off
+rem Try to find the AMD64 assembler and call it with the supplied arguments.
+
+set MLEXE=Microsoft Platform SDK\Bin\Win64\x86\AMD64\ml64.EXE
+
+rem For the environment variables see also
+rem http://msdn.microsoft.com/library/en-us/win64/win64/wow64_implementation_details.asp
+
+if exist "%ProgramFiles%\%MLEXE%" (
+  set ML64="%ProgramFiles%\%MLEXE%"
+) else if exist "%ProgramW6432%\%MLEXE%" (
+  set ML64="%ProgramW6432%\%MLEXE%"
+) else (
+  set ML64=ml64.exe
+)
+
+%ML64% %*
diff --git a/PC/VS7.1/build_ssl.bat b/PC/VS7.1/build_ssl.bat
index 9aad441..f6be3c0 100644
--- a/PC/VS7.1/build_ssl.bat
+++ b/PC/VS7.1/build_ssl.bat
@@ -1,12 +1,12 @@
-if "%1" == "ReleaseAMD64" call "%MSSdk%\SetEnv" /XP64 /RETAIL

-

-@echo off

-if not defined HOST_PYTHON (

-  if %1 EQU Debug (

-    set HOST_PYTHON=python_d.exe

-  ) ELSE (

-    set HOST_PYTHON=python.exe

-  )

-)

-%HOST_PYTHON% build_ssl.py %1 %2

-

+if "%1" == "ReleaseAMD64" call "%MSSdk%\SetEnv" /XP64 /RETAIL
+
+@echo off
+if not defined HOST_PYTHON (
+  if %1 EQU Debug (
+    set HOST_PYTHON=python_d.exe
+  ) ELSE (
+    set HOST_PYTHON=python.exe
+  )
+)
+%HOST_PYTHON% build_ssl.py %1 %2
+
diff --git a/PC/VS7.1/bz2.vcproj b/PC/VS7.1/bz2.vcproj
index 0b005a1..bdd085d 100644
--- a/PC/VS7.1/bz2.vcproj
+++ b/PC/VS7.1/bz2.vcproj
@@ -1,271 +1,271 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="bz2"

-	RootNamespace="bz2"

-	SccProjectName="bz2"

-	SccLocalPath="..">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\bz2"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\..\bzip2-1.0.3"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;WIN32;_WINDOWS"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="..\..\..\bzip2-1.0.3\libbz2.lib"

-				OutputFile="./bz2_d.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames="msvcrt,libc"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./bz2_d.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D170000"

-				ImportLibrary=".\./bz2_d.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine="cd ..\..\..\bzip2-1.0.3

-nmake /nologo /f makefile.msc

-"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\bz2"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\..\bzip2-1.0.3"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="..\..\..\bzip2-1.0.3\libbz2.lib"

-				OutputFile="./bz2.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames="libc"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./bz2.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D170000"

-				ImportLibrary=".\./bz2.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine="cd ..\..\..\bzip2-1.0.3

-nmake /nologo /f makefile.msc lib

-"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory="./."

-			IntermediateDirectory=".\ia64-temp-release\bz2"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\..\bzip2-1.0.3"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"

-				AdditionalDependencies="..\..\..\bzip2-1.0.3\libbz2.lib"

-				OutputFile="./bz2.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames="libc"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./bz2.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D170000"

-				ImportLibrary=".\./bz2.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine="cd ..\..\..\bzip2-1.0.3

-nmake /nologo /f makefile.msc lib

-"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\bz2"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\..\bzip2-1.0.3"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				AdditionalDependencies="..\..\..\bzip2-1.0.3\libbz2.lib"

-				OutputFile="./bz2.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames="libc"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./bz2.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D170000"

-				ImportLibrary=".\./bz2.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine="cd ..\..\..\bzip2-1.0.3

-nmake /nologo /f makefile.msc lib

-"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\Modules\bz2module.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="bz2"
+	RootNamespace="bz2"
+	SccProjectName="bz2"
+	SccLocalPath="..">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\bz2"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\..\bzip2-1.0.3"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;WIN32;_WINDOWS"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="..\..\..\bzip2-1.0.3\libbz2.lib"
+				OutputFile="./bz2_d.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames="msvcrt,libc"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./bz2_d.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D170000"
+				ImportLibrary=".\./bz2_d.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine="cd ..\..\..\bzip2-1.0.3
+nmake /nologo /f makefile.msc
+"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\bz2"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\..\bzip2-1.0.3"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="..\..\..\bzip2-1.0.3\libbz2.lib"
+				OutputFile="./bz2.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames="libc"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./bz2.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D170000"
+				ImportLibrary=".\./bz2.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine="cd ..\..\..\bzip2-1.0.3
+nmake /nologo /f makefile.msc lib
+"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory="./."
+			IntermediateDirectory=".\ia64-temp-release\bz2"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\..\bzip2-1.0.3"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
+				AdditionalDependencies="..\..\..\bzip2-1.0.3\libbz2.lib"
+				OutputFile="./bz2.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames="libc"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./bz2.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D170000"
+				ImportLibrary=".\./bz2.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine="cd ..\..\..\bzip2-1.0.3
+nmake /nologo /f makefile.msc lib
+"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\bz2"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\..\bzip2-1.0.3"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				AdditionalDependencies="..\..\..\bzip2-1.0.3\libbz2.lib"
+				OutputFile="./bz2.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames="libc"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./bz2.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D170000"
+				ImportLibrary=".\./bz2.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine="cd ..\..\..\bzip2-1.0.3
+nmake /nologo /f makefile.msc lib
+"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\Modules\bz2module.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/make_buildinfo.vcproj b/PC/VS7.1/make_buildinfo.vcproj
index d0c8a5d..c49f0fd 100644
--- a/PC/VS7.1/make_buildinfo.vcproj
+++ b/PC/VS7.1/make_buildinfo.vcproj
@@ -1,122 +1,122 @@
-<?xml version="1.0" encoding="windows-1250"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="make_buildinfo"

-	ProjectGUID="{C73F0EC1-358B-4177-940F-0846AC8B04CD}"

-	Keyword="Win32Proj">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory="."

-			IntermediateDirectory=".\x86-temp-release\make_buildinfo"

-			ConfigurationType="1"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"

-				MinimalRebuild="TRUE"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="5"

-				UsePrecompiledHeader="0"

-				WarningLevel="3"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="4"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)/make_buildinfo.exe"

-				LinkIncremental="2"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile="$(OutDir)/make_buildinfo.pdb"

-				SubSystem="1"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory="."

-			IntermediateDirectory=".\x86-temp-release\make_buildinfo"

-			ConfigurationType="1"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"

-				RuntimeLibrary="4"

-				UsePrecompiledHeader="0"

-				WarningLevel="3"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)/make_buildinfo.exe"

-				LinkIncremental="1"

-				GenerateDebugInformation="TRUE"

-				SubSystem="1"

-				OptimizeReferences="2"

-				EnableCOMDATFolding="2"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"

-			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">

-			<File

-				RelativePath=".\make_buildinfo.c">

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="windows-1250"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="make_buildinfo"
+	ProjectGUID="{C73F0EC1-358B-4177-940F-0846AC8B04CD}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="."
+			IntermediateDirectory=".\x86-temp-release\make_buildinfo"
+			ConfigurationType="1"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="TRUE"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="5"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="4"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)/make_buildinfo.exe"
+				LinkIncremental="2"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile="$(OutDir)/make_buildinfo.pdb"
+				SubSystem="1"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="."
+			IntermediateDirectory=".\x86-temp-release\make_buildinfo"
+			ConfigurationType="1"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				RuntimeLibrary="4"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)/make_buildinfo.exe"
+				LinkIncremental="1"
+				GenerateDebugInformation="TRUE"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+			<File
+				RelativePath=".\make_buildinfo.c">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/make_versioninfo.vcproj b/PC/VS7.1/make_versioninfo.vcproj
index a3ad121..5c6c9c5 100644
--- a/PC/VS7.1/make_versioninfo.vcproj
+++ b/PC/VS7.1/make_versioninfo.vcproj
@@ -1,140 +1,140 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="make_versioninfo"

-	RootNamespace="make_versioninfo"

-	SccProjectName="make_versioninfo"

-	SccLocalPath="..">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\make_versioninfo"

-			ConfigurationType="1"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"

-				CommandLine=".\make_versioninfo.exe &gt;..\..\PC\pythonnt_rc.h

-"

-				Outputs="..\..\PC\pythonnt_rc.h"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile=".\./make_versioninfo.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./make_versioninfo.pdb"

-				SubSystem="1"

-				BaseAddress="0x1d000000"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"

-				CommandLine="$(TargetFileName) &gt; ..\..\PC\python_nt.h"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\make_versioninfo"

-			ConfigurationType="1"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				BrowseInformation="1"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"

-				CommandLine=".\make_versioninfo_d.exe &gt;..\..\PC\pythonnt_rc_d.h

-"

-				Outputs="..\..\PC\pythonnt_rc_d.h"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="./make_versioninfo_d.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./make_versioninfo_d.pdb"

-				SubSystem="1"

-				BaseAddress="0x1d000000"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"

-				CommandLine="$(TargetFileName) &gt; ..\..\PC\python_nt_d.h"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\PC\make_versioninfo.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="make_versioninfo"
+	RootNamespace="make_versioninfo"
+	SccProjectName="make_versioninfo"
+	SccLocalPath="..">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\make_versioninfo"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"
+				CommandLine=".\make_versioninfo.exe &gt;..\..\PC\pythonnt_rc.h
+"
+				Outputs="..\..\PC\pythonnt_rc.h"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile=".\./make_versioninfo.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./make_versioninfo.pdb"
+				SubSystem="1"
+				BaseAddress="0x1d000000"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(TargetFileName) &gt; ..\..\PC\python_nt.h"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\make_versioninfo"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"
+				CommandLine=".\make_versioninfo_d.exe &gt;..\..\PC\pythonnt_rc_d.h
+"
+				Outputs="..\..\PC\pythonnt_rc_d.h"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="./make_versioninfo_d.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./make_versioninfo_d.pdb"
+				SubSystem="1"
+				BaseAddress="0x1d000000"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(TargetFileName) &gt; ..\..\PC\python_nt_d.h"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\PC\make_versioninfo.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/pcbuild.sln b/PC/VS7.1/pcbuild.sln
index 336d3f7..e44a39e 100644
--- a/PC/VS7.1/pcbuild.sln
+++ b/PC/VS7.1/pcbuild.sln
@@ -1,288 +1,288 @@
-Microsoft Visual Studio Solution File, Format Version 8.00

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb", "_bsddb.vcproj", "{E1DBB220-D64B-423D-A545-539A55AA7FE2}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_socket", "_socket.vcproj", "{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ssl", "_ssl.vcproj", "{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}"

-	ProjectSection(ProjectDependencies) = postProject

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9} = {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058} = {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testcapi", "_testcapi.vcproj", "{59CBF474-9E06-4C50-9142-C44A118BB447}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_tkinter", "_tkinter.vcproj", "{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bz2", "bz2.vcproj", "{AC557788-6354-43F7-BE05-C9C8C59A344A}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_versioninfo", "make_versioninfo.vcproj", "{F0E0541E-F17D-430B-97C4-93ADF0DD284E}"

-	ProjectSection(ProjectDependencies) = postProject

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pyexpat", "pyexpat.vcproj", "{7E551393-3C43-47F8-9F3F-5BC368A6C487}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python", "python.vcproj", "{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythoncore", "pythoncore.vcproj", "{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"

-	ProjectSection(ProjectDependencies) = postProject

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E} = {F0E0541E-F17D-430B-97C4-93ADF0DD284E}

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD} = {C73F0EC1-358B-4177-940F-0846AC8B04CD}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythonw", "pythonw.vcproj", "{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "select", "select.vcproj", "{97239A56-DBC0-41D2-BC14-C87D9B97D63B}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unicodedata", "unicodedata.vcproj", "{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w9xpopen", "w9xpopen.vcproj", "{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}"

-	ProjectSection(ProjectDependencies) = postProject

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winsound", "winsound.vcproj", "{51F35FAE-FB92-4B2C-9187-1542C065AD77}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_elementtree", "_elementtree.vcproj", "{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_buildinfo", "make_buildinfo.vcproj", "{C73F0EC1-358B-4177-940F-0846AC8B04CD}"

-	ProjectSection(ProjectDependencies) = postProject

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_msi", "_msi.vcproj", "{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes", "_ctypes.vcproj", "{F22F40F4-D318-40DC-96B3-88DC81CE0894}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes_test", "_ctypes_test.vcproj", "{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}"

-	ProjectSection(ProjectDependencies) = postProject

-		{F22F40F4-D318-40DC-96B3-88DC81CE0894} = {F22F40F4-D318-40DC-96B3-88DC81CE0894}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_sqlite3", "_sqlite3.vcproj", "{2FF0A312-22F9-4C34-B070-842916DE27A9}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Global

-	GlobalSection(SolutionConfiguration) = preSolution

-		Debug = Debug

-		Release = Release

-		ReleaseAMD64 = ReleaseAMD64

-		ReleaseItanium = ReleaseItanium

-	EndGlobalSection

-	GlobalSection(ProjectConfiguration) = postSolution

-		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.Debug.ActiveCfg = Debug|Win32

-		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.Debug.Build.0 = Debug|Win32

-		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.Release.ActiveCfg = Release|Win32

-		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.Release.Build.0 = Release|Win32

-		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.Debug.ActiveCfg = Debug|Win32

-		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.Debug.Build.0 = Debug|Win32

-		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.Release.ActiveCfg = Release|Win32

-		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.Release.Build.0 = Release|Win32

-		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.Debug.ActiveCfg = Debug|Win32

-		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.Debug.Build.0 = Debug|Win32

-		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.Release.ActiveCfg = Release|Win32

-		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.Release.Build.0 = Release|Win32

-		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-		{59CBF474-9E06-4C50-9142-C44A118BB447}.Debug.ActiveCfg = Debug|Win32

-		{59CBF474-9E06-4C50-9142-C44A118BB447}.Debug.Build.0 = Debug|Win32

-		{59CBF474-9E06-4C50-9142-C44A118BB447}.Release.ActiveCfg = Release|Win32

-		{59CBF474-9E06-4C50-9142-C44A118BB447}.Release.Build.0 = Release|Win32

-		{59CBF474-9E06-4C50-9142-C44A118BB447}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{59CBF474-9E06-4C50-9142-C44A118BB447}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{59CBF474-9E06-4C50-9142-C44A118BB447}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{59CBF474-9E06-4C50-9142-C44A118BB447}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.Debug.ActiveCfg = Debug|Win32

-		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.Debug.Build.0 = Debug|Win32

-		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.Release.ActiveCfg = Release|Win32

-		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.Release.Build.0 = Release|Win32

-		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-		{AC557788-6354-43F7-BE05-C9C8C59A344A}.Debug.ActiveCfg = Debug|Win32

-		{AC557788-6354-43F7-BE05-C9C8C59A344A}.Debug.Build.0 = Debug|Win32

-		{AC557788-6354-43F7-BE05-C9C8C59A344A}.Release.ActiveCfg = Release|Win32

-		{AC557788-6354-43F7-BE05-C9C8C59A344A}.Release.Build.0 = Release|Win32

-		{AC557788-6354-43F7-BE05-C9C8C59A344A}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{AC557788-6354-43F7-BE05-C9C8C59A344A}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{AC557788-6354-43F7-BE05-C9C8C59A344A}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{AC557788-6354-43F7-BE05-C9C8C59A344A}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug.ActiveCfg = Debug|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug.Build.0 = Debug|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release.ActiveCfg = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release.Build.0 = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseAMD64.ActiveCfg = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseAMD64.Build.0 = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseItanium.ActiveCfg = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseItanium.Build.0 = Release|Win32

-		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.Debug.ActiveCfg = Debug|Win32

-		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.Debug.Build.0 = Debug|Win32

-		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.Release.ActiveCfg = Release|Win32

-		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.Release.Build.0 = Release|Win32

-		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug.ActiveCfg = Debug|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug.Build.0 = Debug|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release.ActiveCfg = Release|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release.Build.0 = Release|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug.ActiveCfg = Debug|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug.Build.0 = Debug|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release.ActiveCfg = Release|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release.Build.0 = Release|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug.ActiveCfg = Debug|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug.Build.0 = Debug|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release.ActiveCfg = Release|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release.Build.0 = Release|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Debug.ActiveCfg = Debug|Win32

-		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Debug.Build.0 = Debug|Win32

-		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Release.ActiveCfg = Release|Win32

-		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Release.Build.0 = Release|Win32

-		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Debug.ActiveCfg = Debug|Win32

-		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Debug.Build.0 = Debug|Win32

-		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Release.ActiveCfg = Release|Win32

-		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Release.Build.0 = Release|Win32

-		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug.ActiveCfg = Debug|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug.Build.0 = Debug|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release.ActiveCfg = Release|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release.Build.0 = Release|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.ReleaseAMD64.ActiveCfg = Release|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.ReleaseItanium.ActiveCfg = Release|Win32

-		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.Debug.ActiveCfg = Debug|Win32

-		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.Debug.Build.0 = Debug|Win32

-		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.Release.ActiveCfg = Release|Win32

-		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.Release.Build.0 = Release|Win32

-		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Debug.ActiveCfg = Debug|Win32

-		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Debug.Build.0 = Debug|Win32

-		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Release.ActiveCfg = Release|Win32

-		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Release.Build.0 = Release|Win32

-		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug.ActiveCfg = Debug|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug.Build.0 = Debug|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseAMD64.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseAMD64.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseItanium.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseItanium.Build.0 = Release|Win32

-		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Debug.ActiveCfg = Debug|Win32

-		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Debug.Build.0 = Debug|Win32

-		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Release.ActiveCfg = Release|Win32

-		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Release.Build.0 = Release|Win32

-		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-		{F22F40F4-D318-40DC-96B3-88DC81CE0894}.Debug.ActiveCfg = Debug|Win32

-		{F22F40F4-D318-40DC-96B3-88DC81CE0894}.Debug.Build.0 = Debug|Win32

-		{F22F40F4-D318-40DC-96B3-88DC81CE0894}.Release.ActiveCfg = Release|Win32

-		{F22F40F4-D318-40DC-96B3-88DC81CE0894}.Release.Build.0 = Release|Win32

-		{F22F40F4-D318-40DC-96B3-88DC81CE0894}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{F22F40F4-D318-40DC-96B3-88DC81CE0894}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{F22F40F4-D318-40DC-96B3-88DC81CE0894}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Debug.ActiveCfg = Debug|Win32

-		{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Debug.Build.0 = Debug|Win32

-		{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Release.ActiveCfg = Release|Win32

-		{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Release.Build.0 = Release|Win32

-		{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{2FF0A312-22F9-4C34-B070-842916DE27A9}.Debug.ActiveCfg = Debug|Win32

-		{2FF0A312-22F9-4C34-B070-842916DE27A9}.Debug.Build.0 = Debug|Win32

-		{2FF0A312-22F9-4C34-B070-842916DE27A9}.Release.ActiveCfg = Release|Win32

-		{2FF0A312-22F9-4C34-B070-842916DE27A9}.Release.Build.0 = Release|Win32

-		{2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32

-		{2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32

-		{2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32

-		{2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseItanium.Build.0 = ReleaseItanium|Win32

-	EndGlobalSection

-	GlobalSection(SolutionItems) = postSolution

-		..\Modules\getbuildinfo.c = ..\Modules\getbuildinfo.c

-		readme.txt = readme.txt

-	EndGlobalSection

-	GlobalSection(ExtensibilityGlobals) = postSolution

-	EndGlobalSection

-	GlobalSection(ExtensibilityAddIns) = postSolution

-	EndGlobalSection

-EndGlobal

+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb", "_bsddb.vcproj", "{E1DBB220-D64B-423D-A545-539A55AA7FE2}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_socket", "_socket.vcproj", "{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ssl", "_ssl.vcproj", "{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}"
+	ProjectSection(ProjectDependencies) = postProject
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9} = {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058} = {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testcapi", "_testcapi.vcproj", "{59CBF474-9E06-4C50-9142-C44A118BB447}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_tkinter", "_tkinter.vcproj", "{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bz2", "bz2.vcproj", "{AC557788-6354-43F7-BE05-C9C8C59A344A}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_versioninfo", "make_versioninfo.vcproj", "{F0E0541E-F17D-430B-97C4-93ADF0DD284E}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pyexpat", "pyexpat.vcproj", "{7E551393-3C43-47F8-9F3F-5BC368A6C487}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python", "python.vcproj", "{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythoncore", "pythoncore.vcproj", "{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"
+	ProjectSection(ProjectDependencies) = postProject
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E} = {F0E0541E-F17D-430B-97C4-93ADF0DD284E}
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD} = {C73F0EC1-358B-4177-940F-0846AC8B04CD}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythonw", "pythonw.vcproj", "{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "select", "select.vcproj", "{97239A56-DBC0-41D2-BC14-C87D9B97D63B}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unicodedata", "unicodedata.vcproj", "{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w9xpopen", "w9xpopen.vcproj", "{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winsound", "winsound.vcproj", "{51F35FAE-FB92-4B2C-9187-1542C065AD77}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_elementtree", "_elementtree.vcproj", "{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_buildinfo", "make_buildinfo.vcproj", "{C73F0EC1-358B-4177-940F-0846AC8B04CD}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_msi", "_msi.vcproj", "{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes", "_ctypes.vcproj", "{F22F40F4-D318-40DC-96B3-88DC81CE0894}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes_test", "_ctypes_test.vcproj", "{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}"
+	ProjectSection(ProjectDependencies) = postProject
+		{F22F40F4-D318-40DC-96B3-88DC81CE0894} = {F22F40F4-D318-40DC-96B3-88DC81CE0894}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_sqlite3", "_sqlite3.vcproj", "{2FF0A312-22F9-4C34-B070-842916DE27A9}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfiguration) = preSolution
+		Debug = Debug
+		Release = Release
+		ReleaseAMD64 = ReleaseAMD64
+		ReleaseItanium = ReleaseItanium
+	EndGlobalSection
+	GlobalSection(ProjectConfiguration) = postSolution
+		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.Debug.ActiveCfg = Debug|Win32
+		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.Debug.Build.0 = Debug|Win32
+		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.Release.ActiveCfg = Release|Win32
+		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.Release.Build.0 = Release|Win32
+		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{E1DBB220-D64B-423D-A545-539A55AA7FE2}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.Debug.ActiveCfg = Debug|Win32
+		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.Debug.Build.0 = Debug|Win32
+		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.Release.ActiveCfg = Release|Win32
+		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.Release.Build.0 = Release|Win32
+		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.Debug.ActiveCfg = Debug|Win32
+		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.Debug.Build.0 = Debug|Win32
+		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.Release.ActiveCfg = Release|Win32
+		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.Release.Build.0 = Release|Win32
+		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{8E85BA54-8A47-4C8B-B72E-8E17579CC6D7}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+		{59CBF474-9E06-4C50-9142-C44A118BB447}.Debug.ActiveCfg = Debug|Win32
+		{59CBF474-9E06-4C50-9142-C44A118BB447}.Debug.Build.0 = Debug|Win32
+		{59CBF474-9E06-4C50-9142-C44A118BB447}.Release.ActiveCfg = Release|Win32
+		{59CBF474-9E06-4C50-9142-C44A118BB447}.Release.Build.0 = Release|Win32
+		{59CBF474-9E06-4C50-9142-C44A118BB447}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{59CBF474-9E06-4C50-9142-C44A118BB447}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{59CBF474-9E06-4C50-9142-C44A118BB447}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{59CBF474-9E06-4C50-9142-C44A118BB447}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.Debug.ActiveCfg = Debug|Win32
+		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.Debug.Build.0 = Debug|Win32
+		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.Release.ActiveCfg = Release|Win32
+		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.Release.Build.0 = Release|Win32
+		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{5B51DFF7-5DC0-41F8-8791-A4AB7114A151}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+		{AC557788-6354-43F7-BE05-C9C8C59A344A}.Debug.ActiveCfg = Debug|Win32
+		{AC557788-6354-43F7-BE05-C9C8C59A344A}.Debug.Build.0 = Debug|Win32
+		{AC557788-6354-43F7-BE05-C9C8C59A344A}.Release.ActiveCfg = Release|Win32
+		{AC557788-6354-43F7-BE05-C9C8C59A344A}.Release.Build.0 = Release|Win32
+		{AC557788-6354-43F7-BE05-C9C8C59A344A}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{AC557788-6354-43F7-BE05-C9C8C59A344A}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{AC557788-6354-43F7-BE05-C9C8C59A344A}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{AC557788-6354-43F7-BE05-C9C8C59A344A}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug.ActiveCfg = Debug|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug.Build.0 = Debug|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release.ActiveCfg = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release.Build.0 = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseAMD64.ActiveCfg = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseAMD64.Build.0 = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseItanium.ActiveCfg = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseItanium.Build.0 = Release|Win32
+		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.Debug.ActiveCfg = Debug|Win32
+		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.Debug.Build.0 = Debug|Win32
+		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.Release.ActiveCfg = Release|Win32
+		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.Release.Build.0 = Release|Win32
+		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{7E551393-3C43-47F8-9F3F-5BC368A6C487}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug.ActiveCfg = Debug|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug.Build.0 = Debug|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release.ActiveCfg = Release|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release.Build.0 = Release|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug.ActiveCfg = Debug|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug.Build.0 = Debug|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release.ActiveCfg = Release|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release.Build.0 = Release|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug.ActiveCfg = Debug|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug.Build.0 = Debug|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release.ActiveCfg = Release|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release.Build.0 = Release|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Debug.ActiveCfg = Debug|Win32
+		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Debug.Build.0 = Debug|Win32
+		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Release.ActiveCfg = Release|Win32
+		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Release.Build.0 = Release|Win32
+		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Debug.ActiveCfg = Debug|Win32
+		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Debug.Build.0 = Debug|Win32
+		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Release.ActiveCfg = Release|Win32
+		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Release.Build.0 = Release|Win32
+		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug.ActiveCfg = Debug|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug.Build.0 = Debug|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release.ActiveCfg = Release|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release.Build.0 = Release|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.ReleaseAMD64.ActiveCfg = Release|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.ReleaseItanium.ActiveCfg = Release|Win32
+		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.Debug.ActiveCfg = Debug|Win32
+		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.Debug.Build.0 = Debug|Win32
+		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.Release.ActiveCfg = Release|Win32
+		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.Release.Build.0 = Release|Win32
+		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Debug.ActiveCfg = Debug|Win32
+		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Debug.Build.0 = Debug|Win32
+		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Release.ActiveCfg = Release|Win32
+		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Release.Build.0 = Release|Win32
+		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug.ActiveCfg = Debug|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug.Build.0 = Debug|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseAMD64.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseAMD64.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseItanium.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseItanium.Build.0 = Release|Win32
+		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Debug.ActiveCfg = Debug|Win32
+		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Debug.Build.0 = Debug|Win32
+		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Release.ActiveCfg = Release|Win32
+		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Release.Build.0 = Release|Win32
+		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+		{F22F40F4-D318-40DC-96B3-88DC81CE0894}.Debug.ActiveCfg = Debug|Win32
+		{F22F40F4-D318-40DC-96B3-88DC81CE0894}.Debug.Build.0 = Debug|Win32
+		{F22F40F4-D318-40DC-96B3-88DC81CE0894}.Release.ActiveCfg = Release|Win32
+		{F22F40F4-D318-40DC-96B3-88DC81CE0894}.Release.Build.0 = Release|Win32
+		{F22F40F4-D318-40DC-96B3-88DC81CE0894}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{F22F40F4-D318-40DC-96B3-88DC81CE0894}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{F22F40F4-D318-40DC-96B3-88DC81CE0894}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Debug.ActiveCfg = Debug|Win32
+		{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Debug.Build.0 = Debug|Win32
+		{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Release.ActiveCfg = Release|Win32
+		{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Release.Build.0 = Release|Win32
+		{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{2FF0A312-22F9-4C34-B070-842916DE27A9}.Debug.ActiveCfg = Debug|Win32
+		{2FF0A312-22F9-4C34-B070-842916DE27A9}.Debug.Build.0 = Debug|Win32
+		{2FF0A312-22F9-4C34-B070-842916DE27A9}.Release.ActiveCfg = Release|Win32
+		{2FF0A312-22F9-4C34-B070-842916DE27A9}.Release.Build.0 = Release|Win32
+		{2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32
+		{2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32
+		{2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32
+		{2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseItanium.Build.0 = ReleaseItanium|Win32
+	EndGlobalSection
+	GlobalSection(SolutionItems) = postSolution
+		..\Modules\getbuildinfo.c = ..\Modules\getbuildinfo.c
+		readme.txt = readme.txt
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+	EndGlobalSection
+	GlobalSection(ExtensibilityAddIns) = postSolution
+	EndGlobalSection
+EndGlobal
diff --git a/PC/VS7.1/pyexpat.vcproj b/PC/VS7.1/pyexpat.vcproj
index 59a70bb..71f0032 100644
--- a/PC/VS7.1/pyexpat.vcproj
+++ b/PC/VS7.1/pyexpat.vcproj
@@ -1,259 +1,259 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="pyexpat"

-	SccProjectName="pyexpat"

-	SccLocalPath="..">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\pyexpat"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;HAVE_EXPAT_H;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="./pyexpat_d.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./pyexpat_d.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D100000"

-				ImportLibrary=".\./pyexpat_d.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\pyexpat"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="./pyexpat.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./pyexpat.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D100000"

-				ImportLibrary=".\./pyexpat.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory="./."

-			IntermediateDirectory=".\ia64-temp-release\pyexpat"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"

-				OutputFile="./pyexpat.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./pyexpat.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D100000"

-				ImportLibrary=".\./pyexpat.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\pyexpat"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON  /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				OutputFile="./pyexpat.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./pyexpat.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D100000"

-				ImportLibrary=".\./pyexpat.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\Modules\pyexpat.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\expat\xmlparse.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\expat\xmlrole.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\expat\xmltok.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="pyexpat"
+	SccProjectName="pyexpat"
+	SccLocalPath="..">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\pyexpat"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;HAVE_EXPAT_H;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="./pyexpat_d.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./pyexpat_d.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D100000"
+				ImportLibrary=".\./pyexpat_d.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\pyexpat"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="./pyexpat.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./pyexpat.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D100000"
+				ImportLibrary=".\./pyexpat.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory="./."
+			IntermediateDirectory=".\ia64-temp-release\pyexpat"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
+				OutputFile="./pyexpat.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./pyexpat.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D100000"
+				ImportLibrary=".\./pyexpat.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\pyexpat"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON  /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC,..\..\Modules\expat"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				OutputFile="./pyexpat.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./pyexpat.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D100000"
+				ImportLibrary=".\./pyexpat.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\Modules\pyexpat.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\expat\xmlparse.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\expat\xmlrole.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\expat\xmltok.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/python.vcproj b/PC/VS7.1/python.vcproj
index d832eee..b3f046f 100644
--- a/PC/VS7.1/python.vcproj
+++ b/PC/VS7.1/python.vcproj
@@ -1,270 +1,270 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="python"

-	SccProjectName="python"

-	SccLocalPath="..">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\python"

-			ConfigurationType="1"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile=".\./python.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./python.pdb"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\python"

-			ConfigurationType="1"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				BrowseInformation="1"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="./python_d.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./python_d.pdb"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\ia64-temp-release\python"

-			ConfigurationType="1"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM  /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK /VSEXTCOMP_VERBOSE"

-				OutputFile=".\./python.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./python.pdb"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\python"

-			ConfigurationType="1"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				OutputFile=".\./python.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./python.pdb"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\PC\pycon.ico">

-		</File>

-		<File

-			RelativePath="..\..\Modules\python.c">

-		</File>

-		<File

-			RelativePath="..\..\PC\python_exe.rc">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="python"
+	SccProjectName="python"
+	SccLocalPath="..">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\python"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile=".\./python.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./python.pdb"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\python"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="./python_d.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./python_d.pdb"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\ia64-temp-release\python"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM  /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK /VSEXTCOMP_VERBOSE"
+				OutputFile=".\./python.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./python.pdb"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\python"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				OutputFile=".\./python.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./python.pdb"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\PC\pycon.ico">
+		</File>
+		<File
+			RelativePath="..\..\Modules\python.c">
+		</File>
+		<File
+			RelativePath="..\..\PC\python_exe.rc">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/pythoncore.vcproj b/PC/VS7.1/pythoncore.vcproj
index 817b0c0..5ca8891 100644
--- a/PC/VS7.1/pythoncore.vcproj
+++ b/PC/VS7.1/pythoncore.vcproj
@@ -1,868 +1,868 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="pythoncore"

-	ProjectGUID="{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"

-	RootNamespace="pythoncore"

-	SccProjectName="pythoncore"

-	SccLocalPath="..">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\pythoncore"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions="/Zm200 "

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="getbuildinfo.o"

-				OutputFile="./python27.dll"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames="libc"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./python27.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e000000"

-				ImportLibrary=".\./python27.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				Description="generate buildinfo"

-				CommandLine="make_buildinfo.exe $(ConfigurationName)"/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\pythoncore"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions="/Zm200 "

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;USE_DL_EXPORT;WIN32;_WINDOWS"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="getbuildinfo.o"

-				OutputFile="./python27_d.dll"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames="libc"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./python27_d.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e000000"

-				ImportLibrary=".\./python27_d.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				Description="generate buildinfo"

-				CommandLine="make_buildinfo.exe $(ConfigurationName)"/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory="./."

-			IntermediateDirectory=".\ia64-temp-release\pythoncore"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"

-				AdditionalDependencies="getbuildinfo.o"

-				OutputFile="./python27.dll"

-				LinkIncremental="1"

-				SuppressStartupBanner="FALSE"

-				IgnoreDefaultLibraryNames="libc"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./python27.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e000000"

-				ImportLibrary=".\./python27.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				Description="generate buildinfo"

-				CommandLine="make_buildinfo.exe $(ConfigurationName)"/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="./."

-			IntermediateDirectory=".\amd64-temp-release\pythoncore"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions="/Zm200  /USECL:MS_OPTERON /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				AdditionalDependencies="getbuildinfo.o"

-				OutputFile="./python27.dll"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames="libc"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./python27.pdb"

-				SubSystem="2"

-				BaseAddress="0x1e000000"

-				ImportLibrary=".\./python27.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				Description="generate buildinfo"

-				CommandLine="make_buildinfo.exe $(ConfigurationName)"/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="zlib"

-			Filter="">

-			<File

-				RelativePath="..\..\Modules\zlib\adler32.c">

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlib\compress.c">

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlib\crc32.c">

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlib\deflate.c">

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlib\gzclose.c">

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlib\gzlib.c">

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlib\gzread.c">

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlib\gzwrite.c">

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlib\infback.c">

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlib\inffast.c">

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlib\inflate.c">

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlib\inftrees.c">

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlib\trees.c">

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlib\uncompr.c">

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlibmodule.c">

-				<FileConfiguration

-					Name="Release|Win32">

-					<Tool

-						Name="VCCLCompilerTool"

-						AdditionalIncludeDirectories="..\..\Modules\zlib"/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Debug|Win32">

-					<Tool

-						Name="VCCLCompilerTool"

-						AdditionalIncludeDirectories="..\..\Modules\zlib"/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="ReleaseItanium|Win32">

-					<Tool

-						Name="VCCLCompilerTool"

-						AdditionalIncludeDirectories="..\..\Modules\zlib"/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="ReleaseAMD64|Win32">

-					<Tool

-						Name="VCCLCompilerTool"

-						AdditionalIncludeDirectories="..\..\Modules\zlib"/>

-				</FileConfiguration>

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlib\zutil.c">

-			</File>

-		</Filter>

-		<File

-			RelativePath="..\..\Modules\_bisectmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\cjkcodecs\_codecs_cn.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\cjkcodecs\_codecs_hk.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\cjkcodecs\_codecs_iso2022.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\cjkcodecs\_codecs_jp.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\cjkcodecs\_codecs_kr.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\cjkcodecs\_codecs_tw.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_codecsmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_csv.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_functoolsmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_heapqmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_hotshot.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_io\_iomodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_json.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_localemodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_lsprof.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_math.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_randommodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_sre.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_struct.c">

-		</File>

-		<File

-			RelativePath="..\..\Pc\_subprocess.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_weakref.c">

-		</File>

-		<File

-			RelativePath="..\..\Pc\_winreg.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\abstract.c">

-		</File>

-		<File

-			RelativePath="..\..\Parser\acceler.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\arraymodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\_warnings.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\asdl.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\ast.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\audioop.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\binascii.c">

-		</File>

-		<File

-			RelativePath="..\..\Parser\bitset.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\bltinmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\boolobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_io\bufferedio.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\bufferobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\bytearrayobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_io\bytesio.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\stringobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\bytes_methods.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\capsule.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\cellobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\ceval.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\classobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\cmathmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\cobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\codecs.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\codeobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_collectionsmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\compile.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\complexobject.c">

-		</File>

-		<File

-			RelativePath="..\..\PC\config.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\cPickle.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\cStringIO.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\datetimemodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\descrobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\dictobject.c">

-		</File>

-		<!--File

-			RelativePath="..\..\Objects\doubledigits.c">

-		</File-->

-		<File

-			RelativePath="..\..\PC\dl_nt.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\dtoa.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\dynload_win.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\enumobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\errnomodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\errors.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\exceptions.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_io\fileio.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\fileobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Parser\firstsets.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\floatobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\formatter_string.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\formatter_unicode.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\frameobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\frozen.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\funcobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\future.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\future_builtins.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\gcmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\genobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\getargs.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\getcompiler.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\getcopyright.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\getopt.c">

-		</File>

-		<File

-			RelativePath="..\..\PC\getpathp.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\getplatform.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\getversion.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\graminit.c">

-		</File>

-		<File

-			RelativePath="..\..\Parser\grammar.c">

-		</File>

-		<File

-			RelativePath="..\..\Parser\grammar1.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\imageop.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\import.c">

-		</File>

-		<File

-			RelativePath="..\..\PC\import_nt.c">

-			<FileConfiguration

-				Name="Release|Win32">

-				<Tool

-					Name="VCCLCompilerTool"

-					AdditionalIncludeDirectories="..\..\Python"/>

-			</FileConfiguration>

-			<FileConfiguration

-				Name="Debug|Win32">

-				<Tool

-					Name="VCCLCompilerTool"

-					AdditionalIncludeDirectories="..\..\Python"/>

-			</FileConfiguration>

-			<FileConfiguration

-				Name="ReleaseItanium|Win32">

-				<Tool

-					Name="VCCLCompilerTool"

-					AdditionalIncludeDirectories="..\..\Python"/>

-			</FileConfiguration>

-			<FileConfiguration

-				Name="ReleaseAMD64|Win32">

-				<Tool

-					Name="VCCLCompilerTool"

-					AdditionalIncludeDirectories="..\..\Python"/>

-			</FileConfiguration>

-		</File>

-		<File

-			RelativePath="..\..\Python\importdl.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\intobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_io\iobase.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\iterobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\itertoolsmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Parser\listnode.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\listobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\longobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\main.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\marshal.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\mathmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\md5.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\md5module.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\memoryobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Parser\metagrammar.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\methodobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\mmapmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\modsupport.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\moduleobject.c">

-		</File>

-		<File

-			RelativePath="..\..\PC\msvcrtmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\cjkcodecs\multibytecodec.c">

-		</File>

-		<File

-			RelativePath="..\..\Parser\myreadline.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\mysnprintf.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\mystrtoul.c">

-		</File>

-		<File

-			RelativePath="..\..\Parser\node.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\object.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\obmalloc.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\operator.c">

-		</File>

-		<File

-			RelativePath="..\..\Parser\parser.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\parsermodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Parser\parsetok.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\peephole.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\posixmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\pyarena.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\pyctype.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\pyfpe.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\pymath.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\pystate.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\pystrcmp.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\pystrtod.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\Python-ast.c">

-		</File>

-		<File

-			RelativePath="..\..\PC\python_nt.rc">

-		</File>

-		<File

-			RelativePath="..\..\Python\pythonrun.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\random.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\rangeobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\rotatingtree.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\setobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\sha256module.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\sha512module.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\shamodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\signalmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\sliceobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_io\stringio.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\stropmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\structmember.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\structseq.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\symtable.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\symtablemodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\sysmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\_io\textio.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\thread.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\threadmodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\timemodule.c">

-		</File>

-		<File

-			RelativePath="..\..\Parser\tokenizer.c">

-		</File>

-		<File

-			RelativePath="..\..\Python\traceback.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\tupleobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\typeobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\unicodectype.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\unicodeobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Objects\weakrefobject.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\xxsubtype.c">

-		</File>

-		<File

-			RelativePath="..\..\Modules\zipimport.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="pythoncore"
+	ProjectGUID="{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"
+	RootNamespace="pythoncore"
+	SccProjectName="pythoncore"
+	SccLocalPath="..">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\pythoncore"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/Zm200 "
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="getbuildinfo.o"
+				OutputFile="./python27.dll"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames="libc"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./python27.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e000000"
+				ImportLibrary=".\./python27.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				Description="generate buildinfo"
+				CommandLine="make_buildinfo.exe $(ConfigurationName)"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\pythoncore"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/Zm200 "
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;USE_DL_EXPORT;WIN32;_WINDOWS"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="getbuildinfo.o"
+				OutputFile="./python27_d.dll"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames="libc"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./python27_d.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e000000"
+				ImportLibrary=".\./python27_d.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				Description="generate buildinfo"
+				CommandLine="make_buildinfo.exe $(ConfigurationName)"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory="./."
+			IntermediateDirectory=".\ia64-temp-release\pythoncore"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
+				AdditionalDependencies="getbuildinfo.o"
+				OutputFile="./python27.dll"
+				LinkIncremental="1"
+				SuppressStartupBanner="FALSE"
+				IgnoreDefaultLibraryNames="libc"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./python27.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e000000"
+				ImportLibrary=".\./python27.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				Description="generate buildinfo"
+				CommandLine="make_buildinfo.exe $(ConfigurationName)"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="./."
+			IntermediateDirectory=".\amd64-temp-release\pythoncore"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/Zm200  /USECL:MS_OPTERON /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				AdditionalDependencies="getbuildinfo.o"
+				OutputFile="./python27.dll"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames="libc"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./python27.pdb"
+				SubSystem="2"
+				BaseAddress="0x1e000000"
+				ImportLibrary=".\./python27.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				Description="generate buildinfo"
+				CommandLine="make_buildinfo.exe $(ConfigurationName)"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="zlib"
+			Filter="">
+			<File
+				RelativePath="..\..\Modules\zlib\adler32.c">
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlib\compress.c">
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlib\crc32.c">
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlib\deflate.c">
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlib\gzclose.c">
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlib\gzlib.c">
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlib\gzread.c">
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlib\gzwrite.c">
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlib\infback.c">
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlib\inffast.c">
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlib\inflate.c">
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlib\inftrees.c">
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlib\trees.c">
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlib\uncompr.c">
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlibmodule.c">
+				<FileConfiguration
+					Name="Release|Win32">
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories="..\..\Modules\zlib"/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|Win32">
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories="..\..\Modules\zlib"/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="ReleaseItanium|Win32">
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories="..\..\Modules\zlib"/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="ReleaseAMD64|Win32">
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories="..\..\Modules\zlib"/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlib\zutil.c">
+			</File>
+		</Filter>
+		<File
+			RelativePath="..\..\Modules\_bisectmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\cjkcodecs\_codecs_cn.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\cjkcodecs\_codecs_hk.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\cjkcodecs\_codecs_iso2022.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\cjkcodecs\_codecs_jp.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\cjkcodecs\_codecs_kr.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\cjkcodecs\_codecs_tw.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_codecsmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_csv.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_functoolsmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_heapqmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_hotshot.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_io\_iomodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_json.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_localemodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_lsprof.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_math.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_randommodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_sre.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_struct.c">
+		</File>
+		<File
+			RelativePath="..\..\Pc\_subprocess.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_weakref.c">
+		</File>
+		<File
+			RelativePath="..\..\Pc\_winreg.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\abstract.c">
+		</File>
+		<File
+			RelativePath="..\..\Parser\acceler.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\arraymodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\_warnings.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\asdl.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\ast.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\audioop.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\binascii.c">
+		</File>
+		<File
+			RelativePath="..\..\Parser\bitset.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\bltinmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\boolobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_io\bufferedio.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\bufferobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\bytearrayobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_io\bytesio.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\stringobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\bytes_methods.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\capsule.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\cellobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\ceval.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\classobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\cmathmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\cobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\codecs.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\codeobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_collectionsmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\compile.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\complexobject.c">
+		</File>
+		<File
+			RelativePath="..\..\PC\config.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\cPickle.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\cStringIO.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\datetimemodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\descrobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\dictobject.c">
+		</File>
+		<!--File
+			RelativePath="..\..\Objects\doubledigits.c">
+		</File-->
+		<File
+			RelativePath="..\..\PC\dl_nt.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\dtoa.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\dynload_win.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\enumobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\errnomodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\errors.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\exceptions.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_io\fileio.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\fileobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Parser\firstsets.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\floatobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\formatter_string.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\formatter_unicode.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\frameobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\frozen.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\funcobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\future.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\future_builtins.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\gcmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\genobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\getargs.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\getcompiler.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\getcopyright.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\getopt.c">
+		</File>
+		<File
+			RelativePath="..\..\PC\getpathp.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\getplatform.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\getversion.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\graminit.c">
+		</File>
+		<File
+			RelativePath="..\..\Parser\grammar.c">
+		</File>
+		<File
+			RelativePath="..\..\Parser\grammar1.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\imageop.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\import.c">
+		</File>
+		<File
+			RelativePath="..\..\PC\import_nt.c">
+			<FileConfiguration
+				Name="Release|Win32">
+				<Tool
+					Name="VCCLCompilerTool"
+					AdditionalIncludeDirectories="..\..\Python"/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Debug|Win32">
+				<Tool
+					Name="VCCLCompilerTool"
+					AdditionalIncludeDirectories="..\..\Python"/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="ReleaseItanium|Win32">
+				<Tool
+					Name="VCCLCompilerTool"
+					AdditionalIncludeDirectories="..\..\Python"/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="ReleaseAMD64|Win32">
+				<Tool
+					Name="VCCLCompilerTool"
+					AdditionalIncludeDirectories="..\..\Python"/>
+			</FileConfiguration>
+		</File>
+		<File
+			RelativePath="..\..\Python\importdl.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\intobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_io\iobase.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\iterobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\itertoolsmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Parser\listnode.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\listobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\longobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\main.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\marshal.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\mathmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\md5.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\md5module.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\memoryobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Parser\metagrammar.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\methodobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\mmapmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\modsupport.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\moduleobject.c">
+		</File>
+		<File
+			RelativePath="..\..\PC\msvcrtmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\cjkcodecs\multibytecodec.c">
+		</File>
+		<File
+			RelativePath="..\..\Parser\myreadline.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\mysnprintf.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\mystrtoul.c">
+		</File>
+		<File
+			RelativePath="..\..\Parser\node.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\object.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\obmalloc.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\operator.c">
+		</File>
+		<File
+			RelativePath="..\..\Parser\parser.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\parsermodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Parser\parsetok.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\peephole.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\posixmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\pyarena.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\pyctype.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\pyfpe.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\pymath.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\pystate.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\pystrcmp.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\pystrtod.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\Python-ast.c">
+		</File>
+		<File
+			RelativePath="..\..\PC\python_nt.rc">
+		</File>
+		<File
+			RelativePath="..\..\Python\pythonrun.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\random.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\rangeobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\rotatingtree.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\setobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\sha256module.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\sha512module.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\shamodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\signalmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\sliceobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_io\stringio.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\stropmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\structmember.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\structseq.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\symtable.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\symtablemodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\sysmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\_io\textio.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\thread.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\threadmodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\timemodule.c">
+		</File>
+		<File
+			RelativePath="..\..\Parser\tokenizer.c">
+		</File>
+		<File
+			RelativePath="..\..\Python\traceback.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\tupleobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\typeobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\unicodectype.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\unicodeobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Objects\weakrefobject.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\xxsubtype.c">
+		</File>
+		<File
+			RelativePath="..\..\Modules\zipimport.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/pythonw.vcproj b/PC/VS7.1/pythonw.vcproj
index 47d7f50..823d27c 100644
--- a/PC/VS7.1/pythonw.vcproj
+++ b/PC/VS7.1/pythonw.vcproj
@@ -1,261 +1,261 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="pythonw"

-	SccProjectName="pythonw"

-	SccLocalPath="..\..\pc">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\pythonw"

-			ConfigurationType="1"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="./pythonw_d.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./pythonw_d.pdb"

-				SubSystem="2"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\pythonw"

-			ConfigurationType="1"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile=".\./pythonw.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./pythonw.pdb"

-				SubSystem="2"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\ia64-temp-release\pythonw"

-			ConfigurationType="1"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"

-				OutputFile=".\./pythonw.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./pythonw.pdb"

-				SubSystem="2"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\pythonw"

-			ConfigurationType="1"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				OutputFile=".\./pythonw.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./pythonw.pdb"

-				SubSystem="2"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\PC\python_exe.rc">

-		</File>

-		<File

-			RelativePath="..\..\PC\WinMain.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="pythonw"
+	SccProjectName="pythonw"
+	SccLocalPath="..\..\pc">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\pythonw"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="./pythonw_d.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./pythonw_d.pdb"
+				SubSystem="2"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\pythonw"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile=".\./pythonw.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./pythonw.pdb"
+				SubSystem="2"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\ia64-temp-release\pythonw"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
+				OutputFile=".\./pythonw.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./pythonw.pdb"
+				SubSystem="2"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\pythonw"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				OutputFile=".\./pythonw.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./pythonw.pdb"
+				SubSystem="2"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\PC\python_exe.rc">
+		</File>
+		<File
+			RelativePath="..\..\PC\WinMain.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/rt.bat b/PC/VS7.1/rt.bat
index 2c1a6a7..29801d2 100755
--- a/PC/VS7.1/rt.bat
+++ b/PC/VS7.1/rt.bat
@@ -1,52 +1,52 @@
-@echo off

-rem Run Tests.  Run the regression test suite.

-rem Usage:  rt [-d] [-O] [-q] regrtest_args

-rem -d   Run Debug build (python_d.exe).  Else release build.

-rem -O   Run python.exe or python_d.exe (see -d) with -O.

-rem -q   "quick" -- normally the tests are run twice, the first time

-rem      after deleting all the .py[co] files reachable from Lib/.

-rem      -q runs the tests just once, and without deleting .py[co] files.

-rem All leading instances of these switches are shifted off, and

-rem whatever remains is passed to regrtest.py.  For example,

-rem     rt -O -d -x test_thread

-rem runs

-rem     python_d -O ../../lib/test/regrtest.py -x test_thread

-rem twice, and

-rem     rt -q -g test_binascii

-rem runs

-rem     python_d ../../lib/test/regrtest.py -g test_binascii

-rem to generate the expected-output file for binascii quickly.

-rem

-rem Confusing:  if you want to pass a comma-separated list, like

-rem     -u network,largefile

-rem then you have to quote it on the rt line, like

-rem     rt -u "network,largefile"

-

-setlocal

-

-set exe=python

-set qmode=

-set dashO=

-PATH %PATH%;..\..\..\tcltk\bin

-

-:CheckOpts

-if "%1"=="-O" (set dashO=-O)     & shift & goto CheckOpts

-if "%1"=="-q" (set qmode=yes)    & shift & goto CheckOpts

-if "%1"=="-d" (set exe=python_d) & shift & goto CheckOpts

-

-set cmd=%exe% %dashO% -E -tt ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9

-if defined qmode goto Qmode

-

-echo Deleting .pyc/.pyo files ...

-%exe% rmpyc.py

-

-echo on

-%cmd%

-@echo off

-

-echo About to run again without deleting .pyc/.pyo first:

-pause

-

-:Qmode

-echo on

-%cmd%

+@echo off
+rem Run Tests.  Run the regression test suite.
+rem Usage:  rt [-d] [-O] [-q] regrtest_args
+rem -d   Run Debug build (python_d.exe).  Else release build.
+rem -O   Run python.exe or python_d.exe (see -d) with -O.
+rem -q   "quick" -- normally the tests are run twice, the first time
+rem      after deleting all the .py[co] files reachable from Lib/.
+rem      -q runs the tests just once, and without deleting .py[co] files.
+rem All leading instances of these switches are shifted off, and
+rem whatever remains is passed to regrtest.py.  For example,
+rem     rt -O -d -x test_thread
+rem runs
+rem     python_d -O ../../lib/test/regrtest.py -x test_thread
+rem twice, and
+rem     rt -q -g test_binascii
+rem runs
+rem     python_d ../../lib/test/regrtest.py -g test_binascii
+rem to generate the expected-output file for binascii quickly.
+rem
+rem Confusing:  if you want to pass a comma-separated list, like
+rem     -u network,largefile
+rem then you have to quote it on the rt line, like
+rem     rt -u "network,largefile"
+
+setlocal
+
+set exe=python
+set qmode=
+set dashO=
+PATH %PATH%;..\..\..\tcltk\bin
+
+:CheckOpts
+if "%1"=="-O" (set dashO=-O)     & shift & goto CheckOpts
+if "%1"=="-q" (set qmode=yes)    & shift & goto CheckOpts
+if "%1"=="-d" (set exe=python_d) & shift & goto CheckOpts
+
+set cmd=%exe% %dashO% -E -tt ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9
+if defined qmode goto Qmode
+
+echo Deleting .pyc/.pyo files ...
+%exe% rmpyc.py
+
+echo on
+%cmd%
+@echo off
+
+echo About to run again without deleting .pyc/.pyo first:
+pause
+
+:Qmode
+echo on
+%cmd%
diff --git a/PC/VS7.1/select.vcproj b/PC/VS7.1/select.vcproj
index 8252d45..79c26f3 100644
--- a/PC/VS7.1/select.vcproj
+++ b/PC/VS7.1/select.vcproj
@@ -1,258 +1,258 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="select"

-	SccProjectName="select"

-	SccLocalPath="..">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\select"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				OutputFile="./select.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames="libc"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./select.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D110000"

-				ImportLibrary=".\./select.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\select"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;WIN32;_WINDOWS"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				OutputFile="./select_d.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames="libc,msvcrt"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./select_d.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D110000"

-				ImportLibrary=".\./select_d.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\ia64-temp-release\select"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"

-				AdditionalDependencies="ws2_32.lib"

-				OutputFile="./select.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames="libc"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./select.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D110000"

-				ImportLibrary=".\./select.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\select"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				AdditionalDependencies="ws2_32.lib"

-				OutputFile="./select.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames="libc"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./select.pdb"

-				SubSystem="2"

-				BaseAddress="0x1D110000"

-				ImportLibrary=".\./select.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\Modules\selectmodule.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="select"
+	SccProjectName="select"
+	SccLocalPath="..">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\select"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				OutputFile="./select.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames="libc"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./select.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D110000"
+				ImportLibrary=".\./select.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\select"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;_DEBUG;WIN32;_WINDOWS"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				OutputFile="./select_d.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames="libc,msvcrt"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./select_d.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D110000"
+				ImportLibrary=".\./select_d.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\ia64-temp-release\select"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
+				AdditionalDependencies="ws2_32.lib"
+				OutputFile="./select.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames="libc"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./select.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D110000"
+				ImportLibrary=".\./select.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\select"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;NDEBUG;WIN32;_WINDOWS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				AdditionalDependencies="ws2_32.lib"
+				OutputFile="./select.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames="libc"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./select.pdb"
+				SubSystem="2"
+				BaseAddress="0x1D110000"
+				ImportLibrary=".\./select.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\Modules\selectmodule.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/unicodedata.vcproj b/PC/VS7.1/unicodedata.vcproj
index 7f47f9b..b6f2808 100644
--- a/PC/VS7.1/unicodedata.vcproj
+++ b/PC/VS7.1/unicodedata.vcproj
@@ -1,247 +1,247 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="unicodedata"

-	SccProjectName="unicodedata"

-	SccLocalPath="..">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\unicodedata"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="./unicodedata.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				ProgramDatabaseFile=".\./unicodedata.pdb"

-				BaseAddress="0x1D120000"

-				ImportLibrary=".\./unicodedata.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\unicodedata"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="./unicodedata_d.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./unicodedata_d.pdb"

-				BaseAddress="0x1D120000"

-				ImportLibrary=".\./unicodedata_d.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\ia64-temp-release\unicodedata"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"

-				OutputFile="./unicodedata.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				ProgramDatabaseFile=".\./unicodedata.pdb"

-				BaseAddress="0x1D120000"

-				ImportLibrary=".\./unicodedata.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\unicodedata"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				OutputFile="./unicodedata.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				ProgramDatabaseFile=".\./unicodedata.pdb"

-				BaseAddress="0x1D120000"

-				ImportLibrary=".\./unicodedata.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\Modules\unicodedata.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="unicodedata"
+	SccProjectName="unicodedata"
+	SccLocalPath="..">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\unicodedata"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="./unicodedata.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				ProgramDatabaseFile=".\./unicodedata.pdb"
+				BaseAddress="0x1D120000"
+				ImportLibrary=".\./unicodedata.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\unicodedata"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="./unicodedata_d.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./unicodedata_d.pdb"
+				BaseAddress="0x1D120000"
+				ImportLibrary=".\./unicodedata_d.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\ia64-temp-release\unicodedata"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
+				OutputFile="./unicodedata.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				ProgramDatabaseFile=".\./unicodedata.pdb"
+				BaseAddress="0x1D120000"
+				ImportLibrary=".\./unicodedata.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\unicodedata"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				OutputFile="./unicodedata.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				ProgramDatabaseFile=".\./unicodedata.pdb"
+				BaseAddress="0x1D120000"
+				ImportLibrary=".\./unicodedata.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\Modules\unicodedata.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/w9xpopen.vcproj b/PC/VS7.1/w9xpopen.vcproj
index b9f3b4e..ed133fb 100644
--- a/PC/VS7.1/w9xpopen.vcproj
+++ b/PC/VS7.1/w9xpopen.vcproj
@@ -1,121 +1,121 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="w9xpopen"

-	SccProjectName=""

-	SccLocalPath="">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\w9xpopen"

-			ConfigurationType="1"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="./w9xpopen_d.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./w9xpopen_d.pdb"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\w9xpopen"

-			ConfigurationType="1"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile=".\./w9xpopen.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				ProgramDatabaseFile=".\./w9xpopen.pdb"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\PC\w9xpopen.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="w9xpopen"
+	SccProjectName=""
+	SccLocalPath="">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\w9xpopen"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="./w9xpopen_d.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./w9xpopen_d.pdb"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\w9xpopen"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile=".\./w9xpopen.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				ProgramDatabaseFile=".\./w9xpopen.pdb"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\PC\w9xpopen.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS7.1/winsound.vcproj b/PC/VS7.1/winsound.vcproj
index bc4cf39..66d29a3 100644
--- a/PC/VS7.1/winsound.vcproj
+++ b/PC/VS7.1/winsound.vcproj
@@ -1,251 +1,251 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="winsound"

-	SccProjectName="winsound"

-	SccLocalPath="..\..\pc">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-debug\winsound"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="3"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-				OutputFile="./winsound_d.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				GenerateDebugInformation="TRUE"

-				ProgramDatabaseFile=".\./winsound_d.pdb"

-				BaseAddress="0x1D160000"

-				ImportLibrary=".\./winsound_d.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\x86-temp-release\winsound"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-				OutputFile="./winsound.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				ProgramDatabaseFile=".\./winsound.pdb"

-				BaseAddress="0x1D160000"

-				ImportLibrary=".\./winsound.lib"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseItanium|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\ia64-temp-release\winsound"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"

-				AdditionalDependencies="winmm.lib"

-				OutputFile="./winsound.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				ProgramDatabaseFile=".\./winsound.pdb"

-				BaseAddress="0x1D160000"

-				ImportLibrary=".\./winsound.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseAMD64|Win32"

-			OutputDirectory="."

-			IntermediateDirectory="amd64-temp-release\winsound"

-			ConfigurationType="2"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions=" /USECL:MS_OPTERON /GS-"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\PC"

-				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"

-				StringPooling="TRUE"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="FALSE"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				Detect64BitPortabilityProblems="TRUE"

-				DebugInformationFormat="3"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"

-				AdditionalDependencies="winmm.lib"

-				OutputFile="./winsound.pyd"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				ProgramDatabaseFile=".\./winsound.pdb"

-				BaseAddress="0x1D160000"

-				ImportLibrary=".\./winsound.lib"

-				TargetMachine="0"/>

-			<Tool

-				Name="VCMIDLTool"/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<File

-			RelativePath="..\..\PC\winsound.c">

-		</File>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="winsound"
+	SccProjectName="winsound"
+	SccLocalPath="..\..\pc">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-debug\winsound"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;_DEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+				OutputFile="./winsound_d.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\./winsound_d.pdb"
+				BaseAddress="0x1D160000"
+				ImportLibrary=".\./winsound_d.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\x86-temp-release\winsound"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+				OutputFile="./winsound.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				ProgramDatabaseFile=".\./winsound.pdb"
+				BaseAddress="0x1D160000"
+				ImportLibrary=".\./winsound.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseItanium|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\ia64-temp-release\winsound"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_ITANIUM /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
+				AdditionalDependencies="winmm.lib"
+				OutputFile="./winsound.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				ProgramDatabaseFile=".\./winsound.pdb"
+				BaseAddress="0x1D160000"
+				ImportLibrary=".\./winsound.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="ReleaseAMD64|Win32"
+			OutputDirectory="."
+			IntermediateDirectory="amd64-temp-release\winsound"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /USECL:MS_OPTERON /GS-"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\PC"
+				PreprocessorDefinitions="Py_BUILD_CORE_MODULE;WIN32;NDEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"
+				StringPooling="TRUE"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
+				AdditionalDependencies="winmm.lib"
+				OutputFile="./winsound.pyd"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				ProgramDatabaseFile=".\./winsound.pdb"
+				BaseAddress="0x1D160000"
+				ImportLibrary=".\./winsound.lib"
+				TargetMachine="0"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\PC\winsound.c">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/_bsddb.vcproj b/PC/VS8.0/_bsddb.vcproj
index 671ada9..50da1ce 100644
--- a/PC/VS8.0/_bsddb.vcproj
+++ b/PC/VS8.0/_bsddb.vcproj
@@ -1,1463 +1,1463 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="_bsddb"

-	ProjectGUID="{B4D38F3F-68FB-42EC-A45D-E00657BB3627}"

-	RootNamespace="_bsddb"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\bsddb.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_bsddb.c"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Berkeley DB 4.7.25 Source Files"

-			>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\crypto\aes_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_compact.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_compare.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_conv.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_curadj.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_cursor.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_delete.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_open.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_put.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_reclaim.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_recno.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_rsearch.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_search.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_split.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_upgrade.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_verify.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\btree_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\crdel_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\crdel_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\crypto\crypto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_am.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\db_byteorder.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_cam.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_cds.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_conv.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_dispatch.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_dup.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\db_err.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\db_getlong.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\db_idspace.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_iface.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_join.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\db_log2.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_meta.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_open.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_overflow.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_ovfl_vrfy.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_pr.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_reclaim.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_remove.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_rename.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_ret.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_setid.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_setlsn.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\db_shash.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_stati.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_truncate.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_upg.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_upg_opd.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_vrfy.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_vrfyutil.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\dbm\dbm.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\dbreg\dbreg.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\dbreg\dbreg_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\dbreg\dbreg_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\dbreg\dbreg_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\dbreg\dbreg_util.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\dbt.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_alloc.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_config.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_failchk.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_file.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_globals.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_name.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_open.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_recover.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_region.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_register.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_sig.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\fileops\fileops_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\fileops\fop_basic.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\fileops\fop_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\fileops\fop_util.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_conv.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_dup.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_func.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_meta.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_open.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_page.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_reclaim.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_upgrade.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_verify.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hmac\hmac.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hsearch\hsearch.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_deadlock.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_failchk.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_id.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_list.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_region.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_timer.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_util.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log_archive.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log_compare.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log_debug.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log_get.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log_put.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\mkpath.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_alloc.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_bh.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_fget.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_fmethod.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_fopen.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_fput.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_fset.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_mvcc.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_region.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_register.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_resize.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_sync.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_trickle.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\crypto\mersenne\mt19937db.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mutex\mut_alloc.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mutex\mut_failchk.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mutex\mut_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mutex\mut_region.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mutex\mut_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mutex\mut_win32.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\openflags.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_abort.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_abs.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_addrinfo.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_alloc.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_clock.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_config.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_cpu.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_ctime.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_dir.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_errno.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_fid.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_flock.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_fsync.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_getenv.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_handle.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_map.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\os_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_mkdir.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_open.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_pid.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_rename.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_root.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_rpath.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_rw.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_seek.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_stack.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_tmpdir.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_truncate.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_uid.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_unlink.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_yield.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_conv.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_files.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_open.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_upgrade.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_verify.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_backup.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_elect.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_lease.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_log.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_record.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_region.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_util.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_verify.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_elect.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_msg.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_net.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_queue.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_sel.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_util.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_windows.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\crypto\rijndael\rijndael-alg-fst.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\crypto\rijndael\rijndael-api-fst.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\sequence\seq_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\sequence\sequence.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hmac\sha1.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\clib\strsep.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_chkpt.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_failchk.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_recover.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_region.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_util.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\util_cache.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\util_log.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\util_sig.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\xa\xa.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\xa\xa_db.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\xa\xa_map.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\zerofill.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="_bsddb"
+	ProjectGUID="{B4D38F3F-68FB-42EC-A45D-E00657BB3627}"
+	RootNamespace="_bsddb"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.7.25.0\build_windows,..\..\..\db-4.7.25.0\build_windows\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\bsddb.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_bsddb.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Berkeley DB 4.7.25 Source Files"
+			>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\crypto\aes_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_compact.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_compare.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_conv.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_curadj.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_cursor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_delete.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_open.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_put.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_reclaim.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_recno.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_rsearch.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_search.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_split.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_upgrade.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\bt_verify.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\btree\btree_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\crdel_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\crdel_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\crypto\crypto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_am.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\db_byteorder.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_cam.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_cds.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_conv.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_dispatch.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_dup.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\db_err.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\db_getlong.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\db_idspace.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_iface.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_join.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\db_log2.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_meta.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_open.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_overflow.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_ovfl_vrfy.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_pr.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_reclaim.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_remove.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_rename.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_ret.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_setid.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_setlsn.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\db_shash.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_stati.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_truncate.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_upg.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_upg_opd.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_vrfy.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\db\db_vrfyutil.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\dbm\dbm.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\dbreg\dbreg.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\dbreg\dbreg_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\dbreg\dbreg_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\dbreg\dbreg_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\dbreg\dbreg_util.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\dbt.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_alloc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_config.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_failchk.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_file.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_globals.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_name.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_open.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_recover.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_region.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_register.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_sig.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\env\env_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\fileops\fileops_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\fileops\fop_basic.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\fileops\fop_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\fileops\fop_util.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_conv.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_dup.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_func.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_meta.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_open.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_page.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_reclaim.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_upgrade.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hash\hash_verify.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hmac\hmac.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hsearch\hsearch.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_deadlock.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_failchk.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_id.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_list.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_region.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_timer.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\lock\lock_util.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log_archive.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log_compare.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log_debug.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log_get.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log_put.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\log\log_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\mkpath.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_alloc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_bh.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_fget.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_fmethod.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_fopen.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_fput.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_fset.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_mvcc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_region.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_register.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_resize.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_sync.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mp\mp_trickle.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\crypto\mersenne\mt19937db.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mutex\mut_alloc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mutex\mut_failchk.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mutex\mut_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mutex\mut_region.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mutex\mut_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\mutex\mut_win32.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\openflags.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_abort.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_abs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_addrinfo.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_alloc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_clock.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_config.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_cpu.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_ctime.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_dir.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_errno.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_fid.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_flock.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_fsync.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_getenv.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_handle.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_map.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\os_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_mkdir.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_open.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_pid.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_rename.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_root.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_rpath.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_rw.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_seek.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_stack.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_tmpdir.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_truncate.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os\os_uid.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_unlink.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\os_windows\os_yield.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_conv.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_files.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_open.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_upgrade.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\qam\qam_verify.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_backup.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_elect.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_lease.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_log.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_record.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_region.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_util.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\rep\rep_verify.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_elect.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_msg.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_net.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_queue.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_sel.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_util.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\repmgr\repmgr_windows.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\crypto\rijndael\rijndael-alg-fst.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\crypto\rijndael\rijndael-api-fst.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\sequence\seq_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\sequence\sequence.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\hmac\sha1.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\clib\strsep.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_chkpt.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_failchk.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_recover.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_region.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\txn\txn_util.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\util_cache.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\util_log.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\util_sig.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\xa\xa.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\xa\xa_db.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\xa\xa_map.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.7.25.0\build_windows\..\common\zerofill.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/_bsddb44.vcproj b/PC/VS8.0/_bsddb44.vcproj
index fd8b8ca..b7bc519 100644
--- a/PC/VS8.0/_bsddb44.vcproj
+++ b/PC/VS8.0/_bsddb44.vcproj
@@ -1,1252 +1,1252 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="_bsddb44"

-	ProjectGUID="{62172C7D-B39E-409A-B352-370FF5098C19}"

-	RootNamespace="_bsddb44"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="4"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="4"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."

-				PreprocessorDefinitions="DIAGNOSTIC"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="4"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="4"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="4"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="4"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="4"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="4"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_compact.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_compare.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_conv.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_curadj.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_cursor.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_delete.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_open.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_put.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_reclaim.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_recno.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_rsearch.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_search.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_split.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_upgrade.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_verify.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\btree_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\crdel_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\crdel_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\crypto_stub.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_am.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\db_byteorder.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_cam.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\db_clock.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_conv.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_dispatch.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_dup.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\db_err.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\db_getlong.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\db_idspace.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_iface.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_join.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\db_log2.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_meta.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_open.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_overflow.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_ovfl_vrfy.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_pr.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_reclaim.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_remove.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_rename.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_ret.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\db_salloc.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_setid.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_setlsn.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\db_shash.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_stati.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_truncate.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_upg.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_upg_opd.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_vrfy.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_vrfyutil.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\dbm\dbm.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\dbreg\dbreg.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\dbreg\dbreg_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\dbreg\dbreg_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\dbreg\dbreg_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\dbreg\dbreg_util.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_failchk.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_file.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_open.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_recover.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_region.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_register.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\fileops\fileops_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\fileops\fop_basic.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\fileops\fop_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\fileops\fop_util.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_conv.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_dup.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_func.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_meta.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_open.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_page.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_reclaim.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_upgrade.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_verify.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hmac\hmac.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hsearch\hsearch.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_deadlock.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_failchk.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_id.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_list.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_region.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_timer.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_util.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log_archive.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log_compare.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log_debug.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log_get.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log_put.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_alloc.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_bh.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_fget.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_fmethod.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_fopen.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_fput.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_fset.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_region.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_register.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_sync.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_trickle.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mutex\mut_alloc.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mutex\mut_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mutex\mut_region.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mutex\mut_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\mutex\mut_win32.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_abs.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_alloc.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_clock.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_config.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_dir.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_errno.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_fid.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_flock.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_fsync.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_handle.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_id.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_map.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_mkdir.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_oflags.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_open.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_region.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_rename.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_root.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_rpath.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_rw.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_seek.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_sleep.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_spin.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_tmpdir.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_truncate.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_unlink.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_conv.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_files.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_open.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_upgrade.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_verify.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_backup.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_elect.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_log.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_record.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_region.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_util.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_verify.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\sequence\seq_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\sequence\sequence.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\hmac\sha1.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\clib\strcasecmp.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_chkpt.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_failchk.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_method.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_recover.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_region.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_util.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\util_cache.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\util_log.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\util_sig.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\xa\xa.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\xa\xa_db.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\db-4.4.20\build_win32\..\xa\xa_map.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="_bsddb44"
+	ProjectGUID="{62172C7D-B39E-409A-B352-370FF5098C19}"
+	RootNamespace="_bsddb44"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="4"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="4"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."
+				PreprocessorDefinitions="DIAGNOSTIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="4"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="4"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="4"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="4"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="4"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="4"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\db-4.4.20\build_win32;..\..\..\db-4.4.20\build_win32\.."
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_compact.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_compare.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_conv.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_curadj.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_cursor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_delete.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_open.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_put.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_reclaim.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_recno.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_rsearch.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_search.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_split.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_upgrade.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\bt_verify.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\btree\btree_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\crdel_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\crdel_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\crypto_stub.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_am.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\db_byteorder.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_cam.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\db_clock.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_conv.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_dispatch.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_dup.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\db_err.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\db_getlong.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\db_idspace.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_iface.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_join.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\db_log2.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_meta.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_open.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_overflow.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_ovfl_vrfy.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_pr.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_reclaim.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_remove.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_rename.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_ret.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\db_salloc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_setid.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_setlsn.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\db_shash.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_stati.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_truncate.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_upg.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_upg_opd.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_vrfy.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\db\db_vrfyutil.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\dbm\dbm.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\dbreg\dbreg.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\dbreg\dbreg_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\dbreg\dbreg_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\dbreg\dbreg_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\dbreg\dbreg_util.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_failchk.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_file.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_open.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_recover.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_region.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_register.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\env\env_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\fileops\fileops_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\fileops\fop_basic.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\fileops\fop_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\fileops\fop_util.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_conv.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_dup.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_func.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_meta.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_open.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_page.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_reclaim.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_upgrade.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hash\hash_verify.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hmac\hmac.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hsearch\hsearch.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_deadlock.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_failchk.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_id.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_list.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_region.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_timer.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\lock\lock_util.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log_archive.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log_compare.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log_debug.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log_get.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log_put.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\log\log_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_alloc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_bh.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_fget.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_fmethod.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_fopen.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_fput.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_fset.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_region.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_register.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_sync.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mp\mp_trickle.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mutex\mut_alloc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mutex\mut_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mutex\mut_region.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mutex\mut_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\mutex\mut_win32.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_abs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_alloc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_clock.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_config.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_dir.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_errno.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_fid.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_flock.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_fsync.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_handle.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_id.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_map.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_mkdir.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_oflags.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_open.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_region.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_rename.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_root.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_rpath.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_rw.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_seek.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_sleep.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_spin.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os\os_tmpdir.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_truncate.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\os_win32\os_unlink.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_conv.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_files.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_open.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_upgrade.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\qam\qam_verify.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_backup.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_elect.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_log.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_record.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_region.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_util.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\rep\rep_verify.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\sequence\seq_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\sequence\sequence.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\hmac\sha1.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\clib\strcasecmp.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_chkpt.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_failchk.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_method.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_recover.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_region.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\txn\txn_util.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\util_cache.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\util_log.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\common\util_sig.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\xa\xa.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\xa\xa_db.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\db-4.4.20\build_win32\..\xa\xa_map.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/_ctypes.vcproj b/PC/VS8.0/_ctypes.vcproj
index 8973233..eb19943 100644
--- a/PC/VS8.0/_ctypes.vcproj
+++ b/PC/VS8.0/_ctypes.vcproj
@@ -1,705 +1,705 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="_ctypes"

-	ProjectGUID="{0E9791DB-593A-465F-98BC-681011311618}"

-	RootNamespace="_ctypes"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D1A0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D1A0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				SubSystem="0"

-				BaseAddress="0x1D1A0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				SubSystem="0"

-				BaseAddress="0x1D1A0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				SubSystem="0"

-				BaseAddress="0x1D1A0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				SubSystem="0"

-				BaseAddress="0x1D1A0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				SubSystem="0"

-				BaseAddress="0x1D1A0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				SubSystem="0"

-				BaseAddress="0x1D1A0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_ctypes\ctypes.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\ctypes_dlfcn.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffi.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffi_common.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\fficonfig.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffitarget.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_ctypes\_ctypes.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\callbacks.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\callproc.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\cfield.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffi.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\malloc_closure.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\prep_cif.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\stgdict.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\win32.c"

-				>

-				<FileConfiguration

-					Name="Debug|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Release|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="PGInstrument|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="PGUpdate|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\win64.asm"

-				>

-				<FileConfiguration

-					Name="Debug|Win32"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Debug|x64"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-						CommandLine="ml64 /nologo /c /Zi /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"

-						Outputs="$(IntDir)\win64.obj"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Release|Win32"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Release|x64"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-						CommandLine="ml64 /nologo /c /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"

-						Outputs="$(IntDir)\win64.obj"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="PGInstrument|Win32"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="PGInstrument|x64"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-						CommandLine="ml64 /nologo /c /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"

-						Outputs="$(IntDir)\win64.obj"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="PGUpdate|Win32"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="PGUpdate|x64"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-						CommandLine="ml64 /nologo /c /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"

-						Outputs="$(IntDir)\win64.obj"

-					/>

-				</FileConfiguration>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="_ctypes"
+	ProjectGUID="{0E9791DB-593A-465F-98BC-681011311618}"
+	RootNamespace="_ctypes"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D1A0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D1A0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				SubSystem="0"
+				BaseAddress="0x1D1A0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				SubSystem="0"
+				BaseAddress="0x1D1A0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				SubSystem="0"
+				BaseAddress="0x1D1A0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				SubSystem="0"
+				BaseAddress="0x1D1A0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				SubSystem="0"
+				BaseAddress="0x1D1A0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				SubSystem="0"
+				BaseAddress="0x1D1A0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_ctypes\ctypes.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\ctypes_dlfcn.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffi.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffi_common.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\fficonfig.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffitarget.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_ctypes\_ctypes.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\callbacks.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\callproc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\cfield.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffi.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\malloc_closure.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\prep_cif.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\stgdict.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\win32.c"
+				>
+				<FileConfiguration
+					Name="Debug|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="PGInstrument|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="PGUpdate|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\win64.asm"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						CommandLine="ml64 /nologo /c /Zi /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)\win64.obj"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						CommandLine="ml64 /nologo /c /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)\win64.obj"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="PGInstrument|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="PGInstrument|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						CommandLine="ml64 /nologo /c /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)\win64.obj"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="PGUpdate|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="PGUpdate|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						CommandLine="ml64 /nologo /c /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)\win64.obj"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/_ctypes_test.vcproj b/PC/VS8.0/_ctypes_test.vcproj
index 097241e..6e18a23 100644
--- a/PC/VS8.0/_ctypes_test.vcproj
+++ b/PC/VS8.0/_ctypes_test.vcproj
@@ -1,521 +1,521 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="_ctypes_test"

-	ProjectGUID="{9EC7190A-249F-4180-A900-548FDCF3055F}"

-	RootNamespace="_ctypes_test"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_ctypes\_ctypes_test.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_ctypes\_ctypes_test.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="_ctypes_test"
+	ProjectGUID="{9EC7190A-249F-4180-A900-548FDCF3055F}"
+	RootNamespace="_ctypes_test"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_ctypes\_ctypes_test.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_ctypes\_ctypes_test.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/_elementtree.vcproj b/PC/VS8.0/_elementtree.vcproj
index 457da72..424cce4 100644
--- a/PC/VS8.0/_elementtree.vcproj
+++ b/PC/VS8.0/_elementtree.vcproj
@@ -1,613 +1,613 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="_elementtree"

-	ProjectGUID="{17E1E049-C309-4D79-843F-AE483C264AEA}"

-	RootNamespace="_elementtree"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\expat\ascii.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\asciitab.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\expat.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\expat_config.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\expat_external.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\iasciitab.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\internal.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\latin1tab.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\macconfig.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\nametab.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\pyexpatns.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\utf8tab.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\winconfig.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmlrole.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmltok.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_elementtree.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmlparse.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmlrole.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmltok.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="_elementtree"
+	ProjectGUID="{17E1E049-C309-4D79-843F-AE483C264AEA}"
+	RootNamespace="_elementtree"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\expat\ascii.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\asciitab.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\expat.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\expat_config.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\expat_external.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\iasciitab.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\internal.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\latin1tab.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\macconfig.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\nametab.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\pyexpatns.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\utf8tab.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\winconfig.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmlrole.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmltok.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_elementtree.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmlparse.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmlrole.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmltok.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/_hashlib.vcproj b/PC/VS8.0/_hashlib.vcproj
index faa8388..f8bb962 100644
--- a/PC/VS8.0/_hashlib.vcproj
+++ b/PC/VS8.0/_hashlib.vcproj
@@ -1,545 +1,545 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="_hashlib"

-	ProjectGUID="{447F05A8-F581-4CAC-A466-5AC7936E207E}"

-	RootNamespace="_hashlib"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_hashopenssl.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="_hashlib"
+	ProjectGUID="{447F05A8-F581-4CAC-A466-5AC7936E207E}"
+	RootNamespace="_hashlib"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_hashopenssl.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/_msi.vcproj b/PC/VS8.0/_msi.vcproj
index 99971c6..6fefa12 100644
--- a/PC/VS8.0/_msi.vcproj
+++ b/PC/VS8.0/_msi.vcproj
@@ -1,529 +1,529 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="_msi"

-	ProjectGUID="{31FFC478-7B4A-43E8-9954-8D03E2187E9C}"

-	RootNamespace="_msi"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\PC\_msi.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="_msi"
+	ProjectGUID="{31FFC478-7B4A-43E8-9954-8D03E2187E9C}"
+	RootNamespace="_msi"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\PC\_msi.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/_multiprocessing.vcproj b/PC/VS8.0/_multiprocessing.vcproj
index c2bbec4..ee76aec 100644
--- a/PC/VS8.0/_multiprocessing.vcproj
+++ b/PC/VS8.0/_multiprocessing.vcproj
@@ -1,557 +1,557 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="_multiprocessing"

-	ProjectGUID="{9E48B300-37D1-11DD-8C41-005056C00008}"

-	RootNamespace="_multiprocessing"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_multiprocessing\multiprocessing.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_multiprocessing\connection.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_multiprocessing\multiprocessing.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_multiprocessing\pipe_connection.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_multiprocessing\semaphore.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_multiprocessing\socket_connection.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_multiprocessing\win32_functions.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="_multiprocessing"
+	ProjectGUID="{9E48B300-37D1-11DD-8C41-005056C00008}"
+	RootNamespace="_multiprocessing"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_multiprocessing\multiprocessing.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_multiprocessing\connection.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_multiprocessing\multiprocessing.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_multiprocessing\pipe_connection.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_multiprocessing\semaphore.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_multiprocessing\socket_connection.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_multiprocessing\win32_functions.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/_socket.vcproj b/PC/VS8.0/_socket.vcproj
index 8abd982..ccda14b 100644
--- a/PC/VS8.0/_socket.vcproj
+++ b/PC/VS8.0/_socket.vcproj
@@ -1,537 +1,537 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="_socket"

-	ProjectGUID="{86937F53-C189-40EF-8CE8-8759D8E7D480}"

-	RootNamespace="_socket"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\socketmodule.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\socketmodule.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="_socket"
+	ProjectGUID="{86937F53-C189-40EF-8CE8-8759D8E7D480}"
+	RootNamespace="_socket"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\socketmodule.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\socketmodule.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/_sqlite3.vcproj b/PC/VS8.0/_sqlite3.vcproj
index 64f19f1..d9e89c7 100644
--- a/PC/VS8.0/_sqlite3.vcproj
+++ b/PC/VS8.0/_sqlite3.vcproj
@@ -1,613 +1,613 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="_sqlite3"

-	ProjectGUID="{13CECB97-4119-4316-9D42-8534019A5A44}"

-	RootNamespace="_sqlite3"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_sqlite\cache.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\connection.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\cursor.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\microprotocols.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\module.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\prepare_protocol.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\row.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\sqlitecompat.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\statement.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\util.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_sqlite\cache.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\connection.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\cursor.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\microprotocols.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\module.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\prepare_protocol.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\row.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\statement.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\util.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="_sqlite3"
+	ProjectGUID="{13CECB97-4119-4316-9D42-8534019A5A44}"
+	RootNamespace="_sqlite3"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_sqlite\cache.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\connection.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\cursor.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\microprotocols.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\module.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\prepare_protocol.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\row.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\sqlitecompat.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\statement.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\util.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_sqlite\cache.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\connection.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\cursor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\microprotocols.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\module.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\prepare_protocol.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\row.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\statement.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\util.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/_ssl.vcproj b/PC/VS8.0/_ssl.vcproj
index 69f7726..2d12e56 100644
--- a/PC/VS8.0/_ssl.vcproj
+++ b/PC/VS8.0/_ssl.vcproj
@@ -1,545 +1,545 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="_ssl"

-	ProjectGUID="{C6E20F84-3247-4AD6-B051-B073268F73BA}"

-	RootNamespace="_ssl"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_ssl.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="_ssl"
+	ProjectGUID="{C6E20F84-3247-4AD6-B051-B073268F73BA}"
+	RootNamespace="_ssl"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\inc64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_ssl.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/_testcapi.vcproj b/PC/VS8.0/_testcapi.vcproj
index 76ad2d8..2483433 100644
--- a/PC/VS8.0/_testcapi.vcproj
+++ b/PC/VS8.0/_testcapi.vcproj
@@ -1,521 +1,521 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="_testcapi"

-	ProjectGUID="{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}"

-	RootNamespace="_testcapi"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_testcapimodule.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="_testcapi"
+	ProjectGUID="{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}"
+	RootNamespace="_testcapi"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_testcapimodule.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/_tkinter.vcproj b/PC/VS8.0/_tkinter.vcproj
index 9700bde..60e50ce 100644
--- a/PC/VS8.0/_tkinter.vcproj
+++ b/PC/VS8.0/_tkinter.vcproj
@@ -1,541 +1,541 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="_tkinter"

-	ProjectGUID="{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}"

-	RootNamespace="_tkinter"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltkDir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltkLibDebug)"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltk64Dir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltk64LibDebug)"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltkDir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltkLib)"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltk64Dir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltk64Lib)"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltkDir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltkLib)"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltk64Dir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltk64Lib)"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltkDir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltkLib)"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltk64Dir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltk64Lib)"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_tkinter.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\tkappinit.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="_tkinter"
+	ProjectGUID="{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}"
+	RootNamespace="_tkinter"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltkDir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltkLibDebug)"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltk64Dir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltk64LibDebug)"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltkDir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltkLib)"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltk64Dir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltk64Lib)"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltkDir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltkLib)"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltk64Dir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltk64Lib)"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltkDir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltkLib)"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltk64Dir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltk64Lib)"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_tkinter.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\tkappinit.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/bdist_wininst.vcproj b/PC/VS8.0/bdist_wininst.vcproj
index d11edf2..0bd2ee6 100644
--- a/PC/VS8.0/bdist_wininst.vcproj
+++ b/PC/VS8.0/bdist_wininst.vcproj
@@ -1,270 +1,270 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="bdist_wininst"

-	ProjectGUID="{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"

-	RootNamespace="wininst"

-	TargetFrameworkVersion="131072"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory="..\..\lib\distutils\command"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				PreprocessorDefinitions="NDEBUG"

-				MkTypLibCompatible="true"

-				SuppressStartupBanner="true"

-				TargetEnvironment="1"

-				TypeLibraryName=".\..\..\lib\distutils\command\wininst.tlb"

-				HeaderFileName=""

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="1"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\PC\bdist_wininst;..\..\Include;..\..\Modules\zlib"

-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-				WarningLevel="3"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="0"

-				AdditionalIncludeDirectories="..\..\PC;..\..\PC\bdist_wininst;..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="comctl32.lib imagehlp.lib"

-				OutputFile="..\..\lib\distutils\command\wininst-8.0.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="true"

-				IgnoreDefaultLibraryNames="LIBC"

-				ProgramDatabaseFile="..\..\lib\distutils\command\wininst-8.0.pdb"

-				SubSystem="2"

-				RandomizedBaseAddress="1"

-				DataExecutionPrevention="0"

-				TargetMachine="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			OutputDirectory="$(PlatformName)\$(ConfigurationName)"

-			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				PreprocessorDefinitions="NDEBUG"

-				MkTypLibCompatible="true"

-				SuppressStartupBanner="true"

-				TargetEnvironment="3"

-				TypeLibraryName=".\..\..\lib\distutils\command\wininst.tlb"

-				HeaderFileName=""

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="1"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\PC\bdist_wininst;..\..\Include;..\..\Modules\zlib"

-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-				WarningLevel="3"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="0"

-				AdditionalIncludeDirectories="..\..\PC;..\..\PC\bdist_wininst;..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="comctl32.lib imagehlp.lib"

-				OutputFile="..\..\lib\distutils\command\wininst-8.0-amd64.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="true"

-				IgnoreDefaultLibraryNames="LIBC"

-				ProgramDatabaseFile="..\..\lib\distutils\command\wininst-8.0-amd64.pdb"

-				SubSystem="2"

-				RandomizedBaseAddress="1"

-				DataExecutionPrevention="0"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"

-			>

-			<File

-				RelativePath="..\..\PC\bdist_wininst\extract.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\PC\bdist_wininst\install.c"

-				>

-			</File>

-			<Filter

-				Name="zlib"

-				>

-				<File

-					RelativePath="..\..\Modules\zlib\adler32.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\crc32.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inffast.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inflate.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inftrees.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\zutil.c"

-					>

-				</File>

-			</Filter>

-		</Filter>

-		<Filter

-			Name="Header Files"

-			Filter="h;hpp;hxx;hm;inl"

-			>

-			<File

-				RelativePath="..\..\PC\bdist_wininst\archive.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Resource Files"

-			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"

-			>

-			<File

-				RelativePath="..\..\PC\bdist_wininst\install.rc"

-				>

-			</File>

-			<File

-				RelativePath="..\..\PC\bdist_wininst\PythonPowered.bmp"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="bdist_wininst"
+	ProjectGUID="{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"
+	RootNamespace="wininst"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="..\..\lib\distutils\command"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\..\..\lib\distutils\command\wininst.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="1"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\PC\bdist_wininst;..\..\Include;..\..\Modules\zlib"
+				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="0"
+				AdditionalIncludeDirectories="..\..\PC;..\..\PC\bdist_wininst;..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="comctl32.lib imagehlp.lib"
+				OutputFile="..\..\lib\distutils\command\wininst-8.0.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				IgnoreDefaultLibraryNames="LIBC"
+				ProgramDatabaseFile="..\..\lib\distutils\command\wininst-8.0.pdb"
+				SubSystem="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="3"
+				TypeLibraryName=".\..\..\lib\distutils\command\wininst.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="1"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\PC\bdist_wininst;..\..\Include;..\..\Modules\zlib"
+				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="0"
+				AdditionalIncludeDirectories="..\..\PC;..\..\PC\bdist_wininst;..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="comctl32.lib imagehlp.lib"
+				OutputFile="..\..\lib\distutils\command\wininst-8.0-amd64.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				IgnoreDefaultLibraryNames="LIBC"
+				ProgramDatabaseFile="..\..\lib\distutils\command\wininst-8.0-amd64.pdb"
+				SubSystem="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+			>
+			<File
+				RelativePath="..\..\PC\bdist_wininst\extract.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\PC\bdist_wininst\install.c"
+				>
+			</File>
+			<Filter
+				Name="zlib"
+				>
+				<File
+					RelativePath="..\..\Modules\zlib\adler32.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\crc32.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inffast.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inflate.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inftrees.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\zutil.c"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl"
+			>
+			<File
+				RelativePath="..\..\PC\bdist_wininst\archive.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+			>
+			<File
+				RelativePath="..\..\PC\bdist_wininst\install.rc"
+				>
+			</File>
+			<File
+				RelativePath="..\..\PC\bdist_wininst\PythonPowered.bmp"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/build.bat b/PC/VS8.0/build.bat
index a6d961e..9bc8186 100644
--- a/PC/VS8.0/build.bat
+++ b/PC/VS8.0/build.bat
@@ -1,17 +1,17 @@
-@echo off

-rem A batch program to build or rebuild a particular configuration.

-rem just for convenience.

-

-setlocal

-set platf=Win32

-set conf=Release

-set build=/build

-

-:CheckOpts

-if "%1"=="-c" (set conf=%2)     & shift & shift & goto CheckOpts

-if "%1"=="-p" (set platf=%2) & shift & shift & goto CheckOpts

-if "%1"=="-r" (set build=/rebuild)    & shift & goto CheckOpts

-

-set cmd=devenv pcbuild.sln %build% "%conf%|%platf%"

-echo %cmd%

-%cmd%

+@echo off
+rem A batch program to build or rebuild a particular configuration.
+rem just for convenience.
+
+setlocal
+set platf=Win32
+set conf=Release
+set build=/build
+
+:CheckOpts
+if "%1"=="-c" (set conf=%2)     & shift & shift & goto CheckOpts
+if "%1"=="-p" (set platf=%2) & shift & shift & goto CheckOpts
+if "%1"=="-r" (set build=/rebuild)    & shift & goto CheckOpts
+
+set cmd=devenv pcbuild.sln %build% "%conf%|%platf%"
+echo %cmd%
+%cmd%
diff --git a/PC/VS8.0/build_env.bat b/PC/VS8.0/build_env.bat
index 01024cf..4c67ae3 100644
--- a/PC/VS8.0/build_env.bat
+++ b/PC/VS8.0/build_env.bat
@@ -1 +1 @@
-@%comspec% /k env.bat %*

+@%comspec% /k env.bat %*
diff --git a/PC/VS8.0/build_pgo.bat b/PC/VS8.0/build_pgo.bat
index d28a767..a37b5bf 100644
--- a/PC/VS8.0/build_pgo.bat
+++ b/PC/VS8.0/build_pgo.bat
@@ -1,41 +1,41 @@
-@echo off

-rem A batch program to build PGO (Profile guided optimization) by first

-rem building instrumented binaries, then running the testsuite, and

-rem finally building the optimized code.

-rem Note, after the first instrumented run, one can just keep on

-rem building the PGUpdate configuration while developing.

-

-setlocal

-set platf=Win32

-

-rem use the performance testsuite.  This is quick and simple

-set job1=..\..\tools\pybench\pybench.py -n 1 -C 1 --with-gc

-set path1=..\..\tools\pybench

-

-rem or the whole testsuite for more thorough testing

-set job2=..\..\lib\test\regrtest.py

-set path2=..\..\lib

-

-set job=%job1%

-set clrpath=%path1%

-

-:CheckOpts

-if "%1"=="-p" (set platf=%2) & shift & shift & goto CheckOpts

-if "%1"=="-2" (set job=%job2%) & (set clrpath=%path2%) & shift & goto CheckOpts

-

-set PGI=%platf%-pgi

-set PGO=%platf%-pgo

-

-@echo on

-rem build the instrumented version

-call build -p %platf% -c PGInstrument

-

-rem remove .pyc files, .pgc files and execute the job

-%PGI%\python.exe rmpyc.py %clrpath%

-del %PGI%\*.pgc

-%PGI%\python.exe %job%

-

-rem finally build the optimized version

-if exist %PGO% del /s /q %PGO%

-call build -p %platf% -c PGUpdate

-

+@echo off
+rem A batch program to build PGO (Profile guided optimization) by first
+rem building instrumented binaries, then running the testsuite, and
+rem finally building the optimized code.
+rem Note, after the first instrumented run, one can just keep on
+rem building the PGUpdate configuration while developing.
+
+setlocal
+set platf=Win32
+
+rem use the performance testsuite.  This is quick and simple
+set job1=..\..\tools\pybench\pybench.py -n 1 -C 1 --with-gc
+set path1=..\..\tools\pybench
+
+rem or the whole testsuite for more thorough testing
+set job2=..\..\lib\test\regrtest.py
+set path2=..\..\lib
+
+set job=%job1%
+set clrpath=%path1%
+
+:CheckOpts
+if "%1"=="-p" (set platf=%2) & shift & shift & goto CheckOpts
+if "%1"=="-2" (set job=%job2%) & (set clrpath=%path2%) & shift & goto CheckOpts
+
+set PGI=%platf%-pgi
+set PGO=%platf%-pgo
+
+@echo on
+rem build the instrumented version
+call build -p %platf% -c PGInstrument
+
+rem remove .pyc files, .pgc files and execute the job
+%PGI%\python.exe rmpyc.py %clrpath%
+del %PGI%\*.pgc
+%PGI%\python.exe %job%
+
+rem finally build the optimized version
+if exist %PGO% del /s /q %PGO%
+call build -p %platf% -c PGUpdate
+
diff --git a/PC/VS8.0/build_ssl.bat b/PC/VS8.0/build_ssl.bat
index f06c2d1..2531a5b 100644
--- a/PC/VS8.0/build_ssl.bat
+++ b/PC/VS8.0/build_ssl.bat
@@ -1,12 +1,12 @@
-@echo off

-if not defined HOST_PYTHON (

-  if %1 EQU Debug (

-    set HOST_PYTHON=python_d.exe

-    if not exist python27_d.dll exit 1

-  ) ELSE (

-    set HOST_PYTHON=python.exe

-    if not exist python27.dll exit 1

-  )

-)

-%HOST_PYTHON% build_ssl.py %1 %2 %3

-

+@echo off
+if not defined HOST_PYTHON (
+  if %1 EQU Debug (
+    set HOST_PYTHON=python_d.exe
+    if not exist python27_d.dll exit 1
+  ) ELSE (
+    set HOST_PYTHON=python.exe
+    if not exist python27.dll exit 1
+  )
+)
+%HOST_PYTHON% build_ssl.py %1 %2 %3
+
diff --git a/PC/VS8.0/bz2.vcproj b/PC/VS8.0/bz2.vcproj
index f84a645..67cf0f8 100644
--- a/PC/VS8.0/bz2.vcproj
+++ b/PC/VS8.0/bz2.vcproj
@@ -1,581 +1,581 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="bz2"

-	ProjectGUID="{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}"

-	RootNamespace="bz2"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\bz2module.c"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="bzip2 1.0.6 Header Files"

-			>

-			<File

-				RelativePath="$(bz2Dir)\bzlib.h"

-				>

-			</File>

-			<File

-				RelativePath="$(bz2Dir)\bzlib_private.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="bzip2 1.0.6 Source Files"

-			>

-			<File

-				RelativePath="$(bz2Dir)\blocksort.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bz2Dir)\bzlib.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bz2Dir)\compress.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bz2Dir)\crctable.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bz2Dir)\decompress.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bz2Dir)\huffman.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bz2Dir)\randtable.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="bz2"
+	ProjectGUID="{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}"
+	RootNamespace="bz2"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\bz2module.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="bzip2 1.0.6 Header Files"
+			>
+			<File
+				RelativePath="$(bz2Dir)\bzlib.h"
+				>
+			</File>
+			<File
+				RelativePath="$(bz2Dir)\bzlib_private.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="bzip2 1.0.6 Source Files"
+			>
+			<File
+				RelativePath="$(bz2Dir)\blocksort.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bz2Dir)\bzlib.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bz2Dir)\compress.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bz2Dir)\crctable.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bz2Dir)\decompress.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bz2Dir)\huffman.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bz2Dir)\randtable.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/debug.vsprops b/PC/VS8.0/debug.vsprops
index bc643cb..2be7f74 100644
--- a/PC/VS8.0/debug.vsprops
+++ b/PC/VS8.0/debug.vsprops
@@ -1,15 +1,15 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="debug"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		PreprocessorDefinitions="_DEBUG"

-	/>

-	<UserMacro

-		Name="KillPythonExe"

-		Value="$(OutDir)\kill_python_d.exe"

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="debug"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		PreprocessorDefinitions="_DEBUG"
+	/>
+	<UserMacro
+		Name="KillPythonExe"
+		Value="$(OutDir)\kill_python_d.exe"
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/VS8.0/env.bat b/PC/VS8.0/env.bat
index 7717d01..a4990a8 100644
--- a/PC/VS8.0/env.bat
+++ b/PC/VS8.0/env.bat
@@ -1,5 +1,5 @@
-@echo off

-set VS8=%ProgramFiles%\Microsoft Visual Studio 8

-echo Build environments: x86, ia64, amd64, x86_amd64, x86_ia64

-echo.

-call "%VS8%\VC\vcvarsall.bat" %1

+@echo off
+set VS8=%ProgramFiles%\Microsoft Visual Studio 8
+echo Build environments: x86, ia64, amd64, x86_amd64, x86_ia64
+echo.
+call "%VS8%\VC\vcvarsall.bat" %1
diff --git a/PC/VS8.0/idle.bat b/PC/VS8.0/idle.bat
index 274ae1a..123e704 100644
--- a/PC/VS8.0/idle.bat
+++ b/PC/VS8.0/idle.bat
@@ -1,15 +1,15 @@
-@echo off

-rem start idle

-rem Usage:  idle [-d]

-rem -d   Run Debug build (python_d.exe).  Else release build.

-

-setlocal

-set exe=python

-PATH %PATH%;..\..\..\tcltk\bin

-

-if "%1"=="-d" (set exe=python_d) & shift

-

-set cmd=%exe% ../../Lib/idlelib/idle.py %1 %2 %3 %4 %5 %6 %7 %8 %9

-

-echo on

-%cmd%

+@echo off
+rem start idle
+rem Usage:  idle [-d]
+rem -d   Run Debug build (python_d.exe).  Else release build.
+
+setlocal
+set exe=python
+PATH %PATH%;..\..\..\tcltk\bin
+
+if "%1"=="-d" (set exe=python_d) & shift
+
+set cmd=%exe% ../../Lib/idlelib/idle.py %1 %2 %3 %4 %5 %6 %7 %8 %9
+
+echo on
+%cmd%
diff --git a/PC/VS8.0/kill_python.vcproj b/PC/VS8.0/kill_python.vcproj
index e9be330..f6fe096 100644
--- a/PC/VS8.0/kill_python.vcproj
+++ b/PC/VS8.0/kill_python.vcproj
@@ -1,279 +1,279 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="kill_python"

-	ProjectGUID="{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}"

-	RootNamespace="kill_python"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName)_d.exe"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName)_d.exe"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath=".\kill_python.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="kill_python"
+	ProjectGUID="{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}"
+	RootNamespace="kill_python"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)_d.exe"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)_d.exe"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath=".\kill_python.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/make_buildinfo.vcproj b/PC/VS8.0/make_buildinfo.vcproj
index 3cc71e6..619f056 100644
--- a/PC/VS8.0/make_buildinfo.vcproj
+++ b/PC/VS8.0/make_buildinfo.vcproj
@@ -1,162 +1,162 @@
-<?xml version="1.0" encoding="windows-1250"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="make_buildinfo"

-	ProjectGUID="{C73F0EC1-358B-4177-940F-0846AC8B04CD}"

-	RootNamespace="make_buildinfo"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="131072"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				InlineFunctionExpansion="1"

-				PreprocessorDefinitions="_CONSOLE"

-				RuntimeLibrary="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)/make_buildinfo.exe"

-				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				PreprocessorDefinitions="_CONSOLE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"

-			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"

-			>

-			<File

-				RelativePath=".\make_buildinfo.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="windows-1250"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="make_buildinfo"
+	ProjectGUID="{C73F0EC1-358B-4177-940F-0846AC8B04CD}"
+	RootNamespace="make_buildinfo"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="_CONSOLE"
+				RuntimeLibrary="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)/make_buildinfo.exe"
+				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_CONSOLE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\make_buildinfo.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/make_versioninfo.vcproj b/PC/VS8.0/make_versioninfo.vcproj
index 9dbf10d..6e4cff2 100644
--- a/PC/VS8.0/make_versioninfo.vcproj
+++ b/PC/VS8.0/make_versioninfo.vcproj
@@ -1,324 +1,324 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="make_versioninfo"

-	ProjectGUID="{F0E0541E-F17D-430B-97C4-93ADF0DD284E}"

-	RootNamespace="make_versioninfo"

-	TargetFrameworkVersion="131072"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-				Description="Build PC/pythonnt_rc(_d).h"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\pythonnt_rc.h&#x0D;&#x0A;"

-				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc.h"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				EnableIntrinsicFunctions="true"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(SolutionDir)make_versioninfo.exe"

-				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"

-				SubSystem="1"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\python_nt.h&#x0D;&#x0A;"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-				Description="Build PC/pythonnt_rc(_d).h"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\pythonnt_rc.h&#x0D;&#x0A;"

-				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc.h"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				EnableIntrinsicFunctions="true"

-				PreprocessorDefinitions="_CONSOLE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(SolutionDir)make_versioninfo.exe"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\python_nt.h&#x0D;&#x0A;"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-				Description="Build PC/pythonnt_rc(_d).h"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\pythonnt_rc_d.h&#x0D;&#x0A;"

-				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc_d.h"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				InlineFunctionExpansion="1"

-				EnableIntrinsicFunctions="false"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(SolutionDir)make_versioninfo_d.exe"

-				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"

-				SubSystem="1"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\python_nt_d.h&#x0D;&#x0A;"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-				Description="Build PC/pythonnt_rc(_d).h"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\pythonnt_rc_d.h&#x0D;&#x0A;"

-				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc_d.h"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				InlineFunctionExpansion="1"

-				EnableIntrinsicFunctions="false"

-				PreprocessorDefinitions="_CONSOLE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(SolutionDir)make_versioninfo_d.exe"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\python_nt_d.h&#x0D;&#x0A;"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\PC\make_versioninfo.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="make_versioninfo"
+	ProjectGUID="{F0E0541E-F17D-430B-97C4-93ADF0DD284E}"
+	RootNamespace="make_versioninfo"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+				Description="Build PC/pythonnt_rc(_d).h"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\pythonnt_rc.h&#x0D;&#x0A;"
+				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc.h"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				EnableIntrinsicFunctions="true"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(SolutionDir)make_versioninfo.exe"
+				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
+				SubSystem="1"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\python_nt.h&#x0D;&#x0A;"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+				Description="Build PC/pythonnt_rc(_d).h"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\pythonnt_rc.h&#x0D;&#x0A;"
+				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc.h"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				EnableIntrinsicFunctions="true"
+				PreprocessorDefinitions="_CONSOLE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(SolutionDir)make_versioninfo.exe"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\python_nt.h&#x0D;&#x0A;"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+				Description="Build PC/pythonnt_rc(_d).h"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\pythonnt_rc_d.h&#x0D;&#x0A;"
+				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc_d.h"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				InlineFunctionExpansion="1"
+				EnableIntrinsicFunctions="false"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(SolutionDir)make_versioninfo_d.exe"
+				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
+				SubSystem="1"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\python_nt_d.h&#x0D;&#x0A;"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+				Description="Build PC/pythonnt_rc(_d).h"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\pythonnt_rc_d.h&#x0D;&#x0A;"
+				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc_d.h"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				InlineFunctionExpansion="1"
+				EnableIntrinsicFunctions="false"
+				PreprocessorDefinitions="_CONSOLE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(SolutionDir)make_versioninfo_d.exe"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\python_nt_d.h&#x0D;&#x0A;"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\PC\make_versioninfo.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/pcbuild.sln b/PC/VS8.0/pcbuild.sln
index 18eed69..5f43524 100644
--- a/PC/VS8.0/pcbuild.sln
+++ b/PC/VS8.0/pcbuild.sln
@@ -1,559 +1,559 @@
-Microsoft Visual Studio Solution File, Format Version 9.00

-# Visual Studio 2005

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python", "python.vcproj", "{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058} = {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_versioninfo", "make_versioninfo.vcproj", "{F0E0541E-F17D-430B-97C4-93ADF0DD284E}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythoncore", "pythoncore.vcproj", "{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"

-	ProjectSection(ProjectDependencies) = postProject

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E} = {F0E0541E-F17D-430B-97C4-93ADF0DD284E}

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD} = {C73F0EC1-358B-4177-940F-0846AC8B04CD}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythonw", "pythonw.vcproj", "{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w9xpopen", "w9xpopen.vcproj", "{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}"

-	ProjectSection(ProjectDependencies) = postProject

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_buildinfo", "make_buildinfo.vcproj", "{C73F0EC1-358B-4177-940F-0846AC8B04CD}"

-EndProject

-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{553EC33E-9816-4996-A660-5D6186A0B0B3}"

-	ProjectSection(SolutionItems) = preProject

-		..\..\Modules\getbuildinfo.c = ..\..\Modules\getbuildinfo.c

-		readme.txt = readme.txt

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winsound", "winsound.vcproj", "{28B5D777-DDF2-4B6B-B34F-31D938813856}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb", "_bsddb.vcproj", "{B4D38F3F-68FB-42EC-A45D-E00657BB3627}"

-	ProjectSection(ProjectDependencies) = postProject

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes", "_ctypes.vcproj", "{0E9791DB-593A-465F-98BC-681011311618}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes_test", "_ctypes_test.vcproj", "{9EC7190A-249F-4180-A900-548FDCF3055F}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_elementtree", "_elementtree.vcproj", "{17E1E049-C309-4D79-843F-AE483C264AEA}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_msi", "_msi.vcproj", "{31FFC478-7B4A-43E8-9954-8D03E2187E9C}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_socket", "_socket.vcproj", "{86937F53-C189-40EF-8CE8-8759D8E7D480}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_sqlite3", "_sqlite3.vcproj", "{13CECB97-4119-4316-9D42-8534019A5A44}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-		{A1A295E5-463C-437F-81CA-1F32367685DA} = {A1A295E5-463C-437F-81CA-1F32367685DA}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ssl", "_ssl.vcproj", "{C6E20F84-3247-4AD6-B051-B073268F73BA}"

-	ProjectSection(ProjectDependencies) = postProject

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9} = {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}

-		{86937F53-C189-40EF-8CE8-8759D8E7D480} = {86937F53-C189-40EF-8CE8-8759D8E7D480}

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testcapi", "_testcapi.vcproj", "{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_tkinter", "_tkinter.vcproj", "{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bz2", "bz2.vcproj", "{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "select", "select.vcproj", "{18CAE28C-B454-46C1-87A0-493D91D97F03}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unicodedata", "unicodedata.vcproj", "{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pyexpat", "pyexpat.vcproj", "{D06B6426-4762-44CC-8BAD-D79052507F2F}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bdist_wininst", "bdist_wininst.vcproj", "{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_hashlib", "_hashlib.vcproj", "{447F05A8-F581-4CAC-A466-5AC7936E207E}"

-	ProjectSection(ProjectDependencies) = postProject

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9} = {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite3", "sqlite3.vcproj", "{A1A295E5-463C-437F-81CA-1F32367685DA}"

-	ProjectSection(ProjectDependencies) = postProject

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_multiprocessing", "_multiprocessing.vcproj", "{9E48B300-37D1-11DD-8C41-005056C00008}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kill_python", "kill_python.vcproj", "{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}"

-EndProject

-Global

-	GlobalSection(SolutionConfigurationPlatforms) = preSolution

-		Debug|Win32 = Debug|Win32

-		Debug|x64 = Debug|x64

-		PGInstrument|Win32 = PGInstrument|Win32

-		PGInstrument|x64 = PGInstrument|x64

-		PGUpdate|Win32 = PGUpdate|Win32

-		PGUpdate|x64 = PGUpdate|x64

-		Release|Win32 = Release|Win32

-		Release|x64 = Release|x64

-	EndGlobalSection

-	GlobalSection(ProjectConfigurationPlatforms) = postSolution

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.ActiveCfg = Debug|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.Build.0 = Debug|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.ActiveCfg = Debug|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.Build.0 = Debug|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.ActiveCfg = Release|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.Build.0 = Release|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.ActiveCfg = Release|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.Build.0 = Release|x64

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|Win32.ActiveCfg = Debug|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|Win32.Build.0 = Debug|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|x64.ActiveCfg = Debug|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|x64.Build.0 = Debug|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|Win32.Build.0 = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|x64.ActiveCfg = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|x64.Build.0 = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|Win32.Build.0 = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|x64.ActiveCfg = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|x64.Build.0 = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|Win32.ActiveCfg = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|Win32.Build.0 = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|x64.ActiveCfg = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|x64.Build.0 = Release|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.ActiveCfg = Debug|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.Build.0 = Debug|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.ActiveCfg = Debug|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.Build.0 = Debug|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.ActiveCfg = Release|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.Build.0 = Release|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.ActiveCfg = Release|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.Build.0 = Release|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.ActiveCfg = Debug|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.Build.0 = Debug|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.ActiveCfg = Debug|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.Build.0 = Debug|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.ActiveCfg = Release|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.Build.0 = Release|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.ActiveCfg = Release|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.Build.0 = Release|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.ActiveCfg = Debug|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.Build.0 = Debug|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.ActiveCfg = Debug|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.Build.0 = Debug|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.ActiveCfg = Release|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.Build.0 = Release|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.ActiveCfg = Release|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.Build.0 = Release|x64

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|Win32.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|x64.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|x64.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|Win32.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|x64.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|x64.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.Build.0 = Release|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|Win32.ActiveCfg = Debug|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|Win32.Build.0 = Debug|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|x64.ActiveCfg = Debug|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|x64.Build.0 = Debug|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|Win32.ActiveCfg = Release|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|Win32.Build.0 = Release|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.ActiveCfg = Release|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.Build.0 = Release|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.ActiveCfg = Debug|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.Build.0 = Debug|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.ActiveCfg = Debug|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.Build.0 = Debug|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.ActiveCfg = Release|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.Build.0 = Release|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.ActiveCfg = Release|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.Build.0 = Release|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.ActiveCfg = Debug|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.Build.0 = Debug|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.Debug|x64.ActiveCfg = Debug|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.Debug|x64.Build.0 = Debug|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.Release|Win32.ActiveCfg = Release|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.Release|Win32.Build.0 = Release|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.Release|x64.ActiveCfg = Release|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.Release|x64.Build.0 = Release|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|Win32.ActiveCfg = Debug|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|Win32.Build.0 = Debug|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|x64.ActiveCfg = Debug|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|x64.Build.0 = Debug|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|Win32.ActiveCfg = Release|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|Win32.Build.0 = Release|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|x64.ActiveCfg = Release|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|x64.Build.0 = Release|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|Win32.ActiveCfg = Debug|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|Win32.Build.0 = Debug|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|x64.ActiveCfg = Debug|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|x64.Build.0 = Debug|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|Win32.ActiveCfg = Release|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|Win32.Build.0 = Release|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|x64.ActiveCfg = Release|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|x64.Build.0 = Release|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|Win32.ActiveCfg = Debug|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|Win32.Build.0 = Debug|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|x64.ActiveCfg = Debug|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|x64.Build.0 = Debug|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|Win32.ActiveCfg = Release|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|Win32.Build.0 = Release|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|x64.ActiveCfg = Release|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|x64.Build.0 = Release|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|Win32.ActiveCfg = Debug|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|Win32.Build.0 = Debug|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|x64.ActiveCfg = Debug|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|x64.Build.0 = Debug|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|Win32.ActiveCfg = Release|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|Win32.Build.0 = Release|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|x64.ActiveCfg = Release|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|x64.Build.0 = Release|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|Win32.ActiveCfg = Debug|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|Win32.Build.0 = Debug|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|x64.ActiveCfg = Debug|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|x64.Build.0 = Debug|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|Win32.ActiveCfg = Release|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|Win32.Build.0 = Release|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|x64.ActiveCfg = Release|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|x64.Build.0 = Release|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|Win32.ActiveCfg = Debug|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|Win32.Build.0 = Debug|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|x64.ActiveCfg = Debug|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|x64.Build.0 = Debug|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|Win32.ActiveCfg = Release|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|Win32.Build.0 = Release|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|x64.ActiveCfg = Release|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|x64.Build.0 = Release|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|Win32.ActiveCfg = Debug|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|Win32.Build.0 = Debug|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|x64.ActiveCfg = Debug|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|x64.Build.0 = Debug|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|Win32.ActiveCfg = Release|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|Win32.Build.0 = Release|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|x64.ActiveCfg = Release|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|x64.Build.0 = Release|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|Win32.ActiveCfg = Debug|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|Win32.Build.0 = Debug|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|x64.ActiveCfg = Debug|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|x64.Build.0 = Debug|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|Win32.ActiveCfg = Release|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|Win32.Build.0 = Release|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|x64.ActiveCfg = Release|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|x64.Build.0 = Release|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|Win32.ActiveCfg = Debug|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|Win32.Build.0 = Debug|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|x64.ActiveCfg = Debug|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|x64.Build.0 = Debug|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|Win32.ActiveCfg = Release|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|Win32.Build.0 = Release|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|x64.ActiveCfg = Release|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|x64.Build.0 = Release|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|Win32.ActiveCfg = Debug|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|Win32.Build.0 = Debug|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|x64.ActiveCfg = Debug|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|x64.Build.0 = Debug|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|Win32.ActiveCfg = Release|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|Win32.Build.0 = Release|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|x64.ActiveCfg = Release|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|x64.Build.0 = Release|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|Win32.ActiveCfg = Debug|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|Win32.Build.0 = Debug|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|x64.ActiveCfg = Debug|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|x64.Build.0 = Debug|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|Win32.ActiveCfg = Release|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|Win32.Build.0 = Release|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|x64.ActiveCfg = Release|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|x64.Build.0 = Release|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|Win32.ActiveCfg = Debug|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|Win32.Build.0 = Debug|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|x64.ActiveCfg = Debug|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|x64.Build.0 = Debug|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|Win32.ActiveCfg = Release|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|Win32.Build.0 = Release|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|x64.ActiveCfg = Release|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|x64.Build.0 = Release|x64

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|Win32.ActiveCfg = Release|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|x64.ActiveCfg = Release|x64

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGInstrument|x64.ActiveCfg = Release|x64

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGUpdate|x64.ActiveCfg = Release|x64

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|Win32.ActiveCfg = Release|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|x64.ActiveCfg = Release|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|Win32.ActiveCfg = Debug|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|Win32.Build.0 = Debug|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|x64.ActiveCfg = Debug|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|x64.Build.0 = Debug|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.ActiveCfg = Release|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.Build.0 = Release|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.ActiveCfg = Release|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.Build.0 = Release|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.ActiveCfg = Debug|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.Build.0 = Debug|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.ActiveCfg = Debug|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.Build.0 = Debug|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|Win32.ActiveCfg = Release|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|Win32.Build.0 = Release|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|x64.ActiveCfg = Release|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|x64.Build.0 = Release|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|Win32.ActiveCfg = Debug|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|Win32.Build.0 = Debug|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|x64.ActiveCfg = Debug|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|x64.Build.0 = Debug|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|Win32.ActiveCfg = Release|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|Win32.Build.0 = Release|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|x64.ActiveCfg = Release|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|x64.Build.0 = Release|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|Win32.ActiveCfg = Debug|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|Win32.Build.0 = Debug|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|x64.ActiveCfg = Debug|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|x64.Build.0 = Debug|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|Win32.Build.0 = Release|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|x64.ActiveCfg = Release|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|x64.Build.0 = Release|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|Win32.Build.0 = Release|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|x64.ActiveCfg = Release|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|x64.Build.0 = Release|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|Win32.ActiveCfg = Release|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|Win32.Build.0 = Release|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|x64.ActiveCfg = Release|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|x64.Build.0 = Release|x64

-	EndGlobalSection

-	GlobalSection(SolutionProperties) = preSolution

-		HideSolutionNode = FALSE

-	EndGlobalSection

-EndGlobal

+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python", "python.vcproj", "{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058} = {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_versioninfo", "make_versioninfo.vcproj", "{F0E0541E-F17D-430B-97C4-93ADF0DD284E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythoncore", "pythoncore.vcproj", "{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"
+	ProjectSection(ProjectDependencies) = postProject
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E} = {F0E0541E-F17D-430B-97C4-93ADF0DD284E}
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD} = {C73F0EC1-358B-4177-940F-0846AC8B04CD}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythonw", "pythonw.vcproj", "{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w9xpopen", "w9xpopen.vcproj", "{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}"
+	ProjectSection(ProjectDependencies) = postProject
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_buildinfo", "make_buildinfo.vcproj", "{C73F0EC1-358B-4177-940F-0846AC8B04CD}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{553EC33E-9816-4996-A660-5D6186A0B0B3}"
+	ProjectSection(SolutionItems) = preProject
+		..\..\Modules\getbuildinfo.c = ..\..\Modules\getbuildinfo.c
+		readme.txt = readme.txt
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winsound", "winsound.vcproj", "{28B5D777-DDF2-4B6B-B34F-31D938813856}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb", "_bsddb.vcproj", "{B4D38F3F-68FB-42EC-A45D-E00657BB3627}"
+	ProjectSection(ProjectDependencies) = postProject
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes", "_ctypes.vcproj", "{0E9791DB-593A-465F-98BC-681011311618}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes_test", "_ctypes_test.vcproj", "{9EC7190A-249F-4180-A900-548FDCF3055F}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_elementtree", "_elementtree.vcproj", "{17E1E049-C309-4D79-843F-AE483C264AEA}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_msi", "_msi.vcproj", "{31FFC478-7B4A-43E8-9954-8D03E2187E9C}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_socket", "_socket.vcproj", "{86937F53-C189-40EF-8CE8-8759D8E7D480}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_sqlite3", "_sqlite3.vcproj", "{13CECB97-4119-4316-9D42-8534019A5A44}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+		{A1A295E5-463C-437F-81CA-1F32367685DA} = {A1A295E5-463C-437F-81CA-1F32367685DA}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ssl", "_ssl.vcproj", "{C6E20F84-3247-4AD6-B051-B073268F73BA}"
+	ProjectSection(ProjectDependencies) = postProject
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9} = {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}
+		{86937F53-C189-40EF-8CE8-8759D8E7D480} = {86937F53-C189-40EF-8CE8-8759D8E7D480}
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testcapi", "_testcapi.vcproj", "{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_tkinter", "_tkinter.vcproj", "{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bz2", "bz2.vcproj", "{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "select", "select.vcproj", "{18CAE28C-B454-46C1-87A0-493D91D97F03}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unicodedata", "unicodedata.vcproj", "{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pyexpat", "pyexpat.vcproj", "{D06B6426-4762-44CC-8BAD-D79052507F2F}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bdist_wininst", "bdist_wininst.vcproj", "{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_hashlib", "_hashlib.vcproj", "{447F05A8-F581-4CAC-A466-5AC7936E207E}"
+	ProjectSection(ProjectDependencies) = postProject
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9} = {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite3", "sqlite3.vcproj", "{A1A295E5-463C-437F-81CA-1F32367685DA}"
+	ProjectSection(ProjectDependencies) = postProject
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_multiprocessing", "_multiprocessing.vcproj", "{9E48B300-37D1-11DD-8C41-005056C00008}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kill_python", "kill_python.vcproj", "{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		PGInstrument|Win32 = PGInstrument|Win32
+		PGInstrument|x64 = PGInstrument|x64
+		PGUpdate|Win32 = PGUpdate|Win32
+		PGUpdate|x64 = PGUpdate|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.Build.0 = Debug|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.ActiveCfg = Debug|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.Build.0 = Debug|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.ActiveCfg = Release|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.Build.0 = Release|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.ActiveCfg = Release|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.Build.0 = Release|x64
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|Win32.Build.0 = Debug|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|x64.ActiveCfg = Debug|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|x64.Build.0 = Debug|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|Win32.Build.0 = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|x64.ActiveCfg = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|x64.Build.0 = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|Win32.Build.0 = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|x64.ActiveCfg = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|x64.Build.0 = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|Win32.ActiveCfg = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|Win32.Build.0 = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|x64.ActiveCfg = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|x64.Build.0 = Release|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.ActiveCfg = Debug|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.Build.0 = Debug|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.ActiveCfg = Debug|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.Build.0 = Debug|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.ActiveCfg = Release|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.Build.0 = Release|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.ActiveCfg = Release|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.Build.0 = Release|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.ActiveCfg = Debug|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.Build.0 = Debug|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.ActiveCfg = Debug|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.Build.0 = Debug|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.ActiveCfg = Release|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.Build.0 = Release|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.ActiveCfg = Release|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.Build.0 = Release|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.ActiveCfg = Debug|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.Build.0 = Debug|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.ActiveCfg = Debug|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.Build.0 = Debug|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.ActiveCfg = Release|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.Build.0 = Release|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.ActiveCfg = Release|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.Build.0 = Release|x64
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|Win32.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|x64.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|x64.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|Win32.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|x64.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|x64.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.Build.0 = Release|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|Win32.ActiveCfg = Debug|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|Win32.Build.0 = Debug|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|x64.ActiveCfg = Debug|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|x64.Build.0 = Debug|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|Win32.ActiveCfg = Release|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|Win32.Build.0 = Release|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.ActiveCfg = Release|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.Build.0 = Release|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.Build.0 = Debug|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.ActiveCfg = Debug|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.Build.0 = Debug|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.ActiveCfg = Release|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.Build.0 = Release|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.ActiveCfg = Release|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.Build.0 = Release|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.ActiveCfg = Debug|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.Build.0 = Debug|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.Debug|x64.ActiveCfg = Debug|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.Debug|x64.Build.0 = Debug|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.Release|Win32.ActiveCfg = Release|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.Release|Win32.Build.0 = Release|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.Release|x64.ActiveCfg = Release|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.Release|x64.Build.0 = Release|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|Win32.Build.0 = Debug|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|x64.ActiveCfg = Debug|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|x64.Build.0 = Debug|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|Win32.ActiveCfg = Release|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|Win32.Build.0 = Release|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|x64.ActiveCfg = Release|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|x64.Build.0 = Release|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|Win32.Build.0 = Debug|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|x64.ActiveCfg = Debug|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|x64.Build.0 = Debug|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|Win32.ActiveCfg = Release|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|Win32.Build.0 = Release|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|x64.ActiveCfg = Release|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|x64.Build.0 = Release|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|Win32.ActiveCfg = Debug|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|Win32.Build.0 = Debug|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|x64.ActiveCfg = Debug|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|x64.Build.0 = Debug|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|Win32.ActiveCfg = Release|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|Win32.Build.0 = Release|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|x64.ActiveCfg = Release|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|x64.Build.0 = Release|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|Win32.ActiveCfg = Debug|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|Win32.Build.0 = Debug|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|x64.ActiveCfg = Debug|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|x64.Build.0 = Debug|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|Win32.ActiveCfg = Release|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|Win32.Build.0 = Release|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|x64.ActiveCfg = Release|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|x64.Build.0 = Release|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|Win32.ActiveCfg = Debug|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|Win32.Build.0 = Debug|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|x64.ActiveCfg = Debug|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|x64.Build.0 = Debug|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|Win32.ActiveCfg = Release|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|Win32.Build.0 = Release|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|x64.ActiveCfg = Release|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|x64.Build.0 = Release|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|Win32.Build.0 = Debug|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|x64.ActiveCfg = Debug|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|x64.Build.0 = Debug|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|Win32.ActiveCfg = Release|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|Win32.Build.0 = Release|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|x64.ActiveCfg = Release|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|x64.Build.0 = Release|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|Win32.Build.0 = Debug|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|x64.ActiveCfg = Debug|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|x64.Build.0 = Debug|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|Win32.ActiveCfg = Release|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|Win32.Build.0 = Release|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|x64.ActiveCfg = Release|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|x64.Build.0 = Release|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|Win32.ActiveCfg = Debug|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|Win32.Build.0 = Debug|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|x64.ActiveCfg = Debug|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|x64.Build.0 = Debug|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|Win32.ActiveCfg = Release|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|Win32.Build.0 = Release|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|x64.ActiveCfg = Release|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|x64.Build.0 = Release|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|Win32.ActiveCfg = Debug|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|Win32.Build.0 = Debug|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|x64.ActiveCfg = Debug|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|x64.Build.0 = Debug|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|Win32.ActiveCfg = Release|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|Win32.Build.0 = Release|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|x64.ActiveCfg = Release|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|x64.Build.0 = Release|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|Win32.ActiveCfg = Debug|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|Win32.Build.0 = Debug|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|x64.ActiveCfg = Debug|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|x64.Build.0 = Debug|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|Win32.ActiveCfg = Release|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|Win32.Build.0 = Release|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|x64.ActiveCfg = Release|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|x64.Build.0 = Release|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|Win32.ActiveCfg = Debug|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|Win32.Build.0 = Debug|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|x64.ActiveCfg = Debug|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|x64.Build.0 = Debug|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|Win32.ActiveCfg = Release|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|Win32.Build.0 = Release|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|x64.ActiveCfg = Release|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|x64.Build.0 = Release|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|Win32.Build.0 = Debug|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|x64.ActiveCfg = Debug|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|x64.Build.0 = Debug|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|Win32.ActiveCfg = Release|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|Win32.Build.0 = Release|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|x64.ActiveCfg = Release|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|x64.Build.0 = Release|x64
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|Win32.ActiveCfg = Release|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|x64.ActiveCfg = Release|x64
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGInstrument|x64.ActiveCfg = Release|x64
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGUpdate|x64.ActiveCfg = Release|x64
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|Win32.ActiveCfg = Release|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|x64.ActiveCfg = Release|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|Win32.Build.0 = Debug|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|x64.ActiveCfg = Debug|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|x64.Build.0 = Debug|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.ActiveCfg = Release|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.Build.0 = Release|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.ActiveCfg = Release|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.Build.0 = Release|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.Build.0 = Debug|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.ActiveCfg = Debug|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.Build.0 = Debug|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|Win32.ActiveCfg = Release|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|Win32.Build.0 = Release|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|x64.ActiveCfg = Release|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|x64.Build.0 = Release|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|Win32.ActiveCfg = Debug|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|Win32.Build.0 = Debug|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|x64.ActiveCfg = Debug|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|x64.Build.0 = Debug|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|Win32.ActiveCfg = Release|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|Win32.Build.0 = Release|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|x64.ActiveCfg = Release|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|x64.Build.0 = Release|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|Win32.Build.0 = Debug|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|x64.ActiveCfg = Debug|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|x64.Build.0 = Debug|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|Win32.Build.0 = Release|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|x64.ActiveCfg = Release|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|x64.Build.0 = Release|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|Win32.Build.0 = Release|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|x64.ActiveCfg = Release|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|x64.Build.0 = Release|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|Win32.ActiveCfg = Release|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|Win32.Build.0 = Release|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|x64.ActiveCfg = Release|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/PC/VS8.0/pginstrument.vsprops b/PC/VS8.0/pginstrument.vsprops
index 38c5f18..93b9687 100644
--- a/PC/VS8.0/pginstrument.vsprops
+++ b/PC/VS8.0/pginstrument.vsprops
@@ -1,34 +1,34 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="pginstrument"

-	OutputDirectory="$(OutDirPGI)"

-	IntermediateDirectory="$(SolutionDir)$(PlatformName)-temp-pgi\$(ProjectName)\"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		Optimization="2"

-		InlineFunctionExpansion="1"

-		EnableIntrinsicFunctions="false"

-		FavorSizeOrSpeed="2"

-		OmitFramePointers="true"

-		EnableFiberSafeOptimizations="false"

-		WholeProgramOptimization="true"

-		StringPooling="true"

-		ExceptionHandling="0"

-		BufferSecurityCheck="false"

-	/>

-	<Tool

-		Name="VCLinkerTool"

-		OptimizeReferences="2"

-		EnableCOMDATFolding="2"

-		LinkTimeCodeGeneration="2"

-		ProfileGuidedDatabase="$(SolutionDir)$(PlatformName)-pgi\$(TargetName).pgd"

-		ImportLibrary="$(OutDirPGI)\$(TargetName).lib"

-	/>

-	<UserMacro

-		Name="OutDirPGI"

-		Value="$(SolutionDir)$(PlatformName)-pgi\"

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pginstrument"
+	OutputDirectory="$(OutDirPGI)"
+	IntermediateDirectory="$(SolutionDir)$(PlatformName)-temp-pgi\$(ProjectName)\"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		Optimization="2"
+		InlineFunctionExpansion="1"
+		EnableIntrinsicFunctions="false"
+		FavorSizeOrSpeed="2"
+		OmitFramePointers="true"
+		EnableFiberSafeOptimizations="false"
+		WholeProgramOptimization="true"
+		StringPooling="true"
+		ExceptionHandling="0"
+		BufferSecurityCheck="false"
+	/>
+	<Tool
+		Name="VCLinkerTool"
+		OptimizeReferences="2"
+		EnableCOMDATFolding="2"
+		LinkTimeCodeGeneration="2"
+		ProfileGuidedDatabase="$(SolutionDir)$(PlatformName)-pgi\$(TargetName).pgd"
+		ImportLibrary="$(OutDirPGI)\$(TargetName).lib"
+	/>
+	<UserMacro
+		Name="OutDirPGI"
+		Value="$(SolutionDir)$(PlatformName)-pgi\"
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/VS8.0/pgupdate.vsprops b/PC/VS8.0/pgupdate.vsprops
index 26cfc2d..7ce4a3a 100644
--- a/PC/VS8.0/pgupdate.vsprops
+++ b/PC/VS8.0/pgupdate.vsprops
@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="pgupdate"

-	OutputDirectory="$(SolutionDir)$(PlatformName)-pgo\"

-	InheritedPropertySheets="$(SolutionDir)\pginstrument.vsprops"

-	>

-	<Tool

-		Name="VCLinkerTool"

-		AdditionalManifestDependencies=""

-		LinkTimeCodeGeneration="4"

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pgupdate"
+	OutputDirectory="$(SolutionDir)$(PlatformName)-pgo\"
+	InheritedPropertySheets="$(SolutionDir)\pginstrument.vsprops"
+	>
+	<Tool
+		Name="VCLinkerTool"
+		AdditionalManifestDependencies=""
+		LinkTimeCodeGeneration="4"
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/VS8.0/pyd.vsprops b/PC/VS8.0/pyd.vsprops
index 34c21e1..ce039eb 100644
--- a/PC/VS8.0/pyd.vsprops
+++ b/PC/VS8.0/pyd.vsprops
@@ -1,28 +1,28 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="pyd"

-	InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		PreprocessorDefinitions="Py_BUILD_CORE_MODULE"

-		RuntimeLibrary="2"

-	/>

-	<Tool

-		Name="VCLinkerTool"

-		OutputFile="$(OutDir)\$(ProjectName).pyd"

-		ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"

-		ImportLibrary="$(OutDir)\$(TargetName).lib"

-		GenerateManifest="false"

-	/>

-	<Tool

-		Name="VCManifestTool"

-		EmbedManifest="false"

-	/>

-	<Tool

-		Name="VCPostBuildEventTool"

-		CommandLine=""

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pyd"
+	InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		PreprocessorDefinitions="Py_BUILD_CORE_MODULE"
+		RuntimeLibrary="2"
+	/>
+	<Tool
+		Name="VCLinkerTool"
+		OutputFile="$(OutDir)\$(ProjectName).pyd"
+		ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
+		ImportLibrary="$(OutDir)\$(TargetName).lib"
+		GenerateManifest="false"
+	/>
+	<Tool
+		Name="VCManifestTool"
+		EmbedManifest="false"
+	/>
+	<Tool
+		Name="VCPostBuildEventTool"
+		CommandLine=""
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/VS8.0/pyd_d.vsprops b/PC/VS8.0/pyd_d.vsprops
index 313a30b..8508156 100644
--- a/PC/VS8.0/pyd_d.vsprops
+++ b/PC/VS8.0/pyd_d.vsprops
@@ -1,36 +1,36 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="pyd_d"

-	InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		Optimization="0"

-		InlineFunctionExpansion="0"

-		EnableIntrinsicFunctions="false"

-		PreprocessorDefinitions="Py_BUILD_CORE_MODULE"

-		RuntimeLibrary="3"

-	/>

-	<Tool

-		Name="VCLinkerTool"

-		OutputFile="$(OutDir)\$(ProjectName)_d.pyd"

-		LinkIncremental="1"

-		ProgramDatabaseFile="$(OutDir)\$(ProjectName)_d.pdb"

-		ImportLibrary="$(OutDir)\$(TargetName).lib"

-		GenerateManifest="false"

-	/>

-	<Tool

-		Name="VCManifestTool"

-		EmbedManifest="false"

-	/>

-	<Tool

-		Name="VCPostBuildEventTool"

-		CommandLine=""

-	/>

-	<UserMacro

-		Name="PythonExe"

-		Value="$(SolutionDir)python_d.exe"

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pyd_d"
+	InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		Optimization="0"
+		InlineFunctionExpansion="0"
+		EnableIntrinsicFunctions="false"
+		PreprocessorDefinitions="Py_BUILD_CORE_MODULE"
+		RuntimeLibrary="3"
+	/>
+	<Tool
+		Name="VCLinkerTool"
+		OutputFile="$(OutDir)\$(ProjectName)_d.pyd"
+		LinkIncremental="1"
+		ProgramDatabaseFile="$(OutDir)\$(ProjectName)_d.pdb"
+		ImportLibrary="$(OutDir)\$(TargetName).lib"
+		GenerateManifest="false"
+	/>
+	<Tool
+		Name="VCManifestTool"
+		EmbedManifest="false"
+	/>
+	<Tool
+		Name="VCPostBuildEventTool"
+		CommandLine=""
+	/>
+	<UserMacro
+		Name="PythonExe"
+		Value="$(SolutionDir)python_d.exe"
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/VS8.0/pyexpat.vcproj b/PC/VS8.0/pyexpat.vcproj
index b59e4ec..0d42f30 100644
--- a/PC/VS8.0/pyexpat.vcproj
+++ b/PC/VS8.0/pyexpat.vcproj
@@ -1,553 +1,553 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="pyexpat"

-	ProjectGUID="{D06B6426-4762-44CC-8BAD-D79052507F2F}"

-	RootNamespace="pyexpat"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\expat\xmlrole.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmltok.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\pyexpat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmlparse.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmlrole.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmltok.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pyexpat"
+	ProjectGUID="{D06B6426-4762-44CC-8BAD-D79052507F2F}"
+	RootNamespace="pyexpat"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\expat\xmlrole.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmltok.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\pyexpat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmlparse.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmlrole.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmltok.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/pyproject.vsprops b/PC/VS8.0/pyproject.vsprops
index 5a5fff6..c0c7e32 100644
--- a/PC/VS8.0/pyproject.vsprops
+++ b/PC/VS8.0/pyproject.vsprops
@@ -1,111 +1,111 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="pyproject"

-	OutputDirectory="$(SolutionDir)"

-	IntermediateDirectory="$(SolutionDir)$(PlatformName)-temp-$(ConfigurationName)\$(ProjectName)\"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		Optimization="2"

-		InlineFunctionExpansion="1"

-		EnableIntrinsicFunctions="true"

-		AdditionalIncludeDirectories="..\..\Include; ..\..\PC"

-		PreprocessorDefinitions="_WIN32"

-		StringPooling="true"

-		ExceptionHandling="0"

-		RuntimeLibrary="0"

-		EnableFunctionLevelLinking="true"

-		WarningLevel="3"

-		DebugInformationFormat="3"

-		CompileAs="0"

-	/>

-	<Tool

-		Name="VCLinkerTool"

-		LinkIncremental="1"

-		AdditionalLibraryDirectories="$(OutDir)"

-		GenerateDebugInformation="true"

-		ProgramDatabaseFile="$(OutDir)$(TargetName).pdb"

-		SubSystem="2"

-		RandomizedBaseAddress="1"

-		DataExecutionPrevention="0"

-		TargetMachine="1"

-	/>

-	<Tool

-		Name="VCResourceCompilerTool"

-		AdditionalIncludeDirectories="..\..\PC;..\..\Include"

-	/>

-	<UserMacro

-		Name="PyDllName"

-		Value="python27"

-	/>

-	<UserMacro

-		Name="PythonExe"

-		Value="$(SolutionDir)\python.exe"

-	/>

-	<UserMacro

-		Name="externalsDir"

-		Value="..\..\.."

-	/>

-	<UserMacro

-		Name="bsddb47Dir"

-		Value="$(externalsDir)\db-4.7.25.0\build_windows"

-	/>

-	<UserMacro

-		Name="bsddb47DepLibs"

-		Value="ws2_32.lib"

-	/>

-	<UserMacro

-		Name="bsddbDir"

-		Value="$(bsddb47Dir)"

-	/>

-	<UserMacro

-		Name="bsddbDepLibs"

-		Value="$(bsddb47DepLibs)"

-	/>

-	<UserMacro

-		Name="bsddb44Dir"

-		Value="$(externalsDir)\db-4.4.20\build_win32"

-	/>

-	<UserMacro

-		Name="bsddb44DepLibs"

-		Value=""

-	/>

-	<UserMacro

-		Name="sqlite3Dir"

-		Value="$(externalsDir)\sqlite-3.6.21"

-	/>

-	<UserMacro

-		Name="bz2Dir"

-		Value="$(externalsDir)\bzip2-1.0.6"

-	/>

-	<UserMacro

-		Name="opensslDir"

-		Value="$(externalsDir)\openssl-0.9.8y"

-	/>

-	<UserMacro

-		Name="tcltkDir"

-		Value="$(externalsDir)\tcltk"

-	/>

-	<UserMacro

-		Name="tcltk64Dir"

-		Value="$(externalsDir)\tcltk64"

-	/>

-	<UserMacro

-		Name="tcltkLib"

-		Value="$(tcltkDir)\lib\tcl85.lib $(tcltkDir)\lib\tk85.lib"

-	/>

-	<UserMacro

-		Name="tcltkLibDebug"

-		Value="$(tcltkDir)\lib\tcl85g.lib $(tcltkDir)\lib\tk85g.lib"

-	/>

-	<UserMacro

-		Name="tcltk64Lib"

-		Value="$(tcltk64Dir)\lib\tcl85.lib $(tcltk64Dir)\lib\tk85.lib"

-	/>

-	<UserMacro

-		Name="tcltk64LibDebug"

-		Value="$(tcltk64Dir)\lib\tcl85g.lib $(tcltk64Dir)\lib\tk85g.lib"

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pyproject"
+	OutputDirectory="$(SolutionDir)"
+	IntermediateDirectory="$(SolutionDir)$(PlatformName)-temp-$(ConfigurationName)\$(ProjectName)\"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		Optimization="2"
+		InlineFunctionExpansion="1"
+		EnableIntrinsicFunctions="true"
+		AdditionalIncludeDirectories="..\..\Include; ..\..\PC"
+		PreprocessorDefinitions="_WIN32"
+		StringPooling="true"
+		ExceptionHandling="0"
+		RuntimeLibrary="0"
+		EnableFunctionLevelLinking="true"
+		WarningLevel="3"
+		DebugInformationFormat="3"
+		CompileAs="0"
+	/>
+	<Tool
+		Name="VCLinkerTool"
+		LinkIncremental="1"
+		AdditionalLibraryDirectories="$(OutDir)"
+		GenerateDebugInformation="true"
+		ProgramDatabaseFile="$(OutDir)$(TargetName).pdb"
+		SubSystem="2"
+		RandomizedBaseAddress="1"
+		DataExecutionPrevention="0"
+		TargetMachine="1"
+	/>
+	<Tool
+		Name="VCResourceCompilerTool"
+		AdditionalIncludeDirectories="..\..\PC;..\..\Include"
+	/>
+	<UserMacro
+		Name="PyDllName"
+		Value="python27"
+	/>
+	<UserMacro
+		Name="PythonExe"
+		Value="$(SolutionDir)\python.exe"
+	/>
+	<UserMacro
+		Name="externalsDir"
+		Value="..\..\.."
+	/>
+	<UserMacro
+		Name="bsddb47Dir"
+		Value="$(externalsDir)\db-4.7.25.0\build_windows"
+	/>
+	<UserMacro
+		Name="bsddb47DepLibs"
+		Value="ws2_32.lib"
+	/>
+	<UserMacro
+		Name="bsddbDir"
+		Value="$(bsddb47Dir)"
+	/>
+	<UserMacro
+		Name="bsddbDepLibs"
+		Value="$(bsddb47DepLibs)"
+	/>
+	<UserMacro
+		Name="bsddb44Dir"
+		Value="$(externalsDir)\db-4.4.20\build_win32"
+	/>
+	<UserMacro
+		Name="bsddb44DepLibs"
+		Value=""
+	/>
+	<UserMacro
+		Name="sqlite3Dir"
+		Value="$(externalsDir)\sqlite-3.6.21"
+	/>
+	<UserMacro
+		Name="bz2Dir"
+		Value="$(externalsDir)\bzip2-1.0.6"
+	/>
+	<UserMacro
+		Name="opensslDir"
+		Value="$(externalsDir)\openssl-0.9.8y"
+	/>
+	<UserMacro
+		Name="tcltkDir"
+		Value="$(externalsDir)\tcltk"
+	/>
+	<UserMacro
+		Name="tcltk64Dir"
+		Value="$(externalsDir)\tcltk64"
+	/>
+	<UserMacro
+		Name="tcltkLib"
+		Value="$(tcltkDir)\lib\tcl85.lib $(tcltkDir)\lib\tk85.lib"
+	/>
+	<UserMacro
+		Name="tcltkLibDebug"
+		Value="$(tcltkDir)\lib\tcl85g.lib $(tcltkDir)\lib\tk85g.lib"
+	/>
+	<UserMacro
+		Name="tcltk64Lib"
+		Value="$(tcltk64Dir)\lib\tcl85.lib $(tcltk64Dir)\lib\tk85.lib"
+	/>
+	<UserMacro
+		Name="tcltk64LibDebug"
+		Value="$(tcltk64Dir)\lib\tcl85g.lib $(tcltk64Dir)\lib\tk85g.lib"
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/VS8.0/python.vcproj b/PC/VS8.0/python.vcproj
index 2f47c0e..f2e7d11 100644
--- a/PC/VS8.0/python.vcproj
+++ b/PC/VS8.0/python.vcproj
@@ -1,637 +1,637 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="python"

-	ProjectGUID="{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"

-	TargetFrameworkVersion="131072"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python.exe"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python.exe"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				EnableIntrinsicFunctions="false"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				RuntimeLibrary="3"

-				BrowseInformation="1"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python_d.exe"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				EnableIntrinsicFunctions="false"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				RuntimeLibrary="3"

-				BrowseInformation="1"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python_d.exe"

-				SubSystem="1"

-				StackReserveSize="2100000"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pginstrument.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python.exe"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pginstrument.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python.exe"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pgupdate.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python.exe"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pgupdate.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python.exe"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Resource Files"

-			>

-			<File

-				RelativePath="..\..\PC\pycon.ico"

-				>

-			</File>

-			<File

-				RelativePath="..\..\PC\python_exe.rc"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\python.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="python"
+	ProjectGUID="{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python.exe"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python.exe"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				EnableIntrinsicFunctions="false"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				RuntimeLibrary="3"
+				BrowseInformation="1"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python_d.exe"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				EnableIntrinsicFunctions="false"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				RuntimeLibrary="3"
+				BrowseInformation="1"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python_d.exe"
+				SubSystem="1"
+				StackReserveSize="2100000"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pginstrument.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python.exe"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pginstrument.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python.exe"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pgupdate.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python.exe"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pgupdate.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python.exe"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Resource Files"
+			>
+			<File
+				RelativePath="..\..\PC\pycon.ico"
+				>
+			</File>
+			<File
+				RelativePath="..\..\PC\python_exe.rc"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\python.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/pythoncore.vcproj b/PC/VS8.0/pythoncore.vcproj
index 081d4f9..d8995e6 100644
--- a/PC/VS8.0/pythoncore.vcproj
+++ b/PC/VS8.0/pythoncore.vcproj
@@ -1,1889 +1,1889 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="pythoncore"

-	ProjectGUID="{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"

-	RootNamespace="pythoncore"

-	TargetFrameworkVersion="131072"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions="/Zm200 "

-				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"

-				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"

-				RuntimeLibrary="2"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				Description="Generate build information..."

-				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="getbuildinfo.o"

-				OutputFile="$(OutDir)\$(PyDllName).dll"

-				IgnoreDefaultLibraryNames="libc"

-				ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"

-				BaseAddress="0x1e000000"

-				ImportLibrary="$(OutDir)$(PyDllName).lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions="/Zm200 "

-				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"

-				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"

-				RuntimeLibrary="2"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				Description="Generate build information..."

-				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="getbuildinfo.o"

-				OutputFile="$(OutDir)\$(PyDllName).dll"

-				IgnoreDefaultLibraryNames="libc"

-				ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"

-				BaseAddress="0x1e000000"

-				ImportLibrary="$(OutDir)$(PyDllName).lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions="/Zm200 "

-				Optimization="0"

-				InlineFunctionExpansion="0"

-				EnableIntrinsicFunctions="false"

-				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"

-				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"

-				RuntimeLibrary="3"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				Description="Generate build information..."

-				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Debug"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="getbuildinfo.o"

-				OutputFile="$(OutDir)\$(PyDllName)_d.dll"

-				IgnoreDefaultLibraryNames="libc"

-				ProgramDatabaseFile="$(OutDir)$(PyDllName)_d.pdb"

-				BaseAddress="0x1e000000"

-				ImportLibrary="$(OutDir)$(PyDllName)_d.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions="/Zm200 "

-				Optimization="0"

-				InlineFunctionExpansion="0"

-				EnableIntrinsicFunctions="false"

-				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"

-				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"

-				RuntimeLibrary="3"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				Description="Generate build information..."

-				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Debug"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="getbuildinfo.o"

-				OutputFile="$(OutDir)\$(PyDllName)_d.dll"

-				IgnoreDefaultLibraryNames="libc"

-				ProgramDatabaseFile="$(OutDir)$(PyDllName)_d.pdb"

-				BaseAddress="0x1e000000"

-				ImportLibrary="$(OutDir)$(PyDllName)_d.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pginstrument.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions="/Zm200 "

-				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"

-				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"

-				RuntimeLibrary="2"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				Description="Generate build information..."

-				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="getbuildinfo.o"

-				OutputFile="$(OutDir)\$(PyDllName).dll"

-				IgnoreDefaultLibraryNames="libc"

-				ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"

-				BaseAddress="0x1e000000"

-				ImportLibrary="$(OutDirPGI)$(PyDllName).lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pginstrument.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions="/Zm200 "

-				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"

-				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"

-				RuntimeLibrary="2"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				Description="Generate build information..."

-				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="getbuildinfo.o"

-				OutputFile="$(OutDir)\$(PyDllName).dll"

-				IgnoreDefaultLibraryNames="libc"

-				ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"

-				BaseAddress="0x1e000000"

-				ImportLibrary="$(OutDirPGI)$(PyDllName).lib"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pgupdate.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions="/Zm200 "

-				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"

-				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"

-				RuntimeLibrary="2"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				Description="Generate build information..."

-				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="getbuildinfo.o"

-				OutputFile="$(OutDir)\$(PyDllName).dll"

-				IgnoreDefaultLibraryNames="libc"

-				ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"

-				BaseAddress="0x1e000000"

-				ImportLibrary="$(OutDirPGI)$(PyDllName).lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pgupdate.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalOptions="/Zm200 "

-				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"

-				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"

-				RuntimeLibrary="2"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				Description="Generate build information..."

-				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="getbuildinfo.o"

-				OutputFile="$(OutDir)\$(PyDllName).dll"

-				IgnoreDefaultLibraryNames="libc"

-				ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"

-				BaseAddress="0x1e000000"

-				ImportLibrary="$(OutDirPGI)$(PyDllName).lib"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Include"

-			>

-			<File

-				RelativePath="..\..\Include\abstract.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\asdl.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\ast.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\bitset.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\boolobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\bufferobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\bytes_methods.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\bytearrayobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\bytesobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\cellobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\ceval.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\classobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\cobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\code.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\codecs.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\compile.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\complexobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\cStringIO.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\datetime.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\descrobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\dictobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\dtoa.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\enumobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\errcode.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\eval.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\fileobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\floatobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\frameobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\funcobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\genobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\graminit.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\grammar.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\import.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\intobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\intrcheck.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\iterobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\listobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\longintrepr.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\longobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\marshal.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\memoryobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\metagrammar.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\methodobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\modsupport.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\moduleobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\node.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\object.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\objimpl.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\opcode.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\osdefs.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\parsetok.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\patchlevel.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pgen.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pgenheaders.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\py_curses.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pyarena.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pycapsule.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pyctype.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pydebug.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pyerrors.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pyexpat.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pyfpe.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pygetopt.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pymactoolbox.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pymath.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pymem.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pyport.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pystate.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pystrcmp.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pystrtod.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\Python-ast.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\Python.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pythonrun.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\pythread.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\rangeobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\setobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\sliceobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\stringobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\structmember.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\structseq.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\symtable.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\sysmodule.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\timefuncs.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\token.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\traceback.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\tupleobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\ucnhash.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\unicodeobject.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Include\weakrefobject.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Modules"

-			>

-			<File

-				RelativePath="..\..\Modules\_bisectmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_codecsmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_collectionsmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_csv.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_functoolsmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_heapqmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_hotshot.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_json.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_localemodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_lsprof.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_math.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_math.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_randommodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sre.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_struct.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_weakref.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\arraymodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\audioop.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\binascii.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\cmathmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\cPickle.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\cStringIO.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\datetimemodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\errnomodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\future_builtins.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\gcmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\imageop.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\itertoolsmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\main.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\mathmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\md5.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\md5.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\md5module.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\mmapmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\operator.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\parsermodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\posixmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\rotatingtree.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\rotatingtree.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\sha256module.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\sha512module.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\shamodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\signalmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\stropmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\symtablemodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\threadmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\timemodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\xxsubtype.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\zipimport.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\zlibmodule.c"

-				>

-			</File>

-			<Filter

-				Name="zlib"

-				>

-				<File

-					RelativePath="..\..\Modules\zlib\adler32.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\compress.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\crc32.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\crc32.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\deflate.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\deflate.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\gzclose.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\gzlib.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\gzread.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\gzwrite.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\infback.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inffast.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inffast.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inffixed.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inflate.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inflate.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inftrees.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inftrees.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\trees.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\trees.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\uncompr.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\zconf.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\zconf.in.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\zlib.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\zutil.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\zutil.h"

-					>

-				</File>

-			</Filter>

-			<Filter

-				Name="cjkcodecs"

-				>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\_codecs_cn.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\_codecs_hk.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\_codecs_iso2022.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\_codecs_jp.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\_codecs_kr.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\_codecs_tw.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\alg_jisx0201.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\cjkcodecs.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\emu_jisx0213_2000.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\mappings_cn.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\mappings_hk.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\mappings_jisx0213_pair.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\mappings_jp.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\mappings_kr.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\mappings_tw.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\multibytecodec.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\cjkcodecs\multibytecodec.h"

-					>

-				</File>

-			</Filter>

-			<Filter

-				Name="_io"

-				>

-				<File

-					RelativePath="..\..\Modules\_io\_iomodule.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\_io\_iomodule.h"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\_io\bufferedio.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\_io\bytesio.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\_io\fileio.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\_io\iobase.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\_io\stringio.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\_io\textio.c"

-					>

-				</File>

-			</Filter>

-		</Filter>

-		<Filter

-			Name="Objects"

-			>

-			<File

-				RelativePath="..\..\Objects\abstract.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\boolobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\bufferobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\bytes_methods.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\bytearrayobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\capsule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\cellobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\classobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\cobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\codeobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\complexobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\stringlib\count.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\descrobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\dictobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\enumobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\exceptions.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\stringlib\fastsearch.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\fileobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\stringlib\find.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\floatobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\frameobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\funcobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\genobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\intobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\iterobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\listobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\longobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\memoryobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\methodobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\moduleobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\object.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\obmalloc.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\stringlib\partition.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\rangeobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\setobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\sliceobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\stringlib\split.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\stringobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\structseq.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\tupleobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\typeobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\unicodectype.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\unicodeobject.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\unicodetype_db.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Objects\weakrefobject.c"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Parser"

-			>

-			<File

-				RelativePath="..\..\Parser\acceler.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Parser\bitset.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Parser\firstsets.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Parser\grammar.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Parser\grammar1.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Parser\listnode.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Parser\metagrammar.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Parser\myreadline.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Parser\node.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Parser\parser.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Parser\parser.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Parser\parsetok.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Parser\tokenizer.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Parser\tokenizer.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="PC"

-			>

-			<File

-				RelativePath="..\..\PC\_subprocess.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\PC\_winreg.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\PC\config.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\PC\dl_nt.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\PC\errmap.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\PC\getpathp.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\PC\import_nt.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\PC\msvcrtmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\PC\pyconfig.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Python"

-			>

-			<File

-				RelativePath="..\..\Python\_warnings.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\asdl.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\ast.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\bltinmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\ceval.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\codecs.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\compile.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\dtoa.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\dynload_win.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\errors.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\formatter_string.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\formatter_unicode.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\frozen.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\future.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\getargs.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\getcompiler.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\getcopyright.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\getopt.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\getplatform.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\getversion.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\graminit.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\import.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\importdl.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\importdl.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\marshal.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\modsupport.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\mysnprintf.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\mystrtoul.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\peephole.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\pyarena.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\pyctype.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\pyfpe.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\pymath.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\pystate.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\pystrcmp.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\pystrtod.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\Python-ast.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\pythonrun.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\random.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\structmember.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\symtable.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\sysmodule.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\thread.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\thread_nt.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Python\traceback.c"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Resource Files"

-			>

-			<File

-				RelativePath="..\..\PC\python_nt.rc"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pythoncore"
+	ProjectGUID="{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"
+	RootNamespace="pythoncore"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/Zm200 "
+				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"
+				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
+				RuntimeLibrary="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				Description="Generate build information..."
+				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="getbuildinfo.o"
+				OutputFile="$(OutDir)\$(PyDllName).dll"
+				IgnoreDefaultLibraryNames="libc"
+				ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"
+				BaseAddress="0x1e000000"
+				ImportLibrary="$(OutDir)$(PyDllName).lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/Zm200 "
+				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"
+				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
+				RuntimeLibrary="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				Description="Generate build information..."
+				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="getbuildinfo.o"
+				OutputFile="$(OutDir)\$(PyDllName).dll"
+				IgnoreDefaultLibraryNames="libc"
+				ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"
+				BaseAddress="0x1e000000"
+				ImportLibrary="$(OutDir)$(PyDllName).lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/Zm200 "
+				Optimization="0"
+				InlineFunctionExpansion="0"
+				EnableIntrinsicFunctions="false"
+				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"
+				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
+				RuntimeLibrary="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				Description="Generate build information..."
+				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Debug"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="getbuildinfo.o"
+				OutputFile="$(OutDir)\$(PyDllName)_d.dll"
+				IgnoreDefaultLibraryNames="libc"
+				ProgramDatabaseFile="$(OutDir)$(PyDllName)_d.pdb"
+				BaseAddress="0x1e000000"
+				ImportLibrary="$(OutDir)$(PyDllName)_d.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/Zm200 "
+				Optimization="0"
+				InlineFunctionExpansion="0"
+				EnableIntrinsicFunctions="false"
+				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"
+				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
+				RuntimeLibrary="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				Description="Generate build information..."
+				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Debug"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="getbuildinfo.o"
+				OutputFile="$(OutDir)\$(PyDllName)_d.dll"
+				IgnoreDefaultLibraryNames="libc"
+				ProgramDatabaseFile="$(OutDir)$(PyDllName)_d.pdb"
+				BaseAddress="0x1e000000"
+				ImportLibrary="$(OutDir)$(PyDllName)_d.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pginstrument.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/Zm200 "
+				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"
+				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
+				RuntimeLibrary="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				Description="Generate build information..."
+				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="getbuildinfo.o"
+				OutputFile="$(OutDir)\$(PyDllName).dll"
+				IgnoreDefaultLibraryNames="libc"
+				ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"
+				BaseAddress="0x1e000000"
+				ImportLibrary="$(OutDirPGI)$(PyDllName).lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pginstrument.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/Zm200 "
+				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"
+				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
+				RuntimeLibrary="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				Description="Generate build information..."
+				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="getbuildinfo.o"
+				OutputFile="$(OutDir)\$(PyDllName).dll"
+				IgnoreDefaultLibraryNames="libc"
+				ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"
+				BaseAddress="0x1e000000"
+				ImportLibrary="$(OutDirPGI)$(PyDllName).lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pgupdate.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/Zm200 "
+				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"
+				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
+				RuntimeLibrary="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				Description="Generate build information..."
+				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="getbuildinfo.o"
+				OutputFile="$(OutDir)\$(PyDllName).dll"
+				IgnoreDefaultLibraryNames="libc"
+				ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"
+				BaseAddress="0x1e000000"
+				ImportLibrary="$(OutDirPGI)$(PyDllName).lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pgupdate.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/Zm200 "
+				AdditionalIncludeDirectories="..\..\Python;..\..\Modules\zlib"
+				PreprocessorDefinitions="_USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;WIN32"
+				RuntimeLibrary="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				Description="Generate build information..."
+				CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="getbuildinfo.o"
+				OutputFile="$(OutDir)\$(PyDllName).dll"
+				IgnoreDefaultLibraryNames="libc"
+				ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"
+				BaseAddress="0x1e000000"
+				ImportLibrary="$(OutDirPGI)$(PyDllName).lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Include"
+			>
+			<File
+				RelativePath="..\..\Include\abstract.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\asdl.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\ast.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\bitset.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\boolobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\bufferobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\bytes_methods.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\bytearrayobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\bytesobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\cellobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\ceval.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\classobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\cobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\code.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\codecs.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\compile.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\complexobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\cStringIO.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\datetime.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\descrobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\dictobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\dtoa.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\enumobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\errcode.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\eval.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\fileobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\floatobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\frameobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\funcobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\genobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\graminit.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\grammar.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\import.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\intobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\intrcheck.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\iterobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\listobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\longintrepr.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\longobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\marshal.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\memoryobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\metagrammar.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\methodobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\modsupport.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\moduleobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\node.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\object.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\objimpl.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\opcode.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\osdefs.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\parsetok.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\patchlevel.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pgen.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pgenheaders.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\py_curses.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pyarena.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pycapsule.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pyctype.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pydebug.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pyerrors.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pyexpat.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pyfpe.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pygetopt.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pymactoolbox.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pymath.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pymem.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pyport.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pystate.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pystrcmp.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pystrtod.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\Python-ast.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\Python.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pythonrun.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\pythread.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\rangeobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\setobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\sliceobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\stringobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\structmember.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\structseq.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\symtable.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\sysmodule.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\timefuncs.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\token.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\traceback.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\tupleobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\ucnhash.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\unicodeobject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Include\weakrefobject.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Modules"
+			>
+			<File
+				RelativePath="..\..\Modules\_bisectmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_codecsmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_collectionsmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_csv.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_functoolsmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_heapqmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_hotshot.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_json.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_localemodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_lsprof.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_math.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_math.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_randommodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sre.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_struct.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_weakref.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\arraymodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\audioop.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\binascii.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\cmathmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\cPickle.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\cStringIO.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\datetimemodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\errnomodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\future_builtins.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\gcmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\imageop.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\itertoolsmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\main.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\mathmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\md5.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\md5.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\md5module.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\mmapmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\operator.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\parsermodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\posixmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\rotatingtree.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\rotatingtree.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\sha256module.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\sha512module.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\shamodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\signalmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\stropmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\symtablemodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\threadmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\timemodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\xxsubtype.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\zipimport.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\zlibmodule.c"
+				>
+			</File>
+			<Filter
+				Name="zlib"
+				>
+				<File
+					RelativePath="..\..\Modules\zlib\adler32.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\compress.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\crc32.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\crc32.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\deflate.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\deflate.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\gzclose.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\gzlib.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\gzread.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\gzwrite.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\infback.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inffast.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inffast.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inffixed.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inflate.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inflate.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inftrees.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inftrees.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\trees.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\trees.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\uncompr.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\zconf.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\zconf.in.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\zlib.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\zutil.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\zutil.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="cjkcodecs"
+				>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\_codecs_cn.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\_codecs_hk.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\_codecs_iso2022.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\_codecs_jp.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\_codecs_kr.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\_codecs_tw.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\alg_jisx0201.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\cjkcodecs.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\emu_jisx0213_2000.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\mappings_cn.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\mappings_hk.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\mappings_jisx0213_pair.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\mappings_jp.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\mappings_kr.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\mappings_tw.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\multibytecodec.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\cjkcodecs\multibytecodec.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="_io"
+				>
+				<File
+					RelativePath="..\..\Modules\_io\_iomodule.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\_io\_iomodule.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\_io\bufferedio.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\_io\bytesio.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\_io\fileio.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\_io\iobase.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\_io\stringio.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\_io\textio.c"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Objects"
+			>
+			<File
+				RelativePath="..\..\Objects\abstract.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\boolobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\bufferobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\bytes_methods.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\bytearrayobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\capsule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\cellobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\classobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\cobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\codeobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\complexobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\stringlib\count.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\descrobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\dictobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\enumobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\exceptions.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\stringlib\fastsearch.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\fileobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\stringlib\find.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\floatobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\frameobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\funcobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\genobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\intobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\iterobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\listobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\longobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\memoryobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\methodobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\moduleobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\object.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\obmalloc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\stringlib\partition.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\rangeobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\setobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\sliceobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\stringlib\split.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\stringobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\structseq.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\tupleobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\typeobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\unicodectype.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\unicodeobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\unicodetype_db.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Objects\weakrefobject.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Parser"
+			>
+			<File
+				RelativePath="..\..\Parser\acceler.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Parser\bitset.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Parser\firstsets.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Parser\grammar.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Parser\grammar1.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Parser\listnode.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Parser\metagrammar.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Parser\myreadline.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Parser\node.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Parser\parser.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Parser\parser.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Parser\parsetok.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Parser\tokenizer.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Parser\tokenizer.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="PC"
+			>
+			<File
+				RelativePath="..\..\PC\_subprocess.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\PC\_winreg.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\PC\config.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\PC\dl_nt.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\PC\errmap.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\PC\getpathp.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\PC\import_nt.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\PC\msvcrtmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\PC\pyconfig.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Python"
+			>
+			<File
+				RelativePath="..\..\Python\_warnings.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\asdl.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\ast.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\bltinmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\ceval.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\codecs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\compile.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\dtoa.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\dynload_win.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\errors.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\formatter_string.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\formatter_unicode.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\frozen.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\future.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\getargs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\getcompiler.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\getcopyright.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\getopt.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\getplatform.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\getversion.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\graminit.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\import.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\importdl.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\importdl.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\marshal.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\modsupport.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\mysnprintf.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\mystrtoul.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\peephole.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\pyarena.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\pyctype.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\pyfpe.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\pymath.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\pystate.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\pystrcmp.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\pystrtod.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\Python-ast.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\pythonrun.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\random.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\structmember.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\symtable.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\sysmodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\thread.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\thread_nt.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Python\traceback.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			>
+			<File
+				RelativePath="..\..\PC\python_nt.rc"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/pythonw.vcproj b/PC/VS8.0/pythonw.vcproj
index 5037b78..f890d60 100644
--- a/PC/VS8.0/pythonw.vcproj
+++ b/PC/VS8.0/pythonw.vcproj
@@ -1,618 +1,618 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="pythonw"

-	ProjectGUID="{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"

-	TargetFrameworkVersion="131072"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				EnableIntrinsicFunctions="false"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				RuntimeLibrary="3"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw_d.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				TargetMachine="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				EnableIntrinsicFunctions="false"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				RuntimeLibrary="3"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw_d.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				TargetMachine="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pginstrument.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-				TargetMachine="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pginstrument.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pgupdate.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-				TargetMachine="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pgupdate.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Resource Files"

-			>

-			<File

-				RelativePath="..\..\PC\python_exe.rc"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\PC\WinMain.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pythonw"
+	ProjectGUID="{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				EnableIntrinsicFunctions="false"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				RuntimeLibrary="3"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw_d.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				EnableIntrinsicFunctions="false"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				RuntimeLibrary="3"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw_d.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pginstrument.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pginstrument.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pgupdate.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pgupdate.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Resource Files"
+			>
+			<File
+				RelativePath="..\..\PC\python_exe.rc"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\PC\WinMain.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/release.vsprops b/PC/VS8.0/release.vsprops
index 08def90..6d6842d 100644
--- a/PC/VS8.0/release.vsprops
+++ b/PC/VS8.0/release.vsprops
@@ -1,15 +1,15 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="release"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		PreprocessorDefinitions="NDEBUG"

-	/>

-	<UserMacro

-		Name="KillPythonExe"

-		Value="$(OutDir)\kill_python.exe"

-	/>	

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="release"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		PreprocessorDefinitions="NDEBUG"
+	/>
+	<UserMacro
+		Name="KillPythonExe"
+		Value="$(OutDir)\kill_python.exe"
+	/>	
+</VisualStudioPropertySheet>
diff --git a/PC/VS8.0/rt.bat b/PC/VS8.0/rt.bat
index 90fd794..767af76 100644
--- a/PC/VS8.0/rt.bat
+++ b/PC/VS8.0/rt.bat
@@ -1,52 +1,52 @@
-@echo off

-rem Run Tests.  Run the regression test suite.

-rem Usage:  rt [-d] [-O] [-q] regrtest_args

-rem -d   Run Debug build (python_d.exe).  Else release build.

-rem -O   Run python.exe or python_d.exe (see -d) with -O.

-rem -q   "quick" -- normally the tests are run twice, the first time

-rem      after deleting all the .py[co] files reachable from Lib/.

-rem      -q runs the tests just once, and without deleting .py[co] files.

-rem All leading instances of these switches are shifted off, and

-rem whatever remains is passed to regrtest.py.  For example,

-rem     rt -O -d -x test_thread

-rem runs

-rem     python_d -O ../lib/test/regrtest.py -x test_thread

-rem twice, and

-rem     rt -q -g test_binascii

-rem runs

-rem     python_d ../lib/test/regrtest.py -g test_binascii

-rem to generate the expected-output file for binascii quickly.

-rem

-rem Confusing:  if you want to pass a comma-separated list, like

-rem     -u network,largefile

-rem then you have to quote it on the rt line, like

-rem     rt -u "network,largefile"

-

-setlocal

-

-set exe=python

-set qmode=

-set dashO=

-PATH %PATH%;..\..\..\tcltk\bin

-

-:CheckOpts

-if "%1"=="-O" (set dashO=-O)     & shift & goto CheckOpts

-if "%1"=="-q" (set qmode=yes)    & shift & goto CheckOpts

-if "%1"=="-d" (set exe=python_d) & shift & goto CheckOpts

-

-set cmd=%exe% %dashO% -E -tt ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9

-if defined qmode goto Qmode

-

-echo Deleting .pyc/.pyo files ...

-%exe% rmpyc.py

-

-echo on

-%cmd%

-@echo off

-

-echo About to run again without deleting .pyc/.pyo first:

-pause

-

-:Qmode

-echo on

-%cmd%

+@echo off
+rem Run Tests.  Run the regression test suite.
+rem Usage:  rt [-d] [-O] [-q] regrtest_args
+rem -d   Run Debug build (python_d.exe).  Else release build.
+rem -O   Run python.exe or python_d.exe (see -d) with -O.
+rem -q   "quick" -- normally the tests are run twice, the first time
+rem      after deleting all the .py[co] files reachable from Lib/.
+rem      -q runs the tests just once, and without deleting .py[co] files.
+rem All leading instances of these switches are shifted off, and
+rem whatever remains is passed to regrtest.py.  For example,
+rem     rt -O -d -x test_thread
+rem runs
+rem     python_d -O ../lib/test/regrtest.py -x test_thread
+rem twice, and
+rem     rt -q -g test_binascii
+rem runs
+rem     python_d ../lib/test/regrtest.py -g test_binascii
+rem to generate the expected-output file for binascii quickly.
+rem
+rem Confusing:  if you want to pass a comma-separated list, like
+rem     -u network,largefile
+rem then you have to quote it on the rt line, like
+rem     rt -u "network,largefile"
+
+setlocal
+
+set exe=python
+set qmode=
+set dashO=
+PATH %PATH%;..\..\..\tcltk\bin
+
+:CheckOpts
+if "%1"=="-O" (set dashO=-O)     & shift & goto CheckOpts
+if "%1"=="-q" (set qmode=yes)    & shift & goto CheckOpts
+if "%1"=="-d" (set exe=python_d) & shift & goto CheckOpts
+
+set cmd=%exe% %dashO% -E -tt ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9
+if defined qmode goto Qmode
+
+echo Deleting .pyc/.pyo files ...
+%exe% rmpyc.py
+
+echo on
+%cmd%
+@echo off
+
+echo About to run again without deleting .pyc/.pyo first:
+pause
+
+:Qmode
+echo on
+%cmd%
diff --git a/PC/VS8.0/select.vcproj b/PC/VS8.0/select.vcproj
index 671fc16..49ec2f0 100644
--- a/PC/VS8.0/select.vcproj
+++ b/PC/VS8.0/select.vcproj
@@ -1,537 +1,537 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="select"

-	ProjectGUID="{18CAE28C-B454-46C1-87A0-493D91D97F03}"

-	RootNamespace="select"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\selectmodule.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="select"
+	ProjectGUID="{18CAE28C-B454-46C1-87A0-493D91D97F03}"
+	RootNamespace="select"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\selectmodule.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/sqlite3.vcproj b/PC/VS8.0/sqlite3.vcproj
index 9afbe5d..e7e0728 100644
--- a/PC/VS8.0/sqlite3.vcproj
+++ b/PC/VS8.0/sqlite3.vcproj
@@ -1,537 +1,537 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="sqlite3"

-	ProjectGUID="{A1A295E5-463C-437F-81CA-1F32367685DA}"

-	RootNamespace="sqlite3"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops;.\debug.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName)_d.dll"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops;.\debug.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName)_d.dll"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName).dll"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName).dll"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="&quot;..\..\..\sqlite-3.6.21&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName).dll"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName).dll"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\..\sqlite-3.6.21\sqlite3.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\sqlite-3.6.21\sqlite3ext.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\..\sqlite-3.6.21\sqlite3.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="sqlite3"
+	ProjectGUID="{A1A295E5-463C-437F-81CA-1F32367685DA}"
+	RootNamespace="sqlite3"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops;.\debug.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)_d.dll"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops;.\debug.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)_d.dll"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName).dll"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName).dll"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="&quot;..\..\..\sqlite-3.6.21&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName).dll"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName).dll"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\..\sqlite-3.6.21\sqlite3.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\sqlite-3.6.21\sqlite3ext.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\..\sqlite-3.6.21\sqlite3.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/sqlite3.vsprops b/PC/VS8.0/sqlite3.vsprops
index 8300328..0b7102d 100644
--- a/PC/VS8.0/sqlite3.vsprops
+++ b/PC/VS8.0/sqlite3.vsprops
@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="sqlite3"

-	InheritedPropertySheets=".\pyproject.vsprops"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"

-		PreprocessorDefinitions="SQLITE_API=__declspec(dllexport)"

-		WarningLevel="1"

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="sqlite3"
+	InheritedPropertySheets=".\pyproject.vsprops"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		AdditionalIncludeDirectories="..\..\..\sqlite-3.6.21"
+		PreprocessorDefinitions="SQLITE_API=__declspec(dllexport)"
+		WarningLevel="1"
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/VS8.0/unicodedata.vcproj b/PC/VS8.0/unicodedata.vcproj
index 4cf7d23..84a9e09 100644
--- a/PC/VS8.0/unicodedata.vcproj
+++ b/PC/VS8.0/unicodedata.vcproj
@@ -1,533 +1,533 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="unicodedata"

-	ProjectGUID="{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}"

-	RootNamespace="unicodedata"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\unicodedata_db.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\unicodename_db.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\unicodedata.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="unicodedata"
+	ProjectGUID="{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}"
+	RootNamespace="unicodedata"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\unicodedata_db.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\unicodename_db.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\unicodedata.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/w9xpopen.vcproj b/PC/VS8.0/w9xpopen.vcproj
index e14d206..3745c65 100644
--- a/PC/VS8.0/w9xpopen.vcproj
+++ b/PC/VS8.0/w9xpopen.vcproj
@@ -1,576 +1,576 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="w9xpopen"

-	ProjectGUID="{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}"

-	RootNamespace="w9xpopen"

-	TargetFrameworkVersion="131072"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="1"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="1"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				GenerateDebugInformation="false"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				GenerateDebugInformation="false"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pginstrument.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				GenerateDebugInformation="false"

-				SubSystem="1"

-				ImportLibrary=""

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pginstrument.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				GenerateDebugInformation="false"

-				SubSystem="1"

-				ImportLibrary=""

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pgupdate.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				GenerateDebugInformation="false"

-				SubSystem="1"

-				ImportLibrary=""

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pgupdate.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				GenerateDebugInformation="false"

-				SubSystem="1"

-				ImportLibrary=""

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\PC\w9xpopen.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="w9xpopen"
+	ProjectGUID="{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}"
+	RootNamespace="w9xpopen"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				GenerateDebugInformation="false"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				GenerateDebugInformation="false"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pginstrument.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				GenerateDebugInformation="false"
+				SubSystem="1"
+				ImportLibrary=""
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pginstrument.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				GenerateDebugInformation="false"
+				SubSystem="1"
+				ImportLibrary=""
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pgupdate.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				GenerateDebugInformation="false"
+				SubSystem="1"
+				ImportLibrary=""
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pgupdate.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				GenerateDebugInformation="false"
+				SubSystem="1"
+				ImportLibrary=""
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\PC\w9xpopen.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/winsound.vcproj b/PC/VS8.0/winsound.vcproj
index d379357..15d57dc 100644
--- a/PC/VS8.0/winsound.vcproj
+++ b/PC/VS8.0/winsound.vcproj
@@ -1,523 +1,523 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="winsound"

-	ProjectGUID="{28B5D777-DDF2-4B6B-B34F-31D938813856}"

-	RootNamespace="winsound"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"

-			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"

-			>

-			<File

-				RelativePath="..\..\PC\winsound.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="winsound"
+	ProjectGUID="{28B5D777-DDF2-4B6B-B34F-31D938813856}"
+	RootNamespace="winsound"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\PC\winsound.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS8.0/x64.vsprops b/PC/VS8.0/x64.vsprops
index 9f88d44..0720084 100644
--- a/PC/VS8.0/x64.vsprops
+++ b/PC/VS8.0/x64.vsprops
@@ -1,22 +1,22 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="amd64"

-	OutputDirectory="$(SolutionDir)\amd64\"

-	IntermediateDirectory="$(SolutionDir)$(PlatformName)-temp-$(ConfigurationName)\$(ProjectName)\"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		AdditionalOptions="/USECL:MS_OPTERON /GS-"

-		PreprocessorDefinitions="_WIN64;_M_X64"

-	/>

-	<Tool

-		Name="VCLinkerTool"

-		TargetMachine="17"

-	/>

-	<UserMacro

-		Name="PythonExe"

-		Value="$(HOST_PYTHON)"

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="amd64"
+	OutputDirectory="$(SolutionDir)\amd64\"
+	IntermediateDirectory="$(SolutionDir)$(PlatformName)-temp-$(ConfigurationName)\$(ProjectName)\"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		AdditionalOptions="/USECL:MS_OPTERON /GS-"
+		PreprocessorDefinitions="_WIN64;_M_X64"
+	/>
+	<Tool
+		Name="VCLinkerTool"
+		TargetMachine="17"
+	/>
+	<UserMacro
+		Name="PythonExe"
+		Value="$(HOST_PYTHON)"
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/VS9.0/_bsddb.vcproj b/PC/VS9.0/_bsddb.vcproj
index 2b926aa..c85aca6 100644
--- a/PC/VS9.0/_bsddb.vcproj
+++ b/PC/VS9.0/_bsddb.vcproj
@@ -1,1463 +1,1463 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9.00"

-	Name="_bsddb"

-	ProjectGUID="{B4D38F3F-68FB-42EC-A45D-E00657BB3627}"

-	RootNamespace="_bsddb"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."

-				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(bsddbDepLibs)"

-				BaseAddress="0x1e180000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\bsddb.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_bsddb.c"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Berkeley DB 4.7.25 Source Files"

-			>

-			<File

-				RelativePath="$(bsddbDir)\..\crypto\aes_method.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_compact.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_compare.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_conv.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_curadj.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_cursor.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_delete.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_method.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_open.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_put.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_reclaim.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_recno.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_rsearch.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_search.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_split.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_upgrade.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\bt_verify.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\btree\btree_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\crdel_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\crdel_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\crypto\crypto.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_am.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\common\db_byteorder.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_cam.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_cds.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_conv.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_dispatch.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_dup.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\common\db_err.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\common\db_getlong.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\common\db_idspace.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_iface.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_join.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\common\db_log2.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_meta.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_method.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_open.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_overflow.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_ovfl_vrfy.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_pr.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_reclaim.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_remove.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_rename.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_ret.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_setid.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_setlsn.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\common\db_shash.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_stati.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_truncate.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_upg.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_upg_opd.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_vrfy.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\db\db_vrfyutil.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\dbm\dbm.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\dbreg\dbreg.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\dbreg\dbreg_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\dbreg\dbreg_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\dbreg\dbreg_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\dbreg\dbreg_util.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\common\dbt.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\env\env_alloc.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\env\env_config.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\env\env_failchk.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\env\env_file.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\env\env_globals.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\env\env_method.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\env\env_name.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\env\env_open.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\env\env_recover.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\env\env_region.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\env\env_register.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\env\env_sig.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\env\env_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\fileops\fileops_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\fileops\fop_basic.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\fileops\fop_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\fileops\fop_util.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hash\hash.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hash\hash_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hash\hash_conv.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hash\hash_dup.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hash\hash_func.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hash\hash_meta.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hash\hash_method.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hash\hash_open.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hash\hash_page.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hash\hash_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hash\hash_reclaim.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hash\hash_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hash\hash_upgrade.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hash\hash_verify.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hmac\hmac.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hsearch\hsearch.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\lock\lock.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\lock\lock_deadlock.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\lock\lock_failchk.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\lock\lock_id.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\lock\lock_list.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\lock\lock_method.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\lock\lock_region.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\lock\lock_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\lock\lock_timer.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\lock\lock_util.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\log\log.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\log\log_archive.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\log\log_compare.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\log\log_debug.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\log\log_get.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\log\log_method.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\log\log_put.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\log\log_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\common\mkpath.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mp\mp_alloc.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mp\mp_bh.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mp\mp_fget.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mp\mp_fmethod.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mp\mp_fopen.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mp\mp_fput.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mp\mp_fset.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mp\mp_method.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mp\mp_mvcc.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mp\mp_region.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mp\mp_register.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mp\mp_resize.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mp\mp_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mp\mp_sync.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mp\mp_trickle.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\crypto\mersenne\mt19937db.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mutex\mut_alloc.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mutex\mut_failchk.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mutex\mut_method.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mutex\mut_region.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mutex\mut_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\mutex\mut_win32.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\common\openflags.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os\os_abort.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_abs.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os\os_addrinfo.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os\os_alloc.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_clock.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_config.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_cpu.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os\os_ctime.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_dir.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_errno.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_fid.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_flock.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_fsync.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_getenv.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_handle.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_map.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\common\os_method.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_mkdir.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_open.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os\os_pid.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_rename.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os\os_root.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os\os_rpath.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_rw.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_seek.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os\os_stack.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os\os_tmpdir.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_truncate.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os\os_uid.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_unlink.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\os_windows\os_yield.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\qam\qam.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\qam\qam_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\qam\qam_conv.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\qam\qam_files.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\qam\qam_method.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\qam\qam_open.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\qam\qam_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\qam\qam_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\qam\qam_upgrade.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\qam\qam_verify.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\rep\rep_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\rep\rep_backup.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\rep\rep_elect.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\rep\rep_lease.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\rep\rep_log.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\rep\rep_method.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\rep\rep_record.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\rep\rep_region.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\rep\rep_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\rep\rep_util.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\rep\rep_verify.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\repmgr\repmgr_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\repmgr\repmgr_elect.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\repmgr\repmgr_method.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\repmgr\repmgr_msg.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\repmgr\repmgr_net.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\repmgr\repmgr_queue.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\repmgr\repmgr_sel.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\repmgr\repmgr_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\repmgr\repmgr_util.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\repmgr\repmgr_windows.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\crypto\rijndael\rijndael-alg-fst.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\crypto\rijndael\rijndael-api-fst.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\sequence\seq_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\sequence\sequence.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\hmac\sha1.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\clib\strsep.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\txn\txn.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\txn\txn_auto.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\txn\txn_chkpt.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\txn\txn_failchk.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\txn\txn_method.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\txn\txn_rec.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\txn\txn_recover.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\txn\txn_region.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\txn\txn_stat.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\txn\txn_util.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\common\util_cache.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\common\util_log.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\common\util_sig.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\xa\xa.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\xa\xa_db.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\xa\xa_map.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bsddbDir)\..\common\zerofill.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="_bsddb"
+	ProjectGUID="{B4D38F3F-68FB-42EC-A45D-E00657BB3627}"
+	RootNamespace="_bsddb"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(bsddbDepLibs)"
+				BaseAddress="0x1e180000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\bsddb.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_bsddb.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Berkeley DB 4.7.25 Source Files"
+			>
+			<File
+				RelativePath="$(bsddbDir)\..\crypto\aes_method.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_compact.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_compare.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_conv.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_curadj.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_cursor.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_delete.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_method.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_open.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_put.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_reclaim.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_recno.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_rsearch.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_search.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_split.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_upgrade.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\bt_verify.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\btree\btree_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\crdel_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\crdel_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\crypto\crypto.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_am.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\common\db_byteorder.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_cam.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_cds.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_conv.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_dispatch.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_dup.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\common\db_err.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\common\db_getlong.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\common\db_idspace.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_iface.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_join.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\common\db_log2.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_meta.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_method.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_open.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_overflow.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_ovfl_vrfy.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_pr.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_reclaim.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_remove.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_rename.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_ret.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_setid.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_setlsn.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\common\db_shash.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_stati.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_truncate.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_upg.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_upg_opd.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_vrfy.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\db\db_vrfyutil.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\dbm\dbm.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\dbreg\dbreg.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\dbreg\dbreg_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\dbreg\dbreg_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\dbreg\dbreg_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\dbreg\dbreg_util.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\common\dbt.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\env\env_alloc.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\env\env_config.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\env\env_failchk.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\env\env_file.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\env\env_globals.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\env\env_method.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\env\env_name.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\env\env_open.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\env\env_recover.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\env\env_region.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\env\env_register.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\env\env_sig.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\env\env_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\fileops\fileops_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\fileops\fop_basic.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\fileops\fop_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\fileops\fop_util.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hash\hash.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hash\hash_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hash\hash_conv.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hash\hash_dup.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hash\hash_func.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hash\hash_meta.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hash\hash_method.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hash\hash_open.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hash\hash_page.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hash\hash_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hash\hash_reclaim.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hash\hash_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hash\hash_upgrade.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hash\hash_verify.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hmac\hmac.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hsearch\hsearch.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\lock\lock.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\lock\lock_deadlock.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\lock\lock_failchk.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\lock\lock_id.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\lock\lock_list.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\lock\lock_method.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\lock\lock_region.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\lock\lock_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\lock\lock_timer.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\lock\lock_util.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\log\log.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\log\log_archive.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\log\log_compare.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\log\log_debug.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\log\log_get.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\log\log_method.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\log\log_put.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\log\log_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\common\mkpath.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mp\mp_alloc.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mp\mp_bh.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mp\mp_fget.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mp\mp_fmethod.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mp\mp_fopen.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mp\mp_fput.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mp\mp_fset.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mp\mp_method.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mp\mp_mvcc.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mp\mp_region.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mp\mp_register.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mp\mp_resize.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mp\mp_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mp\mp_sync.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mp\mp_trickle.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\crypto\mersenne\mt19937db.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mutex\mut_alloc.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mutex\mut_failchk.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mutex\mut_method.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mutex\mut_region.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mutex\mut_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\mutex\mut_win32.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\common\openflags.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os\os_abort.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_abs.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os\os_addrinfo.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os\os_alloc.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_clock.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_config.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_cpu.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os\os_ctime.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_dir.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_errno.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_fid.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_flock.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_fsync.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_getenv.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_handle.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_map.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\common\os_method.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_mkdir.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_open.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os\os_pid.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_rename.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os\os_root.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os\os_rpath.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_rw.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_seek.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os\os_stack.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os\os_tmpdir.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_truncate.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os\os_uid.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_unlink.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\os_windows\os_yield.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\qam\qam.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\qam\qam_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\qam\qam_conv.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\qam\qam_files.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\qam\qam_method.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\qam\qam_open.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\qam\qam_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\qam\qam_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\qam\qam_upgrade.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\qam\qam_verify.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\rep\rep_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\rep\rep_backup.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\rep\rep_elect.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\rep\rep_lease.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\rep\rep_log.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\rep\rep_method.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\rep\rep_record.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\rep\rep_region.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\rep\rep_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\rep\rep_util.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\rep\rep_verify.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\repmgr\repmgr_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\repmgr\repmgr_elect.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\repmgr\repmgr_method.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\repmgr\repmgr_msg.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\repmgr\repmgr_net.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\repmgr\repmgr_queue.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\repmgr\repmgr_sel.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\repmgr\repmgr_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\repmgr\repmgr_util.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\repmgr\repmgr_windows.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\crypto\rijndael\rijndael-alg-fst.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\crypto\rijndael\rijndael-api-fst.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\sequence\seq_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\sequence\sequence.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\hmac\sha1.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\clib\strsep.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\txn\txn.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\txn\txn_auto.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\txn\txn_chkpt.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\txn\txn_failchk.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\txn\txn_method.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\txn\txn_rec.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\txn\txn_recover.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\txn\txn_region.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\txn\txn_stat.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\txn\txn_util.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\common\util_cache.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\common\util_log.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\common\util_sig.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\xa\xa.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\xa\xa_db.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\xa\xa_map.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bsddbDir)\..\common\zerofill.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/_ctypes.vcproj b/PC/VS9.0/_ctypes.vcproj
index 8e5cba1..7ac20c6 100644
--- a/PC/VS9.0/_ctypes.vcproj
+++ b/PC/VS9.0/_ctypes.vcproj
@@ -1,705 +1,705 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9.00"

-	Name="_ctypes"

-	ProjectGUID="{0E9791DB-593A-465F-98BC-681011311618}"

-	RootNamespace="_ctypes"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D1A0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D1A0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				SubSystem="0"

-				BaseAddress="0x1D1A0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				SubSystem="0"

-				BaseAddress="0x1D1A0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				SubSystem="0"

-				BaseAddress="0x1D1A0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				SubSystem="0"

-				BaseAddress="0x1D1A0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				SubSystem="0"

-				BaseAddress="0x1D1A0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"

-				SubSystem="0"

-				BaseAddress="0x1D1A0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_ctypes\ctypes.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\ctypes_dlfcn.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffi.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffi_common.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\fficonfig.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffitarget.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_ctypes\_ctypes.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\callbacks.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\callproc.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\cfield.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffi.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\malloc_closure.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\prep_cif.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\stgdict.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\win32.c"

-				>

-				<FileConfiguration

-					Name="Debug|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Release|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="PGInstrument|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="PGUpdate|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_ctypes\libffi_msvc\win64.asm"

-				>

-				<FileConfiguration

-					Name="Debug|Win32"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Debug|x64"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-						CommandLine="ml64 /nologo /c /Zi /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"

-						Outputs="$(IntDir)\win64.obj"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Release|Win32"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Release|x64"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-						CommandLine="ml64 /nologo /c /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"

-						Outputs="$(IntDir)\win64.obj"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="PGInstrument|Win32"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="PGInstrument|x64"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-						CommandLine="ml64 /nologo /c /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"

-						Outputs="$(IntDir)\win64.obj"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="PGUpdate|Win32"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="PGUpdate|x64"

-					>

-					<Tool

-						Name="VCCustomBuildTool"

-						CommandLine="ml64 /nologo /c /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"

-						Outputs="$(IntDir)\win64.obj"

-					/>

-				</FileConfiguration>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="_ctypes"
+	ProjectGUID="{0E9791DB-593A-465F-98BC-681011311618}"
+	RootNamespace="_ctypes"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D1A0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D1A0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				SubSystem="0"
+				BaseAddress="0x1D1A0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				SubSystem="0"
+				BaseAddress="0x1D1A0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				SubSystem="0"
+				BaseAddress="0x1D1A0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				SubSystem="0"
+				BaseAddress="0x1D1A0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				SubSystem="0"
+				BaseAddress="0x1D1A0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\_ctypes\libffi_msvc"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+				SubSystem="0"
+				BaseAddress="0x1D1A0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_ctypes\ctypes.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\ctypes_dlfcn.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffi.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffi_common.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\fficonfig.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffitarget.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_ctypes\_ctypes.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\callbacks.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\callproc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\cfield.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\ffi.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\malloc_closure.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\prep_cif.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\stgdict.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\win32.c"
+				>
+				<FileConfiguration
+					Name="Debug|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="PGInstrument|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="PGUpdate|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_ctypes\libffi_msvc\win64.asm"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						CommandLine="ml64 /nologo /c /Zi /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)\win64.obj"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						CommandLine="ml64 /nologo /c /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)\win64.obj"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="PGInstrument|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="PGInstrument|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						CommandLine="ml64 /nologo /c /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)\win64.obj"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="PGUpdate|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="PGUpdate|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						CommandLine="ml64 /nologo /c /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)\win64.obj"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/_ctypes_test.vcproj b/PC/VS9.0/_ctypes_test.vcproj
index f662e3a..146e114 100644
--- a/PC/VS9.0/_ctypes_test.vcproj
+++ b/PC/VS9.0/_ctypes_test.vcproj
@@ -1,521 +1,521 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="_ctypes_test"

-	ProjectGUID="{9EC7190A-249F-4180-A900-548FDCF3055F}"

-	RootNamespace="_ctypes_test"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_ctypes\_ctypes_test.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_ctypes\_ctypes_test.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="_ctypes_test"
+	ProjectGUID="{9EC7190A-249F-4180-A900-548FDCF3055F}"
+	RootNamespace="_ctypes_test"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_ctypes\_ctypes_test.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_ctypes\_ctypes_test.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/_elementtree.vcproj b/PC/VS9.0/_elementtree.vcproj
index 7414997..2915eb3 100644
--- a/PC/VS9.0/_elementtree.vcproj
+++ b/PC/VS9.0/_elementtree.vcproj
@@ -1,613 +1,617 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="_elementtree"

-	ProjectGUID="{17E1E049-C309-4D79-843F-AE483C264AEA}"

-	RootNamespace="_elementtree"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\Modules\expat"

-				PreprocessorDefinitions="XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D100000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\expat\ascii.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\asciitab.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\expat.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\expat_config.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\expat_external.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\iasciitab.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\internal.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\latin1tab.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\macconfig.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\nametab.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\pyexpatns.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\utf8tab.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\winconfig.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmlrole.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmltok.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_elementtree.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmlparse.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmlrole.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmltok.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="_elementtree"
+	ProjectGUID="{17E1E049-C309-4D79-843F-AE483C264AEA}"
+	RootNamespace="_elementtree"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="USE_PYEXPAT_CAPI;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS;USE_PYEXPAT_CAPI;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="USE_PYEXPAT_CAPI;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="USE_PYEXPAT_CAPI;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="USE_PYEXPAT_CAPI;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="USE_PYEXPAT_CAPI;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="USE_PYEXPAT_CAPI;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\Modules\expat"
+				PreprocessorDefinitions="USE_PYEXPAT_CAPI;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D100000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\expat\ascii.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\asciitab.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\expat.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\expat_config.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\expat_external.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\iasciitab.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\internal.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\latin1tab.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\macconfig.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\nametab.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\pyexpatns.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\utf8tab.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\winconfig.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmlrole.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmltok.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_elementtree.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\loadlibrary.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmlparse.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmlrole.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmltok.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/_hashlib.vcproj b/PC/VS9.0/_hashlib.vcproj
index 9b63563..22057ca 100644
--- a/PC/VS9.0/_hashlib.vcproj
+++ b/PC/VS9.0/_hashlib.vcproj
@@ -1,545 +1,545 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="_hashlib"

-	ProjectGUID="{447F05A8-F581-4CAC-A466-5AC7936E207E}"

-	RootNamespace="_hashlib"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_hashopenssl.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="_hashlib"
+	ProjectGUID="{447F05A8-F581-4CAC-A466-5AC7936E207E}"
+	RootNamespace="_hashlib"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_hashopenssl.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/_msi.vcproj b/PC/VS9.0/_msi.vcproj
index d84049d..ff03b75 100644
--- a/PC/VS9.0/_msi.vcproj
+++ b/PC/VS9.0/_msi.vcproj
@@ -1,529 +1,529 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="_msi"

-	ProjectGUID="{31FFC478-7B4A-43E8-9954-8D03E2187E9C}"

-	RootNamespace="_msi"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"

-				BaseAddress="0x1D160000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\PC\_msi.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="_msi"
+	ProjectGUID="{31FFC478-7B4A-43E8-9954-8D03E2187E9C}"
+	RootNamespace="_msi"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+				BaseAddress="0x1D160000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\PC\_msi.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/_multiprocessing.vcproj b/PC/VS9.0/_multiprocessing.vcproj
index 4e6ff09..70c7119 100644
--- a/PC/VS9.0/_multiprocessing.vcproj
+++ b/PC/VS9.0/_multiprocessing.vcproj
@@ -1,557 +1,557 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="_multiprocessing"

-	ProjectGUID="{9E48B300-37D1-11DD-8C41-005056C00008}"

-	RootNamespace="_multiprocessing"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_multiprocessing\multiprocessing.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_multiprocessing\connection.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_multiprocessing\multiprocessing.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_multiprocessing\pipe_connection.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_multiprocessing\semaphore.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_multiprocessing\socket_connection.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_multiprocessing\win32_functions.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="_multiprocessing"
+	ProjectGUID="{9E48B300-37D1-11DD-8C41-005056C00008}"
+	RootNamespace="_multiprocessing"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_multiprocessing\multiprocessing.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_multiprocessing\connection.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_multiprocessing\multiprocessing.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_multiprocessing\pipe_connection.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_multiprocessing\semaphore.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_multiprocessing\socket_connection.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_multiprocessing\win32_functions.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/_socket.vcproj b/PC/VS9.0/_socket.vcproj
index 80f0781..88362f0 100644
--- a/PC/VS9.0/_socket.vcproj
+++ b/PC/VS9.0/_socket.vcproj
@@ -1,537 +1,537 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="_socket"

-	ProjectGUID="{86937F53-C189-40EF-8CE8-8759D8E7D480}"

-	RootNamespace="_socket"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				BaseAddress="0x1e1D0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\socketmodule.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\socketmodule.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="_socket"
+	ProjectGUID="{86937F53-C189-40EF-8CE8-8759D8E7D480}"
+	RootNamespace="_socket"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				BaseAddress="0x1e1D0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\socketmodule.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\socketmodule.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/_sqlite3.vcproj b/PC/VS9.0/_sqlite3.vcproj
index f7100f1..51f1305 100644
--- a/PC/VS9.0/_sqlite3.vcproj
+++ b/PC/VS9.0/_sqlite3.vcproj
@@ -1,613 +1,613 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9.00"

-	Name="_sqlite3"

-	ProjectGUID="{13CECB97-4119-4316-9D42-8534019A5A44}"

-	RootNamespace="_sqlite3"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(sqlite3Dir)"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(sqlite3Dir)"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(sqlite3Dir)"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(sqlite3Dir)"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(sqlite3Dir)"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(sqlite3Dir)"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(sqlite3Dir)"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(sqlite3Dir)"

-				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e180000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_sqlite\cache.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\connection.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\cursor.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\microprotocols.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\module.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\prepare_protocol.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\row.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\sqlitecompat.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\statement.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\util.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_sqlite\cache.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\connection.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\cursor.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\microprotocols.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\module.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\prepare_protocol.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\row.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\statement.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\_sqlite\util.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="_sqlite3"
+	ProjectGUID="{13CECB97-4119-4316-9D42-8534019A5A44}"
+	RootNamespace="_sqlite3"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(sqlite3Dir)"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(sqlite3Dir)"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(sqlite3Dir)"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(sqlite3Dir)"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(sqlite3Dir)"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(sqlite3Dir)"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(sqlite3Dir)"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(sqlite3Dir)"
+				PreprocessorDefinitions="MODULE_NAME=\&quot;sqlite3\&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e180000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_sqlite\cache.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\connection.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\cursor.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\microprotocols.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\module.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\prepare_protocol.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\row.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\sqlitecompat.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\statement.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\util.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_sqlite\cache.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\connection.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\cursor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\microprotocols.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\module.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\prepare_protocol.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\row.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\statement.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\_sqlite\util.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/_ssl.vcproj b/PC/VS9.0/_ssl.vcproj
index 0f91cc7..c3dd248 100644
--- a/PC/VS9.0/_ssl.vcproj
+++ b/PC/VS9.0/_ssl.vcproj
@@ -1,545 +1,545 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="_ssl"

-	ProjectGUID="{C6E20F84-3247-4AD6-B051-B073268F73BA}"

-	RootNamespace="_ssl"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc32"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(opensslDir)\inc64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-				CommandLine=""

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_ssl.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="_ssl"
+	ProjectGUID="{C6E20F84-3247-4AD6-B051-B073268F73BA}"
+	RootNamespace="_ssl"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include32"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out32\libeay32.lib $(opensslDir)\out32\ssleay32.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="cd &quot;$(SolutionDir)&quot;&#x0D;&#x0A;&quot;$(PythonExe)&quot; build_ssl.py Release $(PlatformName) -a&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(opensslDir)\include64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+				CommandLine=""
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib crypt32.lib $(opensslDir)\out64\libeay32.lib $(opensslDir)\out64\ssleay32.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_ssl.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/_testcapi.vcproj b/PC/VS9.0/_testcapi.vcproj
index e814fd4..cd716d3 100644
--- a/PC/VS9.0/_testcapi.vcproj
+++ b/PC/VS9.0/_testcapi.vcproj
@@ -1,521 +1,521 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="_testcapi"

-	ProjectGUID="{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}"

-	RootNamespace="_testcapi"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1e1F0000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_testcapimodule.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="_testcapi"
+	ProjectGUID="{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}"
+	RootNamespace="_testcapi"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1e1F0000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_testcapimodule.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/_tkinter.vcproj b/PC/VS9.0/_tkinter.vcproj
index a049b9b..9c2665b 100644
--- a/PC/VS9.0/_tkinter.vcproj
+++ b/PC/VS9.0/_tkinter.vcproj
@@ -1,541 +1,541 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="_tkinter"

-	ProjectGUID="{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}"

-	RootNamespace="_tkinter"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltkDir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltkLibDebug)"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltk64Dir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltk64LibDebug)"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltkDir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltkLib)"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltk64Dir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltk64Lib)"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltkDir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltkLib)"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltk64Dir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltk64Lib)"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltkDir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltkLib)"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(tcltk64Dir)\include"

-				PreprocessorDefinitions="WITH_APPINIT"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="$(tcltk64Lib)"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\_tkinter.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\tkappinit.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="_tkinter"
+	ProjectGUID="{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}"
+	RootNamespace="_tkinter"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltkDir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltkLibDebug)"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltk64Dir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltk64LibDebug)"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltkDir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltkLib)"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltk64Dir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltk64Lib)"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltkDir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltkLib)"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltk64Dir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltk64Lib)"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltkDir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltkLib)"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(tcltk64Dir)\include"
+				PreprocessorDefinitions="WITH_APPINIT"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(tcltk64Lib)"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\_tkinter.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\tkappinit.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/bdist_wininst.vcproj b/PC/VS9.0/bdist_wininst.vcproj
index b8cc7ad..fb36a6d 100644
--- a/PC/VS9.0/bdist_wininst.vcproj
+++ b/PC/VS9.0/bdist_wininst.vcproj
@@ -1,270 +1,270 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9.00"

-	Name="bdist_wininst"

-	ProjectGUID="{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"

-	RootNamespace="wininst"

-	TargetFrameworkVersion="131072"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory="..\..\lib\distutils\command"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				PreprocessorDefinitions="NDEBUG"

-				MkTypLibCompatible="true"

-				SuppressStartupBanner="true"

-				TargetEnvironment="1"

-				TypeLibraryName=".\..\..\lib\distutils\command\wininst.tlb"

-				HeaderFileName=""

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="1"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\PC\bdist_wininst;..\..\Include;..\..\Modules\zlib"

-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-				WarningLevel="3"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="0"

-				AdditionalIncludeDirectories="..\..\PC;..\..\PC\bdist_wininst;..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="comctl32.lib imagehlp.lib"

-				OutputFile="..\..\lib\distutils\command\wininst-9.0.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="true"

-				IgnoreDefaultLibraryNames="LIBC"

-				ProgramDatabaseFile="..\..\lib\distutils\command\wininst-9.0.pdb"

-				SubSystem="2"

-				RandomizedBaseAddress="1"

-				DataExecutionPrevention="0"

-				TargetMachine="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			OutputDirectory="$(PlatformName)\$(ConfigurationName)"

-			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				PreprocessorDefinitions="NDEBUG"

-				MkTypLibCompatible="true"

-				SuppressStartupBanner="true"

-				TargetEnvironment="3"

-				TypeLibraryName=".\..\..\lib\distutils\command\wininst.tlb"

-				HeaderFileName=""

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="1"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\PC\bdist_wininst;..\..\Include;..\..\Modules\zlib"

-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-				WarningLevel="3"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="0"

-				AdditionalIncludeDirectories="..\..\PC;..\..\PC\bdist_wininst;..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="comctl32.lib imagehlp.lib"

-				OutputFile="..\..\lib\distutils\command\wininst-9.0-amd64.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="true"

-				IgnoreDefaultLibraryNames="LIBC"

-				ProgramDatabaseFile="..\..\lib\distutils\command\wininst-9.0-amd64.pdb"

-				SubSystem="2"

-				RandomizedBaseAddress="1"

-				DataExecutionPrevention="0"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"

-			>

-			<File

-				RelativePath="..\..\PC\bdist_wininst\extract.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\PC\bdist_wininst\install.c"

-				>

-			</File>

-			<Filter

-				Name="zlib"

-				>

-				<File

-					RelativePath="..\..\Modules\zlib\adler32.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\crc32.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inffast.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inflate.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inftrees.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\zutil.c"

-					>

-				</File>

-			</Filter>

-		</Filter>

-		<Filter

-			Name="Header Files"

-			Filter="h;hpp;hxx;hm;inl"

-			>

-			<File

-				RelativePath="..\..\PC\bdist_wininst\archive.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Resource Files"

-			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"

-			>

-			<File

-				RelativePath="..\..\PC\bdist_wininst\install.rc"

-				>

-			</File>

-			<File

-				RelativePath="..\..\PC\bdist_wininst\PythonPowered.bmp"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="bdist_wininst"
+	ProjectGUID="{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"
+	RootNamespace="wininst"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="..\..\lib\distutils\command"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\..\..\lib\distutils\command\wininst.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="1"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\PC\bdist_wininst;..\..\Include;..\..\Modules\zlib"
+				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="0"
+				AdditionalIncludeDirectories="..\..\PC;..\..\PC\bdist_wininst;..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="comctl32.lib imagehlp.lib"
+				OutputFile="..\..\lib\distutils\command\wininst-9.0.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				IgnoreDefaultLibraryNames="LIBC"
+				ProgramDatabaseFile="..\..\lib\distutils\command\wininst-9.0.pdb"
+				SubSystem="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="3"
+				TypeLibraryName=".\..\..\lib\distutils\command\wininst.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="1"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\PC\bdist_wininst;..\..\Include;..\..\Modules\zlib"
+				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="0"
+				AdditionalIncludeDirectories="..\..\PC;..\..\PC\bdist_wininst;..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="comctl32.lib imagehlp.lib"
+				OutputFile="..\..\lib\distutils\command\wininst-9.0-amd64.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				IgnoreDefaultLibraryNames="LIBC"
+				ProgramDatabaseFile="..\..\lib\distutils\command\wininst-9.0-amd64.pdb"
+				SubSystem="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+			>
+			<File
+				RelativePath="..\..\PC\bdist_wininst\extract.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\PC\bdist_wininst\install.c"
+				>
+			</File>
+			<Filter
+				Name="zlib"
+				>
+				<File
+					RelativePath="..\..\Modules\zlib\adler32.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\crc32.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inffast.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inflate.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inftrees.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\zutil.c"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl"
+			>
+			<File
+				RelativePath="..\..\PC\bdist_wininst\archive.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+			>
+			<File
+				RelativePath="..\..\PC\bdist_wininst\install.rc"
+				>
+			</File>
+			<File
+				RelativePath="..\..\PC\bdist_wininst\PythonPowered.bmp"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/build.bat b/PC/VS9.0/build.bat
index 0fed517..0729ec7 100644
--- a/PC/VS9.0/build.bat
+++ b/PC/VS9.0/build.bat
@@ -1,107 +1,108 @@
-@echo off

-rem A batch program to build or rebuild a particular configuration,

-rem just for convenience.

-

-rem Arguments:

-rem  -c  Set the configuration (default: Release)

-rem  -p  Set the platform (x64 or Win32, default: Win32)

-rem  -r  Target Rebuild instead of Build

-rem  -t  Set the target manually (Build, Rebuild, or Clean)

-rem  -d  Set the configuration to Debug

-rem  -e  Pull in external libraries using get_externals.bat

-rem  -k  Attempt to kill any running Pythons before building

-

-setlocal

-set platf=Win32

-set vs_platf=x86

-set conf=Release

-set target=

-set dir=%~dp0

-set kill=

-set build_tkinter=

-

-:CheckOpts

-if '%1'=='-c' (set conf=%2) & shift & shift & goto CheckOpts

-if '%1'=='-p' (set platf=%2) & shift & shift & goto CheckOpts

-if '%1'=='-r' (set target=/rebuild) & shift & goto CheckOpts

-if '%1'=='-t' (

-    if '%2'=='Clean' (set target=/clean) & shift & shift & goto CheckOpts

-    if '%2'=='Rebuild' (set target=/rebuild) & shift & shift & goto CheckOpts

-    if '%2'=='Build' (set target=) & shift & shift & goto CheckOpts

-    echo.Unknown target: %2 & goto :eof

-)

-if '%1'=='-d' (set conf=Debug) & shift & goto CheckOpts

-if '%1'=='-e' call "%dir%..\..\PCbuild\get_externals.bat" & (set build_tkinter=true) & shift & goto CheckOpts

-if '%1'=='-k' (set kill=true) & shift & goto CheckOpts

-

-if '%conf%'=='Debug' (set dbg_ext=_d) else (set dbg_ext=)

-if '%platf%'=='x64' (

-    set vs_platf=x86_amd64

-    set builddir=%dir%amd64\

-) else (

-    set builddir=%dir%

-)

-rem Can't use builddir until we're in a new command...

-if '%platf%'=='x64' (

-    rem Needed for buliding OpenSSL

-    set HOST_PYTHON=%builddir%python%dbg_ext%.exe

-)

-

-rem Setup the environment

-call "%dir%env.bat" %vs_platf%

-

-if '%kill%'=='true' (

-    vcbuild "%dir%kill_python.vcproj" "%conf%|%platf%" && "%builddir%kill_python%dbg_ext%.exe"

-)

-

-set externals_dir=%dir%..\..\externals

-if '%build_tkinter%'=='true' (

-    if '%platf%'=='x64' (

-        set tcltkdir=%externals_dir%\tcltk64

-        set machine=AMD64

-    ) else (

-        set tcltkdir=%externals_dir%\tcltk

-        set machine=IX86

-    )

-    if '%conf%'=='Debug' (

-        set tcl_dbg_ext=g

-        set debug_flag=1

-    ) else (

-        set tcl_dbg_ext=

-        set debug_flag=0

-    )

-    set tcldir=%externals_dir%\tcl-8.5.15.0

-    set tkdir=%externals_dir%\tk-8.5.15.0

-    set tixdir=%externals_dir%\tix-8.4.3.5

-)

-if '%build_tkinter%'=='true' (

-    if not exist "%tcltkdir%\bin\tcl85%tcl_dbg_ext%.dll" (

-        @rem all and install need to be separate invocations, otherwise nmakehlp is not found on install

-        pushd "%tcldir%\win"

-        nmake -f makefile.vc MACHINE=%machine% DEBUG=%debug_flag% INSTALLDIR="%tcltkdir%" clean all

-        nmake -f makefile.vc MACHINE=%machine% DEBUG=%debug_flag% INSTALLDIR="%tcltkdir%" install

-        popd

-    )

-

-    if not exist "%tcltkdir%\bin\tk85%tcl_dbg_ext%.dll" (

-        pushd "%tkdir%\win"

-        nmake -f makefile.vc MACHINE=%machine% DEBUG=%debug_flag% INSTALLDIR="%tcltkdir%" TCLDIR="%tcldir%" clean

-        nmake -f makefile.vc MACHINE=%machine% DEBUG=%debug_flag% INSTALLDIR="%tcltkdir%" TCLDIR="%tcldir%" all

-        nmake -f makefile.vc MACHINE=%machine% DEBUG=%debug_flag% INSTALLDIR="%tcltkdir%" TCLDIR="%tcldir%" install

-        popd

-    )

-

-    if not exist "%tcltkdir%\lib\tix8.4.3\tix84%tcl_dbg_ext%.dll" (

-        pushd "%tixdir%\win"

-        nmake -f python.mak DEBUG=%debug_flag% MACHINE=%machine% TCL_DIR="%tcldir%" TK_DIR="%tkdir%" INSTALL_DIR="%tcltkdir%" clean

-        nmake -f python.mak DEBUG=%debug_flag% MACHINE=%machine% TCL_DIR="%tcldir%" TK_DIR="%tkdir%" INSTALL_DIR="%tcltkdir%" all

-        nmake -f python.mak DEBUG=%debug_flag% MACHINE=%machine% TCL_DIR="%tcldir%" TK_DIR="%tkdir%" INSTALL_DIR="%tcltkdir%" install

-        popd

-    )

-)

-

-rem Call on VCBuild to do the work, echo the command.

-rem Passing %1-9 is not the preferred option, but argument parsing in

-rem batch is, shall we say, "lackluster"

-echo on

-vcbuild "%dir%pcbuild.sln" %target% "%conf%|%platf%" %1 %2 %3 %4 %5 %6 %7 %8 %9

+@echo off
+rem A batch program to build or rebuild a particular configuration,
+rem just for convenience.
+
+rem Arguments:
+rem  -c  Set the configuration (default: Release)
+rem  -p  Set the platform (x64 or Win32, default: Win32)
+rem  -r  Target Rebuild instead of Build
+rem  -t  Set the target manually (Build, Rebuild, or Clean)
+rem  -d  Set the configuration to Debug
+rem  -e  Pull in external libraries using get_externals.bat
+rem  -k  Attempt to kill any running Pythons before building
+
+setlocal
+set platf=Win32
+set vs_platf=x86
+set conf=Release
+set target=
+set dir=%~dp0
+set kill=
+set build_tkinter=
+
+:CheckOpts
+if '%1'=='-c' (set conf=%2) & shift & shift & goto CheckOpts
+if '%1'=='-p' (set platf=%2) & shift & shift & goto CheckOpts
+if '%1'=='-r' (set target=/rebuild) & shift & goto CheckOpts
+if '%1'=='-t' (
+    if '%2'=='Clean' (set target=/clean) & shift & shift & goto CheckOpts
+    if '%2'=='Rebuild' (set target=/rebuild) & shift & shift & goto CheckOpts
+    if '%2'=='Build' (set target=) & shift & shift & goto CheckOpts
+    echo.Unknown target: %2 & goto :eof
+)
+if '%1'=='-d' (set conf=Debug) & shift & goto CheckOpts
+if '%1'=='-e' call "%dir%..\..\PCbuild\get_externals.bat" & (set build_tkinter=true) & shift & goto CheckOpts
+if '%1'=='-k' (set kill=true) & shift & goto CheckOpts
+
+if '%conf%'=='Debug' (set dbg_ext=_d) else (set dbg_ext=)
+if '%platf%'=='x64' (
+    set vs_platf=x86_amd64
+    set builddir=%dir%amd64\
+) else (
+    set builddir=%dir%
+)
+rem Can't use builddir until we're in a new command...
+if '%platf%'=='x64' (
+    rem Needed for buliding OpenSSL
+    set HOST_PYTHON=%builddir%python%dbg_ext%.exe
+)
+
+rem Setup the environment
+call "%dir%env.bat" %vs_platf%
+
+if '%kill%'=='true' (
+    vcbuild "%dir%kill_python.vcproj" "%conf%|%platf%" && "%builddir%kill_python%dbg_ext%.exe"
+)
+
+set externals_dir=%dir%..\..\externals
+if '%build_tkinter%'=='true' (
+    if '%platf%'=='x64' (
+        set tcltkdir=%externals_dir%\tcltk64
+        set machine=AMD64
+    ) else (
+        set tcltkdir=%externals_dir%\tcltk
+        set machine=IX86
+    )
+    if '%conf%'=='Debug' (
+        set tcl_dbg_ext=g
+        set debug_flag=1
+    ) else (
+        set tcl_dbg_ext=
+        set debug_flag=0
+    )
+    set tcldir=%externals_dir%\tcl-8.5.19.0
+    set tkdir=%externals_dir%\tk-8.5.19.0
+    set tixdir=%externals_dir%\tix-8.4.3.5
+)
+if '%build_tkinter%'=='true' (
+    if not exist "%tcltkdir%\bin\tcl85%tcl_dbg_ext%.dll" (
+        @rem clean, all and install need to be separate invocations, otherwise nmakehlp is not found on install
+        pushd "%tcldir%\win"
+        nmake -f makefile.vc MACHINE=%machine% DEBUG=%debug_flag% INSTALLDIR="%tcltkdir%" clean
+        nmake -f makefile.vc MACHINE=%machine% DEBUG=%debug_flag% INSTALLDIR="%tcltkdir%" all
+        nmake -f makefile.vc MACHINE=%machine% DEBUG=%debug_flag% INSTALLDIR="%tcltkdir%" install
+        popd
+    )
+
+    if not exist "%tcltkdir%\bin\tk85%tcl_dbg_ext%.dll" (
+        pushd "%tkdir%\win"
+        nmake -f makefile.vc MACHINE=%machine% DEBUG=%debug_flag% INSTALLDIR="%tcltkdir%" TCLDIR="%tcldir%" clean
+        nmake -f makefile.vc MACHINE=%machine% DEBUG=%debug_flag% INSTALLDIR="%tcltkdir%" TCLDIR="%tcldir%" all
+        nmake -f makefile.vc MACHINE=%machine% DEBUG=%debug_flag% INSTALLDIR="%tcltkdir%" TCLDIR="%tcldir%" install
+        popd
+    )
+
+    if not exist "%tcltkdir%\lib\tix8.4.3\tix84%tcl_dbg_ext%.dll" (
+        pushd "%tixdir%\win"
+        nmake -f python.mak DEBUG=%debug_flag% MACHINE=%machine% TCL_DIR="%tcldir%" TK_DIR="%tkdir%" INSTALL_DIR="%tcltkdir%" clean
+        nmake -f python.mak DEBUG=%debug_flag% MACHINE=%machine% TCL_DIR="%tcldir%" TK_DIR="%tkdir%" INSTALL_DIR="%tcltkdir%" all
+        nmake -f python.mak DEBUG=%debug_flag% MACHINE=%machine% TCL_DIR="%tcldir%" TK_DIR="%tkdir%" INSTALL_DIR="%tcltkdir%" install
+        popd
+    )
+)
+
+rem Call on VCBuild to do the work, echo the command.
+rem Passing %1-9 is not the preferred option, but argument parsing in
+rem batch is, shall we say, "lackluster"
+echo on
+vcbuild "%dir%pcbuild.sln" %target% "%conf%|%platf%" %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/PC/VS9.0/build_env.bat b/PC/VS9.0/build_env.bat
index 01024cf..4c67ae3 100644
--- a/PC/VS9.0/build_env.bat
+++ b/PC/VS9.0/build_env.bat
@@ -1 +1 @@
-@%comspec% /k env.bat %*

+@%comspec% /k env.bat %*
diff --git a/PC/VS9.0/build_pgo.bat b/PC/VS9.0/build_pgo.bat
index d28a767..a37b5bf 100644
--- a/PC/VS9.0/build_pgo.bat
+++ b/PC/VS9.0/build_pgo.bat
@@ -1,41 +1,41 @@
-@echo off

-rem A batch program to build PGO (Profile guided optimization) by first

-rem building instrumented binaries, then running the testsuite, and

-rem finally building the optimized code.

-rem Note, after the first instrumented run, one can just keep on

-rem building the PGUpdate configuration while developing.

-

-setlocal

-set platf=Win32

-

-rem use the performance testsuite.  This is quick and simple

-set job1=..\..\tools\pybench\pybench.py -n 1 -C 1 --with-gc

-set path1=..\..\tools\pybench

-

-rem or the whole testsuite for more thorough testing

-set job2=..\..\lib\test\regrtest.py

-set path2=..\..\lib

-

-set job=%job1%

-set clrpath=%path1%

-

-:CheckOpts

-if "%1"=="-p" (set platf=%2) & shift & shift & goto CheckOpts

-if "%1"=="-2" (set job=%job2%) & (set clrpath=%path2%) & shift & goto CheckOpts

-

-set PGI=%platf%-pgi

-set PGO=%platf%-pgo

-

-@echo on

-rem build the instrumented version

-call build -p %platf% -c PGInstrument

-

-rem remove .pyc files, .pgc files and execute the job

-%PGI%\python.exe rmpyc.py %clrpath%

-del %PGI%\*.pgc

-%PGI%\python.exe %job%

-

-rem finally build the optimized version

-if exist %PGO% del /s /q %PGO%

-call build -p %platf% -c PGUpdate

-

+@echo off
+rem A batch program to build PGO (Profile guided optimization) by first
+rem building instrumented binaries, then running the testsuite, and
+rem finally building the optimized code.
+rem Note, after the first instrumented run, one can just keep on
+rem building the PGUpdate configuration while developing.
+
+setlocal
+set platf=Win32
+
+rem use the performance testsuite.  This is quick and simple
+set job1=..\..\tools\pybench\pybench.py -n 1 -C 1 --with-gc
+set path1=..\..\tools\pybench
+
+rem or the whole testsuite for more thorough testing
+set job2=..\..\lib\test\regrtest.py
+set path2=..\..\lib
+
+set job=%job1%
+set clrpath=%path1%
+
+:CheckOpts
+if "%1"=="-p" (set platf=%2) & shift & shift & goto CheckOpts
+if "%1"=="-2" (set job=%job2%) & (set clrpath=%path2%) & shift & goto CheckOpts
+
+set PGI=%platf%-pgi
+set PGO=%platf%-pgo
+
+@echo on
+rem build the instrumented version
+call build -p %platf% -c PGInstrument
+
+rem remove .pyc files, .pgc files and execute the job
+%PGI%\python.exe rmpyc.py %clrpath%
+del %PGI%\*.pgc
+%PGI%\python.exe %job%
+
+rem finally build the optimized version
+if exist %PGO% del /s /q %PGO%
+call build -p %platf% -c PGUpdate
+
diff --git a/PC/VS9.0/build_ssl.bat b/PC/VS9.0/build_ssl.bat
index f06c2d1..2531a5b 100644
--- a/PC/VS9.0/build_ssl.bat
+++ b/PC/VS9.0/build_ssl.bat
@@ -1,12 +1,12 @@
-@echo off

-if not defined HOST_PYTHON (

-  if %1 EQU Debug (

-    set HOST_PYTHON=python_d.exe

-    if not exist python27_d.dll exit 1

-  ) ELSE (

-    set HOST_PYTHON=python.exe

-    if not exist python27.dll exit 1

-  )

-)

-%HOST_PYTHON% build_ssl.py %1 %2 %3

-

+@echo off
+if not defined HOST_PYTHON (
+  if %1 EQU Debug (
+    set HOST_PYTHON=python_d.exe
+    if not exist python27_d.dll exit 1
+  ) ELSE (
+    set HOST_PYTHON=python.exe
+    if not exist python27.dll exit 1
+  )
+)
+%HOST_PYTHON% build_ssl.py %1 %2 %3
+
diff --git a/PC/VS9.0/build_ssl.py b/PC/VS9.0/build_ssl.py
index 524b4bc..eb0b4c9 100644
--- a/PC/VS9.0/build_ssl.py
+++ b/PC/VS9.0/build_ssl.py
@@ -1,4 +1,3 @@
-from __future__ import with_statement, print_function
 # Script for building the _ssl and _hashlib modules for Windows.
 # Uses Perl to setup the OpenSSL environment correctly
 # and build OpenSSL, then invokes a simple nmake session
@@ -24,221 +23,212 @@
 # python.exe build_ssl.py Release x64
 # python.exe build_ssl.py Release Win32
 
-from __future__ import with_statement
-import os, sys, re, shutil
+from __future__ import with_statement, print_function
+import os
+import re
+import sys
+import time
 import subprocess
+from shutil import copy
+from distutils import log
+from distutils.spawn import find_executable
+from distutils.file_util import copy_file
+from distutils.sysconfig import parse_makefile, expand_makefile_vars
 
-# Find all "foo.exe" files on the PATH.
-def find_all_on_path(filename, extras = None):
-    entries = os.environ["PATH"].split(os.pathsep)
-    ret = []
-    for p in entries:
-        fname = os.path.abspath(os.path.join(p, filename))
-        if os.path.isfile(fname) and fname not in ret:
-            ret.append(fname)
-    if extras:
-        for p in extras:
-            fname = os.path.abspath(os.path.join(p, filename))
-            if os.path.isfile(fname) and fname not in ret:
-                ret.append(fname)
-    return ret
+# The mk1mf.pl output filename template
+# !!! This must match what is used in prepare_ssl.py
+MK1MF_FMT = 'ms\\nt{}.mak'
 
-# Find a suitable Perl installation for OpenSSL.
-# cygwin perl does *not* work.  ActivePerl does.
-# Being a Perl dummy, the simplest way I can check is if the "Win32" package
-# is available.
-def find_working_perl(perls):
-    for perl in perls:
+# The header files output directory name template
+# !!! This must match what is used in prepare_ssl.py
+INCLUDE_FMT = 'include{}'
+
+# Fetch all the directory definitions from VC properties
+def get_project_properties(propfile):
+    macro_pattern = r'<UserMacro\s+Name="([^"]+?)"\s+Value="([^"]*?)"\s*/>'
+    with open(propfile) as fin:
+        items = re.findall(macro_pattern, fin.read(), re.MULTILINE)
+    props = dict(items)
+    for name, value in items:
         try:
-            subprocess.check_output([perl, "-e", "use win32;"])
-        except Subprocess.CalledProcessError:
-            continue
-        else:
-            return perl
-    print("Can not find a suitable PERL:")
-    if perls:
-        print(" the following perl interpreters were found:")
-        for p in perls:
-            print(" ", p)
-        print(" None of these versions appear suitable for building OpenSSL")
-    else:
-        print(" NO perl interpreters were found on this machine at all!")
-    print(" Please install ActivePerl and ensure it appears on your path")
-    return None
-
-# Fetch SSL directory from VC properties
-def get_ssl_dir():
-    propfile = (os.path.join(os.path.dirname(__file__), 'pyproject.vsprops'))
-    with open(propfile) as f:
-        m = re.search('openssl-([^"]+)"', f.read())
-        return "..\..\externals\openssl-"+m.group(1)
+            props[name] = expand_makefile_vars(value, props)
+        except TypeError:
+            # value contains undefined variable reference, drop it
+            del props[name]
+    return props
 
 
-def create_makefile64(makefile, m32):
-    """Create and fix makefile for 64bit
-
-    Replace 32 with 64bit directories
-    """
-    if not os.path.isfile(m32):
-        return
-    with open(m32) as fin:
-        with open(makefile, 'w') as fout:
-            for line in fin:
-                line = line.replace("=tmp32", "=tmp64")
-                line = line.replace("=out32", "=out64")
-                line = line.replace("=inc32", "=inc64")
-                # force 64 bit machine
-                line = line.replace("MKLIB=lib", "MKLIB=lib /MACHINE:X64")
-                line = line.replace("LFLAGS=", "LFLAGS=/MACHINE:X64 ")
-                # don't link against the lib on 64bit systems
-                line = line.replace("bufferoverflowu.lib", "")
-                fout.write(line)
-    os.unlink(m32)
-
-def fix_makefile(makefile):
+_variable_rx = re.compile(r"([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)")
+def fix_makefile(makefile, platform_makefile, suffix):
     """Fix some stuff in all makefiles
     """
-    if not os.path.isfile(makefile):
-        return
-    fin = open(makefile)
-    with open(makefile) as fin:
-        lines = fin.readlines()
-    with open(makefile, 'w') as fout:
-        for line in lines:
-            if line.startswith("PERL="):
-                continue
-            if line.startswith("CP="):
-                line = "CP=copy\n"
-            if line.startswith("MKDIR="):
-                line = "MKDIR=mkdir\n"
-            if line.startswith("CFLAG="):
-                line = line.strip()
-                for algo in ("RC5", "MDC2", "IDEA"):
-                    noalgo = " -DOPENSSL_NO_%s" % algo
-                    if noalgo not in line:
-                        line = line + noalgo
-                line = line + '\n'
+    subs = {
+        'PERL': 'rem',  # just in case
+        'CP': 'copy',
+        'MKDIR': 'mkdir',
+        'OUT_D': 'out' + suffix,
+        'TMP_D': 'tmp' + suffix,
+        'INC_D': INCLUDE_FMT.format(suffix),
+        'INCO_D': '$(INC_D)\\openssl',
+        }
+    with open(platform_makefile) as fin, open(makefile, 'w') as fout:
+        for line in fin:
+            m = _variable_rx.match(line)
+            if m:
+                name = m.group(1)
+                if name in subs:
+                    line = '%s=%s\n' % (name, subs[name])
             fout.write(line)
 
-def run_configure(configure, do_script):
-    print("perl Configure "+configure+" no-idea no-mdc2")
-    os.system("perl Configure "+configure+" no-idea no-mdc2")
-    print(do_script)
-    os.system(do_script)
+
+_copy_rx = re.compile(r'\t\$\(PERL\) '
+                      r'\$\(SRC_D\)\\util\\copy-if-different.pl '
+                      r'"([^"]+)"\s+"([^"]+)"')
+def copy_files(makefile, makevars):
+    # Create the destination directories (see 'init' rule in nt.dll)
+    for varname in ('TMP_D', 'LIB_D', 'INC_D', 'INCO_D'):
+        dirname = makevars[varname]
+        if not os.path.isdir(dirname):
+            os.mkdir(dirname)
+    # Process the just local library headers (HEADER) as installed headers
+    # (EXHEADER) are handled by prepare_ssl.py (see 'headers' rule in nt.dll)
+    headers = set(makevars['HEADER'].split())
+    with open(makefile) as fin:
+        for line in fin:
+            m = _copy_rx.match(line)
+            if m:
+                src, dst = m.groups()
+                src = expand_makefile_vars(src, makevars)
+                dst = expand_makefile_vars(dst, makevars)
+                if dst in headers:
+                    copy_file(src, dst, preserve_times=False, update=True)
+
+
+# Update buildinf.h for the build platform.
+def fix_buildinf(makevars):
+    platform_cpp_symbol = 'MK1MF_PLATFORM_'
+    platform_cpp_symbol += makevars['PLATFORM'].replace('-', '_')
+    fn = expand_makefile_vars('$(INCL_D)\\buildinf.h', makevars)
+    with open(fn, 'w') as f:
+        # sanity check
+        f.write(('#ifndef {}\n'
+                 '  #error "Windows build (PLATFORM={PLATFORM}) only"\n'
+                 '#endif\n').format(platform_cpp_symbol, **makevars))
+        buildinf = (
+            '#define CFLAGS "compiler: cl {CFLAG}"\n'
+            '#define PLATFORM "{PLATFORM}"\n'
+            '#define DATE "{}"\n'
+            ).format(time.asctime(time.gmtime()),
+                     **makevars)
+        f.write(buildinf)
+    print('Updating buildinf:')
+    print(buildinf)
+    sys.stdout.flush()
+
 
 def main():
-    build_all = "-a" in sys.argv
-    if sys.argv[1] == "Release":
-        debug = False
-    elif sys.argv[1] == "Debug":
-        debug = True
-    else:
-        raise ValueError(str(sys.argv))
+    if sys.argv[1] == "Debug":
+        print("OpenSSL debug builds aren't supported.")
+    elif sys.argv[1] != "Release":
+        raise ValueError('Unrecognized configuration: %s' % sys.argv[1])
 
     if sys.argv[2] == "Win32":
-        arch = "x86"
-        configure = "VC-WIN32"
-        do_script = "ms\\do_nasm"
-        makefile="ms\\nt.mak"
-        m32 = makefile
+        platform = "VC-WIN32"
+        suffix = '32'
     elif sys.argv[2] == "x64":
-        arch="amd64"
-        configure = "VC-WIN64A"
-        do_script = "ms\\do_win64a"
-        makefile = "ms\\nt64.mak"
-        m32 = makefile.replace('64', '')
-        #os.environ["VSEXTCOMP_USECL"] = "MS_OPTERON"
+        platform = "VC-WIN64A"
+        suffix = '64'
     else:
-        raise ValueError(str(sys.argv))
+        raise ValueError('Unrecognized platform: %s' % sys.argv[2])
 
-    make_flags = ""
-    if build_all:
-        make_flags = "-a"
-    # perl should be on the path, but we also look in "\perl" and "c:\\perl"
-    # as "well known" locations
-    perls = find_all_on_path("perl.exe", [r"\perl\bin",
-                                          r"C:\perl\bin",
-                                          r"\perl64\bin",
-                                          r"C:\perl64\bin",
-                                         ])
-    perl = find_working_perl(perls)
-    if perl:
-        print("Found a working perl at '%s'" % (perl,))
-        # Set PERL for the makefile to find it
-        os.environ["PERL"] = perl
-    else:
-        print("No Perl installation was found. Existing Makefiles are used.")
-    sys.stdout.flush()
-    # Look for SSL 2 levels up from pcbuild - ie, same place zlib etc all live.
-    ssl_dir = get_ssl_dir()
-    if ssl_dir is None:
+    # Have the distutils functions display information output
+    log.set_verbosity(1)
+
+    # Use the same properties that are used in the VS projects
+    solution_dir = os.path.dirname(__file__)
+    propfile = os.path.join(solution_dir, 'pyproject.vsprops')
+    props = get_project_properties(propfile)
+
+    # Ensure we have the necessary external depenedencies
+    ssl_dir = os.path.join(solution_dir, props['opensslDir'])
+    if not os.path.isdir(ssl_dir):
+        print("Could not find the OpenSSL sources, try running "
+              "'build.bat -e'")
+        sys.exit(1)
+
+    # Ensure the executables used herein are available.
+    if not find_executable('nmake.exe'):
+        print('Could not find nmake.exe, try running env.bat')
         sys.exit(1)
 
     # add our copy of NASM to PATH.  It will be on the same level as openssl
-    for dir in os.listdir(os.path.join(ssl_dir, os.pardir)):
+    externals_dir = os.path.join(solution_dir, props['externalsDir'])
+    for dir in os.listdir(externals_dir):
         if dir.startswith('nasm'):
-            nasm_dir = os.path.join(ssl_dir, os.pardir, dir)
+            nasm_dir = os.path.join(externals_dir, dir)
             nasm_dir = os.path.abspath(nasm_dir)
             old_path = os.environ['PATH']
             os.environ['PATH'] = os.pathsep.join([nasm_dir, old_path])
             break
     else:
-        print('NASM was not found, make sure it is on PATH')
+        if not find_executable('nasm.exe'):
+            print('Could not find nasm.exe, please add to PATH')
+            sys.exit(1)
 
+    # If the ssl makefiles do not exist, we invoke PCbuild/prepare_ssl.py
+    # to generate them.
+    platform_makefile = MK1MF_FMT.format(suffix)
+    if not os.path.isfile(os.path.join(ssl_dir, platform_makefile)):
+        pcbuild_dir = os.path.join(os.path.dirname(externals_dir), 'PCbuild')
+        prepare_ssl = os.path.join(pcbuild_dir, 'prepare_ssl.py')
+        rc = subprocess.call([sys.executable, prepare_ssl, ssl_dir])
+        if rc:
+            print('Executing', prepare_ssl, 'failed (error %d)' % rc)
+            sys.exit(rc)
 
     old_cd = os.getcwd()
     try:
         os.chdir(ssl_dir)
-        # rebuild makefile when we do the role over from 32 to 64 build
-        if arch == "amd64" and os.path.isfile(m32) and not os.path.isfile(makefile):
-            os.unlink(m32)
 
-        # If the ssl makefiles do not exist, we invoke Perl to generate them.
-        # Due to a bug in this script, the makefile sometimes ended up empty
-        # Force a regeneration if it is.
-        if not os.path.isfile(makefile) or os.path.getsize(makefile)==0:
-            if perl is None:
-                print("Perl is required to build the makefiles!")
-                sys.exit(1)
+        # Get the variables defined in the current makefile, if it exists.
+        makefile = MK1MF_FMT.format('')
+        try:
+            makevars = parse_makefile(makefile)
+        except EnvironmentError:
+            makevars = {'PLATFORM': None}
 
-            print("Creating the makefiles...")
+        # Rebuild the makefile when building for different a platform than
+        # the last run.
+        if makevars['PLATFORM'] != platform:
+            print("Updating the makefile...")
             sys.stdout.flush()
-            # Put our working Perl at the front of our path
-            os.environ["PATH"] = os.path.dirname(perl) + \
-                                          os.pathsep + \
-                                          os.environ["PATH"]
-            run_configure(configure, do_script)
-            if debug:
-                print("OpenSSL debug builds aren't supported.")
-            #if arch=="x86" and debug:
-            #    # the do_masm script in openssl doesn't generate a debug
-            #    # build makefile so we generate it here:
-            #    os.system("perl util\mk1mf.pl debug "+configure+" >"+makefile)
+            # Firstly, apply the changes for the platform makefile into
+            # a temporary file to prevent any errors from this script
+            # causing false positives on subsequent runs.
+            new_makefile = makefile + '.new'
+            fix_makefile(new_makefile, platform_makefile, suffix)
+            makevars = parse_makefile(new_makefile)
 
-            if arch == "amd64":
-                create_makefile64(makefile, m32)
-            fix_makefile(makefile)
-            shutil.copy(r"crypto\buildinf.h", r"crypto\buildinf_%s.h" % arch)
-            shutil.copy(r"crypto\opensslconf.h", r"crypto\opensslconf_%s.h" % arch)
+            # Secondly, perform the make recipes that use Perl
+            copy_files(new_makefile, makevars)
+
+            # Set our build information in buildinf.h.
+            # XXX: This isn't needed for a properly "prepared" SSL, but
+            # it fixes the current checked-in external (as of 2017-05).
+            fix_buildinf(makevars)
+
+            # Finally, move the temporary file to its real destination.
+            if os.path.exists(makefile):
+                os.remove(makefile)
+            os.rename(new_makefile, makefile)
 
         # Now run make.
-        if arch == "amd64":
-            rc = os.system("nasm -f win64 -DNEAR -Ox -g ms\\uptable.asm")
-            if rc:
-                print("nasm assembler has failed.")
-                sys.exit(rc)
-
-        shutil.copy(r"crypto\buildinf_%s.h" % arch, r"crypto\buildinf.h")
-        shutil.copy(r"crypto\opensslconf_%s.h" % arch, r"crypto\opensslconf.h")
-
-        #makeCommand = "nmake /nologo PERL=\"%s\" -f \"%s\"" %(perl, makefile)
-        makeCommand = "nmake /nologo -f \"%s\"" % makefile
+        makeCommand = "nmake /nologo /f \"%s\" lib" % makefile
         print("Executing ssl makefiles:", makeCommand)
         sys.stdout.flush()
         rc = os.system(makeCommand)
         if rc:
-            print("Executing "+makefile+" failed")
-            print(rc)
+            print("Executing", makefile, "failed (error %d)" % rc)
             sys.exit(rc)
     finally:
         os.chdir(old_cd)
diff --git a/PC/VS9.0/bz2.vcproj b/PC/VS9.0/bz2.vcproj
index 5593641..e4581a5 100644
--- a/PC/VS9.0/bz2.vcproj
+++ b/PC/VS9.0/bz2.vcproj
@@ -1,581 +1,581 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="bz2"

-	ProjectGUID="{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}"

-	RootNamespace="bz2"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="$(bz2Dir)"

-				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D170000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\bz2module.c"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="bzip2 1.0.6 Header Files"

-			>

-			<File

-				RelativePath="$(bz2Dir)\bzlib.h"

-				>

-			</File>

-			<File

-				RelativePath="$(bz2Dir)\bzlib_private.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="bzip2 1.0.6 Source Files"

-			>

-			<File

-				RelativePath="$(bz2Dir)\blocksort.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bz2Dir)\bzlib.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bz2Dir)\compress.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bz2Dir)\crctable.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bz2Dir)\decompress.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bz2Dir)\huffman.c"

-				>

-			</File>

-			<File

-				RelativePath="$(bz2Dir)\randtable.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="bz2"
+	ProjectGUID="{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}"
+	RootNamespace="bz2"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(bz2Dir)"
+				PreprocessorDefinitions="WIN32;_FILE_OFFSET_BITS=64"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D170000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\bz2module.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="bzip2 1.0.6 Header Files"
+			>
+			<File
+				RelativePath="$(bz2Dir)\bzlib.h"
+				>
+			</File>
+			<File
+				RelativePath="$(bz2Dir)\bzlib_private.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="bzip2 1.0.6 Source Files"
+			>
+			<File
+				RelativePath="$(bz2Dir)\blocksort.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bz2Dir)\bzlib.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bz2Dir)\compress.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bz2Dir)\crctable.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bz2Dir)\decompress.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bz2Dir)\huffman.c"
+				>
+			</File>
+			<File
+				RelativePath="$(bz2Dir)\randtable.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/debug.vsprops b/PC/VS9.0/debug.vsprops
index bc643cb..2be7f74 100644
--- a/PC/VS9.0/debug.vsprops
+++ b/PC/VS9.0/debug.vsprops
@@ -1,15 +1,15 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="debug"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		PreprocessorDefinitions="_DEBUG"

-	/>

-	<UserMacro

-		Name="KillPythonExe"

-		Value="$(OutDir)\kill_python_d.exe"

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="debug"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		PreprocessorDefinitions="_DEBUG"
+	/>
+	<UserMacro
+		Name="KillPythonExe"
+		Value="$(OutDir)\kill_python_d.exe"
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/VS9.0/env.bat b/PC/VS9.0/env.bat
index 57fc116..4175ca4 100644
--- a/PC/VS9.0/env.bat
+++ b/PC/VS9.0/env.bat
@@ -1,4 +1,4 @@
-@echo off

-echo Build environments: x86, ia64, amd64, x86_amd64, x86_ia64

-echo.

-call "%VS90COMNTOOLS%..\..\VC\vcvarsall.bat" %*

+@echo off
+echo Build environments: x86, ia64, amd64, x86_amd64, x86_ia64
+echo.
+call "%VS90COMNTOOLS%..\..\VC\vcvarsall.bat" %*
diff --git a/PC/VS9.0/idle.bat b/PC/VS9.0/idle.bat
index 5ab15f5..dcb0485 100644
--- a/PC/VS9.0/idle.bat
+++ b/PC/VS9.0/idle.bat
@@ -1,15 +1,15 @@
-@echo off

-rem start idle

-rem Usage:  idle [-d]

-rem -d   Run Debug build (python_d.exe).  Else release build.

-

-setlocal

-set exe=python

-PATH %PATH%;..\..\tcltk\bin

-

-if "%1"=="-d" (set exe=python_d) & shift

-

-set cmd=%exe% ../Lib/idlelib/idle.py %1 %2 %3 %4 %5 %6 %7 %8 %9

-

-echo on

-%cmd%

+@echo off
+rem start idle
+rem Usage:  idle [-d]
+rem -d   Run Debug build (python_d.exe).  Else release build.
+
+setlocal
+set exe=python
+PATH %PATH%;..\..\tcltk\bin
+
+if "%1"=="-d" (set exe=python_d) & shift
+
+set cmd=%exe% ../Lib/idlelib/idle.py %1 %2 %3 %4 %5 %6 %7 %8 %9
+
+echo on
+%cmd%
diff --git a/PC/VS9.0/kill_python.vcproj b/PC/VS9.0/kill_python.vcproj
index a34107a..918702d 100644
--- a/PC/VS9.0/kill_python.vcproj
+++ b/PC/VS9.0/kill_python.vcproj
@@ -1,279 +1,279 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9.00"

-	Name="kill_python"

-	ProjectGUID="{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}"

-	RootNamespace="kill_python"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName)_d.exe"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName)_d.exe"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath=".\kill_python.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="kill_python"
+	ProjectGUID="{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}"
+	RootNamespace="kill_python"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)_d.exe"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)_d.exe"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath=".\kill_python.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/make_buildinfo.vcproj b/PC/VS9.0/make_buildinfo.vcproj
index c8646e2..c42229c 100644
--- a/PC/VS9.0/make_buildinfo.vcproj
+++ b/PC/VS9.0/make_buildinfo.vcproj
@@ -1,162 +1,162 @@
-<?xml version="1.0" encoding="windows-1250"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="make_buildinfo"

-	ProjectGUID="{C73F0EC1-358B-4177-940F-0846AC8B04CD}"

-	RootNamespace="make_buildinfo"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="131072"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				InlineFunctionExpansion="1"

-				PreprocessorDefinitions="_CONSOLE"

-				RuntimeLibrary="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)/make_buildinfo.exe"

-				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				PreprocessorDefinitions="_CONSOLE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"

-			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"

-			>

-			<File

-				RelativePath=".\make_buildinfo.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="windows-1250"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="make_buildinfo"
+	ProjectGUID="{C73F0EC1-358B-4177-940F-0846AC8B04CD}"
+	RootNamespace="make_buildinfo"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="_CONSOLE"
+				RuntimeLibrary="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)/make_buildinfo.exe"
+				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_CONSOLE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\make_buildinfo.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/make_versioninfo.vcproj b/PC/VS9.0/make_versioninfo.vcproj
index 5c3a6b7..690c069 100644
--- a/PC/VS9.0/make_versioninfo.vcproj
+++ b/PC/VS9.0/make_versioninfo.vcproj
@@ -1,324 +1,324 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="make_versioninfo"

-	ProjectGUID="{F0E0541E-F17D-430B-97C4-93ADF0DD284E}"

-	RootNamespace="make_versioninfo"

-	TargetFrameworkVersion="131072"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-				Description="Build PC/pythonnt_rc(_d).h"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\pythonnt_rc.h&#x0D;&#x0A;"

-				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc.h"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				EnableIntrinsicFunctions="true"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(SolutionDir)make_versioninfo.exe"

-				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"

-				SubSystem="1"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\python_nt.h&#x0D;&#x0A;"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-				Description="Build PC/pythonnt_rc(_d).h"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\pythonnt_rc.h&#x0D;&#x0A;"

-				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc.h"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				EnableIntrinsicFunctions="true"

-				PreprocessorDefinitions="_CONSOLE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(SolutionDir)make_versioninfo.exe"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\python_nt.h&#x0D;&#x0A;"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-				Description="Build PC/pythonnt_rc(_d).h"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\pythonnt_rc_d.h&#x0D;&#x0A;"

-				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc_d.h"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				InlineFunctionExpansion="1"

-				EnableIntrinsicFunctions="false"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(SolutionDir)make_versioninfo_d.exe"

-				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"

-				SubSystem="1"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\python_nt_d.h&#x0D;&#x0A;"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-				Description="Build PC/pythonnt_rc(_d).h"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\pythonnt_rc_d.h&#x0D;&#x0A;"

-				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc_d.h"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				InlineFunctionExpansion="1"

-				EnableIntrinsicFunctions="false"

-				PreprocessorDefinitions="_CONSOLE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(SolutionDir)make_versioninfo_d.exe"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\python_nt_d.h&#x0D;&#x0A;"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\PC\make_versioninfo.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="make_versioninfo"
+	ProjectGUID="{F0E0541E-F17D-430B-97C4-93ADF0DD284E}"
+	RootNamespace="make_versioninfo"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+				Description="Build PC/pythonnt_rc(_d).h"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\pythonnt_rc.h&#x0D;&#x0A;"
+				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc.h"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				EnableIntrinsicFunctions="true"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(SolutionDir)make_versioninfo.exe"
+				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
+				SubSystem="1"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\python_nt.h&#x0D;&#x0A;"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+				Description="Build PC/pythonnt_rc(_d).h"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\pythonnt_rc.h&#x0D;&#x0A;"
+				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc.h"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				EnableIntrinsicFunctions="true"
+				PreprocessorDefinitions="_CONSOLE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(SolutionDir)make_versioninfo.exe"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo.exe &gt; ..\..\PC\python_nt.h&#x0D;&#x0A;"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+				Description="Build PC/pythonnt_rc(_d).h"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\pythonnt_rc_d.h&#x0D;&#x0A;"
+				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc_d.h"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				InlineFunctionExpansion="1"
+				EnableIntrinsicFunctions="false"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(SolutionDir)make_versioninfo_d.exe"
+				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
+				SubSystem="1"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\python_nt_d.h&#x0D;&#x0A;"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+				Description="Build PC/pythonnt_rc(_d).h"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\pythonnt_rc_d.h&#x0D;&#x0A;"
+				Outputs="$(SolutionDir)..\..\PC\pythonnt_rc_d.h"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				InlineFunctionExpansion="1"
+				EnableIntrinsicFunctions="false"
+				PreprocessorDefinitions="_CONSOLE"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(SolutionDir)make_versioninfo_d.exe"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="cd $(SolutionDir)&#x0D;&#x0A;make_versioninfo_d.exe &gt; ..\..\PC\python_nt_d.h&#x0D;&#x0A;"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\PC\make_versioninfo.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/pcbuild.sln b/PC/VS9.0/pcbuild.sln
index 725c6ea..c5e072e 100644
--- a/PC/VS9.0/pcbuild.sln
+++ b/PC/VS9.0/pcbuild.sln
@@ -1,559 +1,559 @@
-Microsoft Visual Studio Solution File, Format Version 10.00

-# Visual Studio 2008

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python", "python.vcproj", "{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058} = {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_versioninfo", "make_versioninfo.vcproj", "{F0E0541E-F17D-430B-97C4-93ADF0DD284E}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythoncore", "pythoncore.vcproj", "{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"

-	ProjectSection(ProjectDependencies) = postProject

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E} = {F0E0541E-F17D-430B-97C4-93ADF0DD284E}

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD} = {C73F0EC1-358B-4177-940F-0846AC8B04CD}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythonw", "pythonw.vcproj", "{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w9xpopen", "w9xpopen.vcproj", "{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}"

-	ProjectSection(ProjectDependencies) = postProject

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_buildinfo", "make_buildinfo.vcproj", "{C73F0EC1-358B-4177-940F-0846AC8B04CD}"

-EndProject

-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{553EC33E-9816-4996-A660-5D6186A0B0B3}"

-	ProjectSection(SolutionItems) = preProject

-		..\Modules\getbuildinfo.c = ..\Modules\getbuildinfo.c

-		readme.txt = readme.txt

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winsound", "winsound.vcproj", "{28B5D777-DDF2-4B6B-B34F-31D938813856}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb", "_bsddb.vcproj", "{B4D38F3F-68FB-42EC-A45D-E00657BB3627}"

-	ProjectSection(ProjectDependencies) = postProject

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes", "_ctypes.vcproj", "{0E9791DB-593A-465F-98BC-681011311618}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes_test", "_ctypes_test.vcproj", "{9EC7190A-249F-4180-A900-548FDCF3055F}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_elementtree", "_elementtree.vcproj", "{17E1E049-C309-4D79-843F-AE483C264AEA}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_msi", "_msi.vcproj", "{31FFC478-7B4A-43E8-9954-8D03E2187E9C}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_socket", "_socket.vcproj", "{86937F53-C189-40EF-8CE8-8759D8E7D480}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_sqlite3", "_sqlite3.vcproj", "{13CECB97-4119-4316-9D42-8534019A5A44}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-		{A1A295E5-463C-437F-81CA-1F32367685DA} = {A1A295E5-463C-437F-81CA-1F32367685DA}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ssl", "_ssl.vcproj", "{C6E20F84-3247-4AD6-B051-B073268F73BA}"

-	ProjectSection(ProjectDependencies) = postProject

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9} = {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}

-		{86937F53-C189-40EF-8CE8-8759D8E7D480} = {86937F53-C189-40EF-8CE8-8759D8E7D480}

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testcapi", "_testcapi.vcproj", "{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_tkinter", "_tkinter.vcproj", "{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bz2", "bz2.vcproj", "{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "select", "select.vcproj", "{18CAE28C-B454-46C1-87A0-493D91D97F03}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unicodedata", "unicodedata.vcproj", "{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pyexpat", "pyexpat.vcproj", "{D06B6426-4762-44CC-8BAD-D79052507F2F}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bdist_wininst", "bdist_wininst.vcproj", "{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_hashlib", "_hashlib.vcproj", "{447F05A8-F581-4CAC-A466-5AC7936E207E}"

-	ProjectSection(ProjectDependencies) = postProject

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9} = {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite3", "sqlite3.vcproj", "{A1A295E5-463C-437F-81CA-1F32367685DA}"

-	ProjectSection(ProjectDependencies) = postProject

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_multiprocessing", "_multiprocessing.vcproj", "{9E48B300-37D1-11DD-8C41-005056C00008}"

-	ProjectSection(ProjectDependencies) = postProject

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kill_python", "kill_python.vcproj", "{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}"

-EndProject

-Global

-	GlobalSection(SolutionConfigurationPlatforms) = preSolution

-		Debug|Win32 = Debug|Win32

-		Debug|x64 = Debug|x64

-		PGInstrument|Win32 = PGInstrument|Win32

-		PGInstrument|x64 = PGInstrument|x64

-		PGUpdate|Win32 = PGUpdate|Win32

-		PGUpdate|x64 = PGUpdate|x64

-		Release|Win32 = Release|Win32

-		Release|x64 = Release|x64

-	EndGlobalSection

-	GlobalSection(ProjectConfigurationPlatforms) = postSolution

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.ActiveCfg = Debug|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.Build.0 = Debug|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.ActiveCfg = Debug|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.Build.0 = Debug|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.ActiveCfg = Release|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.Build.0 = Release|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.ActiveCfg = Release|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.Build.0 = Release|x64

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|Win32.ActiveCfg = Debug|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|Win32.Build.0 = Debug|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|x64.ActiveCfg = Debug|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|x64.Build.0 = Debug|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|Win32.Build.0 = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|x64.ActiveCfg = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|x64.Build.0 = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|Win32.Build.0 = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|x64.ActiveCfg = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|x64.Build.0 = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|Win32.ActiveCfg = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|Win32.Build.0 = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|x64.ActiveCfg = Release|Win32

-		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|x64.Build.0 = Release|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.ActiveCfg = Debug|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.Build.0 = Debug|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.ActiveCfg = Debug|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.Build.0 = Debug|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.ActiveCfg = Release|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.Build.0 = Release|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.ActiveCfg = Release|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.Build.0 = Release|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.ActiveCfg = Debug|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.Build.0 = Debug|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.ActiveCfg = Debug|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.Build.0 = Debug|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.ActiveCfg = Release|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.Build.0 = Release|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.ActiveCfg = Release|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.Build.0 = Release|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.ActiveCfg = Debug|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.Build.0 = Debug|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.ActiveCfg = Debug|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.Build.0 = Debug|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.ActiveCfg = Release|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.Build.0 = Release|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.ActiveCfg = Release|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.Build.0 = Release|x64

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|Win32.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|x64.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|x64.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|Win32.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|x64.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|x64.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.Build.0 = Release|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|Win32.ActiveCfg = Debug|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|Win32.Build.0 = Debug|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|x64.ActiveCfg = Debug|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|x64.Build.0 = Debug|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|Win32.ActiveCfg = Release|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|Win32.Build.0 = Release|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.ActiveCfg = Release|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.Build.0 = Release|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.ActiveCfg = Debug|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.Build.0 = Debug|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.ActiveCfg = Debug|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.Build.0 = Debug|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.ActiveCfg = Release|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.Build.0 = Release|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.ActiveCfg = Release|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.Build.0 = Release|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.ActiveCfg = Debug|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.Build.0 = Debug|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.Debug|x64.ActiveCfg = Debug|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.Debug|x64.Build.0 = Debug|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.Release|Win32.ActiveCfg = Release|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.Release|Win32.Build.0 = Release|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.Release|x64.ActiveCfg = Release|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.Release|x64.Build.0 = Release|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|Win32.ActiveCfg = Debug|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|Win32.Build.0 = Debug|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|x64.ActiveCfg = Debug|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|x64.Build.0 = Debug|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|Win32.ActiveCfg = Release|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|Win32.Build.0 = Release|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|x64.ActiveCfg = Release|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|x64.Build.0 = Release|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|Win32.ActiveCfg = Debug|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|Win32.Build.0 = Debug|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|x64.ActiveCfg = Debug|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|x64.Build.0 = Debug|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|Win32.ActiveCfg = Release|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|Win32.Build.0 = Release|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|x64.ActiveCfg = Release|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|x64.Build.0 = Release|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|Win32.ActiveCfg = Debug|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|Win32.Build.0 = Debug|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|x64.ActiveCfg = Debug|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|x64.Build.0 = Debug|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|Win32.ActiveCfg = Release|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|Win32.Build.0 = Release|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|x64.ActiveCfg = Release|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|x64.Build.0 = Release|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|Win32.ActiveCfg = Debug|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|Win32.Build.0 = Debug|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|x64.ActiveCfg = Debug|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|x64.Build.0 = Debug|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|Win32.ActiveCfg = Release|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|Win32.Build.0 = Release|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|x64.ActiveCfg = Release|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|x64.Build.0 = Release|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|Win32.ActiveCfg = Debug|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|Win32.Build.0 = Debug|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|x64.ActiveCfg = Debug|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|x64.Build.0 = Debug|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|Win32.ActiveCfg = Release|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|Win32.Build.0 = Release|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|x64.ActiveCfg = Release|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|x64.Build.0 = Release|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|Win32.ActiveCfg = Debug|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|Win32.Build.0 = Debug|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|x64.ActiveCfg = Debug|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|x64.Build.0 = Debug|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|Win32.ActiveCfg = Release|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|Win32.Build.0 = Release|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|x64.ActiveCfg = Release|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|x64.Build.0 = Release|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|Win32.ActiveCfg = Debug|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|Win32.Build.0 = Debug|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|x64.ActiveCfg = Debug|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|x64.Build.0 = Debug|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|Win32.ActiveCfg = Release|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|Win32.Build.0 = Release|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|x64.ActiveCfg = Release|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|x64.Build.0 = Release|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|Win32.ActiveCfg = Debug|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|Win32.Build.0 = Debug|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|x64.ActiveCfg = Debug|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|x64.Build.0 = Debug|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|Win32.ActiveCfg = Release|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|Win32.Build.0 = Release|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|x64.ActiveCfg = Release|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|x64.Build.0 = Release|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|Win32.ActiveCfg = Debug|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|Win32.Build.0 = Debug|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|x64.ActiveCfg = Debug|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|x64.Build.0 = Debug|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|Win32.ActiveCfg = Release|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|Win32.Build.0 = Release|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|x64.ActiveCfg = Release|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|x64.Build.0 = Release|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|Win32.ActiveCfg = Debug|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|Win32.Build.0 = Debug|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|x64.ActiveCfg = Debug|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|x64.Build.0 = Debug|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|Win32.ActiveCfg = Release|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|Win32.Build.0 = Release|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|x64.ActiveCfg = Release|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|x64.Build.0 = Release|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|Win32.ActiveCfg = Debug|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|Win32.Build.0 = Debug|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|x64.ActiveCfg = Debug|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|x64.Build.0 = Debug|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|Win32.ActiveCfg = Release|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|Win32.Build.0 = Release|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|x64.ActiveCfg = Release|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|x64.Build.0 = Release|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|Win32.ActiveCfg = Debug|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|Win32.Build.0 = Debug|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|x64.ActiveCfg = Debug|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|x64.Build.0 = Debug|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|Win32.ActiveCfg = Release|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|Win32.Build.0 = Release|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|x64.ActiveCfg = Release|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|x64.Build.0 = Release|x64

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|Win32.ActiveCfg = Release|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|x64.ActiveCfg = Release|x64

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGInstrument|x64.ActiveCfg = Release|x64

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGUpdate|x64.ActiveCfg = Release|x64

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|Win32.ActiveCfg = Release|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|x64.ActiveCfg = Release|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|Win32.ActiveCfg = Debug|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|Win32.Build.0 = Debug|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|x64.ActiveCfg = Debug|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|x64.Build.0 = Debug|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.ActiveCfg = Release|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.Build.0 = Release|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.ActiveCfg = Release|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.Build.0 = Release|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.ActiveCfg = Debug|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.Build.0 = Debug|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.ActiveCfg = Debug|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.Build.0 = Debug|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|Win32.ActiveCfg = Release|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|Win32.Build.0 = Release|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|x64.ActiveCfg = Release|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|x64.Build.0 = Release|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|Win32.ActiveCfg = Debug|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|Win32.Build.0 = Debug|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|x64.ActiveCfg = Debug|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|x64.Build.0 = Debug|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|Win32.ActiveCfg = Release|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|Win32.Build.0 = Release|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|x64.ActiveCfg = Release|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|x64.Build.0 = Release|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|Win32.ActiveCfg = Debug|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|Win32.Build.0 = Debug|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|x64.ActiveCfg = Debug|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|x64.Build.0 = Debug|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|Win32.Build.0 = Release|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|x64.ActiveCfg = Release|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|x64.Build.0 = Release|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|Win32.Build.0 = Release|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|x64.ActiveCfg = Release|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|x64.Build.0 = Release|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|Win32.ActiveCfg = Release|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|Win32.Build.0 = Release|Win32

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|x64.ActiveCfg = Release|x64

-		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|x64.Build.0 = Release|x64

-	EndGlobalSection

-	GlobalSection(SolutionProperties) = preSolution

-		HideSolutionNode = FALSE

-	EndGlobalSection

-EndGlobal

+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python", "python.vcproj", "{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058} = {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_versioninfo", "make_versioninfo.vcproj", "{F0E0541E-F17D-430B-97C4-93ADF0DD284E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythoncore", "pythoncore.vcproj", "{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"
+	ProjectSection(ProjectDependencies) = postProject
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E} = {F0E0541E-F17D-430B-97C4-93ADF0DD284E}
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD} = {C73F0EC1-358B-4177-940F-0846AC8B04CD}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythonw", "pythonw.vcproj", "{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w9xpopen", "w9xpopen.vcproj", "{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}"
+	ProjectSection(ProjectDependencies) = postProject
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_buildinfo", "make_buildinfo.vcproj", "{C73F0EC1-358B-4177-940F-0846AC8B04CD}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{553EC33E-9816-4996-A660-5D6186A0B0B3}"
+	ProjectSection(SolutionItems) = preProject
+		..\Modules\getbuildinfo.c = ..\Modules\getbuildinfo.c
+		readme.txt = readme.txt
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winsound", "winsound.vcproj", "{28B5D777-DDF2-4B6B-B34F-31D938813856}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb", "_bsddb.vcproj", "{B4D38F3F-68FB-42EC-A45D-E00657BB3627}"
+	ProjectSection(ProjectDependencies) = postProject
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes", "_ctypes.vcproj", "{0E9791DB-593A-465F-98BC-681011311618}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes_test", "_ctypes_test.vcproj", "{9EC7190A-249F-4180-A900-548FDCF3055F}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_elementtree", "_elementtree.vcproj", "{17E1E049-C309-4D79-843F-AE483C264AEA}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_msi", "_msi.vcproj", "{31FFC478-7B4A-43E8-9954-8D03E2187E9C}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_socket", "_socket.vcproj", "{86937F53-C189-40EF-8CE8-8759D8E7D480}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_sqlite3", "_sqlite3.vcproj", "{13CECB97-4119-4316-9D42-8534019A5A44}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+		{A1A295E5-463C-437F-81CA-1F32367685DA} = {A1A295E5-463C-437F-81CA-1F32367685DA}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ssl", "_ssl.vcproj", "{C6E20F84-3247-4AD6-B051-B073268F73BA}"
+	ProjectSection(ProjectDependencies) = postProject
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9} = {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}
+		{86937F53-C189-40EF-8CE8-8759D8E7D480} = {86937F53-C189-40EF-8CE8-8759D8E7D480}
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testcapi", "_testcapi.vcproj", "{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_tkinter", "_tkinter.vcproj", "{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bz2", "bz2.vcproj", "{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "select", "select.vcproj", "{18CAE28C-B454-46C1-87A0-493D91D97F03}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unicodedata", "unicodedata.vcproj", "{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pyexpat", "pyexpat.vcproj", "{D06B6426-4762-44CC-8BAD-D79052507F2F}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bdist_wininst", "bdist_wininst.vcproj", "{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_hashlib", "_hashlib.vcproj", "{447F05A8-F581-4CAC-A466-5AC7936E207E}"
+	ProjectSection(ProjectDependencies) = postProject
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9} = {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite3", "sqlite3.vcproj", "{A1A295E5-463C-437F-81CA-1F32367685DA}"
+	ProjectSection(ProjectDependencies) = postProject
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_multiprocessing", "_multiprocessing.vcproj", "{9E48B300-37D1-11DD-8C41-005056C00008}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kill_python", "kill_python.vcproj", "{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		PGInstrument|Win32 = PGInstrument|Win32
+		PGInstrument|x64 = PGInstrument|x64
+		PGUpdate|Win32 = PGUpdate|Win32
+		PGUpdate|x64 = PGUpdate|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.Build.0 = Debug|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.ActiveCfg = Debug|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.Build.0 = Debug|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.ActiveCfg = Release|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.Build.0 = Release|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.ActiveCfg = Release|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.Build.0 = Release|x64
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|Win32.Build.0 = Debug|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|x64.ActiveCfg = Debug|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|x64.Build.0 = Debug|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|Win32.Build.0 = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|x64.ActiveCfg = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGInstrument|x64.Build.0 = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|Win32.Build.0 = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|x64.ActiveCfg = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGUpdate|x64.Build.0 = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|Win32.ActiveCfg = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|Win32.Build.0 = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|x64.ActiveCfg = Release|Win32
+		{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|x64.Build.0 = Release|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.ActiveCfg = Debug|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.Build.0 = Debug|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.ActiveCfg = Debug|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.Build.0 = Debug|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.ActiveCfg = Release|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.Build.0 = Release|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.ActiveCfg = Release|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.Build.0 = Release|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.ActiveCfg = Debug|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.Build.0 = Debug|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.ActiveCfg = Debug|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.Build.0 = Debug|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.ActiveCfg = Release|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.Build.0 = Release|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.ActiveCfg = Release|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.Build.0 = Release|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.ActiveCfg = Debug|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.Build.0 = Debug|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.ActiveCfg = Debug|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.Build.0 = Debug|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.ActiveCfg = Release|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.Build.0 = Release|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.ActiveCfg = Release|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.Build.0 = Release|x64
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|Win32.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|x64.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|x64.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|Win32.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|x64.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|x64.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.Build.0 = Release|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|Win32.ActiveCfg = Debug|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|Win32.Build.0 = Debug|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|x64.ActiveCfg = Debug|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|x64.Build.0 = Debug|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|Win32.ActiveCfg = Release|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|Win32.Build.0 = Release|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.ActiveCfg = Release|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.Build.0 = Release|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.Build.0 = Debug|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.ActiveCfg = Debug|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.Build.0 = Debug|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.ActiveCfg = Release|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.Build.0 = Release|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.ActiveCfg = Release|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.Build.0 = Release|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.ActiveCfg = Debug|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.Build.0 = Debug|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.Debug|x64.ActiveCfg = Debug|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.Debug|x64.Build.0 = Debug|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.Release|Win32.ActiveCfg = Release|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.Release|Win32.Build.0 = Release|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.Release|x64.ActiveCfg = Release|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.Release|x64.Build.0 = Release|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|Win32.Build.0 = Debug|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|x64.ActiveCfg = Debug|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|x64.Build.0 = Debug|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|Win32.ActiveCfg = Release|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|Win32.Build.0 = Release|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|x64.ActiveCfg = Release|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|x64.Build.0 = Release|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|Win32.Build.0 = Debug|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|x64.ActiveCfg = Debug|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|x64.Build.0 = Debug|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|Win32.ActiveCfg = Release|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|Win32.Build.0 = Release|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|x64.ActiveCfg = Release|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|x64.Build.0 = Release|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|Win32.ActiveCfg = Debug|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|Win32.Build.0 = Debug|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|x64.ActiveCfg = Debug|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|x64.Build.0 = Debug|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|Win32.ActiveCfg = Release|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|Win32.Build.0 = Release|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|x64.ActiveCfg = Release|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|x64.Build.0 = Release|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|Win32.ActiveCfg = Debug|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|Win32.Build.0 = Debug|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|x64.ActiveCfg = Debug|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|x64.Build.0 = Debug|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|Win32.ActiveCfg = Release|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|Win32.Build.0 = Release|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|x64.ActiveCfg = Release|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|x64.Build.0 = Release|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|Win32.ActiveCfg = Debug|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|Win32.Build.0 = Debug|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|x64.ActiveCfg = Debug|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|x64.Build.0 = Debug|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|Win32.ActiveCfg = Release|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|Win32.Build.0 = Release|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|x64.ActiveCfg = Release|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|x64.Build.0 = Release|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|Win32.Build.0 = Debug|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|x64.ActiveCfg = Debug|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|x64.Build.0 = Debug|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|Win32.ActiveCfg = Release|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|Win32.Build.0 = Release|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|x64.ActiveCfg = Release|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|x64.Build.0 = Release|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|Win32.Build.0 = Debug|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|x64.ActiveCfg = Debug|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|x64.Build.0 = Debug|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|Win32.ActiveCfg = Release|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|Win32.Build.0 = Release|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|x64.ActiveCfg = Release|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|x64.Build.0 = Release|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|Win32.ActiveCfg = Debug|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|Win32.Build.0 = Debug|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|x64.ActiveCfg = Debug|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|x64.Build.0 = Debug|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|Win32.ActiveCfg = Release|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|Win32.Build.0 = Release|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|x64.ActiveCfg = Release|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|x64.Build.0 = Release|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|Win32.ActiveCfg = Debug|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|Win32.Build.0 = Debug|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|x64.ActiveCfg = Debug|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|x64.Build.0 = Debug|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|Win32.ActiveCfg = Release|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|Win32.Build.0 = Release|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|x64.ActiveCfg = Release|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|x64.Build.0 = Release|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|Win32.ActiveCfg = Debug|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|Win32.Build.0 = Debug|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|x64.ActiveCfg = Debug|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|x64.Build.0 = Debug|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|Win32.ActiveCfg = Release|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|Win32.Build.0 = Release|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|x64.ActiveCfg = Release|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|x64.Build.0 = Release|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|Win32.ActiveCfg = Debug|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|Win32.Build.0 = Debug|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|x64.ActiveCfg = Debug|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|x64.Build.0 = Debug|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|Win32.ActiveCfg = Release|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|Win32.Build.0 = Release|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|x64.ActiveCfg = Release|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|x64.Build.0 = Release|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|Win32.Build.0 = Debug|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|x64.ActiveCfg = Debug|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|x64.Build.0 = Debug|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|Win32.ActiveCfg = Release|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|Win32.Build.0 = Release|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|x64.ActiveCfg = Release|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|x64.Build.0 = Release|x64
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|Win32.ActiveCfg = Release|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|x64.ActiveCfg = Release|x64
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGInstrument|x64.ActiveCfg = Release|x64
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGUpdate|x64.ActiveCfg = Release|x64
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|Win32.ActiveCfg = Release|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|x64.ActiveCfg = Release|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|Win32.Build.0 = Debug|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|x64.ActiveCfg = Debug|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|x64.Build.0 = Debug|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.ActiveCfg = Release|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.Build.0 = Release|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.ActiveCfg = Release|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.Build.0 = Release|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.Build.0 = Debug|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.ActiveCfg = Debug|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.Build.0 = Debug|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|Win32.ActiveCfg = Release|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|Win32.Build.0 = Release|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|x64.ActiveCfg = Release|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|x64.Build.0 = Release|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|Win32.ActiveCfg = Debug|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|Win32.Build.0 = Debug|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|x64.ActiveCfg = Debug|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|x64.Build.0 = Debug|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|Win32.ActiveCfg = Release|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|Win32.Build.0 = Release|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|x64.ActiveCfg = Release|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|x64.Build.0 = Release|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|Win32.Build.0 = Debug|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|x64.ActiveCfg = Debug|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|x64.Build.0 = Debug|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|Win32.Build.0 = Release|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|x64.ActiveCfg = Release|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|x64.Build.0 = Release|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|Win32.Build.0 = Release|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|x64.ActiveCfg = Release|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|x64.Build.0 = Release|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|Win32.ActiveCfg = Release|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|Win32.Build.0 = Release|Win32
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|x64.ActiveCfg = Release|x64
+		{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/PC/VS9.0/pginstrument.vsprops b/PC/VS9.0/pginstrument.vsprops
index 99c117b..af8813c 100644
--- a/PC/VS9.0/pginstrument.vsprops
+++ b/PC/VS9.0/pginstrument.vsprops
@@ -1,34 +1,34 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="pginstrument"

-	OutputDirectory="$(OutDirPGI)"

-	IntermediateDirectory="$(SolutionDir)$(PlatformName)-temp-pgi\$(ProjectName)\"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		Optimization="2"

-		InlineFunctionExpansion="1"

-		EnableIntrinsicFunctions="false"

-		FavorSizeOrSpeed="2"

-		OmitFramePointers="true"

-		EnableFiberSafeOptimizations="false"

-		WholeProgramOptimization="true"

-		StringPooling="true"

-		ExceptionHandling="0"

-		BufferSecurityCheck="false"

-	/>

-	<Tool

-		Name="VCLinkerTool"

-		OptimizeReferences="2"

-		EnableCOMDATFolding="1"

-		LinkTimeCodeGeneration="2"

-		ProfileGuidedDatabase="$(SolutionDir)$(PlatformName)-pgi\$(TargetName).pgd"

-		ImportLibrary="$(OutDirPGI)\$(TargetName).lib"

-	/>

-	<UserMacro

-		Name="OutDirPGI"

-		Value="$(SolutionDir)$(PlatformName)-pgi\"

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pginstrument"
+	OutputDirectory="$(OutDirPGI)"
+	IntermediateDirectory="$(SolutionDir)$(PlatformName)-temp-pgi\$(ProjectName)\"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		Optimization="2"
+		InlineFunctionExpansion="1"
+		EnableIntrinsicFunctions="false"
+		FavorSizeOrSpeed="2"
+		OmitFramePointers="true"
+		EnableFiberSafeOptimizations="false"
+		WholeProgramOptimization="true"
+		StringPooling="true"
+		ExceptionHandling="0"
+		BufferSecurityCheck="false"
+	/>
+	<Tool
+		Name="VCLinkerTool"
+		OptimizeReferences="2"
+		EnableCOMDATFolding="1"
+		LinkTimeCodeGeneration="2"
+		ProfileGuidedDatabase="$(SolutionDir)$(PlatformName)-pgi\$(TargetName).pgd"
+		ImportLibrary="$(OutDirPGI)\$(TargetName).lib"
+	/>
+	<UserMacro
+		Name="OutDirPGI"
+		Value="$(SolutionDir)$(PlatformName)-pgi\"
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/VS9.0/pgupdate.vsprops b/PC/VS9.0/pgupdate.vsprops
index 26cfc2d..7ce4a3a 100644
--- a/PC/VS9.0/pgupdate.vsprops
+++ b/PC/VS9.0/pgupdate.vsprops
@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="pgupdate"

-	OutputDirectory="$(SolutionDir)$(PlatformName)-pgo\"

-	InheritedPropertySheets="$(SolutionDir)\pginstrument.vsprops"

-	>

-	<Tool

-		Name="VCLinkerTool"

-		AdditionalManifestDependencies=""

-		LinkTimeCodeGeneration="4"

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pgupdate"
+	OutputDirectory="$(SolutionDir)$(PlatformName)-pgo\"
+	InheritedPropertySheets="$(SolutionDir)\pginstrument.vsprops"
+	>
+	<Tool
+		Name="VCLinkerTool"
+		AdditionalManifestDependencies=""
+		LinkTimeCodeGeneration="4"
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/VS9.0/pyd.vsprops b/PC/VS9.0/pyd.vsprops
index 34c21e1..ce039eb 100644
--- a/PC/VS9.0/pyd.vsprops
+++ b/PC/VS9.0/pyd.vsprops
@@ -1,28 +1,28 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="pyd"

-	InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		PreprocessorDefinitions="Py_BUILD_CORE_MODULE"

-		RuntimeLibrary="2"

-	/>

-	<Tool

-		Name="VCLinkerTool"

-		OutputFile="$(OutDir)\$(ProjectName).pyd"

-		ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"

-		ImportLibrary="$(OutDir)\$(TargetName).lib"

-		GenerateManifest="false"

-	/>

-	<Tool

-		Name="VCManifestTool"

-		EmbedManifest="false"

-	/>

-	<Tool

-		Name="VCPostBuildEventTool"

-		CommandLine=""

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pyd"
+	InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		PreprocessorDefinitions="Py_BUILD_CORE_MODULE"
+		RuntimeLibrary="2"
+	/>
+	<Tool
+		Name="VCLinkerTool"
+		OutputFile="$(OutDir)\$(ProjectName).pyd"
+		ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
+		ImportLibrary="$(OutDir)\$(TargetName).lib"
+		GenerateManifest="false"
+	/>
+	<Tool
+		Name="VCManifestTool"
+		EmbedManifest="false"
+	/>
+	<Tool
+		Name="VCPostBuildEventTool"
+		CommandLine=""
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/VS9.0/pyd_d.vsprops b/PC/VS9.0/pyd_d.vsprops
index 313a30b..8508156 100644
--- a/PC/VS9.0/pyd_d.vsprops
+++ b/PC/VS9.0/pyd_d.vsprops
@@ -1,36 +1,36 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="pyd_d"

-	InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		Optimization="0"

-		InlineFunctionExpansion="0"

-		EnableIntrinsicFunctions="false"

-		PreprocessorDefinitions="Py_BUILD_CORE_MODULE"

-		RuntimeLibrary="3"

-	/>

-	<Tool

-		Name="VCLinkerTool"

-		OutputFile="$(OutDir)\$(ProjectName)_d.pyd"

-		LinkIncremental="1"

-		ProgramDatabaseFile="$(OutDir)\$(ProjectName)_d.pdb"

-		ImportLibrary="$(OutDir)\$(TargetName).lib"

-		GenerateManifest="false"

-	/>

-	<Tool

-		Name="VCManifestTool"

-		EmbedManifest="false"

-	/>

-	<Tool

-		Name="VCPostBuildEventTool"

-		CommandLine=""

-	/>

-	<UserMacro

-		Name="PythonExe"

-		Value="$(SolutionDir)python_d.exe"

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pyd_d"
+	InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		Optimization="0"
+		InlineFunctionExpansion="0"
+		EnableIntrinsicFunctions="false"
+		PreprocessorDefinitions="Py_BUILD_CORE_MODULE"
+		RuntimeLibrary="3"
+	/>
+	<Tool
+		Name="VCLinkerTool"
+		OutputFile="$(OutDir)\$(ProjectName)_d.pyd"
+		LinkIncremental="1"
+		ProgramDatabaseFile="$(OutDir)\$(ProjectName)_d.pdb"
+		ImportLibrary="$(OutDir)\$(TargetName).lib"
+		GenerateManifest="false"
+	/>
+	<Tool
+		Name="VCManifestTool"
+		EmbedManifest="false"
+	/>
+	<Tool
+		Name="VCPostBuildEventTool"
+		CommandLine=""
+	/>
+	<UserMacro
+		Name="PythonExe"
+		Value="$(SolutionDir)python_d.exe"
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/VS9.0/pyexpat.vcproj b/PC/VS9.0/pyexpat.vcproj
index c616967..7a2474e 100644
--- a/PC/VS9.0/pyexpat.vcproj
+++ b/PC/VS9.0/pyexpat.vcproj
@@ -1,553 +1,557 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="pyexpat"

-	ProjectGUID="{D06B6426-4762-44CC-8BAD-D79052507F2F}"

-	RootNamespace="pyexpat"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=".\..\..\Modules\expat"

-				PreprocessorDefinitions="PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\expat\xmlrole.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmltok.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\pyexpat.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmlparse.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmlrole.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\expat\xmltok.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="pyexpat"
+	ProjectGUID="{D06B6426-4762-44CC-8BAD-D79052507F2F}"
+	RootNamespace="pyexpat"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS;PYEXPAT_EXPORTS;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="PYEXPAT_EXPORTS;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="PYEXPAT_EXPORTS;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="PYEXPAT_EXPORTS;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="PYEXPAT_EXPORTS;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="PYEXPAT_EXPORTS;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="PYEXPAT_EXPORTS;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\..\..\Modules\expat"
+				PreprocessorDefinitions="PYEXPAT_EXPORTS;XML_STATIC"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\expat\xmlrole.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmltok.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\pyexpat.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\loadlibrary.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmlparse.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmlrole.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\expat\xmltok.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/pyproject.vsprops b/PC/VS9.0/pyproject.vsprops
index 8b06f0c..ef28af8 100644
--- a/PC/VS9.0/pyproject.vsprops
+++ b/PC/VS9.0/pyproject.vsprops
@@ -1,111 +1,111 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="pyproject"

-	OutputDirectory="$(SolutionDir)"

-	IntermediateDirectory="$(SolutionDir)$(PlatformName)-temp-$(ConfigurationName)\$(ProjectName)\"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		Optimization="2"

-		InlineFunctionExpansion="1"

-		EnableIntrinsicFunctions="true"

-		AdditionalIncludeDirectories="..\..\Include; ..\..\PC"

-		PreprocessorDefinitions="_WIN32"

-		StringPooling="true"

-		ExceptionHandling="0"

-		RuntimeLibrary="0"

-		EnableFunctionLevelLinking="true"

-		WarningLevel="3"

-		DebugInformationFormat="3"

-		CompileAs="0"

-	/>

-	<Tool

-		Name="VCLinkerTool"

-		LinkIncremental="1"

-		AdditionalLibraryDirectories="$(OutDir)"

-		GenerateDebugInformation="true"

-		ProgramDatabaseFile="$(OutDir)$(TargetName).pdb"

-		SubSystem="2"

-		RandomizedBaseAddress="1"

-		DataExecutionPrevention="0"

-		TargetMachine="1"

-	/>

-	<Tool

-		Name="VCResourceCompilerTool"

-		AdditionalIncludeDirectories="..\..\PC;..\..\Include"

-	/>

-	<UserMacro

-		Name="PyDllName"

-		Value="python27"

-	/>

-	<UserMacro

-		Name="PythonExe"

-		Value="$(SolutionDir)\python.exe"

-	/>

-	<UserMacro

-		Name="externalsDir"

-		Value="..\..\externals"

-	/>

-	<UserMacro

-		Name="bsddb47Dir"

-		Value="$(externalsDir)\db-4.7.25.0\build_windows"

-	/>

-	<UserMacro

-		Name="bsddb47DepLibs"

-		Value="ws2_32.lib"

-	/>

-	<UserMacro

-		Name="bsddbDir"

-		Value="$(bsddb47Dir)"

-	/>

-	<UserMacro

-		Name="bsddbDepLibs"

-		Value="$(bsddb47DepLibs)"

-	/>

-	<UserMacro

-		Name="bsddb44Dir"

-		Value="$(externalsDir)\db-4.4.20\build_win32"

-	/>

-	<UserMacro

-		Name="bsddb44DepLibs"

-		Value=""

-	/>

-	<UserMacro

-		Name="sqlite3Dir"

-		Value="$(externalsDir)\sqlite-3.8.11.0"

-	/>

-	<UserMacro

-		Name="bz2Dir"

-		Value="$(externalsDir)\bzip2-1.0.6"

-	/>

-	<UserMacro

-		Name="opensslDir"

-		Value="$(externalsDir)\openssl-1.0.2j"

-	/>

-	<UserMacro

-		Name="tcltkDir"

-		Value="$(externalsDir)\tcltk"

-	/>

-	<UserMacro

-		Name="tcltk64Dir"

-		Value="$(externalsDir)\tcltk64"

-	/>

-	<UserMacro

-		Name="tcltkLib"

-		Value="$(tcltkDir)\lib\tcl85.lib $(tcltkDir)\lib\tk85.lib"

-	/>

-	<UserMacro

-		Name="tcltkLibDebug"

-		Value="$(tcltkDir)\lib\tcl85g.lib $(tcltkDir)\lib\tk85g.lib"

-	/>

-	<UserMacro

-		Name="tcltk64Lib"

-		Value="$(tcltk64Dir)\lib\tcl85.lib $(tcltk64Dir)\lib\tk85.lib"

-	/>

-	<UserMacro

-		Name="tcltk64LibDebug"

-		Value="$(tcltk64Dir)\lib\tcl85g.lib $(tcltk64Dir)\lib\tk85g.lib"

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pyproject"
+	OutputDirectory="$(SolutionDir)"
+	IntermediateDirectory="$(SolutionDir)$(PlatformName)-temp-$(ConfigurationName)\$(ProjectName)\"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		Optimization="2"
+		InlineFunctionExpansion="1"
+		EnableIntrinsicFunctions="true"
+		AdditionalIncludeDirectories="..\..\Include; ..\..\PC"
+		PreprocessorDefinitions="_WIN32;WIN32"
+		StringPooling="true"
+		ExceptionHandling="0"
+		RuntimeLibrary="0"
+		EnableFunctionLevelLinking="true"
+		WarningLevel="3"
+		DebugInformationFormat="3"
+		CompileAs="0"
+	/>
+	<Tool
+		Name="VCLinkerTool"
+		LinkIncremental="1"
+		AdditionalLibraryDirectories="$(OutDir)"
+		GenerateDebugInformation="true"
+		ProgramDatabaseFile="$(OutDir)$(TargetName).pdb"
+		SubSystem="2"
+		RandomizedBaseAddress="1"
+		DataExecutionPrevention="0"
+		TargetMachine="1"
+	/>
+	<Tool
+		Name="VCResourceCompilerTool"
+		AdditionalIncludeDirectories="..\..\PC;..\..\Include"
+	/>
+	<UserMacro
+		Name="PyDllName"
+		Value="python27"
+	/>
+	<UserMacro
+		Name="PythonExe"
+		Value="$(SolutionDir)\python.exe"
+	/>
+	<UserMacro
+		Name="externalsDir"
+		Value="..\..\externals"
+	/>
+	<UserMacro
+		Name="bsddb47Dir"
+		Value="$(externalsDir)\bsddb-4.7.25.0\build_windows"
+	/>
+	<UserMacro
+		Name="bsddb47DepLibs"
+		Value="ws2_32.lib"
+	/>
+	<UserMacro
+		Name="bsddbDir"
+		Value="$(bsddb47Dir)"
+	/>
+	<UserMacro
+		Name="bsddbDepLibs"
+		Value="$(bsddb47DepLibs)"
+	/>
+	<UserMacro
+		Name="bsddb44Dir"
+		Value="$(externalsDir)\db-4.4.20\build_win32"
+	/>
+	<UserMacro
+		Name="bsddb44DepLibs"
+		Value=""
+	/>
+	<UserMacro
+		Name="sqlite3Dir"
+		Value="$(externalsDir)\sqlite-3.14.2.0"
+	/>
+	<UserMacro
+		Name="bz2Dir"
+		Value="$(externalsDir)\bzip2-1.0.6"
+	/>
+	<UserMacro
+		Name="opensslDir"
+		Value="$(externalsDir)\openssl-1.0.2o"
+	/>
+	<UserMacro
+		Name="tcltkDir"
+		Value="$(externalsDir)\tcltk"
+	/>
+	<UserMacro
+		Name="tcltk64Dir"
+		Value="$(externalsDir)\tcltk64"
+	/>
+	<UserMacro
+		Name="tcltkLib"
+		Value="$(tcltkDir)\lib\tcl85.lib $(tcltkDir)\lib\tk85.lib"
+	/>
+	<UserMacro
+		Name="tcltkLibDebug"
+		Value="$(tcltkDir)\lib\tcl85g.lib $(tcltkDir)\lib\tk85g.lib"
+	/>
+	<UserMacro
+		Name="tcltk64Lib"
+		Value="$(tcltk64Dir)\lib\tcl85.lib $(tcltk64Dir)\lib\tk85.lib"
+	/>
+	<UserMacro
+		Name="tcltk64LibDebug"
+		Value="$(tcltk64Dir)\lib\tcl85g.lib $(tcltk64Dir)\lib\tk85g.lib"
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/VS9.0/python.vcproj b/PC/VS9.0/python.vcproj
index 65b5838..d3baa11 100644
--- a/PC/VS9.0/python.vcproj
+++ b/PC/VS9.0/python.vcproj
@@ -1,637 +1,637 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="python"

-	ProjectGUID="{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"

-	TargetFrameworkVersion="131072"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python.exe"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python.exe"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				EnableIntrinsicFunctions="false"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				RuntimeLibrary="3"

-				BrowseInformation="1"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python_d.exe"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				EnableIntrinsicFunctions="false"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				RuntimeLibrary="3"

-				BrowseInformation="1"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-				AdditionalIncludeDirectories="..\..\Include"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python_d.exe"

-				SubSystem="1"

-				StackReserveSize="2100000"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pginstrument.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python.exe"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pginstrument.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python.exe"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pgupdate.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python.exe"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pgupdate.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_CONSOLE"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\python.exe"

-				SubSystem="1"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Resource Files"

-			>

-			<File

-				RelativePath="..\..\PC\pycon.ico"

-				>

-			</File>

-			<File

-				RelativePath="..\..\PC\python_exe.rc"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\python.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="python"
+	ProjectGUID="{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python.exe"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python.exe"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				EnableIntrinsicFunctions="false"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				RuntimeLibrary="3"
+				BrowseInformation="1"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python_d.exe"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				EnableIntrinsicFunctions="false"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				RuntimeLibrary="3"
+				BrowseInformation="1"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+				AdditionalIncludeDirectories="..\..\Include"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python_d.exe"
+				SubSystem="1"
+				StackReserveSize="2100000"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pginstrument.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python.exe"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pginstrument.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python.exe"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pgupdate.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python.exe"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pgupdate.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\python.exe"
+				SubSystem="1"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Resource Files"
+			>
+			<File
+				RelativePath="..\..\PC\pycon.ico"
+				>
+			</File>
+			<File
+				RelativePath="..\..\PC\python_exe.rc"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\python.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/pythoncore.vcproj b/PC/VS9.0/pythoncore.vcproj
index e6f02db..79dcf96 100644
--- a/PC/VS9.0/pythoncore.vcproj
+++ b/PC/VS9.0/pythoncore.vcproj
Binary files differ
diff --git a/PC/VS9.0/pythonw.vcproj b/PC/VS9.0/pythonw.vcproj
index f7cc832..d3597f4 100644
--- a/PC/VS9.0/pythonw.vcproj
+++ b/PC/VS9.0/pythonw.vcproj
@@ -1,618 +1,618 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="pythonw"

-	ProjectGUID="{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"

-	TargetFrameworkVersion="131072"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				EnableIntrinsicFunctions="false"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				RuntimeLibrary="3"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw_d.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				TargetMachine="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				EnableIntrinsicFunctions="false"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				RuntimeLibrary="3"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw_d.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				TargetMachine="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pginstrument.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-				TargetMachine="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pginstrument.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pgupdate.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-				TargetMachine="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pgupdate.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-				PreprocessorDefinitions="_WINDOWS"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\pythonw.exe"

-				StackReserveSize="2000000"

-				BaseAddress="0x1d000000"

-				ImportLibrary=""

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Resource Files"

-			>

-			<File

-				RelativePath="..\..\PC\python_exe.rc"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\PC\WinMain.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="pythonw"
+	ProjectGUID="{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				EnableIntrinsicFunctions="false"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				RuntimeLibrary="3"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw_d.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				EnableIntrinsicFunctions="false"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				RuntimeLibrary="3"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw_d.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pginstrument.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pginstrument.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pgupdate.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pgupdate.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="_WINDOWS"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\pythonw.exe"
+				StackReserveSize="2000000"
+				BaseAddress="0x1d000000"
+				ImportLibrary=""
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Resource Files"
+			>
+			<File
+				RelativePath="..\..\PC\python_exe.rc"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\PC\WinMain.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/readme.txt b/PC/VS9.0/readme.txt
index 10bfd99..a4024d5 100644
--- a/PC/VS9.0/readme.txt
+++ b/PC/VS9.0/readme.txt
@@ -132,7 +132,7 @@
 

     Get the source code through

 

-    svn export http://svn.python.org/projects/external/openssl-1.0.2j

+    svn export http://svn.python.org/projects/external/openssl-1.0.2o

 

     ** NOTE: if you use the PCbuild\get_externals.bat approach for

     obtaining external sources then you don't need to manually get the source

diff --git a/PC/VS9.0/release.vsprops b/PC/VS9.0/release.vsprops
index 08def90..6d6842d 100644
--- a/PC/VS9.0/release.vsprops
+++ b/PC/VS9.0/release.vsprops
@@ -1,15 +1,15 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="release"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		PreprocessorDefinitions="NDEBUG"

-	/>

-	<UserMacro

-		Name="KillPythonExe"

-		Value="$(OutDir)\kill_python.exe"

-	/>	

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="release"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		PreprocessorDefinitions="NDEBUG"
+	/>
+	<UserMacro
+		Name="KillPythonExe"
+		Value="$(OutDir)\kill_python.exe"
+	/>	
+</VisualStudioPropertySheet>
diff --git a/PC/VS9.0/rt.bat b/PC/VS9.0/rt.bat
index a63a47b..85e3d63 100644
--- a/PC/VS9.0/rt.bat
+++ b/PC/VS9.0/rt.bat
@@ -1,60 +1,60 @@
-@echo off

-rem Run Tests.  Run the regression test suite.

-rem Usage:  rt [-d] [-O] [-q] [-x64] regrtest_args

-rem -d   Run Debug build (python_d.exe).  Else release build.

-rem -O   Run python.exe or python_d.exe (see -d) with -O.

-rem -q   "quick" -- normally the tests are run twice, the first time

-rem      after deleting all the .py[co] files reachable from Lib/.

-rem      -q runs the tests just once, and without deleting .py[co] files.

-rem -x64 Run the 64-bit build of python (or python_d if -d was specified)

-rem      from the 'amd64' dir instead of the 32-bit build in this dir.

-rem All leading instances of these switches are shifted off, and

-rem whatever remains (up to 9 arguments) is passed to regrtest.py.

-rem For example,

-rem     rt -O -d -x test_thread

-rem runs

-rem     python_d -O ../lib/test/regrtest.py -x test_thread

-rem twice, and

-rem     rt -q -g test_binascii

-rem runs

-rem     python_d ../lib/test/regrtest.py -g test_binascii

-rem to generate the expected-output file for binascii quickly.

-rem

-rem Confusing:  if you want to pass a comma-separated list, like

-rem     -u network,largefile

-rem then you have to quote it on the rt line, like

-rem     rt -u "network,largefile"

-

-setlocal

-

-set pcbuild=%~dp0

-set prefix=%pcbuild%

-set suffix=

-set qmode=

-set dashO=

-set tcltk=tcltk

-

-:CheckOpts

-if "%1"=="-O" (set dashO=-O)     & shift & goto CheckOpts

-if "%1"=="-q" (set qmode=yes)    & shift & goto CheckOpts

-if "%1"=="-d" (set suffix=_d)    & shift & goto CheckOpts

-if "%1"=="-x64" (set prefix=%prefix%amd64) & (set tcltk=tcltk64) & shift & goto CheckOpts

-

-PATH %PATH%;%pcbuild%..\..\externals\%tcltk%\bin

-set exe="%prefix%\python%suffix%"

-set cmd=%exe% %dashO% -Wd -3 -E -tt "%pcbuild%\..\..\Lib\test\regrtest.py" %1 %2 %3 %4 %5 %6 %7 %8 %9

-if defined qmode goto Qmode

-

-echo Deleting .pyc/.pyo files ...

-%exe% "%pcbuild%\rmpyc.py"

-

-echo on

-%cmd%

-@echo off

-

-echo About to run again without deleting .pyc/.pyo first:

-pause

-

-:Qmode

-echo on

-%cmd%

+@echo off
+rem Run Tests.  Run the regression test suite.
+rem Usage:  rt [-d] [-O] [-q] [-x64] regrtest_args
+rem -d   Run Debug build (python_d.exe).  Else release build.
+rem -O   Run python.exe or python_d.exe (see -d) with -O.
+rem -q   "quick" -- normally the tests are run twice, the first time
+rem      after deleting all the .py[co] files reachable from Lib/.
+rem      -q runs the tests just once, and without deleting .py[co] files.
+rem -x64 Run the 64-bit build of python (or python_d if -d was specified)
+rem      from the 'amd64' dir instead of the 32-bit build in this dir.
+rem All leading instances of these switches are shifted off, and
+rem whatever remains (up to 9 arguments) is passed to regrtest.py.
+rem For example,
+rem     rt -O -d -x test_thread
+rem runs
+rem     python_d -O ../lib/test/regrtest.py -x test_thread
+rem twice, and
+rem     rt -q -g test_binascii
+rem runs
+rem     python_d ../lib/test/regrtest.py -g test_binascii
+rem to generate the expected-output file for binascii quickly.
+rem
+rem Confusing:  if you want to pass a comma-separated list, like
+rem     -u network,largefile
+rem then you have to quote it on the rt line, like
+rem     rt -u "network,largefile"
+
+setlocal
+
+set pcbuild=%~dp0
+set prefix=%pcbuild%
+set suffix=
+set qmode=
+set dashO=
+set tcltk=tcltk
+
+:CheckOpts
+if "%1"=="-O" (set dashO=-O)     & shift & goto CheckOpts
+if "%1"=="-q" (set qmode=yes)    & shift & goto CheckOpts
+if "%1"=="-d" (set suffix=_d)    & shift & goto CheckOpts
+if "%1"=="-x64" (set prefix=%prefix%amd64) & (set tcltk=tcltk64) & shift & goto CheckOpts
+
+PATH %PATH%;%pcbuild%..\..\externals\%tcltk%\bin
+set exe="%prefix%\python%suffix%"
+set cmd=%exe% %dashO% -Wd -3 -E -tt "%pcbuild%\..\..\Lib\test\regrtest.py" %1 %2 %3 %4 %5 %6 %7 %8 %9
+if defined qmode goto Qmode
+
+echo Deleting .pyc/.pyo files ...
+%exe% "%pcbuild%\rmpyc.py"
+
+echo on
+%cmd%
+@echo off
+
+echo About to run again without deleting .pyc/.pyo first:
+pause
+
+:Qmode
+echo on
+%cmd%
diff --git a/PC/VS9.0/select.vcproj b/PC/VS9.0/select.vcproj
index f7077c9..a28c744 100644
--- a/PC/VS9.0/select.vcproj
+++ b/PC/VS9.0/select.vcproj
@@ -1,537 +1,537 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="select"

-	ProjectGUID="{18CAE28C-B454-46C1-87A0-493D91D97F03}"

-	RootNamespace="select"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="ws2_32.lib"

-				IgnoreDefaultLibraryNames="libc"

-				BaseAddress="0x1D110000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\selectmodule.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="select"
+	ProjectGUID="{18CAE28C-B454-46C1-87A0-493D91D97F03}"
+	RootNamespace="select"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib"
+				IgnoreDefaultLibraryNames="libc"
+				BaseAddress="0x1D110000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\selectmodule.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/sqlite3.vcproj b/PC/VS9.0/sqlite3.vcproj
index e1771f4..70badf5 100644
--- a/PC/VS9.0/sqlite3.vcproj
+++ b/PC/VS9.0/sqlite3.vcproj
@@ -1,537 +1,537 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="sqlite3"

-	ProjectGUID="{A1A295E5-463C-437F-81CA-1F32367685DA}"

-	RootNamespace="sqlite3"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops;.\debug.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName)_d.dll"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops;.\debug.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName)_d.dll"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName).dll"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName).dll"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="&quot;$(sqlite3Dir)&quot;"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName).dll"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\$(ProjectName).dll"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\sqlite3.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories=""

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="$(sqlite3Dir)\sqlite3.h"

-				>

-			</File>

-			<File

-				RelativePath="$(sqlite3Dir)\sqlite3ext.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="$(sqlite3Dir)\sqlite3.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="sqlite3"
+	ProjectGUID="{A1A295E5-463C-437F-81CA-1F32367685DA}"
+	RootNamespace="sqlite3"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops;.\debug.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)_d.dll"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops;.\debug.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)_d.dll"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName).dll"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName).dll"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="&quot;$(sqlite3Dir)&quot;"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName).dll"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName).dll"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\sqlite3.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="$(sqlite3Dir)\sqlite3.h"
+				>
+			</File>
+			<File
+				RelativePath="$(sqlite3Dir)\sqlite3ext.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="$(sqlite3Dir)\sqlite3.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/sqlite3.vsprops b/PC/VS9.0/sqlite3.vsprops
index b502df5..420ba6c 100644
--- a/PC/VS9.0/sqlite3.vsprops
+++ b/PC/VS9.0/sqlite3.vsprops
@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="sqlite3"

-	InheritedPropertySheets=".\pyproject.vsprops"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		AdditionalIncludeDirectories="$(sqlite3Dir)"

-		PreprocessorDefinitions="SQLITE_API=__declspec(dllexport)"

-		WarningLevel="1"

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="sqlite3"
+	InheritedPropertySheets=".\pyproject.vsprops"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		AdditionalIncludeDirectories="$(sqlite3Dir)"
+		PreprocessorDefinitions="SQLITE_API=__declspec(dllexport)"
+		WarningLevel="1"
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/VS9.0/unicodedata.vcproj b/PC/VS9.0/unicodedata.vcproj
index 515b1c7..db03de2 100644
--- a/PC/VS9.0/unicodedata.vcproj
+++ b/PC/VS9.0/unicodedata.vcproj
@@ -1,533 +1,533 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="unicodedata"

-	ProjectGUID="{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}"

-	RootNamespace="unicodedata"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				BaseAddress="0x1D120000"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Header Files"

-			>

-			<File

-				RelativePath="..\..\Modules\unicodedata_db.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\Modules\unicodename_db.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\Modules\unicodedata.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="unicodedata"
+	ProjectGUID="{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}"
+	RootNamespace="unicodedata"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				BaseAddress="0x1D120000"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="..\..\Modules\unicodedata_db.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\Modules\unicodename_db.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\Modules\unicodedata.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/w9xpopen.vcproj b/PC/VS9.0/w9xpopen.vcproj
index 9c0e758..d2d3ad9 100644
--- a/PC/VS9.0/w9xpopen.vcproj
+++ b/PC/VS9.0/w9xpopen.vcproj
@@ -1,576 +1,576 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="w9xpopen"

-	ProjectGUID="{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}"

-	RootNamespace="w9xpopen"

-	TargetFrameworkVersion="131072"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="1"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="1"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				GenerateDebugInformation="false"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				GenerateDebugInformation="false"

-				SubSystem="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pginstrument.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				GenerateDebugInformation="false"

-				SubSystem="1"

-				ImportLibrary=""

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pginstrument.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				GenerateDebugInformation="false"

-				SubSystem="1"

-				ImportLibrary=""

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pgupdate.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				GenerateDebugInformation="false"

-				SubSystem="1"

-				ImportLibrary=""

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="1"

-			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pgupdate.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				GenerateDebugInformation="false"

-				SubSystem="1"

-				ImportLibrary=""

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			>

-			<File

-				RelativePath="..\..\PC\w9xpopen.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="w9xpopen"
+	ProjectGUID="{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}"
+	RootNamespace="w9xpopen"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\debug.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				GenerateDebugInformation="false"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				GenerateDebugInformation="false"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pginstrument.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				GenerateDebugInformation="false"
+				SubSystem="1"
+				ImportLibrary=""
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pginstrument.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				GenerateDebugInformation="false"
+				SubSystem="1"
+				ImportLibrary=""
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pgupdate.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				GenerateDebugInformation="false"
+				SubSystem="1"
+				ImportLibrary=""
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="1"
+			InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pgupdate.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				GenerateDebugInformation="false"
+				SubSystem="1"
+				ImportLibrary=""
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\PC\w9xpopen.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/winsound.vcproj b/PC/VS9.0/winsound.vcproj
index 6564b1e..b6e61f5 100644
--- a/PC/VS9.0/winsound.vcproj
+++ b/PC/VS9.0/winsound.vcproj
@@ -1,523 +1,523 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="winsound"

-	ProjectGUID="{28B5D777-DDF2-4B6B-B34F-31D938813856}"

-	RootNamespace="winsound"

-	Keyword="Win32Proj"

-	TargetFrameworkVersion="196613"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-		<Platform

-			Name="x64"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Debug|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGInstrument|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|Win32"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="PGUpdate|x64"

-			ConfigurationType="2"

-			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"

-			CharacterSet="0"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="3"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="winmm.lib"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"

-			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"

-			>

-			<File

-				RelativePath="..\..\PC\winsound.c"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="winsound"
+	ProjectGUID="{28B5D777-DDF2-4B6B-B34F-31D938813856}"
+	RootNamespace="winsound"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd_d.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGInstrument|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="PGUpdate|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\PC\winsound.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/VS9.0/x64.vsprops b/PC/VS9.0/x64.vsprops
index 9f88d44..0720084 100644
--- a/PC/VS9.0/x64.vsprops
+++ b/PC/VS9.0/x64.vsprops
@@ -1,22 +1,22 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioPropertySheet

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="amd64"

-	OutputDirectory="$(SolutionDir)\amd64\"

-	IntermediateDirectory="$(SolutionDir)$(PlatformName)-temp-$(ConfigurationName)\$(ProjectName)\"

-	>

-	<Tool

-		Name="VCCLCompilerTool"

-		AdditionalOptions="/USECL:MS_OPTERON /GS-"

-		PreprocessorDefinitions="_WIN64;_M_X64"

-	/>

-	<Tool

-		Name="VCLinkerTool"

-		TargetMachine="17"

-	/>

-	<UserMacro

-		Name="PythonExe"

-		Value="$(HOST_PYTHON)"

-	/>

-</VisualStudioPropertySheet>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="amd64"
+	OutputDirectory="$(SolutionDir)\amd64\"
+	IntermediateDirectory="$(SolutionDir)$(PlatformName)-temp-$(ConfigurationName)\$(ProjectName)\"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		AdditionalOptions="/USECL:MS_OPTERON /GS-"
+		PreprocessorDefinitions="_WIN64;_M_X64"
+	/>
+	<Tool
+		Name="VCLinkerTool"
+		TargetMachine="17"
+	/>
+	<UserMacro
+		Name="PythonExe"
+		Value="$(HOST_PYTHON)"
+	/>
+</VisualStudioPropertySheet>
diff --git a/PC/_msi.c b/PC/_msi.c
index d56b5d1..68c4e79 100644
--- a/PC/_msi.c
+++ b/PC/_msi.c
@@ -271,6 +271,7 @@
 {
     MsiCloseHandle(msidb->h);
     msidb->h = 0;
+    PyObject_Del(msidb);
 }
 
 static PyObject*
@@ -320,6 +321,10 @@
     code = MsiRecordGetInteger(err, 1); /* XXX code */
     if (MsiFormatRecord(0, err, res, &size) == ERROR_MORE_DATA) {
         res = malloc(size+1);
+        if (res == NULL) {
+            MsiCloseHandle(err);
+            return PyErr_NoMemory();
+        }
         MsiFormatRecord(0, err, res, &size);
         res[size]='\0';
     }
@@ -543,6 +548,9 @@
         &fval, sval, &ssize);
     if (status == ERROR_MORE_DATA) {
         sval = malloc(ssize);
+        if (sval == NULL) {
+            return PyErr_NoMemory();
+        }
         status = MsiSummaryInfoGetProperty(si->h, field, &type, &ival,
             &fval, sval, &ssize);
     }
diff --git a/PC/_subprocess.c b/PC/_subprocess.c
index ffe8f41..66940ff 100644
--- a/PC/_subprocess.c
+++ b/PC/_subprocess.c
@@ -341,9 +341,13 @@
     envsize = PyMapping_Length(environment);
 
     keys = PyMapping_Keys(environment);
+    if (!keys) {
+        return NULL;
+    }
     values = PyMapping_Values(environment);
-    if (!keys || !values)
+    if (!values) {
         goto error;
+    }
 
     out = PyString_FromStringAndSize(NULL, 2048);
     if (! out)
@@ -352,7 +356,7 @@
     p = PyString_AS_STRING(out);
 
     for (i = 0; i < envsize; i++) {
-        int ksize, vsize, totalsize;
+        size_t ksize, vsize, totalsize;
         PyObject* key = PyList_GET_ITEM(keys, i);
         PyObject* value = PyList_GET_ITEM(values, i);
 
@@ -363,10 +367,22 @@
         }
         ksize = PyString_GET_SIZE(key);
         vsize = PyString_GET_SIZE(value);
+        if (strlen(PyString_AS_STRING(key)) != ksize ||
+            strlen(PyString_AS_STRING(value)) != vsize)
+        {
+            PyErr_SetString(PyExc_TypeError, "embedded null character");
+            goto error;
+        }
+        /* Search from index 1 because on Windows starting '=' is allowed for
+           defining hidden environment variables. */
+        if (ksize == 0 || strchr(PyString_AS_STRING(key) + 1, '=') != NULL) {
+            PyErr_SetString(PyExc_ValueError, "illegal environment variable name");
+            goto error;
+        }
         totalsize = (p - PyString_AS_STRING(out)) + ksize + 1 +
                                                      vsize + 1 + 1;
-        if (totalsize > PyString_GET_SIZE(out)) {
-            int offset = p - PyString_AS_STRING(out);
+        if (totalsize > (size_t)PyString_GET_SIZE(out)) {
+            size_t offset = p - PyString_AS_STRING(out);
             if (_PyString_Resize(&out, totalsize + 1024))
                 goto exit;
             p = PyString_AS_STRING(out) + offset;
diff --git a/PC/_winreg.c b/PC/_winreg.c
index e139cce..f0f8df3 100644
--- a/PC/_winreg.c
+++ b/PC/_winreg.c
@@ -641,7 +641,7 @@
         PyHKEYObject *pH = (PyHKEYObject *)ob;
         *pHANDLE = pH->hkey;
     }
-    else if (PyInt_Check(ob) || PyLong_Check(ob)) {
+    else if (_PyAnyInt_Check(ob)) {
         /* We also support integers */
         PyErr_Clear();
         *pHANDLE = (HKEY)PyLong_AsVoidPtr(ob);
@@ -753,8 +753,7 @@
     Py_ssize_t i,j;
     switch (typ) {
         case REG_DWORD:
-            if (value != Py_None &&
-                !(PyInt_Check(value) || PyLong_Check(value)))
+            if (value != Py_None && !_PyAnyInt_Check(value))
                 return FALSE;
             *retDataBuf = (BYTE *)PyMem_NEW(DWORD, 1);
             if (*retDataBuf==NULL){
diff --git a/PC/bdist_wininst/wininst-7.1.sln b/PC/bdist_wininst/wininst-7.1.sln
index e205d25..ff5250c 100644
--- a/PC/bdist_wininst/wininst-7.1.sln
+++ b/PC/bdist_wininst/wininst-7.1.sln
@@ -1,21 +1,21 @@
-Microsoft Visual Studio Solution File, Format Version 8.00

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wininst", "wininst-7.1.vcproj", "{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"

-	ProjectSection(ProjectDependencies) = postProject

-	EndProjectSection

-EndProject

-Global

-	GlobalSection(SolutionConfiguration) = preSolution

-		Debug = Debug

-		Release = Release

-	EndGlobalSection

-	GlobalSection(ProjectConfiguration) = postSolution

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug.ActiveCfg = Debug|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug.Build.0 = Debug|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release.ActiveCfg = Release|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release.Build.0 = Release|Win32

-	EndGlobalSection

-	GlobalSection(ExtensibilityGlobals) = postSolution

-	EndGlobalSection

-	GlobalSection(ExtensibilityAddIns) = postSolution

-	EndGlobalSection

-EndGlobal

+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wininst", "wininst-7.1.vcproj", "{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfiguration) = preSolution
+		Debug = Debug
+		Release = Release
+	EndGlobalSection
+	GlobalSection(ProjectConfiguration) = postSolution
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug.ActiveCfg = Debug|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug.Build.0 = Debug|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release.ActiveCfg = Release|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+	EndGlobalSection
+	GlobalSection(ExtensibilityAddIns) = postSolution
+	EndGlobalSection
+EndGlobal
diff --git a/PC/bdist_wininst/wininst-7.1.vcproj b/PC/bdist_wininst/wininst-7.1.vcproj
index 30daae9..1ce2bf1 100644
--- a/PC/bdist_wininst/wininst-7.1.vcproj
+++ b/PC/bdist_wininst/wininst-7.1.vcproj
@@ -1,214 +1,214 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="7.10"

-	Name="wininst"

-	ProjectGUID="{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"

-	RootNamespace="wininst"

-	SccProjectName=""

-	SccLocalPath="">

-	<Platforms>

-		<Platform

-			Name="Win32"/>

-	</Platforms>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\..\..\lib\distutils\command"

-			IntermediateDirectory=".\temp-release"

-			ConfigurationType="1"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="1"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\..\zlib-1.2.3"

-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"

-				StringPooling="TRUE"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="TRUE"

-				UsePrecompiledHeader="2"

-				PrecompiledHeaderFile=".\temp-release/wininst.pch"

-				AssemblerListingLocation=".\temp-release/"

-				ObjectFile=".\temp-release/"

-				ProgramDataBaseFileName=".\temp-release/"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="..\..\..\zlib-1.2.3\zlib.lib imagehlp.lib comctl32.lib"

-				OutputFile="..\..\lib\distutils\command/wininst-7.1.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames="LIBC"

-				ProgramDatabaseFile=".\..\..\lib\distutils\command/wininst-6.pdb"

-				SubSystem="2"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"

-				PreprocessorDefinitions="NDEBUG"

-				MkTypLibCompatible="TRUE"

-				SuppressStartupBanner="TRUE"

-				TargetEnvironment="1"

-				TypeLibraryName=".\..\..\lib\distutils\command/wininst.tlb"

-				HeaderFileName=""/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1031"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\temp-debug"

-			ConfigurationType="1"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="FALSE"

-			CharacterSet="2">

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\..\zlib-1.2.1"

-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"

-				RuntimeLibrary="2"

-				UsePrecompiledHeader="2"

-				PrecompiledHeaderFile=".\temp-debug/wininst.pch"

-				AssemblerListingLocation=".\temp-debug/"

-				ObjectFile=".\temp-debug/"

-				ProgramDataBaseFileName=".\temp-debug/"

-				BrowseInformation="1"

-				WarningLevel="3"

-				SuppressStartupBanner="TRUE"

-				DebugInformationFormat="1"

-				CompileAs="0"/>

-			<Tool

-				Name="VCCustomBuildTool"/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="..\..\..\zlib-1.2.1\zlib.lib imagehlp.lib comctl32.lib"

-				OutputFile="..\..\lib\distutils\command/wininst-7.1_d.exe"

-				LinkIncremental="2"

-				SuppressStartupBanner="TRUE"

-				IgnoreDefaultLibraryNames="LIBC"

-				GenerateDebugInformation="TRUE"

-				SubSystem="2"

-				TargetMachine="1"/>

-			<Tool

-				Name="VCMIDLTool"

-				PreprocessorDefinitions="_DEBUG"

-				MkTypLibCompatible="TRUE"

-				SuppressStartupBanner="TRUE"

-				TargetEnvironment="1"

-				TypeLibraryName=".\./wininst.tlb"

-				HeaderFileName=""/>

-			<Tool

-				Name="VCPostBuildEventTool"/>

-			<Tool

-				Name="VCPreBuildEventTool"/>

-			<Tool

-				Name="VCPreLinkEventTool"/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1031"/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"/>

-			<Tool

-				Name="VCWebDeploymentTool"/>

-			<Tool

-				Name="VCManagedWrapperGeneratorTool"/>

-			<Tool

-				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">

-			<File

-				RelativePath="extract.c">

-				<FileConfiguration

-					Name="Release|Win32">

-					<Tool

-						Name="VCCLCompilerTool"

-						Optimization="1"

-						AdditionalIncludeDirectories=""

-						PreprocessorDefinitions=""/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Debug|Win32">

-					<Tool

-						Name="VCCLCompilerTool"

-						Optimization="0"

-						AdditionalIncludeDirectories=""

-						PreprocessorDefinitions=""

-						BrowseInformation="1"/>

-				</FileConfiguration>

-			</File>

-			<File

-				RelativePath="install.c">

-				<FileConfiguration

-					Name="Release|Win32">

-					<Tool

-						Name="VCCLCompilerTool"

-						Optimization="1"

-						AdditionalIncludeDirectories=""

-						PreprocessorDefinitions=""/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Debug|Win32">

-					<Tool

-						Name="VCCLCompilerTool"

-						Optimization="0"

-						AdditionalIncludeDirectories=""

-						PreprocessorDefinitions=""

-						BrowseInformation="1"/>

-				</FileConfiguration>

-			</File>

-			<File

-				RelativePath="install.rc">

-			</File>

-		</Filter>

-		<Filter

-			Name="Header Files"

-			Filter="h;hpp;hxx;hm;inl">

-			<File

-				RelativePath="archive.h">

-			</File>

-		</Filter>

-		<Filter

-			Name="Resource Files"

-			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">

-			<File

-				RelativePath="PythonPowered.bmp">

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="wininst"
+	ProjectGUID="{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"
+	RootNamespace="wininst"
+	SccProjectName=""
+	SccLocalPath="">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\..\..\lib\distutils\command"
+			IntermediateDirectory=".\temp-release"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="1"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\..\zlib-1.2.3"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="2"
+				PrecompiledHeaderFile=".\temp-release/wininst.pch"
+				AssemblerListingLocation=".\temp-release/"
+				ObjectFile=".\temp-release/"
+				ProgramDataBaseFileName=".\temp-release/"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="..\..\..\zlib-1.2.3\zlib.lib imagehlp.lib comctl32.lib"
+				OutputFile="..\..\lib\distutils\command/wininst-7.1.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames="LIBC"
+				ProgramDatabaseFile=".\..\..\lib\distutils\command/wininst-6.pdb"
+				SubSystem="2"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="TRUE"
+				SuppressStartupBanner="TRUE"
+				TargetEnvironment="1"
+				TypeLibraryName=".\..\..\lib\distutils\command/wininst.tlb"
+				HeaderFileName=""/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1031"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\temp-debug"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\..\zlib-1.2.1"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="2"
+				PrecompiledHeaderFile=".\temp-debug/wininst.pch"
+				AssemblerListingLocation=".\temp-debug/"
+				ObjectFile=".\temp-debug/"
+				ProgramDataBaseFileName=".\temp-debug/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="1"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="..\..\..\zlib-1.2.1\zlib.lib imagehlp.lib comctl32.lib"
+				OutputFile="..\..\lib\distutils\command/wininst-7.1_d.exe"
+				LinkIncremental="2"
+				SuppressStartupBanner="TRUE"
+				IgnoreDefaultLibraryNames="LIBC"
+				GenerateDebugInformation="TRUE"
+				SubSystem="2"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="TRUE"
+				SuppressStartupBanner="TRUE"
+				TargetEnvironment="1"
+				TypeLibraryName=".\./wininst.tlb"
+				HeaderFileName=""/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1031"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+			<File
+				RelativePath="extract.c">
+				<FileConfiguration
+					Name="Release|Win32">
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="1"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|Win32">
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+						BrowseInformation="1"/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="install.c">
+				<FileConfiguration
+					Name="Release|Win32">
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="1"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|Win32">
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+						BrowseInformation="1"/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="install.rc">
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl">
+			<File
+				RelativePath="archive.h">
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+			<File
+				RelativePath="PythonPowered.bmp">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/bdist_wininst/wininst-8.sln b/PC/bdist_wininst/wininst-8.sln
index 25f16cf..1dec8a2 100644
--- a/PC/bdist_wininst/wininst-8.sln
+++ b/PC/bdist_wininst/wininst-8.sln
@@ -1,19 +1,19 @@
-Microsoft Visual Studio Solution File, Format Version 9.00

-# Visual Studio 2005

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wininst", "wininst-8.vcproj", "{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"

-EndProject

-Global

-	GlobalSection(SolutionConfigurationPlatforms) = preSolution

-		Debug|Win32 = Debug|Win32

-		Release|Win32 = Release|Win32

-	EndGlobalSection

-	GlobalSection(ProjectConfigurationPlatforms) = postSolution

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|Win32.ActiveCfg = Debug|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|Win32.Build.0 = Debug|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|Win32.ActiveCfg = Release|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|Win32.Build.0 = Release|Win32

-	EndGlobalSection

-	GlobalSection(SolutionProperties) = preSolution

-		HideSolutionNode = FALSE

-	EndGlobalSection

-EndGlobal

+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wininst", "wininst-8.vcproj", "{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|Win32.ActiveCfg = Debug|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|Win32.Build.0 = Debug|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|Win32.ActiveCfg = Release|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/PC/bdist_wininst/wininst-8.vcproj b/PC/bdist_wininst/wininst-8.vcproj
index 0147d1b..69b86a3 100644
--- a/PC/bdist_wininst/wininst-8.vcproj
+++ b/PC/bdist_wininst/wininst-8.vcproj
@@ -1,320 +1,320 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="8.00"

-	Name="wininst"

-	ProjectGUID="{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"

-	RootNamespace="wininst"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\..\..\lib\distutils\command"

-			IntermediateDirectory=".\temp-release"

-			ConfigurationType="1"

-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				PreprocessorDefinitions="NDEBUG"

-				MkTypLibCompatible="true"

-				SuppressStartupBanner="true"

-				TargetEnvironment="1"

-				TypeLibraryName=".\..\..\lib\distutils\command/wininst.tlb"

-				HeaderFileName=""

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="1"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\Include,..\..\Modules\zlib"

-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				UsePrecompiledHeader="0"

-				PrecompiledHeaderFile=".\temp-release/wininst.pch"

-				AssemblerListingLocation=".\temp-release/"

-				ObjectFile=".\temp-release/"

-				ProgramDataBaseFileName=".\temp-release/"

-				WarningLevel="3"

-				SuppressStartupBanner="true"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1031"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="imagehlp.lib comctl32.lib"

-				OutputFile="..\..\lib\distutils\command/wininst-8.exe"

-				LinkIncremental="1"

-				SuppressStartupBanner="true"

-				IgnoreDefaultLibraryNames="LIBC"

-				ProgramDatabaseFile=".\..\..\lib\distutils\command/wininst-6.pdb"

-				SubSystem="2"

-				TargetMachine="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCWebDeploymentTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\."

-			IntermediateDirectory=".\temp-debug"

-			ConfigurationType="1"

-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				PreprocessorDefinitions="_DEBUG"

-				MkTypLibCompatible="true"

-				SuppressStartupBanner="true"

-				TargetEnvironment="1"

-				TypeLibraryName=".\./wininst.tlb"

-				HeaderFileName=""

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\Include,..\..\Modules\zlib"

-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"

-				RuntimeLibrary="2"

-				UsePrecompiledHeader="0"

-				PrecompiledHeaderFile=".\temp-debug/wininst.pch"

-				AssemblerListingLocation=".\temp-debug/"

-				ObjectFile=".\temp-debug/"

-				ProgramDataBaseFileName=".\temp-debug/"

-				BrowseInformation="1"

-				WarningLevel="3"

-				SuppressStartupBanner="true"

-				DebugInformationFormat="1"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1031"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="imagehlp.lib comctl32.lib"

-				OutputFile="..\..\lib\distutils\command/wininst-8_d.exe"

-				LinkIncremental="2"

-				SuppressStartupBanner="true"

-				IgnoreDefaultLibraryNames="LIBC"

-				GenerateDebugInformation="true"

-				SubSystem="2"

-				TargetMachine="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCWebDeploymentTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"

-			>

-			<File

-				RelativePath="extract.c"

-				>

-				<FileConfiguration

-					Name="Release|Win32"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-						Optimization="1"

-						AdditionalIncludeDirectories=""

-						PreprocessorDefinitions=""

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Debug|Win32"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-						Optimization="0"

-						AdditionalIncludeDirectories=""

-						PreprocessorDefinitions=""

-						BrowseInformation="1"

-					/>

-				</FileConfiguration>

-			</File>

-			<File

-				RelativePath="install.c"

-				>

-				<FileConfiguration

-					Name="Release|Win32"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-						Optimization="1"

-						AdditionalIncludeDirectories=""

-						PreprocessorDefinitions=""

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Debug|Win32"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-						Optimization="0"

-						AdditionalIncludeDirectories=""

-						PreprocessorDefinitions=""

-						BrowseInformation="1"

-					/>

-				</FileConfiguration>

-			</File>

-			<File

-				RelativePath="install.rc"

-				>

-			</File>

-			<Filter

-				Name="zlib"

-				>

-				<File

-					RelativePath="..\..\Modules\zlib\adler32.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\crc32.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inffast.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inflate.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\inftrees.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\Modules\zlib\zutil.c"

-					>

-				</File>

-			</Filter>

-		</Filter>

-		<Filter

-			Name="Header Files"

-			Filter="h;hpp;hxx;hm;inl"

-			>

-			<File

-				RelativePath="archive.h"

-				>

-			</File>

-		</Filter>

-		<Filter

-			Name="Resource Files"

-			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"

-			>

-			<File

-				RelativePath="PythonPowered.bmp"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="wininst"
+	ProjectGUID="{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"
+	RootNamespace="wininst"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\..\..\lib\distutils\command"
+			IntermediateDirectory=".\temp-release"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\..\..\lib\distutils\command/wininst.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="1"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\Include,..\..\Modules\zlib"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				PrecompiledHeaderFile=".\temp-release/wininst.pch"
+				AssemblerListingLocation=".\temp-release/"
+				ObjectFile=".\temp-release/"
+				ProgramDataBaseFileName=".\temp-release/"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1031"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="imagehlp.lib comctl32.lib"
+				OutputFile="..\..\lib\distutils\command/wininst-8.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				IgnoreDefaultLibraryNames="LIBC"
+				ProgramDatabaseFile=".\..\..\lib\distutils\command/wininst-6.pdb"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\."
+			IntermediateDirectory=".\temp-debug"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\./wininst.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\Include,..\..\Modules\zlib"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				PrecompiledHeaderFile=".\temp-debug/wininst.pch"
+				AssemblerListingLocation=".\temp-debug/"
+				ObjectFile=".\temp-debug/"
+				ProgramDataBaseFileName=".\temp-debug/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="1"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1031"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="imagehlp.lib comctl32.lib"
+				OutputFile="..\..\lib\distutils\command/wininst-8_d.exe"
+				LinkIncremental="2"
+				SuppressStartupBanner="true"
+				IgnoreDefaultLibraryNames="LIBC"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+			>
+			<File
+				RelativePath="extract.c"
+				>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="1"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="install.c"
+				>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="1"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="install.rc"
+				>
+			</File>
+			<Filter
+				Name="zlib"
+				>
+				<File
+					RelativePath="..\..\Modules\zlib\adler32.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\crc32.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inffast.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inflate.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\inftrees.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\Modules\zlib\zutil.c"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl"
+			>
+			<File
+				RelativePath="archive.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+			>
+			<File
+				RelativePath="PythonPowered.bmp"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/PC/python_nt.rc b/PC/python_nt.rc
index 19bcbdd..2b2be3c 100644
--- a/PC/python_nt.rc
+++ b/PC/python_nt.rc
@@ -61,7 +61,7 @@
             VALUE "FileDescription", "Python Core\0"
             VALUE "FileVersion", PYTHON_VERSION
             VALUE "InternalName", "Python DLL\0"
-            VALUE "LegalCopyright", "Copyright © 2001-2016 Python Software Foundation. Copyright © 2000 BeOpen.com. Copyright © 1995-2001 CNRI. Copyright © 1991-1995 SMC.\0"
+            VALUE "LegalCopyright", "Copyright © 2001-2017 Python Software Foundation. Copyright © 2000 BeOpen.com. Copyright © 1995-2001 CNRI. Copyright © 1991-1995 SMC.\0"
             VALUE "OriginalFilename", PYTHON_DLL_NAME "\0"
             VALUE "ProductName", "Python\0"
             VALUE "ProductVersion", PYTHON_VERSION
diff --git a/PCbuild/_elementtree.vcxproj b/PCbuild/_elementtree.vcxproj
index 1ce1a04..1b024b9 100644
--- a/PCbuild/_elementtree.vcxproj
+++ b/PCbuild/_elementtree.vcxproj
@@ -62,7 +62,7 @@
   <ItemDefinitionGroup>
     <ClCompile>
       <AdditionalIncludeDirectories>..\Modules\expat;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;USE_PYEXPAT_CAPI;XML_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
     <Link>
       <BaseAddress>0x1D100000</BaseAddress>
@@ -87,6 +87,7 @@
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_elementtree.c" />
+    <ClCompile Include="..\Modules\expat\loadlibrary.c" />
     <ClCompile Include="..\Modules\expat\xmlparse.c" />
     <ClCompile Include="..\Modules\expat\xmlrole.c" />
     <ClCompile Include="..\Modules\expat\xmltok.c" />
diff --git a/PCbuild/_elementtree.vcxproj.filters b/PCbuild/_elementtree.vcxproj.filters
index 6acdf35..4597ee5 100644
--- a/PCbuild/_elementtree.vcxproj.filters
+++ b/PCbuild/_elementtree.vcxproj.filters
@@ -33,6 +33,9 @@
     <ClInclude Include="..\Modules\expat\latin1tab.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="..\Modules\expat\loadlibrary.c">
+      <Filter>Header Files</Filter>
+    </ClInclude>
     <ClInclude Include="..\Modules\expat\macconfig.h">
       <Filter>Header Files</Filter>
     </ClInclude>
diff --git a/PCbuild/build.bat b/PCbuild/build.bat
index 766378f..b263ec7 100644
--- a/PCbuild/build.bat
+++ b/PCbuild/build.bat
@@ -1,147 +1,144 @@
-@echo off

-goto Run

-:Usage

-echo.%~nx0 [flags and arguments] [quoted MSBuild options]

-echo.

-echo.Build CPython from the command line.  Requires the appropriate

-echo.version(s) of Microsoft Visual Studio to be installed (see readme.txt).

-echo.Also requires Subversion (svn.exe) to be on PATH if the '-e' flag is

-echo.given.

-echo.

-echo.After the flags recognized by this script, up to 9 arguments to be passed

-echo.directly to MSBuild may be passed.  If the argument contains an '=', the

-echo.entire argument must be quoted (e.g. `%~nx0 "/p:PlatformToolset=v100"`)

-echo.

-echo.Available flags:

-echo.  -h  Display this help message

-echo.  -r  Target Rebuild instead of Build

-echo.  -d  Set the configuration to Debug

-echo.  -e  Build external libraries fetched by get_externals.bat

-echo.      Extension modules that depend on external libraries will not attempt

-echo.      to build if this flag is not present

-echo.  -m  Enable parallel build

-echo.  -M  Disable parallel build (disabled by default)

-echo.  -v  Increased output messages

-echo.  -k  Attempt to kill any running Pythons before building (usually done

-echo.      automatically by the pythoncore project)

-echo.  --pgo          Build with Profile-Guided Optimization.  This flag

-echo.                 overrides -c and -d

-echo.

-echo.Available flags to avoid building certain modules.

-echo.These flags have no effect if '-e' is not given:

-echo.  --no-ssl      Do not attempt to build _ssl

-echo.  --no-tkinter  Do not attempt to build Tkinter

-echo.  --no-bsddb    Do not attempt to build _bsddb

-echo.

-echo.Available arguments:

-echo.  -c Release ^| Debug ^| PGInstrument ^| PGUpdate

-echo.     Set the configuration (default: Release)

-echo.  -p x64 ^| Win32

-echo.     Set the platform (default: Win32)

-echo.  -t Build ^| Rebuild ^| Clean ^| CleanAll

-echo.     Set the target manually

-echo.  --pgo-job  The job to use for PGO training; implies --pgo

-echo.             (default: "-m test.regrtest --pgo")

-exit /b 127

-

-:Run

-setlocal

-set platf=Win32

-set vs_platf=x86

-set conf=Release

-set target=Build

-set dir=%~dp0

-set parallel=

-set verbose=/nologo /v:m

-set kill=

-set do_pgo=

-set pgo_job=-m test.regrtest --pgo

-set on_64_bit=true

-

-rem This may not be 100% accurate, but close enough.

-if "%ProgramFiles(x86)%"=="" (set on_64_bit=false)

-

-:CheckOpts

-if "%~1"=="-h" goto Usage

-if "%~1"=="-c" (set conf=%2) & shift & shift & goto CheckOpts

-if "%~1"=="-p" (set platf=%2) & shift & shift & goto CheckOpts

-if "%~1"=="-r" (set target=Rebuild) & shift & goto CheckOpts

-if "%~1"=="-t" (set target=%2) & shift & shift & goto CheckOpts

-if "%~1"=="-d" (set conf=Debug) & shift & goto CheckOpts

-if "%~1"=="-m" (set parallel=/m) & shift & goto CheckOpts

-if "%~1"=="-M" (set parallel=) & shift & goto CheckOpts

-if "%~1"=="-v" (set verbose=/v:n) & shift & goto CheckOpts

-if "%~1"=="-k" (set kill=true) & shift & goto CheckOpts

-if "%~1"=="--pgo" (set do_pgo=true) & shift & goto CheckOpts

-if "%~1"=="--pgo-job" (set do_pgo=true) & (set pgo_job=%~2) & shift & shift & goto CheckOpts

-rem These use the actual property names used by MSBuild.  We could just let

-rem them in through the environment, but we specify them on the command line

-rem anyway for visibility so set defaults after this

-if "%~1"=="-e" (set IncludeExternals=true) & shift & goto CheckOpts

-if "%~1"=="--no-ssl" (set IncludeSSL=false) & shift & goto CheckOpts

-if "%~1"=="--no-tkinter" (set IncludeTkinter=false) & shift & goto CheckOpts

-if "%~1"=="--no-bsddb" (set IncludeBsddb=false) & shift & goto CheckOpts

-

-if "%IncludeExternals%"=="" set IncludeExternals=false

-if "%IncludeSSL%"=="" set IncludeSSL=true

-if "%IncludeTkinter%"=="" set IncludeTkinter=true

-if "%IncludeBsddb%"=="" set IncludeBsddb=true

-

-if "%IncludeExternals%"=="true" call "%dir%get_externals.bat"

-

-if "%platf%"=="x64" (

-    if "%on_64_bit%"=="true" (

-        rem This ought to always be correct these days...

-        set vs_platf=amd64

-    ) else (

-        if "%do_pgo%"=="true" (

-            echo.ERROR: Cannot cross-compile with PGO

-            echo.    32bit operating system detected, if this is incorrect,

-            echo.    make sure the ProgramFiles(x86^) environment variable is set

-            exit /b 1

-        )

-        set vs_platf=x86_amd64

-    )

-)

-

-rem Setup the environment

-call "%dir%env.bat" %vs_platf% >nul

-

-if "%kill%"=="true" call :Kill

-

-if "%do_pgo%"=="true" (

-    set conf=PGInstrument

-    call :Build

-    del /s "%dir%\*.pgc"

-    del /s "%dir%\..\Lib\*.pyc"

-    echo on

-    call "%dir%\..\python.bat" %pgo_job%

-    @echo off

-    call :Kill

-    set conf=PGUpdate

-)

-goto Build

-

-:Kill

-echo on

-msbuild "%dir%\pythoncore.vcxproj" /t:KillPython %verbose%^

- /p:Configuration=%conf% /p:Platform=%platf%^

- /p:KillPython=true

-

-@echo off

-goto :eof

-

-:Build

-rem Call on MSBuild to do the work, echo the command.

-rem Passing %1-9 is not the preferred option, but argument parsing in

-rem batch is, shall we say, "lackluster"

-echo on

-msbuild "%dir%pcbuild.proj" /t:%target% %parallel% %verbose%^

- /p:Configuration=%conf% /p:Platform=%platf%^

- /p:IncludeExternals=%IncludeExternals%^

- /p:IncludeSSL=%IncludeSSL% /p:IncludeTkinter=%IncludeTkinter%^

- /p:IncludeBsddb=%IncludeBsddb%^

- %1 %2 %3 %4 %5 %6 %7 %8 %9

-

-@echo off

-goto :eof

+@echo off
+goto Run
+:Usage
+echo.%~nx0 [flags and arguments] [quoted MSBuild options]
+echo.
+echo.Build CPython from the command line.  Requires the appropriate
+echo.version(s) of Microsoft Visual Studio to be installed (see readme.txt).
+echo.
+echo.After the flags recognized by this script, up to 9 arguments to be passed
+echo.directly to MSBuild may be passed.  If the argument contains an '=', the
+echo.entire argument must be quoted (e.g. `%~nx0 "/p:PlatformToolset=v100"`).
+echo.Alternatively you can put extra flags for MSBuild in a file named 
+echo.`msbuild.rsp` in the `PCbuild` directory, one flag per line. This file
+echo.will be picked automatically by MSBuild. Flags put in this file does not
+echo.need to be quoted. You can still use environment variables inside the 
+echo.response file.
+echo.
+echo.Available flags:
+echo.  -h  Display this help message
+echo.  -r  Target Rebuild instead of Build
+echo.  -d  Set the configuration to Debug
+echo.  -e  Build external libraries fetched by get_externals.bat
+echo.      Extension modules that depend on external libraries will not attempt
+echo.      to build if this flag is not present
+echo.  -m  Enable parallel build
+echo.  -M  Disable parallel build (disabled by default)
+echo.  -v  Increased output messages
+echo.  -k  Attempt to kill any running Pythons before building (usually done
+echo.      automatically by the pythoncore project)
+echo.  --pgo          Build with Profile-Guided Optimization.  This flag
+echo.                 overrides -c and -d
+echo.
+echo.Available flags to avoid building certain modules.
+echo.These flags have no effect if '-e' is not given:
+echo.  --no-ssl      Do not attempt to build _ssl
+echo.  --no-tkinter  Do not attempt to build Tkinter
+echo.  --no-bsddb    Do not attempt to build _bsddb
+echo.
+echo.Available arguments:
+echo.  -c Release ^| Debug ^| PGInstrument ^| PGUpdate
+echo.     Set the configuration (default: Release)
+echo.  -p x64 ^| Win32
+echo.     Set the platform (default: Win32)
+echo.  -t Build ^| Rebuild ^| Clean ^| CleanAll
+echo.     Set the target manually
+echo.  --pgo-job  The job to use for PGO training; implies --pgo
+echo.             (default: "-m test.regrtest --pgo")
+exit /b 127
+
+:Run
+setlocal
+set platf=Win32
+set conf=Release
+set target=Build
+set dir=%~dp0
+set parallel=
+set verbose=/nologo /v:m
+set kill=
+set do_pgo=
+set pgo_job=-m test.regrtest --pgo
+
+:CheckOpts
+if "%~1"=="-h" goto Usage
+if "%~1"=="-c" (set conf=%2) & shift & shift & goto CheckOpts
+if "%~1"=="-p" (set platf=%2) & shift & shift & goto CheckOpts
+if "%~1"=="-r" (set target=Rebuild) & shift & goto CheckOpts
+if "%~1"=="-t" (set target=%2) & shift & shift & goto CheckOpts
+if "%~1"=="-d" (set conf=Debug) & shift & goto CheckOpts
+if "%~1"=="-m" (set parallel=/m) & shift & goto CheckOpts
+if "%~1"=="-M" (set parallel=) & shift & goto CheckOpts
+if "%~1"=="-v" (set verbose=/v:n) & shift & goto CheckOpts
+if "%~1"=="-k" (set kill=true) & shift & goto CheckOpts
+if "%~1"=="--pgo" (set do_pgo=true) & shift & goto CheckOpts
+if "%~1"=="--pgo-job" (set do_pgo=true) & (set pgo_job=%~2) & shift & shift & goto CheckOpts
+rem These use the actual property names used by MSBuild.  We could just let
+rem them in through the environment, but we specify them on the command line
+rem anyway for visibility so set defaults after this
+if "%~1"=="-e" (set IncludeExternals=true) & shift & goto CheckOpts
+if "%~1"=="--no-ssl" (set IncludeSSL=false) & shift & goto CheckOpts
+if "%~1"=="--no-tkinter" (set IncludeTkinter=false) & shift & goto CheckOpts
+if "%~1"=="--no-bsddb" (set IncludeBsddb=false) & shift & goto CheckOpts
+
+if "%IncludeExternals%"=="" set IncludeExternals=false
+if "%IncludeSSL%"=="" set IncludeSSL=true
+if "%IncludeTkinter%"=="" set IncludeTkinter=true
+if "%IncludeBsddb%"=="" set IncludeBsddb=true
+
+if "%IncludeExternals%"=="true" call "%dir%get_externals.bat"
+
+if "%do_pgo%" EQU "true" if "%platf%" EQU "x64" (
+    if "%PROCESSOR_ARCHITEW6432%" NEQ "AMD64" if "%PROCESSOR_ARCHITECTURE%" NEQ "AMD64" (
+        echo.ERROR: Cannot cross-compile with PGO 
+        echo.       32bit operating system detected. Ensure your PROCESSOR_ARCHITECTURE
+        echo.       and PROCESSOR_ARCHITEW6432 environment variables are correct.
+        exit /b 1 
+    )
+)
+
+if "%GIT%" EQU "" set GIT=git
+if exist "%GIT%" set GITProperty=/p:GIT="%GIT%"
+
+rem Setup the environment
+call "%dir%find_msbuild.bat" %MSBUILD%
+if ERRORLEVEL 1 (call "%dir%env.bat" && set MSBUILD=msbuild)
+
+if "%kill%"=="true" call :Kill
+
+if "%do_pgo%"=="true" (
+    set conf=PGInstrument
+    call :Build %1 %2 %3 %4 %5 %6 %7 %8 %9
+    del /s "%dir%\*.pgc"
+    del /s "%dir%\..\Lib\*.pyc"
+    echo on
+    call "%dir%\..\python.bat" %pgo_job%
+    @echo off
+    call :Kill
+    set conf=PGUpdate
+    set target=Build
+)
+goto Build
+
+:Kill
+echo on
+%MSBUILD% "%dir%\pythoncore.vcxproj" /t:KillPython %verbose%^
+ /p:Configuration=%conf% /p:Platform=%platf%^
+ /p:KillPython=true
+
+@echo off
+goto :eof
+
+:Build
+rem Call on MSBuild to do the work, echo the command.
+rem Passing %1-9 is not the preferred option, but argument parsing in
+rem batch is, shall we say, "lackluster"
+echo on
+%MSBUILD% "%dir%pcbuild.proj" /t:%target% %parallel% %verbose%^
+ /p:Configuration=%conf% /p:Platform=%platf%^
+ /p:IncludeExternals=%IncludeExternals%^
+ /p:IncludeSSL=%IncludeSSL% /p:IncludeTkinter=%IncludeTkinter%^
+ /p:IncludeBsddb=%IncludeBsddb% %GITProperty%^
+ %1 %2 %3 %4 %5 %6 %7 %8 %9
+
+@echo off
+goto :eof
diff --git a/PCbuild/build_env.bat b/PCbuild/build_env.bat
index 01024cf..4c67ae3 100644
--- a/PCbuild/build_env.bat
+++ b/PCbuild/build_env.bat
@@ -1 +1 @@
-@%comspec% /k env.bat %*

+@%comspec% /k env.bat %*
diff --git a/PCbuild/build_pgo.bat b/PCbuild/build_pgo.bat
index 872c382..f02a6e5 100644
--- a/PCbuild/build_pgo.bat
+++ b/PCbuild/build_pgo.bat
@@ -1,6 +1,6 @@
-@echo off

-echo.DeprecationWarning:

-echo.    This script is deprecated, use `build.bat --pgo` instead.

-echo.

-

-call "%~dp0build.bat" --pgo %*

+@echo off
+echo.DeprecationWarning:
+echo.    This script is deprecated, use `build.bat --pgo` instead.
+echo.
+
+call "%~dp0build.bat" --pgo %*
diff --git a/PCbuild/clean.bat b/PCbuild/clean.bat
index 78517d2..6144c71 100644
--- a/PCbuild/clean.bat
+++ b/PCbuild/clean.bat
@@ -1,5 +1,5 @@
-@echo off

-rem A batch program to clean a particular configuration,

-rem just for convenience.

-

-call %~dp0build.bat -t Clean %*

+@echo off
+rem A batch program to clean a particular configuration,
+rem just for convenience.
+
+call %~dp0build.bat -t Clean %*
diff --git a/PCbuild/env.bat b/PCbuild/env.bat
index 1719cc1..2e67f8c 100644
--- a/PCbuild/env.bat
+++ b/PCbuild/env.bat
@@ -1,23 +1,23 @@
-@echo off

-rem This script adds the latest available tools to the path for the current

-rem command window. However, all builds of Python should ignore the version

-rem of the tools on PATH and use PlatformToolset instead, which should

-rem always be 'v90'.

-rem

-rem To build Python with a newer toolset, pass "/p:PlatformToolset=v100" (or

-rem 'v110', 'v120' or 'v140') to the build script.  Note that no toolset

-rem other than 'v90' is supported!

-

-echo Build environments: x86, amd64, x86_amd64

-echo.

-

-rem Set up the v90 tools first.  This is mostly needed to allow PGInstrument

-rem builds to find the PGO DLL.  Do it first so the newer MSBuild is found

-rem before the one from v90 (vcvarsall.bat prepends to PATH).

-call "%VS90COMNTOOLS%..\..\VC\vcvarsall.bat" %*

-

-set VSTOOLS=%VS140COMNTOOLS%

-if "%VSTOOLS%"=="" set VSTOOLS=%VS120COMNTOOLS%

-if "%VSTOOLS%"=="" set VSTOOLS=%VS110COMNTOOLS%

-if "%VSTOOLS%"=="" set VSTOOLS=%VS100COMNTOOLS%

-call "%VSTOOLS%..\..\VC\vcvarsall.bat" %*

+@echo off
+rem This script adds the latest available tools to the path for the current
+rem command window. However, all builds of Python should ignore the version
+rem of the tools on PATH and use PlatformToolset instead, which should
+rem always be 'v90'.
+rem
+rem To build Python with a newer toolset, pass "/p:PlatformToolset=v100" (or
+rem 'v110', 'v120' or 'v140') to the build script.  Note that no toolset
+rem other than 'v90' is supported!
+
+echo Build environments: x86, amd64, x86_amd64
+echo.
+
+rem Set up the v90 tools first.  This is mostly needed to allow PGInstrument
+rem builds to find the PGO DLL.  Do it first so the newer MSBuild is found
+rem before the one from v90 (vcvarsall.bat prepends to PATH).
+call "%VS90COMNTOOLS%..\..\VC\vcvarsall.bat" %*
+
+set VSTOOLS=%VS140COMNTOOLS%
+if "%VSTOOLS%"=="" set VSTOOLS=%VS120COMNTOOLS%
+if "%VSTOOLS%"=="" set VSTOOLS=%VS110COMNTOOLS%
+if "%VSTOOLS%"=="" set VSTOOLS=%VS100COMNTOOLS%
+call "%VSTOOLS%..\..\VC\vcvarsall.bat" %*
diff --git a/PCbuild/find_msbuild.bat b/PCbuild/find_msbuild.bat
new file mode 100644
index 0000000..76bc973
--- /dev/null
+++ b/PCbuild/find_msbuild.bat
@@ -0,0 +1,52 @@
+@rem
+@rem Searches for MSBuild.exe. This is the only tool we need to initiate
+@rem a build, so we no longer search for the full VC toolset.
+@rem
+@rem This file is supposed to modify the state of the caller (specifically
+@rem the MSBUILD variable), so we do not use setlocal or echo, and avoid
+@rem changing any other persistent state.
+@rem
+
+@rem No arguments provided means do full search
+@if '%1' EQU '' goto :begin_search
+
+@rem One argument may be the full path. Use a goto so we don't try to
+@rem parse the next if statement - incorrect quoting in the multi-arg
+@rem case can cause us to break immediately.
+@if '%2' EQU '' goto :one_arg
+
+@rem Entire command line may represent the full path if quoting failed.
+@if exist "%*" (set MSBUILD="%*") & (set _Py_MSBuild_Source=environment) & goto :found
+@goto :begin_search
+
+:one_arg
+@if exist "%~1" (set MSBUILD="%~1") & (set _Py_MSBuild_Source=environment) & goto :found
+
+:begin_search
+@set MSBUILD=
+
+@rem If msbuild.exe is on the PATH, assume that the user wants that one.
+@msbuild /version > nul 2>&1
+@if NOT ERRORLEVEL 9009 set MSBUILD=msbuild & (set _Py_MSBuild_Source=PATH) & goto :found
+
+@rem VS 2015 and earlier register MSBuild separately, so we can find it.
+@rem Prefer MSBuild 14.0 over MSBuild 15.0, since the latter may not be able to find a VC14 install.
+@reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0" /v MSBuildToolsPath /reg:32 >nul 2>nul
+@if NOT ERRORLEVEL 1 @for /F "tokens=1,2*" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0" /v MSBuildToolsPath /reg:32') DO @(
+    @if "%%i"=="MSBuildToolsPath" @if exist "%%k\msbuild.exe" @(set MSBUILD="%%k\msbuild.exe")
+)
+@if exist %MSBUILD% (set _Py_MSBuild_Source=registry) & goto :found
+
+@rem VS 2017 sets exactly one install as the "main" install, so we may find MSBuild in there.
+@reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v 15.0 /reg:32 >nul 2>nul
+@if NOT ERRORLEVEL 1 @for /F "tokens=1,2*" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v 15.0 /reg:32') DO @(
+    @if "%%i"=="15.0" @if exist "%%k\MSBuild\15.0\Bin\msbuild.exe" @(set MSBUILD="%%k\MSBuild\15.0\Bin\msbuild.exe")
+)
+@if exist %MSBUILD% (set _Py_MSBuild_Source=Visual Studio 2017 registry) & goto :found
+
+
+@exit /b 1
+
+:found
+@echo Using %MSBUILD% (found in the %_Py_MSBuild_Source%)
+@set _Py_MSBuild_Source=
diff --git a/PCbuild/find_python.bat b/PCbuild/find_python.bat
new file mode 100644
index 0000000..ba3a0f5
--- /dev/null
+++ b/PCbuild/find_python.bat
@@ -0,0 +1,75 @@
+@rem
+@rem Searches for python.exe and may download a private copy from nuget.
+@rem
+@rem This file is supposed to modify the state of the caller (specifically
+@rem the MSBUILD variable), so we do not use setlocal or echo, and avoid
+@rem changing any other persistent state.
+@rem
+
+@rem No arguments provided means do full search
+@if '%1' EQU '' goto :begin_search
+
+@rem One argument may be the full path. Use a goto so we don't try to
+@rem parse the next if statement - incorrect quoting in the multi-arg
+@rem case can cause us to break immediately.
+@if '%2' EQU '' goto :one_arg
+
+@rem Entire command line may represent the full path if quoting failed.
+@if exist "%*" (set PYTHON="%*") & (set _Py_Python_Source=from environment) & goto :found
+@goto :begin_search
+
+:one_arg
+@if exist "%~1" (set PYTHON="%~1") & (set _Py_Python_Source=from environment) & goto :found
+
+:begin_search
+@set PYTHON=
+
+@set _Py_EXTERNALS_DIR=%EXTERNAL_DIR%
+@if "%_Py_EXTERNALS_DIR%"=="" (set _Py_EXTERNALS_DIR=%~dp0\..\externals)
+
+@rem If we have Python in externals, use that one
+@if exist "%_Py_EXTERNALS_DIR%\pythonx86\tools\python.exe" (set PYTHON="%_Py_EXTERNALS_DIR%\pythonx86\tools\python.exe") & (set _Py_Python_Source=found in externals directory) & goto :found
+
+@rem If HOST_PYTHON is recent enough, use that
+@if NOT "%HOST_PYTHON%"=="" @%HOST_PYTHON% -c "import sys; assert sys.version_info[:2] >= (3, 6)" >nul 2>nul && (set PYTHON="%HOST_PYTHON%") && (set _Py_Python_Source=found as HOST_PYTHON) && goto :found
+
+@rem If py.exe finds a recent enough version, use that one
+@py -3.6 -V >nul 2>&1 && (set PYTHON=py -3.6) && (set _Py_Python_Source=found with py.exe) && goto :found
+
+@if NOT exist "%_Py_EXTERNALS_DIR%" mkdir "%_Py_EXTERNALS_DIR%"
+@set _Py_NUGET=%NUGET%
+@set _Py_NUGET_URL=%NUGET_URL%
+@set _Py_HOST_PYTHON=%HOST_PYTHON%
+@if "%_Py_HOST_PYTHON%"=="" set _Py_HOST_PYTHON=py
+@if "%_Py_NUGET%"=="" (set _Py_NUGET=%_Py_EXTERNALS_DIR%\nuget.exe)
+@if "%_Py_NUGET_URL%"=="" (set _Py_NUGET_URL=https://aka.ms/nugetclidl)
+@if NOT exist "%_Py_NUGET%" (
+    @echo Downloading nuget...
+    @rem NB: Must use single quotes around NUGET here, NOT double!
+    @rem Otherwise, a space in the path would break things
+    @rem If it fails, retry with any available copy of Python
+    @powershell.exe -Command Invoke-WebRequest %_Py_NUGET_URL% -OutFile '%_Py_NUGET%'
+    @if errorlevel 1 (
+        @%_Py_HOST_PYTHON% "%~dp0\urlretrieve.py" "%_Py_NUGET_URL%" "%_Py_NUGET%"
+    )
+)
+@echo Installing Python via nuget...
+@"%_Py_NUGET%" install pythonx86 -ExcludeVersion -OutputDirectory "%_Py_EXTERNALS_DIR%"
+@rem Quote it here; it's not quoted later because "py -3.6" wouldn't work
+@if not errorlevel 1 (set PYTHON="%_Py_EXTERNALS_DIR%\pythonx86\tools\python.exe") & (set _Py_Python_Source=found on nuget.org) & goto :found
+
+
+@set _Py_Python_Source=
+@set _Py_EXTERNALS_DIR=
+@set _Py_NUGET=
+@set _Py_NUGET_URL=
+@set _Py_HOST_PYTHON=
+@exit /b 1
+
+:found
+@echo Using %PYTHON% (%_Py_Python_Source%)
+@set _Py_Python_Source=
+@set _Py_EXTERNALS_DIR=
+@set _Py_NUGET=
+@set _Py_NUGET_URL=
+@set _Py_HOST_PYTHON=
diff --git a/PCbuild/get_external.py b/PCbuild/get_external.py
new file mode 100644
index 0000000..a682d38
--- /dev/null
+++ b/PCbuild/get_external.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python3
+
+import argparse
+import os
+import pathlib
+import zipfile
+from urllib.request import urlretrieve
+
+
+def fetch_zip(commit_hash, zip_dir, *, org='python', binary=False, verbose):
+    repo = f'cpython-{"bin" if binary else "source"}-deps'
+    url = f'https://github.com/{org}/{repo}/archive/{commit_hash}.zip'
+    reporthook = None
+    if verbose:
+        reporthook = print
+    zip_dir.mkdir(parents=True, exist_ok=True)
+    filename, headers = urlretrieve(
+        url,
+        zip_dir / f'{commit_hash}.zip',
+        reporthook=reporthook,
+    )
+    return filename
+
+
+def extract_zip(externals_dir, zip_path):
+    with zipfile.ZipFile(os.fspath(zip_path)) as zf:
+        zf.extractall(os.fspath(externals_dir))
+        return externals_dir / zf.namelist()[0].split('/')[0]
+
+
+def parse_args():
+    p = argparse.ArgumentParser()
+    p.add_argument('-v', '--verbose', action='store_true')
+    p.add_argument('-b', '--binary', action='store_true',
+                   help='Is the dependency in the binary repo?')
+    p.add_argument('-O', '--organization',
+                   help='Organization owning the deps repos', default='python')
+    p.add_argument('-e', '--externals-dir', type=pathlib.Path,
+                   help='Directory in which to store dependencies',
+                   default=pathlib.Path(__file__).parent.parent / 'externals')
+    p.add_argument('tag',
+                   help='tag of the dependency')
+    return p.parse_args()
+
+
+def main():
+    args = parse_args()
+    zip_path = fetch_zip(
+        args.tag,
+        args.externals_dir / 'zips',
+        org=args.organization,
+        binary=args.binary,
+        verbose=args.verbose,
+    )
+    final_name = args.externals_dir / args.tag
+    extract_zip(args.externals_dir, zip_path).replace(final_name)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat
index 387d9ae..8bc19e6 100644
--- a/PCbuild/get_externals.bat
+++ b/PCbuild/get_externals.bat
@@ -1,107 +1,107 @@
-@echo off

-setlocal

-rem Simple script to fetch source for external libraries

-

-if not exist "%~dp0..\externals" mkdir "%~dp0..\externals"

-pushd "%~dp0..\externals"

-

-if "%SVNROOT%"=="" set SVNROOT=http://svn.python.org/projects/external/

-

-rem Optionally clean up first.  Be warned that this can be very destructive!

-if not "%1"=="" (

-    for %%c in (-c --clean --clean-only) do (

-        if "%1"=="%%c" goto clean

-    )

-    goto usage

-)

-goto fetch

-

-:clean

-echo.Cleaning up external libraries.

-for /D %%d in (

-               bzip2-*

-               db-*

-               nasm-*

-               openssl-*

-               tcl-*

-               tcltk*

-               tk-*

-               tix-*

-               sqlite-*

-               xz-*

-               ) do (

-    echo.Removing %%d

-    rmdir /s /q %%d

-)

-if "%1"=="--clean-only" (

-    goto end

-)

-

-:fetch

-rem Fetch current versions

-

-svn --version > nul 2>&1

-if ERRORLEVEL 9009 (

-    echo.svn.exe must be on your PATH.

-    echo.Try TortoiseSVN (http://tortoisesvn.net/^) and be sure to check the

-    echo.command line tools option.

-    popd

-    exit /b 1

-)

-

-echo.Fetching external libraries...

-

-rem When updating these versions, remember to update the relevant property

-rem files in both this dir and PC\VS9.0

-

-set libraries=

-set libraries=%libraries%                                    bzip2-1.0.6

-if NOT "%IncludeBsddb%"=="false" set libraries=%libraries%   db-4.7.25.0

-if NOT "%IncludeSSL%"=="false" set libraries=%libraries%     nasm-2.11.06

-if NOT "%IncludeSSL%"=="false" set libraries=%libraries%     openssl-1.0.2j

-set libraries=%libraries%                                    sqlite-3.8.11.0

-if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tcl-8.5.15.0

-if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tk-8.5.15.0

-if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tix-8.4.3.5

-

-for %%e in (%libraries%) do (

-    if exist %%e (

-        echo.%%e already exists, skipping.

-    ) else (

-        echo.Fetching %%e...

-        svn export %SVNROOT%%%e

-    )

-)

-

-goto end

-

-:usage

-echo.invalid argument: %1

-echo.usage: %~n0 [[ -c ^| --clean ] ^| --clean-only ]

-echo.

-echo.Pull all sources necessary for compiling optional extension modules

-echo.that rely on external libraries.  Requires svn.exe to be on your PATH

-echo.and pulls sources from %SVNROOT%.

-echo.

-echo.Use the -c or --clean option to clean up all external library sources

-echo.before pulling in the current versions.

-echo.

-echo.Use the --clean-only option to do the same cleaning, without pulling in

-echo.anything new.

-echo.

-echo.Only the first argument is checked, all others are ignored.

-echo.

-echo.**WARNING**: the cleaning options unconditionally remove any directory

-echo.that is a child of

-echo.   %CD%

-echo.and matches wildcard patterns beginning with bzip2-, db-, nasm-, openssl-,

-echo.tcl-, tcltk, tk-, tix-, sqlite-, or xz-, and as such has the potential

-echo.to be very destructive if you are not aware of what it is doing.  Use with

-echo.caution!

-popd

-exit /b -1

-

-

-:end

-echo Finished.

-popd

+@echo off
+setlocal
+rem Simple script to fetch source for external libraries
+
+if "%PCBUILD%"=="" (set PCBUILD=%~dp0)
+if "%EXTERNALS_DIR%"=="" (set EXTERNALS_DIR=%PCBUILD%\..\externals)
+
+set DO_FETCH=true
+set DO_CLEAN=false
+
+:CheckOpts
+if "%~1"=="--no-tkinter" (set IncludeTkinter=false) & shift & goto CheckOpts
+if "%~1"=="--no-openssl" (set IncludeSSL=false) & shift & goto CheckOpts
+if "%~1"=="--python" (set PYTHON_FOR_BUILD=%2) & shift & shift & goto CheckOpts
+if "%~1"=="--organization" (set ORG=%2) & shift & shift & goto CheckOpts
+if "%~1"=="-c" (set DO_CLEAN=true) & shift & goto CheckOpts
+if "%~1"=="--clean" (set DO_CLEAN=true) & shift & goto CheckOpts
+if "%~1"=="--clean-only" (set DO_FETCH=false) & goto clean
+if "x%~1" NEQ "x" goto usage
+
+if "%DO_CLEAN%"=="false" goto fetch
+:clean
+echo.Cleaning up external libraries.
+if exist "%EXTERNALS_DIR%" (
+    rem Sometimes this fails the first time; try it twice
+    rmdir /s /q "%EXTERNALS_DIR%" || rmdir /s /q "%EXTERNALS_DIR%"
+)
+
+if "%DO_FETCH%"=="false" goto end
+:fetch
+
+if "%ORG%"=="" (set ORG=python)
+call "%PCBUILD%\find_python.bat" "%PYTHON%"
+
+git 2>&1 > nul
+if ERRORLEVEL 9009 (
+    if "%PYTHON%"=="" (
+        echo Python 3.6 could not be found or installed, and git.exe is not on your PATH && exit /B 1
+    )
+)
+
+echo.Fetching external libraries...
+
+rem When updating these versions, remember to update the relevant property
+rem files in both this dir and PC\VS9.0
+
+set libraries=
+set libraries=%libraries%                                    bzip2-1.0.6
+if NOT "%IncludeBsddb%"=="false" set libraries=%libraries%   bsddb-4.7.25.0
+if NOT "%IncludeSSL%"=="false" set libraries=%libraries%     openssl-1.0.2p
+set libraries=%libraries%                                    sqlite-3.14.2.0
+if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tcl-8.5.19.0
+if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tk-8.5.19.0
+if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tix-8.4.3.5
+
+for %%e in (%libraries%) do (
+    if exist "%EXTERNALS_DIR%\%%e" (
+        echo.%%e already exists, skipping.
+    ) else if "%PYTHON%"=="" (
+        echo.Fetching %%e with git...
+        git clone --depth 1 https://github.com/%ORG%/cpython-source-deps --branch %%e "%EXTERNALS_DIR%\%%e"
+    ) else (
+        echo.Fetching %%e...
+        %PYTHON% "%PCBUILD%\get_external.py" -O %ORG% %%e
+    )
+)
+
+echo.Fetching external binaries...
+
+set binaries=
+set binaries=%binaries%
+if NOT "%IncludeSSL%"=="false" set binaries=%binaries%     nasm-2.11.06
+
+for %%b in (%binaries%) do (
+    if exist "%EXTERNALS_DIR%\%%b" (
+        echo.%%b already exists, skipping.
+    ) else if "%PYTHON%"=="" (
+        echo.Fetching %%b with git...
+        git clone --depth 1 https://github.com/%ORG%/cpython-bin-deps --branch %%b "%EXTERNALS_DIR%\%%b"
+    ) else (
+        echo.Fetching %%b...
+        %PYTHON% "%PCBUILD%\get_external.py" -b -O %ORG% %%b
+    )
+)
+
+echo Finished.
+goto end
+
+:usage
+echo.Valid options: -c, --clean, --clean-only, --organization, --python,
+echo.--no-tkinter, --no-openssl
+echo.
+echo.Pull all sources and binaries necessary for compiling optional extension
+echo.modules that rely on external libraries.
+echo.
+echo.The --organization option determines which github organization to download
+echo.from, the --python option determines which Python 3.6+ interpreter to use
+echo.with PCbuild\get_external.py.
+echo.
+echo.Use the -c or --clean option to remove the entire externals directory.
+echo.
+echo.Use the --clean-only option to do the same cleaning, without pulling in
+echo.anything new.
+echo.
+exit /b -1
+
+:end
diff --git a/PCbuild/idle.bat b/PCbuild/idle.bat
index 5ab15f5..dcb0485 100644
--- a/PCbuild/idle.bat
+++ b/PCbuild/idle.bat
@@ -1,15 +1,15 @@
-@echo off

-rem start idle

-rem Usage:  idle [-d]

-rem -d   Run Debug build (python_d.exe).  Else release build.

-

-setlocal

-set exe=python

-PATH %PATH%;..\..\tcltk\bin

-

-if "%1"=="-d" (set exe=python_d) & shift

-

-set cmd=%exe% ../Lib/idlelib/idle.py %1 %2 %3 %4 %5 %6 %7 %8 %9

-

-echo on

-%cmd%

+@echo off
+rem start idle
+rem Usage:  idle [-d]
+rem -d   Run Debug build (python_d.exe).  Else release build.
+
+setlocal
+set exe=python
+PATH %PATH%;..\..\tcltk\bin
+
+if "%1"=="-d" (set exe=python_d) & shift
+
+set cmd=%exe% ../Lib/idlelib/idle.py %1 %2 %3 %4 %5 %6 %7 %8 %9
+
+echo on
+%cmd%
diff --git a/PCbuild/pcbuild.sln b/PCbuild/pcbuild.sln
index 1f7fb77f..e03861b 100644
--- a/PCbuild/pcbuild.sln
+++ b/PCbuild/pcbuild.sln
@@ -1,536 +1,536 @@
-Microsoft Visual Studio Solution File, Format Version 12.00

-# Visual Studio 2010

-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{553EC33E-9816-4996-A660-5D6186A0B0B3}"

-	ProjectSection(SolutionItems) = preProject

-		..\Modules\getbuildinfo.c = ..\Modules\getbuildinfo.c

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python", "python.vcxproj", "{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythoncore", "pythoncore.vcxproj", "{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythonw", "pythonw.vcxproj", "{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w9xpopen", "w9xpopen.vcxproj", "{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winsound", "winsound.vcxproj", "{28B5D777-DDF2-4B6B-B34F-31D938813856}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb", "_bsddb.vcxproj", "{B4D38F3F-68FB-42EC-A45D-E00657BB3627}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes", "_ctypes.vcxproj", "{0E9791DB-593A-465F-98BC-681011311618}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes_test", "_ctypes_test.vcxproj", "{9EC7190A-249F-4180-A900-548FDCF3055F}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_elementtree", "_elementtree.vcxproj", "{17E1E049-C309-4D79-843F-AE483C264AEA}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_msi", "_msi.vcxproj", "{31FFC478-7B4A-43E8-9954-8D03E2187E9C}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_socket", "_socket.vcxproj", "{86937F53-C189-40EF-8CE8-8759D8E7D480}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_sqlite3", "_sqlite3.vcxproj", "{13CECB97-4119-4316-9D42-8534019A5A44}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ssl", "_ssl.vcxproj", "{C6E20F84-3247-4AD6-B051-B073268F73BA}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testcapi", "_testcapi.vcxproj", "{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_tkinter", "_tkinter.vcxproj", "{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bz2", "bz2.vcxproj", "{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "select", "select.vcxproj", "{18CAE28C-B454-46C1-87A0-493D91D97F03}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unicodedata", "unicodedata.vcxproj", "{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pyexpat", "pyexpat.vcxproj", "{D06B6426-4762-44CC-8BAD-D79052507F2F}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bdist_wininst", "..\PC\bdist_wininst\bdist_wininst.vcxproj", "{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_hashlib", "_hashlib.vcxproj", "{447F05A8-F581-4CAC-A466-5AC7936E207E}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite3", "sqlite3.vcxproj", "{A1A295E5-463C-437F-81CA-1F32367685DA}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_multiprocessing", "_multiprocessing.vcxproj", "{9E48B300-37D1-11DD-8C41-005056C00008}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tcl", "tcl.vcxproj", "{B5FD6F1D-129E-4BFF-9340-03606FAC7283}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tix", "tix.vcxproj", "{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tk", "tk.vcxproj", "{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libeay", "libeay.vcxproj", "{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ssleay", "ssleay.vcxproj", "{10615B24-73BF-4EFA-93AA-236916321317}"

-EndProject

-Global

-	GlobalSection(SolutionConfigurationPlatforms) = preSolution

-		Debug|Win32 = Debug|Win32

-		Debug|x64 = Debug|x64

-		PGInstrument|Win32 = PGInstrument|Win32

-		PGInstrument|x64 = PGInstrument|x64

-		PGUpdate|Win32 = PGUpdate|Win32

-		PGUpdate|x64 = PGUpdate|x64

-		Release|Win32 = Release|Win32

-		Release|x64 = Release|x64

-	EndGlobalSection

-	GlobalSection(ProjectConfigurationPlatforms) = postSolution

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.ActiveCfg = Debug|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.Build.0 = Debug|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.ActiveCfg = Debug|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.Build.0 = Debug|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.ActiveCfg = Release|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.Build.0 = Release|Win32

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.ActiveCfg = Release|x64

-		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.Build.0 = Release|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.ActiveCfg = Debug|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.Build.0 = Debug|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.ActiveCfg = Debug|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.Build.0 = Debug|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.ActiveCfg = Release|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.Build.0 = Release|Win32

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.ActiveCfg = Release|x64

-		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.Build.0 = Release|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.ActiveCfg = Debug|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.Build.0 = Debug|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.ActiveCfg = Debug|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.Build.0 = Debug|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|Win32.Build.0 = Release|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|x64.ActiveCfg = Release|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|x64.Build.0 = Release|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|Win32.Build.0 = Release|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|x64.ActiveCfg = Release|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|x64.Build.0 = Release|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.ActiveCfg = Release|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.Build.0 = Release|Win32

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.ActiveCfg = Release|x64

-		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.Build.0 = Release|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.ActiveCfg = Debug|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.Build.0 = Debug|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.ActiveCfg = Debug|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.Build.0 = Debug|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.ActiveCfg = Release|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.Build.0 = Release|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.ActiveCfg = Release|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.Build.0 = Release|x64

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|Win32.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|x64.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|x64.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|Win32.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|x64.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|x64.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.Build.0 = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.ActiveCfg = Release|Win32

-		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.Build.0 = Release|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|Win32.ActiveCfg = Debug|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|Win32.Build.0 = Debug|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|x64.ActiveCfg = Debug|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|x64.Build.0 = Debug|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|Win32.ActiveCfg = Release|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|Win32.Build.0 = Release|Win32

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.ActiveCfg = Release|x64

-		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.Build.0 = Release|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.ActiveCfg = Debug|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.Build.0 = Debug|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.ActiveCfg = Debug|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.Build.0 = Debug|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.ActiveCfg = Release|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.Build.0 = Release|Win32

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.ActiveCfg = Release|x64

-		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.Build.0 = Release|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.ActiveCfg = Debug|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.Build.0 = Debug|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.Debug|x64.ActiveCfg = Debug|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.Debug|x64.Build.0 = Debug|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.Release|Win32.ActiveCfg = Release|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.Release|Win32.Build.0 = Release|Win32

-		{0E9791DB-593A-465F-98BC-681011311618}.Release|x64.ActiveCfg = Release|x64

-		{0E9791DB-593A-465F-98BC-681011311618}.Release|x64.Build.0 = Release|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|Win32.ActiveCfg = Debug|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|Win32.Build.0 = Debug|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|x64.ActiveCfg = Debug|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|x64.Build.0 = Debug|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|Win32.Build.0 = Release|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|x64.ActiveCfg = Release|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|x64.Build.0 = Release|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|Win32.Build.0 = Release|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|x64.ActiveCfg = Release|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|x64.Build.0 = Release|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|Win32.ActiveCfg = Release|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|Win32.Build.0 = Release|Win32

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|x64.ActiveCfg = Release|x64

-		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|x64.Build.0 = Release|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|Win32.ActiveCfg = Debug|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|Win32.Build.0 = Debug|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|x64.ActiveCfg = Debug|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|x64.Build.0 = Debug|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|Win32.ActiveCfg = Release|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|Win32.Build.0 = Release|Win32

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|x64.ActiveCfg = Release|x64

-		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|x64.Build.0 = Release|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|Win32.ActiveCfg = Debug|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|Win32.Build.0 = Debug|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|x64.ActiveCfg = Debug|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|x64.Build.0 = Debug|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|Win32.ActiveCfg = Release|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|Win32.Build.0 = Release|Win32

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|x64.ActiveCfg = Release|x64

-		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|x64.Build.0 = Release|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|Win32.ActiveCfg = Debug|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|Win32.Build.0 = Debug|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|x64.ActiveCfg = Debug|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|x64.Build.0 = Debug|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|Win32.ActiveCfg = Release|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|Win32.Build.0 = Release|Win32

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|x64.ActiveCfg = Release|x64

-		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|x64.Build.0 = Release|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|Win32.ActiveCfg = Debug|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|Win32.Build.0 = Debug|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|x64.ActiveCfg = Debug|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|x64.Build.0 = Debug|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|Win32.ActiveCfg = Release|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|Win32.Build.0 = Release|Win32

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|x64.ActiveCfg = Release|x64

-		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|x64.Build.0 = Release|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|Win32.ActiveCfg = Debug|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|Win32.Build.0 = Debug|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|x64.ActiveCfg = Debug|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|x64.Build.0 = Debug|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|Win32.ActiveCfg = Release|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|Win32.Build.0 = Release|Win32

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|x64.ActiveCfg = Release|x64

-		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|x64.Build.0 = Release|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|Win32.ActiveCfg = Debug|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|Win32.Build.0 = Debug|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|x64.ActiveCfg = Debug|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|x64.Build.0 = Debug|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|Win32.ActiveCfg = Release|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|Win32.Build.0 = Release|Win32

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|x64.ActiveCfg = Release|x64

-		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|x64.Build.0 = Release|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|Win32.ActiveCfg = Debug|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|Win32.Build.0 = Debug|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|x64.ActiveCfg = Debug|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|x64.Build.0 = Debug|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|Win32.ActiveCfg = Release|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|Win32.Build.0 = Release|Win32

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|x64.ActiveCfg = Release|x64

-		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|x64.Build.0 = Release|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|Win32.ActiveCfg = Debug|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|Win32.Build.0 = Debug|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|x64.ActiveCfg = Debug|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|x64.Build.0 = Debug|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|Win32.ActiveCfg = Release|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|Win32.Build.0 = Release|Win32

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|x64.ActiveCfg = Release|x64

-		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|x64.Build.0 = Release|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|Win32.ActiveCfg = Debug|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|Win32.Build.0 = Debug|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|x64.ActiveCfg = Debug|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|x64.Build.0 = Debug|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|Win32.ActiveCfg = Release|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|Win32.Build.0 = Release|Win32

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|x64.ActiveCfg = Release|x64

-		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|x64.Build.0 = Release|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|Win32.ActiveCfg = Debug|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|Win32.Build.0 = Debug|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|x64.ActiveCfg = Debug|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|x64.Build.0 = Debug|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|Win32.ActiveCfg = Release|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|Win32.Build.0 = Release|Win32

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|x64.ActiveCfg = Release|x64

-		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|x64.Build.0 = Release|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|Win32.ActiveCfg = Debug|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|Win32.Build.0 = Debug|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|x64.ActiveCfg = Debug|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|x64.Build.0 = Debug|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|Win32.ActiveCfg = Release|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|Win32.Build.0 = Release|Win32

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|x64.ActiveCfg = Release|x64

-		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|x64.Build.0 = Release|x64

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|Win32.ActiveCfg = Release|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|x64.ActiveCfg = Release|x64

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGInstrument|x64.ActiveCfg = Release|x64

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGUpdate|x64.ActiveCfg = Release|x64

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|Win32.ActiveCfg = Release|Win32

-		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|x64.ActiveCfg = Release|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|Win32.ActiveCfg = Debug|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|Win32.Build.0 = Debug|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|x64.ActiveCfg = Debug|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|x64.Build.0 = Debug|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.ActiveCfg = Release|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.Build.0 = Release|Win32

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.ActiveCfg = Release|x64

-		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.Build.0 = Release|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.ActiveCfg = Debug|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.Build.0 = Debug|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.ActiveCfg = Debug|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.Build.0 = Debug|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|Win32.ActiveCfg = Release|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|Win32.Build.0 = Release|Win32

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|x64.ActiveCfg = Release|x64

-		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|x64.Build.0 = Release|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|Win32.ActiveCfg = Debug|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|Win32.Build.0 = Debug|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|x64.ActiveCfg = Debug|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|x64.Build.0 = Debug|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|Win32.ActiveCfg = Release|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|Win32.Build.0 = Release|Win32

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|x64.ActiveCfg = Release|x64

-		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|x64.Build.0 = Release|x64

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Debug|Win32.ActiveCfg = Debug|Win32

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Debug|Win32.Build.0 = Debug|Win32

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Debug|x64.ActiveCfg = Debug|x64

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Debug|x64.Build.0 = Debug|x64

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGInstrument|Win32.Build.0 = Release|Win32

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGInstrument|x64.ActiveCfg = Release|x64

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGInstrument|x64.Build.0 = Release|x64

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGUpdate|Win32.Build.0 = Release|Win32

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGUpdate|x64.ActiveCfg = Release|x64

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGUpdate|x64.Build.0 = Release|x64

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Release|Win32.ActiveCfg = Release|Win32

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Release|Win32.Build.0 = Release|Win32

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Release|x64.ActiveCfg = Release|x64

-		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Release|x64.Build.0 = Release|x64

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Debug|Win32.ActiveCfg = Debug|Win32

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Debug|Win32.Build.0 = Debug|Win32

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Debug|x64.ActiveCfg = Debug|x64

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Debug|x64.Build.0 = Debug|x64

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGInstrument|Win32.Build.0 = Release|Win32

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGInstrument|x64.ActiveCfg = Release|x64

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGInstrument|x64.Build.0 = Release|x64

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGUpdate|Win32.Build.0 = Release|Win32

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGUpdate|x64.ActiveCfg = Release|x64

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGUpdate|x64.Build.0 = Release|x64

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Release|Win32.ActiveCfg = Release|Win32

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Release|Win32.Build.0 = Release|Win32

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Release|x64.ActiveCfg = Release|x64

-		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Release|x64.Build.0 = Release|x64

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Debug|Win32.ActiveCfg = Debug|Win32

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Debug|Win32.Build.0 = Debug|Win32

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Debug|x64.ActiveCfg = Debug|x64

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Debug|x64.Build.0 = Debug|x64

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGInstrument|Win32.Build.0 = Release|Win32

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGInstrument|x64.ActiveCfg = Release|x64

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGInstrument|x64.Build.0 = Release|x64

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGUpdate|Win32.Build.0 = Release|Win32

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGUpdate|x64.ActiveCfg = Release|x64

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGUpdate|x64.Build.0 = Release|x64

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Release|Win32.ActiveCfg = Release|Win32

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Release|Win32.Build.0 = Release|Win32

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Release|x64.ActiveCfg = Release|x64

-		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Release|x64.Build.0 = Release|x64

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Debug|Win32.ActiveCfg = Debug|Win32

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Debug|Win32.Build.0 = Debug|Win32

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Debug|x64.ActiveCfg = Debug|x64

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Debug|x64.Build.0 = Debug|x64

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGInstrument|Win32.Build.0 = Release|Win32

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGInstrument|x64.ActiveCfg = Release|x64

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGInstrument|x64.Build.0 = Release|x64

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGUpdate|Win32.Build.0 = Release|Win32

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGUpdate|x64.ActiveCfg = Release|x64

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGUpdate|x64.Build.0 = Release|x64

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Release|Win32.ActiveCfg = Release|Win32

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Release|Win32.Build.0 = Release|Win32

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Release|x64.ActiveCfg = Release|x64

-		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Release|x64.Build.0 = Release|x64

-		{10615B24-73BF-4EFA-93AA-236916321317}.Debug|Win32.ActiveCfg = Debug|Win32

-		{10615B24-73BF-4EFA-93AA-236916321317}.Debug|Win32.Build.0 = Debug|Win32

-		{10615B24-73BF-4EFA-93AA-236916321317}.Debug|x64.ActiveCfg = Debug|x64

-		{10615B24-73BF-4EFA-93AA-236916321317}.Debug|x64.Build.0 = Debug|x64

-		{10615B24-73BF-4EFA-93AA-236916321317}.PGInstrument|Win32.ActiveCfg = Release|Win32

-		{10615B24-73BF-4EFA-93AA-236916321317}.PGInstrument|Win32.Build.0 = Release|Win32

-		{10615B24-73BF-4EFA-93AA-236916321317}.PGInstrument|x64.ActiveCfg = Release|x64

-		{10615B24-73BF-4EFA-93AA-236916321317}.PGInstrument|x64.Build.0 = Release|x64

-		{10615B24-73BF-4EFA-93AA-236916321317}.PGUpdate|Win32.ActiveCfg = Release|Win32

-		{10615B24-73BF-4EFA-93AA-236916321317}.PGUpdate|Win32.Build.0 = Release|Win32

-		{10615B24-73BF-4EFA-93AA-236916321317}.PGUpdate|x64.ActiveCfg = Release|x64

-		{10615B24-73BF-4EFA-93AA-236916321317}.PGUpdate|x64.Build.0 = Release|x64

-		{10615B24-73BF-4EFA-93AA-236916321317}.Release|Win32.ActiveCfg = Release|Win32

-		{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

-	EndGlobalSection

-	GlobalSection(SolutionProperties) = preSolution

-		HideSolutionNode = FALSE

-	EndGlobalSection

-EndGlobal

+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{553EC33E-9816-4996-A660-5D6186A0B0B3}"
+	ProjectSection(SolutionItems) = preProject
+		..\Modules\getbuildinfo.c = ..\Modules\getbuildinfo.c
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python", "python.vcxproj", "{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythoncore", "pythoncore.vcxproj", "{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythonw", "pythonw.vcxproj", "{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w9xpopen", "w9xpopen.vcxproj", "{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winsound", "winsound.vcxproj", "{28B5D777-DDF2-4B6B-B34F-31D938813856}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb", "_bsddb.vcxproj", "{B4D38F3F-68FB-42EC-A45D-E00657BB3627}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes", "_ctypes.vcxproj", "{0E9791DB-593A-465F-98BC-681011311618}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes_test", "_ctypes_test.vcxproj", "{9EC7190A-249F-4180-A900-548FDCF3055F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_elementtree", "_elementtree.vcxproj", "{17E1E049-C309-4D79-843F-AE483C264AEA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_msi", "_msi.vcxproj", "{31FFC478-7B4A-43E8-9954-8D03E2187E9C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_socket", "_socket.vcxproj", "{86937F53-C189-40EF-8CE8-8759D8E7D480}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_sqlite3", "_sqlite3.vcxproj", "{13CECB97-4119-4316-9D42-8534019A5A44}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ssl", "_ssl.vcxproj", "{C6E20F84-3247-4AD6-B051-B073268F73BA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testcapi", "_testcapi.vcxproj", "{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_tkinter", "_tkinter.vcxproj", "{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bz2", "bz2.vcxproj", "{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "select", "select.vcxproj", "{18CAE28C-B454-46C1-87A0-493D91D97F03}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unicodedata", "unicodedata.vcxproj", "{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pyexpat", "pyexpat.vcxproj", "{D06B6426-4762-44CC-8BAD-D79052507F2F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bdist_wininst", "..\PC\bdist_wininst\bdist_wininst.vcxproj", "{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_hashlib", "_hashlib.vcxproj", "{447F05A8-F581-4CAC-A466-5AC7936E207E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite3", "sqlite3.vcxproj", "{A1A295E5-463C-437F-81CA-1F32367685DA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_multiprocessing", "_multiprocessing.vcxproj", "{9E48B300-37D1-11DD-8C41-005056C00008}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tcl", "tcl.vcxproj", "{B5FD6F1D-129E-4BFF-9340-03606FAC7283}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tix", "tix.vcxproj", "{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tk", "tk.vcxproj", "{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libeay", "libeay.vcxproj", "{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ssleay", "ssleay.vcxproj", "{10615B24-73BF-4EFA-93AA-236916321317}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		PGInstrument|Win32 = PGInstrument|Win32
+		PGInstrument|x64 = PGInstrument|x64
+		PGUpdate|Win32 = PGUpdate|Win32
+		PGUpdate|x64 = PGUpdate|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.Build.0 = Debug|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.ActiveCfg = Debug|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.Build.0 = Debug|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.ActiveCfg = Release|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.Build.0 = Release|Win32
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.ActiveCfg = Release|x64
+		{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.Build.0 = Release|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.ActiveCfg = Debug|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.Build.0 = Debug|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.ActiveCfg = Debug|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.Build.0 = Debug|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.ActiveCfg = Release|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.Build.0 = Release|Win32
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.ActiveCfg = Release|x64
+		{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.Build.0 = Release|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.ActiveCfg = Debug|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.Build.0 = Debug|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.ActiveCfg = Debug|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.Build.0 = Debug|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|Win32.Build.0 = Release|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|x64.ActiveCfg = Release|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGInstrument|x64.Build.0 = Release|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|Win32.Build.0 = Release|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|x64.ActiveCfg = Release|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGUpdate|x64.Build.0 = Release|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.ActiveCfg = Release|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.Build.0 = Release|Win32
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.ActiveCfg = Release|x64
+		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.Build.0 = Release|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.ActiveCfg = Debug|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.Build.0 = Debug|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.ActiveCfg = Debug|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.Build.0 = Debug|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.ActiveCfg = Release|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.Build.0 = Release|Win32
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.ActiveCfg = Release|x64
+		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.Build.0 = Release|x64
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|Win32.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|x64.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGInstrument|x64.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|Win32.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|x64.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGUpdate|x64.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.Build.0 = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.ActiveCfg = Release|Win32
+		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.Build.0 = Release|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|Win32.ActiveCfg = Debug|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|Win32.Build.0 = Debug|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|x64.ActiveCfg = Debug|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Debug|x64.Build.0 = Debug|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|Win32.ActiveCfg = Release|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|Win32.Build.0 = Release|Win32
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.ActiveCfg = Release|x64
+		{28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.Build.0 = Release|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.Build.0 = Debug|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.ActiveCfg = Debug|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.Build.0 = Debug|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.ActiveCfg = Release|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.Build.0 = Release|Win32
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.ActiveCfg = Release|x64
+		{B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.Build.0 = Release|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.ActiveCfg = Debug|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.Build.0 = Debug|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.Debug|x64.ActiveCfg = Debug|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.Debug|x64.Build.0 = Debug|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.Release|Win32.ActiveCfg = Release|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.Release|Win32.Build.0 = Release|Win32
+		{0E9791DB-593A-465F-98BC-681011311618}.Release|x64.ActiveCfg = Release|x64
+		{0E9791DB-593A-465F-98BC-681011311618}.Release|x64.Build.0 = Release|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|Win32.Build.0 = Debug|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|x64.ActiveCfg = Debug|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Debug|x64.Build.0 = Debug|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|Win32.Build.0 = Release|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|x64.ActiveCfg = Release|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGInstrument|x64.Build.0 = Release|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|Win32.Build.0 = Release|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|x64.ActiveCfg = Release|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.PGUpdate|x64.Build.0 = Release|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|Win32.ActiveCfg = Release|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|Win32.Build.0 = Release|Win32
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|x64.ActiveCfg = Release|x64
+		{9EC7190A-249F-4180-A900-548FDCF3055F}.Release|x64.Build.0 = Release|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|Win32.Build.0 = Debug|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|x64.ActiveCfg = Debug|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Debug|x64.Build.0 = Debug|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|Win32.ActiveCfg = Release|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|Win32.Build.0 = Release|Win32
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|x64.ActiveCfg = Release|x64
+		{17E1E049-C309-4D79-843F-AE483C264AEA}.Release|x64.Build.0 = Release|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|Win32.ActiveCfg = Debug|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|Win32.Build.0 = Debug|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|x64.ActiveCfg = Debug|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Debug|x64.Build.0 = Debug|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|Win32.ActiveCfg = Release|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|Win32.Build.0 = Release|Win32
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|x64.ActiveCfg = Release|x64
+		{31FFC478-7B4A-43E8-9954-8D03E2187E9C}.Release|x64.Build.0 = Release|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|Win32.ActiveCfg = Debug|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|Win32.Build.0 = Debug|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|x64.ActiveCfg = Debug|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Debug|x64.Build.0 = Debug|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|Win32.ActiveCfg = Release|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|Win32.Build.0 = Release|Win32
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|x64.ActiveCfg = Release|x64
+		{86937F53-C189-40EF-8CE8-8759D8E7D480}.Release|x64.Build.0 = Release|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|Win32.ActiveCfg = Debug|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|Win32.Build.0 = Debug|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|x64.ActiveCfg = Debug|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Debug|x64.Build.0 = Debug|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|Win32.ActiveCfg = Release|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|Win32.Build.0 = Release|Win32
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|x64.ActiveCfg = Release|x64
+		{13CECB97-4119-4316-9D42-8534019A5A44}.Release|x64.Build.0 = Release|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|Win32.Build.0 = Debug|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|x64.ActiveCfg = Debug|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Debug|x64.Build.0 = Debug|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|Win32.ActiveCfg = Release|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|Win32.Build.0 = Release|Win32
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|x64.ActiveCfg = Release|x64
+		{C6E20F84-3247-4AD6-B051-B073268F73BA}.Release|x64.Build.0 = Release|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|Win32.Build.0 = Debug|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|x64.ActiveCfg = Debug|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Debug|x64.Build.0 = Debug|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|Win32.ActiveCfg = Release|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|Win32.Build.0 = Release|Win32
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|x64.ActiveCfg = Release|x64
+		{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}.Release|x64.Build.0 = Release|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|Win32.ActiveCfg = Debug|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|Win32.Build.0 = Debug|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|x64.ActiveCfg = Debug|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Debug|x64.Build.0 = Debug|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|Win32.ActiveCfg = Release|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|Win32.Build.0 = Release|Win32
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|x64.ActiveCfg = Release|x64
+		{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}.Release|x64.Build.0 = Release|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|Win32.ActiveCfg = Debug|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|Win32.Build.0 = Debug|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|x64.ActiveCfg = Debug|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Debug|x64.Build.0 = Debug|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|Win32.ActiveCfg = Release|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|Win32.Build.0 = Release|Win32
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|x64.ActiveCfg = Release|x64
+		{73FCD2BD-F133-46B7-8EC1-144CD82A59D5}.Release|x64.Build.0 = Release|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|Win32.ActiveCfg = Debug|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|Win32.Build.0 = Debug|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|x64.ActiveCfg = Debug|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Debug|x64.Build.0 = Debug|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|Win32.ActiveCfg = Release|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|Win32.Build.0 = Release|Win32
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|x64.ActiveCfg = Release|x64
+		{18CAE28C-B454-46C1-87A0-493D91D97F03}.Release|x64.Build.0 = Release|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|Win32.ActiveCfg = Debug|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|Win32.Build.0 = Debug|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|x64.ActiveCfg = Debug|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Debug|x64.Build.0 = Debug|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|Win32.ActiveCfg = Release|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|Win32.Build.0 = Release|Win32
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|x64.ActiveCfg = Release|x64
+		{ECC7CEAC-A5E5-458E-BB9E-2413CC847881}.Release|x64.Build.0 = Release|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|Win32.Build.0 = Debug|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|x64.ActiveCfg = Debug|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Debug|x64.Build.0 = Debug|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|Win32.ActiveCfg = Release|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|Win32.Build.0 = Release|Win32
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|x64.ActiveCfg = Release|x64
+		{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|x64.Build.0 = Release|x64
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|Win32.ActiveCfg = Release|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|x64.ActiveCfg = Release|x64
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGInstrument|x64.ActiveCfg = Release|x64
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGUpdate|x64.ActiveCfg = Release|x64
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|Win32.ActiveCfg = Release|Win32
+		{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|x64.ActiveCfg = Release|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|Win32.Build.0 = Debug|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|x64.ActiveCfg = Debug|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|x64.Build.0 = Debug|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.ActiveCfg = Release|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.Build.0 = Release|Win32
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.ActiveCfg = Release|x64
+		{447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.Build.0 = Release|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.Build.0 = Debug|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.ActiveCfg = Debug|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.Build.0 = Debug|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|Win32.ActiveCfg = Release|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|Win32.Build.0 = Release|Win32
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|x64.ActiveCfg = Release|x64
+		{A1A295E5-463C-437F-81CA-1F32367685DA}.Release|x64.Build.0 = Release|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|Win32.ActiveCfg = Debug|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|Win32.Build.0 = Debug|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|x64.ActiveCfg = Debug|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Debug|x64.Build.0 = Debug|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|Win32.ActiveCfg = Release|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|Win32.Build.0 = Release|Win32
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|x64.ActiveCfg = Release|x64
+		{9E48B300-37D1-11DD-8C41-005056C00008}.Release|x64.Build.0 = Release|x64
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Debug|Win32.Build.0 = Debug|Win32
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Debug|x64.ActiveCfg = Debug|x64
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Debug|x64.Build.0 = Debug|x64
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGInstrument|Win32.Build.0 = Release|Win32
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGInstrument|x64.ActiveCfg = Release|x64
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGInstrument|x64.Build.0 = Release|x64
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGUpdate|Win32.Build.0 = Release|Win32
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGUpdate|x64.ActiveCfg = Release|x64
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.PGUpdate|x64.Build.0 = Release|x64
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Release|Win32.ActiveCfg = Release|Win32
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Release|Win32.Build.0 = Release|Win32
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Release|x64.ActiveCfg = Release|x64
+		{B5FD6F1D-129E-4BFF-9340-03606FAC7283}.Release|x64.Build.0 = Release|x64
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Debug|Win32.Build.0 = Debug|Win32
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Debug|x64.ActiveCfg = Debug|x64
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Debug|x64.Build.0 = Debug|x64
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGInstrument|Win32.Build.0 = Release|Win32
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGInstrument|x64.ActiveCfg = Release|x64
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGInstrument|x64.Build.0 = Release|x64
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGUpdate|Win32.Build.0 = Release|Win32
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGUpdate|x64.ActiveCfg = Release|x64
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.PGUpdate|x64.Build.0 = Release|x64
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Release|Win32.ActiveCfg = Release|Win32
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Release|Win32.Build.0 = Release|Win32
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Release|x64.ActiveCfg = Release|x64
+		{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}.Release|x64.Build.0 = Release|x64
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Debug|Win32.ActiveCfg = Debug|Win32
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Debug|Win32.Build.0 = Debug|Win32
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Debug|x64.ActiveCfg = Debug|x64
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Debug|x64.Build.0 = Debug|x64
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGInstrument|Win32.Build.0 = Release|Win32
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGInstrument|x64.ActiveCfg = Release|x64
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGInstrument|x64.Build.0 = Release|x64
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGUpdate|Win32.Build.0 = Release|Win32
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGUpdate|x64.ActiveCfg = Release|x64
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.PGUpdate|x64.Build.0 = Release|x64
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Release|Win32.ActiveCfg = Release|Win32
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Release|Win32.Build.0 = Release|Win32
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Release|x64.ActiveCfg = Release|x64
+		{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}.Release|x64.Build.0 = Release|x64
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Debug|Win32.ActiveCfg = Debug|Win32
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Debug|Win32.Build.0 = Debug|Win32
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Debug|x64.ActiveCfg = Debug|x64
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Debug|x64.Build.0 = Debug|x64
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGInstrument|Win32.Build.0 = Release|Win32
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGInstrument|x64.ActiveCfg = Release|x64
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGInstrument|x64.Build.0 = Release|x64
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGUpdate|Win32.Build.0 = Release|Win32
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGUpdate|x64.ActiveCfg = Release|x64
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.PGUpdate|x64.Build.0 = Release|x64
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Release|Win32.ActiveCfg = Release|Win32
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Release|Win32.Build.0 = Release|Win32
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Release|x64.ActiveCfg = Release|x64
+		{E5B04CC0-EB4C-42AB-B4DC-18EF95F864B0}.Release|x64.Build.0 = Release|x64
+		{10615B24-73BF-4EFA-93AA-236916321317}.Debug|Win32.ActiveCfg = Debug|Win32
+		{10615B24-73BF-4EFA-93AA-236916321317}.Debug|Win32.Build.0 = Debug|Win32
+		{10615B24-73BF-4EFA-93AA-236916321317}.Debug|x64.ActiveCfg = Debug|x64
+		{10615B24-73BF-4EFA-93AA-236916321317}.Debug|x64.Build.0 = Debug|x64
+		{10615B24-73BF-4EFA-93AA-236916321317}.PGInstrument|Win32.ActiveCfg = Release|Win32
+		{10615B24-73BF-4EFA-93AA-236916321317}.PGInstrument|Win32.Build.0 = Release|Win32
+		{10615B24-73BF-4EFA-93AA-236916321317}.PGInstrument|x64.ActiveCfg = Release|x64
+		{10615B24-73BF-4EFA-93AA-236916321317}.PGInstrument|x64.Build.0 = Release|x64
+		{10615B24-73BF-4EFA-93AA-236916321317}.PGUpdate|Win32.ActiveCfg = Release|Win32
+		{10615B24-73BF-4EFA-93AA-236916321317}.PGUpdate|Win32.Build.0 = Release|Win32
+		{10615B24-73BF-4EFA-93AA-236916321317}.PGUpdate|x64.ActiveCfg = Release|x64
+		{10615B24-73BF-4EFA-93AA-236916321317}.PGUpdate|x64.Build.0 = Release|x64
+		{10615B24-73BF-4EFA-93AA-236916321317}.Release|Win32.ActiveCfg = Release|Win32
+		{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
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/PCbuild/prepare_ssl.py b/PCbuild/prepare_ssl.py
index d746976..4f76478 100644
--- a/PCbuild/prepare_ssl.py
+++ b/PCbuild/prepare_ssl.py
@@ -1,4 +1,7 @@
 #! /usr/bin/env python3
+# -*- coding: utf8 -*-
+# The encoding declaration is required for running PC\VS9.0\build_ssl.py
+
 # Script for preparing OpenSSL for building on Windows.
 # Uses Perl to create nmake makefiles and otherwise prepare the way
 # for building on 32 or 64 bit platforms.
diff --git a/PCbuild/pyexpat.vcxproj b/PCbuild/pyexpat.vcxproj
index a319ff9..e8be337 100644
--- a/PCbuild/pyexpat.vcxproj
+++ b/PCbuild/pyexpat.vcxproj
@@ -59,7 +59,7 @@
   <ItemDefinitionGroup>
     <ClCompile>
       <AdditionalIncludeDirectories>$(PySourcePath)Modules\expat;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;XML_STATIC;HAVE_MEMMOVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;PYEXPAT_EXPORTS;XML_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
   </ItemDefinitionGroup>
   <ItemGroup>
@@ -68,6 +68,7 @@
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\pyexpat.c" />
+    <ClCompile Include="..\Modules\expat\loadlibrary.c" />
     <ClCompile Include="..\Modules\expat\xmlparse.c" />
     <ClCompile Include="..\Modules\expat\xmlrole.c" />
     <ClCompile Include="..\Modules\expat\xmltok.c" />
diff --git a/PCbuild/pyexpat.vcxproj.filters b/PCbuild/pyexpat.vcxproj.filters
index f8d4602..cb02847 100644
--- a/PCbuild/pyexpat.vcxproj.filters
+++ b/PCbuild/pyexpat.vcxproj.filters
@@ -20,6 +20,9 @@
     <ClCompile Include="..\Modules\pyexpat.c">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\Modules\expat\loadlibrary.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
     <ClCompile Include="..\Modules\expat\xmlparse.c">
       <Filter>Source Files</Filter>
     </ClCompile>
diff --git a/PCbuild/python.props b/PCbuild/python.props
index 21ea5fa..cebb86f 100644
--- a/PCbuild/python.props
+++ b/PCbuild/python.props
@@ -32,10 +32,10 @@
 
     <!-- Directories of external projects. tcltk is handled in tcltk.props -->
     <ExternalsDir>$([System.IO.Path]::GetFullPath(`$(PySourcePath)externals\`))</ExternalsDir>
-    <sqlite3Dir>$(ExternalsDir)sqlite-3.8.11.0\</sqlite3Dir>
+    <sqlite3Dir>$(ExternalsDir)sqlite-3.14.2.0\</sqlite3Dir>
     <bz2Dir>$(ExternalsDir)bzip2-1.0.6\</bz2Dir>
-    <bsddbDir>$(ExternalsDir)db-4.7.25.0</bsddbDir>
-    <opensslDir>$(ExternalsDir)openssl-1.0.2j\</opensslDir>
+    <bsddbDir>$(ExternalsDir)bsddb-4.7.25.0</bsddbDir>
+    <opensslDir>$(ExternalsDir)openssl-1.0.2p\</opensslDir>
     <opensslIncludeDir>$(opensslDir)include32</opensslIncludeDir>
     <opensslIncludeDir Condition="'$(ArchName)' == 'amd64'">$(opensslDir)include64</opensslIncludeDir>
     <nasmDir>$(ExternalsDir)\nasm-2.11.06\</nasmDir>
diff --git a/PCbuild/python.vcxproj b/PCbuild/python.vcxproj
index 4380fed..c1ab6e9 100644
--- a/PCbuild/python.vcxproj
+++ b/PCbuild/python.vcxproj
@@ -93,6 +93,8 @@
   </ImportGroup>
   <Target Name="GeneratePythonBat" AfterTargets="AfterBuild">
     <PropertyGroup>
+      <_PGOPath Condition="$(Configuration) == 'PGInstrument' and $(Platform) == 'Win32'">@set PATH=%PATH%%3B$(VCInstallDir)bin</_PGOPath>
+      <_PGOPath Condition="$(Configuration) == 'PGInstrument' and $(Platform) == 'x64'">@set PATH=%PATH%%3B$(VCInstallDir)bin\amd64</_PGOPath>
       <_Content>@rem This script invokes the most recently built Python with all arguments
 @rem passed through to the interpreter.  This file is generated by the
 @rem build process and any changes *will* be thrown away by the next
@@ -100,6 +102,9 @@
 @rem This is only meant as a convenience for developing CPython
 @rem and using it outside of that context is ill-advised.
 @echo Running $(Configuration)^|$(Platform) interpreter...
+@setlocal
+@set PYTHONHOME=$(PySourcePath)
+$(_PGOPath)
 @"$(OutDir)python$(PyDebugExt).exe" %*
 </_Content>
       <_ExistingContent Condition="Exists('$(PySourcePath)python.bat')">$([System.IO.File]::ReadAllText('$(PySourcePath)python.bat'))</_ExistingContent>
diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
index da5d5d9..99291ea 100644
--- a/PCbuild/pythoncore.vcxproj
+++ b/PCbuild/pythoncore.vcxproj
@@ -391,17 +391,25 @@
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
   <Target Name="_GetBuildInfo" BeforeTargets="PrepareForBuild">
-    <Exec Command="hg id -b &gt; &quot;$(IntDir)hgbranch.txt&quot;" ContinueOnError="true" />
-    <Exec Command="hg id -i &gt; &quot;$(IntDir)hgversion.txt&quot;" ContinueOnError="true" />
-    <Exec Command="hg id -t &gt; &quot;$(IntDir)hgtag.txt&quot;" ContinueOnError="true" />
     <PropertyGroup>
-      <HgBranch Condition="Exists('$(IntDir)hgbranch.txt')">$([System.IO.File]::ReadAllText('$(IntDir)hgbranch.txt').Trim())</HgBranch>
-      <HgVersion Condition="Exists('$(IntDir)hgversion.txt')">$([System.IO.File]::ReadAllText('$(IntDir)hgversion.txt').Trim())</HgVersion>
-      <HgTag Condition="Exists('$(IntDir)hgtag.txt')">$([System.IO.File]::ReadAllText('$(IntDir)hgtag.txt').Trim())</HgTag>
+      <GIT Condition="$(GIT) == ''">git</GIT>
+      <_GIT>$(GIT)</_GIT>
+      <_GIT Condition="$(GIT.Contains(` `))">"$(GIT)"</_GIT>
     </PropertyGroup>
+    <Message Text="Getting build info from $(_GIT)" Importance="high" />
+    <MakeDir Directories="$(IntDir)" Condition="!Exists($(IntDir))" />
+    <Exec Command="$(_GIT) name-rev --name-only HEAD &gt; &quot;$(IntDir)gitbranch.txt&quot;" ContinueOnError="true" />
+    <Exec Command="$(_GIT) rev-parse --short HEAD &gt; &quot;$(IntDir)gitversion.txt&quot;" ContinueOnError="true" />
+    <Exec Command="$(_GIT) describe --all --always --dirty &gt; &quot;$(IntDir)gittag.txt&quot;" ContinueOnError="true" />
+    <PropertyGroup>
+      <GitBranch Condition="Exists('$(IntDir)gitbranch.txt')">$([System.IO.File]::ReadAllText('$(IntDir)gitbranch.txt').Trim())</GitBranch>
+      <GitVersion Condition="Exists('$(IntDir)gitversion.txt')">$([System.IO.File]::ReadAllText('$(IntDir)gitversion.txt').Trim())</GitVersion>
+      <GitTag Condition="Exists('$(IntDir)gittag.txt')">$([System.IO.File]::ReadAllText('$(IntDir)gittag.txt').Trim())</GitTag>
+    </PropertyGroup>
+    <Message Text="Building $(GitTag):$(GitVersion) $(GitBranch)" Importance="high" />
     <ItemGroup>
       <ClCompile Include="..\Modules\getbuildinfo.c">
-        <PreprocessorDefinitions>HGVERSION="$(HgVersion)";HGTAG="$(HgTag)";HGBRANCH="$(HgBranch)";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+        <PreprocessorDefinitions>GITVERSION="$(GitVersion)";GITTAG="$(GitTag)";GITBRANCH="$(GitBranch)";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       </ClCompile>
     </ItemGroup>
   </Target>
diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt
index 67adb7f..556a8f2 100644
--- a/PCbuild/readme.txt
+++ b/PCbuild/readme.txt
@@ -1,314 +1,330 @@
-Quick Start Guide

------------------

-

-1.  Install Microsoft Visual Studio 2008, any edition.

-2.  Install Microsoft Visual Studio 2010, any edition, or Windows SDK 7.1

-    and any version of Microsoft Visual Studio newer than 2010.

-3.  Install Subversion, and make sure 'svn.exe' is on your PATH.

-4.  Run "build.bat -e" to build Python in 32-bit Release configuration.

-5.  (Optional, but recommended) Run the test suite with "rt.bat -q".

-

-

-Building Python using MSVC 9.0 via MSBuild

-------------------------------------------

-

-This directory is used to build Python for Win32 and x64 platforms, e.g.

-Windows 2000 and later.  In order to use the project files in this

-directory, you must have installed the MSVC 9.0 compilers, the v90

-PlatformToolset project files for MSBuild, and MSBuild version 4.0 or later.

-The easiest way to make sure you have all of these components is to install

-Visual Studio 2008 and Visual Studio 2010.  Another configuration proven

-to work is Visual Studio 2008, Windows SDK 7.1, and Visual Studio 2013.

-

-If you only have Visual Studio 2008 available, use the project files in

-../PC/VS9.0 which are fully supported and specifically for VS 2008.

-

-If you do not have Visual Studio 2008 available, you can use these project

-files to build using a different version of MSVC.  For example, use

-

-   PCbuild\build.bat "/p:PlatformToolset=v100"

-

-to build using MSVC10 (Visual Studio 2010).

-

-***WARNING***

-Building Python 2.7 for Windows using any toolchain that doesn't link

-against MSVCRT90.dll is *unsupported* as the resulting python.exe will

-not be able to use precompiled extension modules that do link against

-MSVCRT90.dll.

-

-For other Windows platforms and compilers, see ../PC/readme.txt.

-

-All you need to do to build is open the solution "pcbuild.sln" in Visual

-Studio, select the desired combination of configuration and platform,

-then build with "Build Solution".  You can also build from the command

-line using the "build.bat" script in this directory; see below for

-details.  The solution is configured to build the projects in the correct

-order.

-

-The solution currently supports two platforms.  The Win32 platform is

-used to build standard x86-compatible 32-bit binaries, output into this

-directory.  The x64 platform is used for building 64-bit AMD64 (aka

-x86_64 or EM64T) binaries, output into the amd64 sub-directory.  The

-Itanium (IA-64) platform is no longer supported.

-

-Four configuration options are supported by the solution:

-Debug

-    Used to build Python with extra debugging capabilities, equivalent

-    to using ./configure --with-pydebug on UNIX.  All binaries built

-    using this configuration have "_d" added to their name:

-    python27_d.dll, python_d.exe, parser_d.pyd, and so on.  Both the

-    build and rt (run test) batch files in this directory accept a -d

-    option for debug builds.  If you are building Python to help with

-    development of CPython, you will most likely use this configuration.

-PGInstrument, PGUpdate

-    Used to build Python in Release configuration using PGO, which

-    requires Professional Edition of Visual Studio 2008.  See the

-    "Profile Guided Optimization" section below for more information.

-    Build output from each of these configurations lands in its own

-    sub-directory of this directory.  The official Python releases may

-    be built using these configurations.

-Release

-    Used to build Python as it is meant to be used in production

-    settings, though without PGO.

-

-

-Building Python using the build.bat script

-----------------------------------------------

-

-In this directory you can find build.bat, a script designed to make

-building Python on Windows simpler.  This script will use the env.bat

-script to detect one of Visual Studio 2015, 2013, 2012, or 2010, any of

-which contains a usable version of MSBuild.

-

-By default, build.bat will build Python in Release configuration for

-the 32-bit Win32 platform.  It accepts several arguments to change

-this behavior, try `build.bat -h` to learn more.

-

-

-Legacy support

---------------

-

-You can find build directories for older versions of Visual Studio and

-Visual C++ in the PC directory.  The project files in PC/VS9.0/ are

-specific to Visual Studio 2008, and will be fully supported for the life

-of Python 2.7.

-

-The following legacy build directories are no longer maintained and may

-not work out of the box.

-

-PC/VC6/

-    Visual C++ 6.0

-PC/VS7.1/

-    Visual Studio 2003 (7.1)

-PC/VS8.0/

-    Visual Studio 2005 (8.0)

-

-

-C Runtime

----------

-

-Visual Studio 2008 uses version 9 of the C runtime (MSVCRT9).  The executables

-are linked to a CRT "side by side" assembly which must be present on the target

-machine.  This is available under the VC/Redist folder of your visual studio

-distribution. On XP and later operating systems that support

-side-by-side assemblies it is not enough to have the msvcrt90.dll present,

-it has to be there as a whole assembly, that is, a folder with the .dll

-and a .manifest.  Also, a check is made for the correct version.

-Therefore, one should distribute this assembly with the dlls, and keep

-it in the same directory.  For compatibility with older systems, one should

-also set the PATH to this directory so that the dll can be found.

-For more info, see the Readme in the VC/Redist folder.

-

-

-Sub-Projects

-------------

-

-The CPython project is split up into several smaller sub-projects which

-are managed by the pcbuild.sln solution file.  Each sub-project is

-represented by a .vcxproj and a .vcxproj.filters file starting with the

-name of the sub-project.  These sub-projects fall into a few general

-categories:

-

-The following sub-projects represent the bare minimum required to build

-a functioning CPython interpreter.  If nothing else builds but these,

-you'll have a very limited but usable python.exe:

-pythoncore

-    .dll and .lib

-python

-    .exe

-

-These sub-projects provide extra executables that are useful for running

-CPython in different ways:

-pythonw

-    pythonw.exe, a variant of python.exe that doesn't open a Command

-    Prompt window

-pylauncher

-    py.exe, the Python Launcher for Windows, see

-        http://docs.python.org/3/using/windows.html#launcher

-pywlauncher

-    pyw.exe, a variant of py.exe that doesn't open a Command Prompt

-    window

-

-The following sub-projects are for individual modules of the standard

-library which are implemented in C; each one builds a DLL (renamed to

-.pyd) of the same name as the project:

-_ctypes

-_ctypes_test

-_elementtree

-_hashlib

-_msi

-_multiprocessing

-_socket

-_testcapi

-pyexpat

-select

-unicodedata

-winsound

-

-There is also a w9xpopen project to build w9xpopen.exe, which is used

-for platform.popen() on platforms whose COMSPEC points to 'command.com'.

-

-The following Python-controlled sub-projects wrap external projects.

-Note that these external libraries are not necessary for a working

-interpreter, but they do implement several major features.  See the

-"Getting External Sources" section below for additional information

-about getting the source for building these libraries.  The sub-projects

-are:

-_bsddb

-    Python wrapper for Berkeley DB version 4.7.25.

-    Homepage:

-        http://www.oracle.com/us/products/database/berkeley-db/

-_bz2

-    Python wrapper for version 1.0.6 of the libbzip2 compression library

-    Homepage:

-        http://www.bzip.org/

-_ssl

-    Python wrapper for version 1.0.2j of the OpenSSL secure sockets

-    library, which is built by ssl.vcxproj

-    Homepage:

-        http://www.openssl.org/

-

-    Building OpenSSL requires nasm.exe (the Netwide Assembler), version

-    2.10 or newer from

-        http://www.nasm.us/

-    to be somewhere on your PATH.  More recent versions of OpenSSL may

-    need a later version of NASM. If OpenSSL's self tests don't pass,

-    you should first try to update NASM and do a full rebuild of

-    OpenSSL.  If you use the PCbuild\get_externals.bat method

-    for getting sources, it also downloads a version of NASM which the

-    libeay/ssleay sub-projects use.

-

-    The libeay/ssleay sub-projects expect your OpenSSL sources to have

-    already been configured and be ready to build.  If you get your sources

-    from svn.python.org as suggested in the "Getting External Sources"

-    section below, the OpenSSL source will already be ready to go.  If

-    you want to build a different version, you will need to run

-

-       PCbuild\prepare_ssl.py path\to\openssl-source-dir

-

-    That script will prepare your OpenSSL sources in the same way that

-    those available on svn.python.org have been prepared.  Note that

-    Perl must be installed and available on your PATH to configure

-    OpenSSL.  ActivePerl is recommended and is available from

-        http://www.activestate.com/activeperl/

-

-    The libeay and ssleay sub-projects will build the modules of OpenSSL

-    required by _ssl and _hashlib and may need to be manually updated when

-    upgrading to a newer version of OpenSSL or when adding new

-    functionality to _ssl or _hashlib. They will not clean up their output

-    with the normal Clean target; CleanAll should be used instead.

-_sqlite3

-    Wraps SQLite 3.8.11.0, which is itself built by sqlite3.vcxproj

-    Homepage:

-        http://www.sqlite.org/

-_tkinter

-    Wraps version 8.5.15 of the Tk windowing system.

-    Homepage:

-        http://www.tcl.tk/

-

-    Tkinter's dependencies are built by the tcl.vcxproj and tk.vcxproj

-    projects.  The tix.vcxproj project also builds the Tix extended

-    widget set for use with Tkinter.

-

-    Those three projects install their respective components in a

-    directory alongside the source directories called "tcltk" on

-    Win32 and "tcltk64" on x64.  They also copy the Tcl and Tk DLLs

-    into the current output directory, which should ensure that Tkinter

-    is able to load Tcl/Tk without having to change your PATH.

-

-    The tcl, tk, and tix sub-projects do not clean their builds with

-    the normal Clean target; if you need to rebuild, you should use the

-    CleanAll target or manually delete their builds.

-

-

-Getting External Sources

-------------------------

-

-The last category of sub-projects listed above wrap external projects

-Python doesn't control, and as such a little more work is required in

-order to download the relevant source files for each project before they

-can be built.  However, a simple script is provided to make this as

-painless as possible, called "get_externals.bat" and located in this

-directory.  This script extracts all the external sub-projects from

-    http://svn.python.org/projects/external

-via Subversion (so you'll need svn.exe on your PATH) and places them

-in ..\externals (relative to this directory).

-

-It is also possible to download sources from each project's homepage,

-though you may have to change folder names or pass the names to MSBuild

-as the values of certain properties in order for the build solution to

-find them.  This is an advanced topic and not necessarily fully

-supported.

-

-The get_externals.bat script is called automatically by build.bat when

-you pass the '-e' option to it.

-

-

-Profile Guided Optimization

----------------------------

-

-The solution has two configurations for PGO. The PGInstrument

-configuration must be built first. The PGInstrument binaries are linked

-against a profiling library and contain extra debug information. The

-PGUpdate configuration takes the profiling data and generates optimized

-binaries.

-

-The build_pgo.bat script automates the creation of optimized binaries.

-It creates the PGI files, runs the unit test suite or PyBench with the

-PGI python, and finally creates the optimized files.

-

-See

-    http://msdn.microsoft.com/en-us/library/e7k32f4k(VS.90).aspx

-for more on this topic.

-

-

-Static library

---------------

-

-The solution has no configuration for static libraries. However it is

-easy to build a static library instead of a DLL. You simply have to set

-the "Configuration Type" to "Static Library (.lib)" and alter the

-preprocessor macro "Py_ENABLE_SHARED" to "Py_NO_ENABLE_SHARED". You may

-also have to change the "Runtime Library" from "Multi-threaded DLL

-(/MD)" to "Multi-threaded (/MT)".

-

-

-Visual Studio properties

-------------------------

-

-The PCbuild solution makes use of Visual Studio property files (*.props)

-to simplify each project. The properties can be viewed in the Property

-Manager (View -> Other Windows -> Property Manager) but should be

-carefully modified by hand.

-

-The property files used are:

- * python (versions, directories and build names)

- * pyproject (base settings for all projects)

- * openssl (used by libeay and ssleay projects)

- * tcltk (used by _tkinter, tcl, tk and tix projects)

-

-The pyproject property file defines all of the build settings for each

-project, with some projects overriding certain specific values. The GUI

-doesn't always reflect the correct settings and may confuse the user

-with false information, especially for settings that automatically adapt

-for diffirent configurations.

+Quick Start Guide
+-----------------
+
+1.  Install Microsoft Visual Studio 2008, any edition.
+2.  Install Microsoft Visual Studio 2010, any edition, or Windows SDK 7.1
+    and any version of Microsoft Visual Studio newer than 2010.
+2a. Optionally install Python 3.6 or later.  If not installed,
+    get_externals.bat (build.bat -e) will download and use Python via
+    NuGet.
+3.  Run "build.bat -e" to build Python in 32-bit Release configuration.
+4.  (Optional, but recommended) Run the test suite with "rt.bat -q".
+
+
+Building Python using MSVC 9.0 via MSBuild
+------------------------------------------
+
+This directory is used to build Python for Win32 and x64 platforms, e.g.
+Windows 2000 and later.  In order to use the project files in this
+directory, you must have installed the MSVC 9.0 compilers, the v90
+PlatformToolset project files for MSBuild, and MSBuild version 4.0 or later.
+The easiest way to make sure you have all of these components is to install
+Visual Studio 2008 and Visual Studio 2010.  Another configuration proven
+to work is Visual Studio 2008, Windows SDK 7.1, and Visual Studio 2013.
+
+If you only have Visual Studio 2008 available, use the project files in
+../PC/VS9.0 which are fully supported and specifically for VS 2008.
+
+If you do not have Visual Studio 2008 available, you can use these project
+files to build using a different version of MSVC.  For example, use
+
+   PCbuild\build.bat "/p:PlatformToolset=v100"
+
+to build using MSVC10 (Visual Studio 2010).
+
+***WARNING***
+Building Python 2.7 for Windows using any toolchain that doesn't link
+against MSVCRT90.dll is *unsupported* as the resulting python.exe will
+not be able to use precompiled extension modules that do link against
+MSVCRT90.dll.
+
+For other Windows platforms and compilers, see ../PC/readme.txt.
+
+To build modules that depend on external libraries, you need to download
+(and, for some of them, build) those first. It's thus recommended to build
+from the command line once as specified below under "Getting External Sources"
+as that does this automatically.
+
+Then, to continue development, you can open the solution "pcbuild.sln" in
+Visual Studio, select the desired combination of configuration and platform,
+then build with "Build Solution".  You can also build from the command
+line using the "build.bat" script in this directory; see below for
+details.  The solution is configured to build the projects in the correct
+order.
+
+To build an installer package, refer to the README in the Tools/msi folder.
+
+The solution currently supports two platforms.  The Win32 platform is
+used to build standard x86-compatible 32-bit binaries, output into this
+directory.  The x64 platform is used for building 64-bit AMD64 (aka
+x86_64 or EM64T) binaries, output into the amd64 sub-directory.  The
+Itanium (IA-64) platform is no longer supported.
+
+Four configuration options are supported by the solution:
+Debug
+    Used to build Python with extra debugging capabilities, equivalent
+    to using ./configure --with-pydebug on UNIX.  All binaries built
+    using this configuration have "_d" added to their name:
+    python27_d.dll, python_d.exe, parser_d.pyd, and so on.  Both the
+    build and rt (run test) batch files in this directory accept a -d
+    option for debug builds.  If you are building Python to help with
+    development of CPython, you will most likely use this configuration.
+PGInstrument, PGUpdate
+    Used to build Python in Release configuration using PGO, which
+    requires Professional Edition of Visual Studio 2008.  See the
+    "Profile Guided Optimization" section below for more information.
+    Build output from each of these configurations lands in its own
+    sub-directory of this directory.  The official Python releases may
+    be built using these configurations.
+Release
+    Used to build Python as it is meant to be used in production
+    settings, though without PGO.
+
+
+Building Python using the build.bat script
+----------------------------------------------
+
+In this directory you can find build.bat, a script designed to make
+building Python on Windows simpler.  This script will use the env.bat
+script to detect one of Visual Studio 2015, 2013, 2012, or 2010, any of
+which contains a usable version of MSBuild.
+
+By default, build.bat will build Python in Release configuration for
+the 32-bit Win32 platform.  It accepts several arguments to change
+this behavior, try `build.bat -h` to learn more.
+
+
+Legacy support
+--------------
+
+You can find build directories for older versions of Visual Studio and
+Visual C++ in the PC directory.  The project files in PC/VS9.0/ are
+specific to Visual Studio 2008, and will be fully supported for the life
+of Python 2.7.
+
+The following legacy build directories are no longer maintained and may
+not work out of the box.
+
+PC/VC6/
+    Visual C++ 6.0
+PC/VS7.1/
+    Visual Studio 2003 (7.1)
+PC/VS8.0/
+    Visual Studio 2005 (8.0)
+
+
+C Runtime
+---------
+
+Visual Studio 2008 uses version 9 of the C runtime (MSVCRT9).  The executables
+are linked to a CRT "side by side" assembly which must be present on the target
+machine.  This is available under the VC/Redist folder of your visual studio
+distribution. On XP and later operating systems that support
+side-by-side assemblies it is not enough to have the msvcrt90.dll present,
+it has to be there as a whole assembly, that is, a folder with the .dll
+and a .manifest.  Also, a check is made for the correct version.
+Therefore, one should distribute this assembly with the dlls, and keep
+it in the same directory.  For compatibility with older systems, one should
+also set the PATH to this directory so that the dll can be found.
+For more info, see the Readme in the VC/Redist folder.
+
+
+Sub-Projects
+------------
+
+The CPython project is split up into several smaller sub-projects which
+are managed by the pcbuild.sln solution file.  Each sub-project is
+represented by a .vcxproj and a .vcxproj.filters file starting with the
+name of the sub-project.  These sub-projects fall into a few general
+categories:
+
+The following sub-projects represent the bare minimum required to build
+a functioning CPython interpreter.  If nothing else builds but these,
+you'll have a very limited but usable python.exe:
+pythoncore
+    .dll and .lib
+python
+    .exe
+
+These sub-projects provide extra executables that are useful for running
+CPython in different ways:
+pythonw
+    pythonw.exe, a variant of python.exe that doesn't open a Command
+    Prompt window
+pylauncher
+    py.exe, the Python Launcher for Windows, see
+        http://docs.python.org/3/using/windows.html#launcher
+pywlauncher
+    pyw.exe, a variant of py.exe that doesn't open a Command Prompt
+    window
+
+The following sub-projects are for individual modules of the standard
+library which are implemented in C; each one builds a DLL (renamed to
+.pyd) of the same name as the project:
+_ctypes
+_ctypes_test
+_elementtree
+_hashlib
+_msi
+_multiprocessing
+_socket
+_testcapi
+pyexpat
+select
+unicodedata
+winsound
+
+There is also a w9xpopen project to build w9xpopen.exe, which is used
+for platform.popen() on platforms whose COMSPEC points to 'command.com'.
+
+The following Python-controlled sub-projects wrap external projects.
+Note that these external libraries are not necessary for a working
+interpreter, but they do implement several major features.  See the
+"Getting External Sources" section below for additional information
+about getting the source for building these libraries.  The sub-projects
+are:
+_bsddb
+    Python wrapper for Berkeley DB version 4.7.25.
+    Homepage:
+        http://www.oracle.com/us/products/database/berkeley-db/
+_bz2
+    Python wrapper for version 1.0.6 of the libbzip2 compression library
+    Homepage:
+        http://www.bzip.org/
+_ssl
+    Python wrapper for version 1.0.2o of the OpenSSL secure sockets
+    library, which is built by ssl.vcxproj
+    Homepage:
+        http://www.openssl.org/
+
+    Building OpenSSL requires nasm.exe (the Netwide Assembler), version
+    2.10 or newer from
+        http://www.nasm.us/
+    to be somewhere on your PATH.  More recent versions of OpenSSL may
+    need a later version of NASM. If OpenSSL's self tests don't pass,
+    you should first try to update NASM and do a full rebuild of
+    OpenSSL.  If you use the PCbuild\get_externals.bat method
+    for getting sources, it also downloads a version of NASM which the
+    libeay/ssleay sub-projects use.
+
+    The libeay/ssleay sub-projects expect your OpenSSL sources to have
+    already been configured and be ready to build.  If you get your sources
+    from svn.python.org as suggested in the "Getting External Sources"
+    section below, the OpenSSL source will already be ready to go.  If
+    you want to build a different version, you will need to run
+
+       PCbuild\prepare_ssl.py path\to\openssl-source-dir
+
+    That script will prepare your OpenSSL sources in the same way that
+    those available on svn.python.org have been prepared.  Note that
+    Perl must be installed and available on your PATH to configure
+    OpenSSL.  ActivePerl is recommended and is available from
+        http://www.activestate.com/activeperl/
+
+    The libeay and ssleay sub-projects will build the modules of OpenSSL
+    required by _ssl and _hashlib and may need to be manually updated when
+    upgrading to a newer version of OpenSSL or when adding new
+    functionality to _ssl or _hashlib. They will not clean up their output
+    with the normal Clean target; CleanAll should be used instead.
+_sqlite3
+    Wraps SQLite 3.8.11.0, which is itself built by sqlite3.vcxproj
+    Homepage:
+        http://www.sqlite.org/
+_tkinter
+    Wraps version 8.5.19 of the Tk windowing system.
+    Homepage:
+        http://www.tcl.tk/
+
+    Tkinter's dependencies are built by the tcl.vcxproj and tk.vcxproj
+    projects.  The tix.vcxproj project also builds the Tix extended
+    widget set for use with Tkinter.
+
+    Those three projects install their respective components in a
+    directory alongside the source directories called "tcltk" on
+    Win32 and "tcltk64" on x64.  They also copy the Tcl and Tk DLLs
+    into the current output directory, which should ensure that Tkinter
+    is able to load Tcl/Tk without having to change your PATH.
+
+    The tcl, tk, and tix sub-projects do not clean their builds with
+    the normal Clean target; if you need to rebuild, you should use the
+    CleanAll target or manually delete their builds.
+
+
+Getting External Sources
+------------------------
+
+The last category of sub-projects listed above wrap external projects
+Python doesn't control, and as such a little more work is required in
+order to download the relevant source files for each project before they
+can be built.  However, a simple script is provided to make this as
+painless as possible, called "get_externals.bat" and located in this
+directory.  This script extracts all the external sub-projects from
+    https://github.com/python/cpython-source-deps
+and
+    https://github.com/python/cpython-bin-deps
+via a Python script called "get_external.py", located in this directory.
+If Python 3.6 or later is not available via the "py.exe" launcher, the
+path or command to use for Python can be provided in the PYTHON_FOR_BUILD
+environment variable, or get_externals.bat will download the latest
+version of NuGet and use it to download the latest "pythonx86" package
+for use with get_external.py.  Everything downloaded by these scripts is
+stored in ..\externals (relative to this directory).
+
+It is also possible to download sources from each project's homepage,
+though you may have to change folder names or pass the names to MSBuild
+as the values of certain properties in order for the build solution to
+find them.  This is an advanced topic and not necessarily fully
+supported.
+
+The get_externals.bat script is called automatically by build.bat when
+you pass the '-e' option to it.
+
+
+Profile Guided Optimization
+---------------------------
+
+The solution has two configurations for PGO. The PGInstrument
+configuration must be built first. The PGInstrument binaries are linked
+against a profiling library and contain extra debug information. The
+PGUpdate configuration takes the profiling data and generates optimized
+binaries.
+
+The build_pgo.bat script automates the creation of optimized binaries.
+It creates the PGI files, runs the unit test suite or PyBench with the
+PGI python, and finally creates the optimized files.
+
+See
+    http://msdn.microsoft.com/en-us/library/e7k32f4k(VS.90).aspx
+for more on this topic.
+
+
+Static library
+--------------
+
+The solution has no configuration for static libraries. However it is
+easy to build a static library instead of a DLL. You simply have to set
+the "Configuration Type" to "Static Library (.lib)" and alter the
+preprocessor macro "Py_ENABLE_SHARED" to "Py_NO_ENABLE_SHARED". You may
+also have to change the "Runtime Library" from "Multi-threaded DLL
+(/MD)" to "Multi-threaded (/MT)".
+
+
+Visual Studio properties
+------------------------
+
+The PCbuild solution makes use of Visual Studio property files (*.props)
+to simplify each project. The properties can be viewed in the Property
+Manager (View -> Other Windows -> Property Manager) but should be
+carefully modified by hand.
+
+The property files used are:
+ * python (versions, directories and build names)
+ * pyproject (base settings for all projects)
+ * openssl (used by libeay and ssleay projects)
+ * tcltk (used by _tkinter, tcl, tk and tix projects)
+
+The pyproject property file defines all of the build settings for each
+project, with some projects overriding certain specific values. The GUI
+doesn't always reflect the correct settings and may confuse the user
+with false information, especially for settings that automatically adapt
+for diffirent configurations.
diff --git a/PCbuild/rt.bat b/PCbuild/rt.bat
index a65d818..19012d6 100644
--- a/PCbuild/rt.bat
+++ b/PCbuild/rt.bat
@@ -1,60 +1,60 @@
-@echo off

-rem Run Tests.  Run the regression test suite.

-rem Usage:  rt [-d] [-O] [-q] [-x64] regrtest_args

-rem -d   Run Debug build (python_d.exe).  Else release build.

-rem -O   Run python.exe or python_d.exe (see -d) with -O.

-rem -q   "quick" -- normally the tests are run twice, the first time

-rem      after deleting all the .py[co] files reachable from Lib/.

-rem      -q runs the tests just once, and without deleting .py[co] files.

-rem -x64 Run the 64-bit build of python (or python_d if -d was specified)

-rem      from the 'amd64' dir instead of the 32-bit build in this dir.

-rem All leading instances of these switches are shifted off, and

-rem whatever remains (up to 9 arguments) is passed to regrtest.py.

-rem For example,

-rem     rt -O -d -x test_thread

-rem runs

-rem     python_d -O ../lib/test/regrtest.py -x test_thread

-rem twice, and

-rem     rt -q -g test_binascii

-rem runs

-rem     python_d ../lib/test/regrtest.py -g test_binascii

-rem to generate the expected-output file for binascii quickly.

-rem

-rem Confusing:  if you want to pass a comma-separated list, like

-rem     -u network,largefile

-rem then you have to quote it on the rt line, like

-rem     rt -u "network,largefile"

-

-setlocal

-

-set pcbuild=%~dp0

-set prefix=%pcbuild%

-set suffix=

-set qmode=

-set dashO=

-set regrtestargs=

-

-:CheckOpts

-if "%1"=="-O" (set dashO=-O)     & shift & goto CheckOpts

-if "%1"=="-q" (set qmode=yes)    & shift & goto CheckOpts

-if "%1"=="-d" (set suffix=_d)    & shift & goto CheckOpts

-if "%1"=="-x64" (set prefix=%pcbuild%amd64\) & shift & goto CheckOpts

-if NOT "%1"=="" (set regrtestargs=%regrtestargs% %1) & shift & goto CheckOpts

-

-set exe=%prefix%python%suffix%

-set cmd="%exe%" %dashO% -Wd -3 -E -tt "%pcbuild%..\Lib\test\regrtest.py" %regrtestargs%

-if defined qmode goto Qmode

-

-echo Deleting .pyc/.pyo files ...

-"%exe%" "%pcbuild%rmpyc.py"

-

-echo on

-%cmd%

-@echo off

-

-echo About to run again without deleting .pyc/.pyo first:

-pause

-

-:Qmode

-echo on

-%cmd%

+@echo off
+rem Run Tests.  Run the regression test suite.
+rem Usage:  rt [-d] [-O] [-q] [-x64] regrtest_args
+rem -d   Run Debug build (python_d.exe).  Else release build.
+rem -O   Run python.exe or python_d.exe (see -d) with -O.
+rem -q   "quick" -- normally the tests are run twice, the first time
+rem      after deleting all the .py[co] files reachable from Lib/.
+rem      -q runs the tests just once, and without deleting .py[co] files.
+rem -x64 Run the 64-bit build of python (or python_d if -d was specified)
+rem      from the 'amd64' dir instead of the 32-bit build in this dir.
+rem All leading instances of these switches are shifted off, and
+rem whatever remains (up to 9 arguments) is passed to regrtest.py.
+rem For example,
+rem     rt -O -d -x test_thread
+rem runs
+rem     python_d -O ../lib/test/regrtest.py -x test_thread
+rem twice, and
+rem     rt -q -g test_binascii
+rem runs
+rem     python_d ../lib/test/regrtest.py -g test_binascii
+rem to generate the expected-output file for binascii quickly.
+rem
+rem Confusing:  if you want to pass a comma-separated list, like
+rem     -u network,largefile
+rem then you have to quote it on the rt line, like
+rem     rt -u "network,largefile"
+
+setlocal
+
+set pcbuild=%~dp0
+set prefix=%pcbuild%
+set suffix=
+set qmode=
+set dashO=
+set regrtestargs=
+
+:CheckOpts
+if "%1"=="-O" (set dashO=-O)     & shift & goto CheckOpts
+if "%1"=="-q" (set qmode=yes)    & shift & goto CheckOpts
+if "%1"=="-d" (set suffix=_d)    & shift & goto CheckOpts
+if "%1"=="-x64" (set prefix=%pcbuild%amd64\) & shift & goto CheckOpts
+if NOT "%1"=="" (set regrtestargs=%regrtestargs% %1) & shift & goto CheckOpts
+
+set exe=%prefix%python%suffix%
+set cmd="%exe%" %dashO% -Wd -3 -E -tt "%pcbuild%..\Lib\test\regrtest.py" %regrtestargs%
+if defined qmode goto Qmode
+
+echo Deleting .pyc/.pyo files ...
+"%exe%" "%pcbuild%rmpyc.py"
+
+echo on
+%cmd%
+@echo off
+
+echo About to run again without deleting .pyc/.pyo first:
+pause
+
+:Qmode
+echo on
+%cmd%
diff --git a/PCbuild/tcltk.props b/PCbuild/tcltk.props
index 9660a9f..36cdef0 100644
--- a/PCbuild/tcltk.props
+++ b/PCbuild/tcltk.props
@@ -4,7 +4,7 @@
   <PropertyGroup>
     <TclMajorVersion>8</TclMajorVersion>
     <TclMinorVersion>5</TclMinorVersion>
-    <TclPatchLevel>15</TclPatchLevel>
+    <TclPatchLevel>19</TclPatchLevel>
     <TclRevision>0</TclRevision>
     <TkMajorVersion>$(TclMajorVersion)</TkMajorVersion>
     <TkMinorVersion>$(TclMinorVersion)</TkMinorVersion>
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py
index 2bbd5a0..ac61c78 100755
--- a/Parser/asdl_c.py
+++ b/Parser/asdl_c.py
@@ -509,8 +509,8 @@
                 self.emit("%s = asdl_seq_new(len, arena);" % field.name, depth+1)
             self.emit("if (%s == NULL) goto failed;" % field.name, depth+1)
             self.emit("for (i = 0; i < len; i++) {", depth+1)
-            self.emit("%s value;" % ctype, depth+2)
-            self.emit("res = obj2ast_%s(PyList_GET_ITEM(tmp, i), &value, arena);" %
+            self.emit("%s val;" % ctype, depth+2)
+            self.emit("res = obj2ast_%s(PyList_GET_ITEM(tmp, i), &val, arena);" %
                       field.type, depth+2, reflow=False)
             self.emit("if (res != 0) goto failed;", depth+2)
             self.emit("if (len != PyList_GET_SIZE(tmp)) {", depth+2)
@@ -520,7 +520,7 @@
                       depth+3, reflow=False)
             self.emit("goto failed;", depth+3)
             self.emit("}", depth+2)
-            self.emit("asdl_seq_SET(%s, i, value);" % field.name, depth+2)
+            self.emit("asdl_seq_SET(%s, i, val);" % field.name, depth+2)
             self.emit("}", depth+1)
         else:
             self.emit("res = obj2ast_%s(tmp, &%s, arena);" %
@@ -830,7 +830,7 @@
 static int obj2ast_int(PyObject* obj, int* out, PyArena* arena)
 {
     int i;
-    if (!PyInt_Check(obj) && !PyLong_Check(obj)) {
+    if (!_PyAnyInt_Check(obj)) {
         PyObject *s = PyObject_Repr(obj);
         if (s == NULL) return 1;
         PyErr_Format(PyExc_ValueError, "invalid integer value: %.400s",
diff --git a/Parser/grammar.c b/Parser/grammar.c
index fa1dd7c..fcd2219 100644
--- a/Parser/grammar.c
+++ b/Parser/grammar.c
@@ -32,6 +32,24 @@
     return g;
 }
 
+void
+freegrammar(grammar *g)
+{
+    int i;
+    for (i = 0; i < g->g_ndfas; i++) {
+        int j;
+        free(g->g_dfa[i].d_name);
+        for (j = 0; j < g->g_dfa[i].d_nstates; j++)
+            PyObject_FREE(g->g_dfa[i].d_state[j].s_arc);
+        PyObject_FREE(g->g_dfa[i].d_state);
+    }
+    PyObject_FREE(g->g_dfa);
+    for (i = 0; i < g->g_ll.ll_nlabels; i++)
+        free(g->g_ll.ll_label[i].lb_str);
+    PyObject_FREE(g->g_ll.ll_label);
+    PyObject_FREE(g);
+}
+
 dfa *
 adddfa(grammar *g, int type, char *name)
 {
diff --git a/Parser/intrcheck.c b/Parser/intrcheck.c
index 1c888a5..5844a9a 100644
--- a/Parser/intrcheck.c
+++ b/Parser/intrcheck.c
@@ -172,7 +172,7 @@
 PyOS_AfterFork(void)
 {
 #ifdef WITH_THREAD
-    PyEval_ReInitThreads();
     PyThread_ReInitTLS();
+    PyEval_ReInitThreads();
 #endif
 }
diff --git a/Parser/parsetok.c b/Parser/parsetok.c
index 069cc6b..a5e9222 100644
--- a/Parser/parsetok.c
+++ b/Parser/parsetok.c
@@ -176,7 +176,7 @@
         }
         else
             started = 1;
-        len = b - a; /* XXX this may compute NULL - NULL */
+        len = (a != NULL && b != NULL) ? b - a : 0;
         str = (char *) PyObject_MALLOC(len + 1);
         if (str == NULL) {
             fprintf(stderr, "no mem for next token\n");
@@ -189,10 +189,12 @@
 
 #ifdef PY_PARSER_REQUIRES_FUTURE_KEYWORD
 #endif
-        if (a >= tok->line_start)
+        if (a != NULL && a >= tok->line_start) {
             col_offset = a - tok->line_start;
-        else
+        }
+        else {
             col_offset = -1;
+        }
 
         if ((err_ret->error =
              PyParser_AddToken(ps, (int)type, str, tok->lineno, col_offset,
diff --git a/Parser/pgen.c b/Parser/pgen.c
index f3031ae..b20d976 100644
--- a/Parser/pgen.c
+++ b/Parser/pgen.c
@@ -117,6 +117,17 @@
     return gr;
 }
 
+static void
+freenfagrammar(nfagrammar *gr)
+{
+    int i;
+    for (i = 0; i < gr->gr_nnfas; i++) {
+        PyObject_FREE(gr->gr_nfa[i]->nf_state);
+    }
+    PyObject_FREE(gr->gr_nfa);
+    PyObject_FREE(gr);
+}
+
 static nfa *
 addnfa(nfagrammar *gr, char *name)
 {
@@ -394,6 +405,7 @@
     int istate, jstate, iarc, jarc, ibit;
     nfastate *st;
     nfaarc *ar;
+    int i, j;
 
     ss = newbitset(nbits);
     addclosure(ss, nf, nf->nf_start);
@@ -488,7 +500,11 @@
 
     convert(d, xx_nstates, xx_state);
 
-    /* XXX cleanup */
+    for (i = 0; i < xx_nstates; i++) {
+        for (j = 0; j < xx_state[i].ss_narcs; j++)
+            delbitset(xx_state[i].ss_arc[j].sa_bitset);
+        PyObject_FREE(xx_state[i].ss_arc);
+    }
     PyObject_FREE(xx_state);
 }
 
@@ -669,7 +685,7 @@
     g = maketables(gr);
     translatelabels(g);
     addfirstsets(g);
-    PyObject_FREE(gr);
+    freenfagrammar(gr);
     return g;
 }
 
diff --git a/Parser/pgenmain.c b/Parser/pgenmain.c
index 88fa7f1..0b47295 100644
--- a/Parser/pgenmain.c
+++ b/Parser/pgenmain.c
@@ -67,6 +67,7 @@
         printf("Writing %s ...\n", graminit_h);
     printnonterminals(g, fp);
     fclose(fp);
+    freegrammar(g);
     Py_Exit(0);
     return 0; /* Make gcc -Wall happy */
 }
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index 4fdbad9..c6e61df 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -1636,6 +1636,8 @@
                                    "<> not supported in 3.x; use !=",
                                    tok->filename, tok->lineno,
                                    NULL, NULL)) {
+                tok->done = E_ERROR;
+                tok->cur = tok->inp;
                 return ERRORTOKEN;
             }
         }
@@ -1679,6 +1681,11 @@
 PyTokenizer_Get(struct tok_state *tok, char **p_start, char **p_end)
 {
     int result = tok_get(tok, p_start, p_end);
+    if (tok->fp && ferror(tok->fp)) {
+        clearerr(tok->fp);
+        result = ERRORTOKEN;
+        tok->done = E_IO;
+    }
     if (tok->decoding_erred) {
         result = ERRORTOKEN;
         tok->done = E_DECODE;
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index 28c95b0..2e7a1af 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -617,7 +617,7 @@
 static int obj2ast_int(PyObject* obj, int* out, PyArena* arena)
 {
     int i;
-    if (!PyInt_Check(obj) && !PyLong_Check(obj)) {
+    if (!_PyAnyInt_Check(obj)) {
         PyObject *s = PyObject_Repr(obj);
         if (s == NULL) return 1;
         PyErr_Format(PyExc_ValueError, "invalid integer value: %.400s",
@@ -3348,14 +3348,14 @@
                         body = asdl_seq_new(len, arena);
                         if (body == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Module field \"body\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(body, i, value);
+                                asdl_seq_SET(body, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -3388,14 +3388,14 @@
                         body = asdl_seq_new(len, arena);
                         if (body == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Interactive field \"body\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(body, i, value);
+                                asdl_seq_SET(body, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -3451,14 +3451,14 @@
                         body = asdl_seq_new(len, arena);
                         if (body == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Suite field \"body\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(body, i, value);
+                                asdl_seq_SET(body, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -3564,14 +3564,14 @@
                         body = asdl_seq_new(len, arena);
                         if (body == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"body\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(body, i, value);
+                                asdl_seq_SET(body, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -3593,14 +3593,14 @@
                         decorator_list = asdl_seq_new(len, arena);
                         if (decorator_list == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                expr_ty value;
-                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                                expr_ty val;
+                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"decorator_list\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(decorator_list, i, value);
+                                asdl_seq_SET(decorator_list, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -3649,14 +3649,14 @@
                         bases = asdl_seq_new(len, arena);
                         if (bases == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                expr_ty value;
-                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                                expr_ty val;
+                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"bases\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(bases, i, value);
+                                asdl_seq_SET(bases, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -3678,14 +3678,14 @@
                         body = asdl_seq_new(len, arena);
                         if (body == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"body\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(body, i, value);
+                                asdl_seq_SET(body, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -3707,14 +3707,14 @@
                         decorator_list = asdl_seq_new(len, arena);
                         if (decorator_list == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                expr_ty value;
-                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                                expr_ty val;
+                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"decorator_list\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(decorator_list, i, value);
+                                asdl_seq_SET(decorator_list, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -3770,14 +3770,14 @@
                         targets = asdl_seq_new(len, arena);
                         if (targets == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                expr_ty value;
-                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                                expr_ty val;
+                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Delete field \"targets\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(targets, i, value);
+                                asdl_seq_SET(targets, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -3811,14 +3811,14 @@
                         targets = asdl_seq_new(len, arena);
                         if (targets == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                expr_ty value;
-                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                                expr_ty val;
+                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Assign field \"targets\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(targets, i, value);
+                                asdl_seq_SET(targets, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -3925,14 +3925,14 @@
                         values = asdl_seq_new(len, arena);
                         if (values == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                expr_ty value;
-                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                                expr_ty val;
+                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Print field \"values\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(values, i, value);
+                                asdl_seq_SET(values, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4004,14 +4004,14 @@
                         body = asdl_seq_new(len, arena);
                         if (body == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "For field \"body\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(body, i, value);
+                                asdl_seq_SET(body, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4033,14 +4033,14 @@
                         orelse = asdl_seq_new(len, arena);
                         if (orelse == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "For field \"orelse\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(orelse, i, value);
+                                asdl_seq_SET(orelse, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4088,14 +4088,14 @@
                         body = asdl_seq_new(len, arena);
                         if (body == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "While field \"body\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(body, i, value);
+                                asdl_seq_SET(body, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4117,14 +4117,14 @@
                         orelse = asdl_seq_new(len, arena);
                         if (orelse == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "While field \"orelse\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(orelse, i, value);
+                                asdl_seq_SET(orelse, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4171,14 +4171,14 @@
                         body = asdl_seq_new(len, arena);
                         if (body == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "If field \"body\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(body, i, value);
+                                asdl_seq_SET(body, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4200,14 +4200,14 @@
                         orelse = asdl_seq_new(len, arena);
                         if (orelse == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "If field \"orelse\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(orelse, i, value);
+                                asdl_seq_SET(orelse, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4265,14 +4265,14 @@
                         body = asdl_seq_new(len, arena);
                         if (body == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "With field \"body\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(body, i, value);
+                                asdl_seq_SET(body, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4354,14 +4354,14 @@
                         body = asdl_seq_new(len, arena);
                         if (body == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "TryExcept field \"body\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(body, i, value);
+                                asdl_seq_SET(body, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4383,14 +4383,14 @@
                         handlers = asdl_seq_new(len, arena);
                         if (handlers == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                excepthandler_ty value;
-                                res = obj2ast_excepthandler(PyList_GET_ITEM(tmp, i), &value, arena);
+                                excepthandler_ty val;
+                                res = obj2ast_excepthandler(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "TryExcept field \"handlers\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(handlers, i, value);
+                                asdl_seq_SET(handlers, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4412,14 +4412,14 @@
                         orelse = asdl_seq_new(len, arena);
                         if (orelse == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "TryExcept field \"orelse\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(orelse, i, value);
+                                asdl_seq_SET(orelse, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4454,14 +4454,14 @@
                         body = asdl_seq_new(len, arena);
                         if (body == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "TryFinally field \"body\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(body, i, value);
+                                asdl_seq_SET(body, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4483,14 +4483,14 @@
                         finalbody = asdl_seq_new(len, arena);
                         if (finalbody == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "TryFinally field \"finalbody\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(finalbody, i, value);
+                                asdl_seq_SET(finalbody, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4558,14 +4558,14 @@
                         names = asdl_seq_new(len, arena);
                         if (names == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                alias_ty value;
-                                res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &value, arena);
+                                alias_ty val;
+                                res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Import field \"names\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(names, i, value);
+                                asdl_seq_SET(names, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4611,14 +4611,14 @@
                         names = asdl_seq_new(len, arena);
                         if (names == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                alias_ty value;
-                                res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &value, arena);
+                                alias_ty val;
+                                res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "ImportFrom field \"names\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(names, i, value);
+                                asdl_seq_SET(names, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4710,14 +4710,14 @@
                         names = asdl_seq_new(len, arena);
                         if (names == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                identifier value;
-                                res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &value, arena);
+                                identifier val;
+                                res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Global field \"names\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(names, i, value);
+                                asdl_seq_SET(names, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -4862,14 +4862,14 @@
                         values = asdl_seq_new(len, arena);
                         if (values == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                expr_ty value;
-                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                                expr_ty val;
+                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "BoolOp field \"values\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(values, i, value);
+                                asdl_seq_SET(values, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -5073,14 +5073,14 @@
                         keys = asdl_seq_new(len, arena);
                         if (keys == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                expr_ty value;
-                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                                expr_ty val;
+                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Dict field \"keys\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(keys, i, value);
+                                asdl_seq_SET(keys, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -5102,14 +5102,14 @@
                         values = asdl_seq_new(len, arena);
                         if (values == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                expr_ty value;
-                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                                expr_ty val;
+                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Dict field \"values\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(values, i, value);
+                                asdl_seq_SET(values, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -5142,14 +5142,14 @@
                         elts = asdl_seq_new(len, arena);
                         if (elts == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                expr_ty value;
-                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                                expr_ty val;
+                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Set field \"elts\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(elts, i, value);
+                                asdl_seq_SET(elts, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -5195,14 +5195,14 @@
                         generators = asdl_seq_new(len, arena);
                         if (generators == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                comprehension_ty value;
-                                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
+                                comprehension_ty val;
+                                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "ListComp field \"generators\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(generators, i, value);
+                                asdl_seq_SET(generators, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -5248,14 +5248,14 @@
                         generators = asdl_seq_new(len, arena);
                         if (generators == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                comprehension_ty value;
-                                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
+                                comprehension_ty val;
+                                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "SetComp field \"generators\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(generators, i, value);
+                                asdl_seq_SET(generators, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -5314,14 +5314,14 @@
                         generators = asdl_seq_new(len, arena);
                         if (generators == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                comprehension_ty value;
-                                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
+                                comprehension_ty val;
+                                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "DictComp field \"generators\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(generators, i, value);
+                                asdl_seq_SET(generators, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -5368,14 +5368,14 @@
                         generators = asdl_seq_new(len, arena);
                         if (generators == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                comprehension_ty value;
-                                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
+                                comprehension_ty val;
+                                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "GeneratorExp field \"generators\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(generators, i, value);
+                                asdl_seq_SET(generators, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -5444,14 +5444,14 @@
                         ops = asdl_int_seq_new(len, arena);
                         if (ops == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                cmpop_ty value;
-                                res = obj2ast_cmpop(PyList_GET_ITEM(tmp, i), &value, arena);
+                                cmpop_ty val;
+                                res = obj2ast_cmpop(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Compare field \"ops\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(ops, i, value);
+                                asdl_seq_SET(ops, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -5473,14 +5473,14 @@
                         comparators = asdl_seq_new(len, arena);
                         if (comparators == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                expr_ty value;
-                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                                expr_ty val;
+                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Compare field \"comparators\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(comparators, i, value);
+                                asdl_seq_SET(comparators, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -5530,14 +5530,14 @@
                         args = asdl_seq_new(len, arena);
                         if (args == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                expr_ty value;
-                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                                expr_ty val;
+                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Call field \"args\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(args, i, value);
+                                asdl_seq_SET(args, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -5559,14 +5559,14 @@
                         keywords = asdl_seq_new(len, arena);
                         if (keywords == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                keyword_ty value;
-                                res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &value, arena);
+                                keyword_ty val;
+                                res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Call field \"keywords\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(keywords, i, value);
+                                asdl_seq_SET(keywords, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -5826,14 +5826,14 @@
                         elts = asdl_seq_new(len, arena);
                         if (elts == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                expr_ty value;
-                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                                expr_ty val;
+                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "List field \"elts\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(elts, i, value);
+                                asdl_seq_SET(elts, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -5879,14 +5879,14 @@
                         elts = asdl_seq_new(len, arena);
                         if (elts == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                expr_ty value;
-                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                                expr_ty val;
+                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "Tuple field \"elts\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(elts, i, value);
+                                asdl_seq_SET(elts, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -6070,14 +6070,14 @@
                         dims = asdl_seq_new(len, arena);
                         if (dims == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                slice_ty value;
-                                res = obj2ast_slice(PyList_GET_ITEM(tmp, i), &value, arena);
+                                slice_ty val;
+                                res = obj2ast_slice(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "ExtSlice field \"dims\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(dims, i, value);
+                                asdl_seq_SET(dims, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -6451,14 +6451,14 @@
                 ifs = asdl_seq_new(len, arena);
                 if (ifs == NULL) goto failed;
                 for (i = 0; i < len; i++) {
-                        expr_ty value;
-                        res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                        expr_ty val;
+                        res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                         if (res != 0) goto failed;
                         if (len != PyList_GET_SIZE(tmp)) {
                                 PyErr_SetString(PyExc_RuntimeError, "comprehension field \"ifs\" changed size during iteration");
                                 goto failed;
                         }
-                        asdl_seq_SET(ifs, i, value);
+                        asdl_seq_SET(ifs, i, val);
                 }
                 Py_XDECREF(tmp);
                 tmp = NULL;
@@ -6555,14 +6555,14 @@
                         body = asdl_seq_new(len, arena);
                         if (body == NULL) goto failed;
                         for (i = 0; i < len; i++) {
-                                stmt_ty value;
-                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                                stmt_ty val;
+                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
                                 if (res != 0) goto failed;
                                 if (len != PyList_GET_SIZE(tmp)) {
                                         PyErr_SetString(PyExc_RuntimeError, "ExceptHandler field \"body\" changed size during iteration");
                                         goto failed;
                                 }
-                                asdl_seq_SET(body, i, value);
+                                asdl_seq_SET(body, i, val);
                         }
                         Py_XDECREF(tmp);
                         tmp = NULL;
@@ -6607,14 +6607,14 @@
                 args = asdl_seq_new(len, arena);
                 if (args == NULL) goto failed;
                 for (i = 0; i < len; i++) {
-                        expr_ty value;
-                        res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                        expr_ty val;
+                        res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                         if (res != 0) goto failed;
                         if (len != PyList_GET_SIZE(tmp)) {
                                 PyErr_SetString(PyExc_RuntimeError, "arguments field \"args\" changed size during iteration");
                                 goto failed;
                         }
-                        asdl_seq_SET(args, i, value);
+                        asdl_seq_SET(args, i, val);
                 }
                 Py_XDECREF(tmp);
                 tmp = NULL;
@@ -6658,14 +6658,14 @@
                 defaults = asdl_seq_new(len, arena);
                 if (defaults == NULL) goto failed;
                 for (i = 0; i < len; i++) {
-                        expr_ty value;
-                        res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                        expr_ty val;
+                        res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
                         if (res != 0) goto failed;
                         if (len != PyList_GET_SIZE(tmp)) {
                                 PyErr_SetString(PyExc_RuntimeError, "arguments field \"defaults\" changed size during iteration");
                                 goto failed;
                         }
-                        asdl_seq_SET(defaults, i, value);
+                        asdl_seq_SET(defaults, i, val);
                 }
                 Py_XDECREF(tmp);
                 tmp = NULL;
diff --git a/Python/_warnings.c b/Python/_warnings.c
index 8e8c0cc..37875e5 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -72,6 +72,12 @@
             return NULL;
         return _once_registry;
     }
+    if (!PyDict_Check(registry)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "warnings.onceregistry must be a dict");
+        Py_DECREF(registry);
+        return NULL;
+    }
     Py_DECREF(_once_registry);
     _once_registry = registry;
     return registry;
@@ -296,7 +302,7 @@
     int rc;
 
     if (registry && !PyDict_Check(registry) && (registry != Py_None)) {
-        PyErr_SetString(PyExc_TypeError, "'registry' must be a dict");
+        PyErr_SetString(PyExc_TypeError, "'registry' must be a dict or None");
         return NULL;
     }
 
@@ -678,8 +684,9 @@
         }
 
         /* Split the source into lines. */
-        source_list = PyObject_CallMethodObjArgs(source, splitlines_name,
-                                                    NULL);
+        source_list = PyObject_CallMethodObjArgs((PyObject *)&PyString_Type,
+                                                 splitlines_name, source,
+                                                 NULL);
         Py_DECREF(source);
         if (!source_list)
             return NULL;
diff --git a/Python/ast.c b/Python/ast.c
index 318c0bb..9460325 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -2520,6 +2520,8 @@
             break;
         case STAR:
             str = PyString_InternFromString("*");
+            if (!str)
+                return NULL;
             PyArena_AddPyObject(c->c_arena, str);
             return alias(str, NULL, c->c_arena);
         default:
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index f03e488..4b819da 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -54,7 +54,7 @@
 "__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
 \n\
 Import a module. Because this function is meant for use by the Python\n\
-interpreter and not for general use it is better to use\n\
+interpreter and not for general use, it is better to use\n\
 importlib.import_module() to programmatically import a module.\n\
 \n\
 The globals argument is only used to determine the context;\n\
@@ -63,9 +63,8 @@
 empty list to emulate ``import name''.\n\
 When importing a module from a package, note that __import__('A.B', ...)\n\
 returns package A when fromlist is empty, but its submodule B when\n\
-fromlist is not empty.  Level is used to determine whether to perform \n\
-absolute or relative imports.  -1 is the original strategy of attempting\n\
-both absolute and relative imports, 0 is absolute, a positive number\n\
+fromlist is not empty.  The level argument is used to determine whether to\n\
+perform absolute or relative imports: 0 is absolute, while a positive number\n\
 is the number of parent directories to search relative to the current module.");
 
 
@@ -374,7 +373,9 @@
 "format(value[, format_spec]) -> string\n\
 \n\
 Returns value.__format__(format_spec)\n\
-format_spec defaults to \"\"");
+format_spec defaults to the empty string.\n\
+See the Format Specification Mini-Language section of help('FORMATTING') for\n\
+details.");
 
 static PyObject *
 builtin_chr(PyObject *self, PyObject *args)
@@ -1779,7 +1780,7 @@
 {
     PyObject *v;
     PyNumberMethods *nb;
-    if (PyInt_Check(arg) || PyLong_Check(arg)) {
+    if (_PyAnyInt_Check(arg)) {
         Py_INCREF(arg);
         return arg;
     }
@@ -1794,7 +1795,7 @@
     v = nb->nb_int(arg);
     if (v == NULL)
         return NULL;
-    if (PyInt_Check(v) || PyLong_Check(v))
+    if (_PyAnyInt_Check(v))
         return v;
     Py_DECREF(v);
     PyErr_SetString(PyExc_TypeError,
@@ -2362,6 +2363,11 @@
             }
             /* Either overflowed or is not an int. Restore real objects and process normally */
             result = PyInt_FromLong(i_result);
+            if (result == NULL) {
+                Py_DECREF(item);
+                Py_DECREF(iter);
+                return NULL;
+            }
             temp = PyNumber_Add(result, item);
             Py_DECREF(result);
             Py_DECREF(item);
@@ -2400,6 +2406,11 @@
                 continue;
             }
             result = PyFloat_FromDouble(f_result);
+            if (result == NULL) {
+                Py_DECREF(item);
+                Py_DECREF(iter);
+                return NULL;
+            }
             temp = PyNumber_Add(result, item);
             Py_DECREF(result);
             Py_DECREF(item);
@@ -2443,10 +2454,10 @@
 }
 
 PyDoc_STRVAR(sum_doc,
-"sum(sequence[, start]) -> value\n\
+"sum(iterable[, start]) -> value\n\
 \n\
-Return the sum of a sequence of numbers (NOT strings) plus the value\n\
-of parameter 'start' (which defaults to 0).  When the sequence is\n\
+Return the sum of an iterable or sequence of numbers (NOT strings)\n\
+plus the value of 'start' (which defaults to 0).  When the sequence is\n\
 empty, return start.");
 
 
diff --git a/Python/ceval.c b/Python/ceval.c
index 2af78ff..2088a27 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -689,11 +689,19 @@
 PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
 {
 #ifdef DYNAMIC_EXECUTION_PROFILE
-  #undef USE_COMPUTED_GOTOS
+    #undef USE_COMPUTED_GOTOS
 #endif
 #ifdef HAVE_COMPUTED_GOTOS
     #ifndef USE_COMPUTED_GOTOS
-    #define USE_COMPUTED_GOTOS 1
+        #if defined(__clang__) && (__clang_major__ < 5)
+            /* Computed gotos caused significant performance regression
+             * with clang < 5.0.
+             * https://bugs.python.org/issue32616
+             */
+            #define USE_COMPUTED_GOTOS 0
+        #else
+            #define USE_COMPUTED_GOTOS 1
+        #endif
     #endif
 #else
     #if defined(USE_COMPUTED_GOTOS) && USE_COMPUTED_GOTOS
@@ -1446,10 +1454,14 @@
         {
             w = POP();
             v = TOP();
-            if (PyString_CheckExact(v))
+            if (PyString_CheckExact(v)
+                && (!PyString_Check(w) || PyString_CheckExact(w))) {
+                /* fast path; string formatting, but not if the RHS is a str subclass
+                   (see issue28598) */
                 x = PyString_Format(v, w);
-            else
+            } else {
                 x = PyNumber_Remainder(v, w);
+            }
             Py_DECREF(v);
             Py_DECREF(w);
             SET_TOP(x);
@@ -2586,6 +2598,7 @@
 
         TARGET(IMPORT_NAME)
         {
+            long res;
             w = GETITEM(names, oparg);
             x = PyDict_GetItemString(f->f_builtins, "__import__");
             if (x == NULL) {
@@ -2596,7 +2609,12 @@
             Py_INCREF(x);
             v = POP();
             u = TOP();
-            if (PyInt_AsLong(u) != -1 || PyErr_Occurred())
+            res = PyInt_AsLong(u);
+            if (res != -1 || PyErr_Occurred()) {
+                if (res == -1) {
+                    assert(PyErr_Occurred());
+                    PyErr_Clear();
+                }
                 w = PyTuple_Pack(5,
                             w,
                             f->f_globals,
@@ -2604,6 +2622,7 @@
                                   Py_None : f->f_locals,
                             v,
                             u);
+            }
             else
                 w = PyTuple_Pack(4,
                             w,
@@ -2637,6 +2656,7 @@
             if ((x = f->f_locals) == NULL) {
                 PyErr_SetString(PyExc_SystemError,
                     "no locals found during 'import *'");
+                Py_DECREF(v);
                 break;
             }
             READ_TIMESTAMP(intr0);
@@ -4674,7 +4694,7 @@
 /* Extract a slice index from a PyInt or PyLong or an object with the
    nb_index slot defined, and store in *pi.
    Silently reduce values larger than PY_SSIZE_T_MAX to PY_SSIZE_T_MAX,
-   and silently boost values less than -PY_SSIZE_T_MAX-1 to -PY_SSIZE_T_MAX-1.
+   and silently boost values less than PY_SSIZE_T_MIN to PY_SSIZE_T_MIN.
    Return 0 on error, 1 on success.
 */
 /* Note:  If v is NULL, return success without storing into *pi.  This
@@ -4684,7 +4704,7 @@
 int
 _PyEval_SliceIndex(PyObject *v, Py_ssize_t *pi)
 {
-    if (v != NULL) {
+    if (v != NULL && v != Py_None) {
         Py_ssize_t x;
         if (PyInt_Check(v)) {
             /* XXX(nnorwitz): I think PyInt_AS_LONG is correct,
@@ -4709,9 +4729,28 @@
     return 1;
 }
 
+int
+_PyEval_SliceIndexNotNone(PyObject *v, Py_ssize_t *pi)
+{
+    Py_ssize_t x;
+    if (PyIndex_Check(v)) {
+        x = PyNumber_AsSsize_t(v, NULL);
+        if (x == -1 && PyErr_Occurred())
+            return 0;
+    }
+    else {
+        PyErr_SetString(PyExc_TypeError,
+                        "slice indices must be integers or "
+                        "have an __index__ method");
+        return 0;
+    }
+    *pi = x;
+    return 1;
+}
+
+
 #undef ISINDEX
-#define ISINDEX(x) ((x) == NULL || \
-                    PyInt_Check(x) || PyLong_Check(x) || PyIndex_Check(x))
+#define ISINDEX(x) ((x) == NULL || _PyAnyInt_Check(x) || PyIndex_Check(x))
 
 static PyObject *
 apply_slice(PyObject *u, PyObject *v, PyObject *w) /* return u[v:w] */
diff --git a/Python/compile.c b/Python/compile.c
index 9c9b236..4fe69e1 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -1075,6 +1075,15 @@
         return 0; \
 }
 
+/* Same as ADDOP_O, but steals a reference. */
+#define ADDOP_N(C, OP, O, TYPE) { \
+    if (!compiler_addop_o((C), (OP), (C)->u->u_ ## TYPE, (O))) { \
+        Py_DECREF((O)); \
+        return 0; \
+    } \
+    Py_DECREF((O)); \
+}
+
 #define ADDOP_NAME(C, OP, O, TYPE) { \
     if (!compiler_addop_name((C), (OP), (C)->u->u_ ## TYPE, (O))) \
         return 0; \
@@ -1890,8 +1899,7 @@
                                 dot ? dot - src : strlen(src));
             if (!attr)
                 return 0;
-            ADDOP_O(c, LOAD_ATTR, attr, names);
-            Py_DECREF(attr);
+            ADDOP_N(c, LOAD_ATTR, attr, names);
             src = dot + 1;
         }
     }
@@ -1923,8 +1931,7 @@
         if (level == NULL)
             return 0;
 
-        ADDOP_O(c, LOAD_CONST, level, consts);
-        Py_DECREF(level);
+        ADDOP_N(c, LOAD_CONST, level, consts);
         ADDOP_O(c, LOAD_CONST, Py_None, consts);
         ADDOP_NAME(c, IMPORT_NAME, alias->name, names);
 
@@ -1959,8 +1966,7 @@
 {
     int i, n = asdl_seq_LEN(s->v.ImportFrom.names);
 
-    PyObject *names = PyTuple_New(n);
-    PyObject *level;
+    PyObject *level, *names;
     static PyObject *empty_string;
 
     if (!empty_string) {
@@ -1969,9 +1975,6 @@
             return 0;
     }
 
-    if (!names)
-        return 0;
-
     if (s->v.ImportFrom.level == 0 && c->c_flags &&
         !(c->c_flags->cf_flags & CO_FUTURE_ABSOLUTE_IMPORT))
         level = PyInt_FromLong(-1);
@@ -1979,9 +1982,13 @@
         level = PyInt_FromLong(s->v.ImportFrom.level);
 
     if (!level) {
-        Py_DECREF(names);
         return 0;
     }
+    ADDOP_N(c, LOAD_CONST, level, consts);
+
+    names = PyTuple_New(n);
+    if (!names)
+        return 0;
 
     /* build up the names */
     for (i = 0; i < n; i++) {
@@ -1992,16 +1999,12 @@
 
     if (s->lineno > c->c_future->ff_lineno && s->v.ImportFrom.module &&
         !strcmp(PyString_AS_STRING(s->v.ImportFrom.module), "__future__")) {
-        Py_DECREF(level);
         Py_DECREF(names);
         return compiler_error(c, "from __future__ imports must occur "
                               "at the beginning of the file");
     }
+    ADDOP_N(c, LOAD_CONST, names, consts);
 
-    ADDOP_O(c, LOAD_CONST, level, consts);
-    Py_DECREF(level);
-    ADDOP_O(c, LOAD_CONST, names, consts);
-    Py_DECREF(names);
     if (s->v.ImportFrom.module) {
         ADDOP_NAME(c, IMPORT_NAME, s->v.ImportFrom.module, names);
     }
@@ -2024,7 +2027,6 @@
             store_name = alias->asname;
 
         if (!compiler_nameop(c, store_name, Store)) {
-            Py_DECREF(names);
             return 0;
         }
     }
@@ -2391,8 +2393,7 @@
                             "param invalid for local variable");
             return 0;
         }
-        ADDOP_O(c, op, mangled, varnames);
-        Py_DECREF(mangled);
+        ADDOP_N(c, op, mangled, varnames);
         return 1;
     case OP_GLOBAL:
         switch (ctx) {
diff --git a/Python/getargs.c b/Python/getargs.c
index 32ff6fc..cc1ddde 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -1780,7 +1780,7 @@
                 else
                     (void) va_arg(*p_va, int *);
                 format++;
-            } else if ((c == 's' || c == 'z') && *format == '*') {
+            } else if ((c == 's' || c == 'z' || c == 'w') && *format == '*') {
                 format++;
             }
             break;
diff --git a/Python/getcompiler.c b/Python/getcompiler.c
index 0f441de..9d9c33a 100644
--- a/Python/getcompiler.c
+++ b/Python/getcompiler.c
@@ -24,5 +24,5 @@
 const char *
 Py_GetCompiler(void)
 {
-	return COMPILER;
+    return COMPILER;
 }
diff --git a/Python/getcopyright.c b/Python/getcopyright.c
index c97eaeb..1b69012 100644
--- a/Python/getcopyright.c
+++ b/Python/getcopyright.c
@@ -4,7 +4,7 @@
 
 static char cprt[] = 
 "\
-Copyright (c) 2001-2016 Python Software Foundation.\n\
+Copyright (c) 2001-2018 Python Software Foundation.\n\
 All Rights Reserved.\n\
 \n\
 Copyright (c) 2000 BeOpen.com.\n\
diff --git a/Python/import.c b/Python/import.c
index 1d74faf..f43a47c 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -447,7 +447,9 @@
         dict = PyModule_GetDict(value);
         if (Py_VerboseFlag)
             PySys_WriteStderr("# clear __builtin__._\n");
-        PyDict_SetItemString(dict, "_", Py_None);
+        if (PyDict_SetItemString(dict, "_", Py_None) < 0) {
+            PyErr_Clear();
+        }
     }
     value = PyDict_GetItemString(modules, "sys");
     if (value != NULL && PyModule_Check(value)) {
@@ -457,7 +459,9 @@
         for (p = sys_deletes; *p != NULL; p++) {
             if (Py_VerboseFlag)
                 PySys_WriteStderr("# clear sys.%s\n", *p);
-            PyDict_SetItemString(dict, *p, Py_None);
+            if (PyDict_SetItemString(dict, *p, Py_None) < 0) {
+                PyErr_Clear();
+            }
         }
         for (p = sys_files; *p != NULL; p+=2) {
             if (Py_VerboseFlag)
@@ -465,7 +469,9 @@
             v = PyDict_GetItemString(dict, *(p+1));
             if (v == NULL)
                 v = Py_None;
-            PyDict_SetItemString(dict, *p, v);
+            if (PyDict_SetItemString(dict, *p, v) < 0) {
+                PyErr_Clear();
+            }
         }
     }
 
@@ -475,7 +481,9 @@
         if (Py_VerboseFlag)
             PySys_WriteStderr("# cleanup __main__\n");
         _PyModule_Clear(value);
-        PyDict_SetItemString(modules, "__main__", Py_None);
+        if (PyDict_SetItemString(modules, "__main__", Py_None) < 0) {
+            PyErr_Clear();
+        }
     }
 
     /* The special treatment of __builtin__ here is because even
@@ -510,10 +518,15 @@
                     PySys_WriteStderr(
                         "# cleanup[1] %s\n", name);
                 _PyModule_Clear(value);
-                PyDict_SetItem(modules, key, Py_None);
+                if (PyDict_SetItem(modules, key, Py_None) < 0) {
+                    PyErr_Clear();
+                }
                 ndone++;
             }
         }
+        if (PyErr_Occurred()) {
+            PyErr_Clear();
+        }
     } while (ndone > 0);
 
     /* Next, delete all modules (still skipping __builtin__ and sys) */
@@ -528,7 +541,12 @@
             if (Py_VerboseFlag)
                 PySys_WriteStderr("# cleanup[2] %s\n", name);
             _PyModule_Clear(value);
-            PyDict_SetItem(modules, key, Py_None);
+            if (PyDict_SetItem(modules, key, Py_None) < 0) {
+                PyErr_Clear();
+            }
+        }
+        if (PyErr_Occurred()) {
+            PyErr_Clear();
         }
     }
 
@@ -538,14 +556,18 @@
         if (Py_VerboseFlag)
             PySys_WriteStderr("# cleanup sys\n");
         _PyModule_Clear(value);
-        PyDict_SetItemString(modules, "sys", Py_None);
+        if (PyDict_SetItemString(modules, "sys", Py_None) < 0) {
+            PyErr_Clear();
+        }
     }
     value = PyDict_GetItemString(modules, "__builtin__");
     if (value != NULL && PyModule_Check(value)) {
         if (Py_VerboseFlag)
             PySys_WriteStderr("# cleanup __builtin__\n");
         _PyModule_Clear(value);
-        PyDict_SetItemString(modules, "__builtin__", Py_None);
+        if (PyDict_SetItemString(modules, "__builtin__", Py_None) < 0) {
+            PyErr_Clear();
+        }
     }
 
     /* Finally, clear and delete the modules directory */
diff --git a/Python/marshal.c b/Python/marshal.c
index e1a84d0..f55599b 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -465,6 +465,9 @@
 {
     WFILE wf;
     wf.fp = fp;
+    wf.str = NULL;
+    wf.ptr = NULL;
+    wf.end = NULL;
     wf.error = WFERR_OK;
     wf.depth = 0;
     wf.strings = NULL;
@@ -477,6 +480,9 @@
 {
     WFILE wf;
     wf.fp = fp;
+    wf.str = NULL;
+    wf.ptr = NULL;
+    wf.end = NULL;
     wf.error = WFERR_OK;
     wf.depth = 0;
     wf.strings = (version > 0) ? PyDict_New() : NULL;
diff --git a/Python/pystate.c b/Python/pystate.c
index eb992c1..f33f182 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -588,6 +588,8 @@
 {
     int current;
     PyThreadState *tcur;
+    int need_init_threads = 0;
+
     /* Note that we do not auto-init Python here - apart from
        potential races with 2 threads auto-initializing, pep-311
        spells out other issues.  Embedders are expected to have
@@ -596,6 +598,8 @@
     assert(autoInterpreterState); /* Py_Initialize() hasn't been called! */
     tcur = (PyThreadState *)PyThread_get_key_value(autoTLSkey);
     if (tcur == NULL) {
+        need_init_threads = 1;
+
         /* Create a new thread state for this thread */
         tcur = PyThreadState_New(autoInterpreterState);
         if (tcur == NULL)
@@ -605,16 +609,28 @@
         tcur->gilstate_counter = 0;
         current = 0; /* new thread state is never current */
     }
-    else
+    else {
         current = PyThreadState_IsCurrent(tcur);
-    if (current == 0)
+    }
+
+    if (current == 0) {
         PyEval_RestoreThread(tcur);
+    }
+
     /* Update our counter in the thread-state - no need for locks:
        - tcur will remain valid as we hold the GIL.
        - the counter is safe as we are the only thread "allowed"
          to modify this value
     */
     ++tcur->gilstate_counter;
+
+    if (need_init_threads) {
+        /* At startup, Python has no concrete GIL. If PyGILState_Ensure() is
+           called from a new thread for the first time, we need the create the
+           GIL. */
+        PyEval_InitThreads();
+    }
+
     return current ? PyGILState_LOCKED : PyGILState_UNLOCKED;
 }
 
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 7b85268..2c9f55f 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -37,14 +37,6 @@
 #include "windows.h"
 #endif
 
-#ifndef Py_REF_DEBUG
-#define PRINT_TOTAL_REFS()
-#else /* Py_REF_DEBUG */
-#define PRINT_TOTAL_REFS() fprintf(stderr,                              \
-                   "[%" PY_FORMAT_SIZE_T "d refs]\n",                   \
-                   _Py_GetRefTotal())
-#endif
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -104,6 +96,21 @@
     return PyImport_ImportModule("warnings");
 }
 
+static void
+_PyDebug_PrintTotalRefs(void)
+{
+#ifdef Py_REF_DEBUG
+    Py_ssize_t total;
+
+    if (!Py_GETENV("PYTHONSHOWREFCOUNT")) {
+        return;
+    }
+
+    total = _Py_GetRefTotal();
+    fprintf(stderr, "[%" PY_FORMAT_SIZE_T "d refs]\n", total);
+#endif
+}
+
 static int initialized = 0;
 
 /* API to access the initialized flag -- useful for esoteric use */
@@ -481,10 +488,12 @@
 
     /* Debugging stuff */
 #ifdef COUNT_ALLOCS
-    dump_counts(stdout);
+    if (Py_GETENV("PYTHONSHOWALLOCCOUNT")) {
+        dump_counts(stderr);
+    }
 #endif
 
-    PRINT_TOTAL_REFS();
+    _PyDebug_PrintTotalRefs();
 
 #ifdef Py_TRACE_REFS
     /* Display all objects still alive -- this can invoke arbitrary
@@ -775,7 +784,7 @@
     }
     for (;;) {
         ret = PyRun_InteractiveOneFlags(fp, filename, flags);
-        PRINT_TOTAL_REFS();
+        _PyDebug_PrintTotalRefs();
         if (ret == E_EOF)
             return 0;
         /*
@@ -1127,7 +1136,7 @@
         /* If we failed to dig out the 'code' attribute,
            just let the else clause below print the error. */
     }
-    if (PyInt_Check(value))
+    if (_PyAnyInt_Check(value))
         exitcode = (int)PyInt_AsLong(value);
     else {
         PyObject *sys_stderr = PySys_GetObject("stderr");
@@ -1581,7 +1590,7 @@
     errtype = PyExc_SyntaxError;
     switch (err->error) {
     case E_ERROR:
-        return;
+        goto cleanup;
     case E_SYNTAX:
         errtype = PyExc_IndentationError;
         if (err->expected == INDENT)
@@ -1645,6 +1654,9 @@
         Py_XDECREF(tb);
         break;
     }
+    case E_IO:
+        msg = "I/O error while reading";
+        break;
     case E_LINECONT:
         msg = "unexpected character after line continuation character";
         break;
diff --git a/Python/random.c b/Python/random.c
index 2f83b5d..000cb36 100644
--- a/Python/random.c
+++ b/Python/random.c
@@ -3,7 +3,7 @@
 #include <windows.h>
 #else
 #include <fcntl.h>
-#if defined(HAVE_GETRANDOM) || defined(HAVE_GETENTROPY)
+#if defined(HAVE_SYS_RANDOM_H) && (defined(HAVE_GETRANDOM) || defined(HAVE_GETENTROPY))
 #include <sys/random.h>
 #endif
 #endif
@@ -97,8 +97,15 @@
 }
 
 /* Issue #25003: Don't use getentropy() on Solaris (available since
- * Solaris 11.3), it is blocking whereas os.urandom() should not block. */
-#elif defined(HAVE_GETENTROPY) && !defined(sun)
+   Solaris 11.3), it is blocking whereas os.urandom() should not block.
+
+   Issue #29188: Don't use getentropy() on Linux since the glibc 2.24
+   implements it with the getrandom() syscall which can fail with ENOSYS,
+   and this error is not supported in py_getentropy() and getrandom() is called
+   with flags=0 which blocks until system urandom is initialized, which is not
+   the desired behaviour to seed the Python hash secret nor for os.urandom():
+   see the PEP 524 which was only implemented in Python 3.6. */
+#elif defined(HAVE_GETENTROPY) && !defined(sun) && !defined(linux)
 #define PY_GETENTROPY 1
 
 /* Fill buffer with size pseudo-random bytes generated by getentropy().
diff --git a/Python/symtable.c b/Python/symtable.c
index 3b4247b..21790b1 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -162,12 +162,14 @@
 };
 
 static int symtable_analyze(struct symtable *st);
-static int symtable_warn(struct symtable *st, char *msg, int lineno);
+static int symtable_warn(struct symtable *st,
+                         PyObject *warn, const char *msg, int lineno);
 static int symtable_enter_block(struct symtable *st, identifier name,
                                 _Py_block_ty block, void *ast, int lineno);
 static int symtable_exit_block(struct symtable *st, void *ast);
 static int symtable_visit_stmt(struct symtable *st, stmt_ty s);
 static int symtable_visit_expr(struct symtable *st, expr_ty s);
+static int symtable_visit_listcomp(struct symtable *st, expr_ty e);
 static int symtable_visit_genexp(struct symtable *st, expr_ty s);
 static int symtable_visit_setcomp(struct symtable *st, expr_ty e);
 static int symtable_visit_dictcomp(struct symtable *st, expr_ty e);
@@ -796,14 +798,18 @@
 
 
 static int
-symtable_warn(struct symtable *st, char *msg, int lineno)
+symtable_warn(struct symtable *st, PyObject *warn, const char *msg, int lineno)
 {
-    if (PyErr_WarnExplicit(PyExc_SyntaxWarning, msg, st->st_filename,
-                           lineno, NULL, NULL) < 0)     {
-        if (PyErr_ExceptionMatches(PyExc_SyntaxWarning)) {
+    if (lineno < 0) {
+        lineno = st->st_cur->ste_lineno;
+    }
+    if (PyErr_WarnExplicit(warn, msg, st->st_filename, lineno, NULL, NULL) < 0) {
+        if (PyErr_ExceptionMatches(warn)) {
+            /* Replace the warning exception with a SyntaxError
+               to get a more accurate error report */
+            PyErr_Clear();
             PyErr_SetString(PyExc_SyntaxError, msg);
-            PyErr_SyntaxLocation(st->st_filename,
-                                 st->st_cur->ste_lineno);
+            PyErr_SyntaxLocation(st->st_filename, lineno);
         }
         return 0;
     }
@@ -1153,7 +1159,7 @@
                     PyOS_snprintf(buf, sizeof(buf),
                                   GLOBAL_AFTER_USE,
                                   c_name);
-                if (!symtable_warn(st, buf, s->lineno))
+                if (!symtable_warn(st, PyExc_SyntaxWarning, buf, s->lineno))
                     return 0;
             }
             if (!symtable_add_def(st, name, DEF_GLOBAL))
@@ -1221,8 +1227,8 @@
         VISIT_SEQ(st, expr, e->v.Set.elts);
         break;
     case ListComp_kind:
-        VISIT(st, expr, e->v.ListComp.elt);
-        VISIT_SEQ(st, comprehension, e->v.ListComp.generators);
+        if (!symtable_visit_listcomp(st, e))
+            return 0;
         break;
     case GeneratorExp_kind:
         if (!symtable_visit_genexp(st, e))
@@ -1420,12 +1426,11 @@
         return r;
     }
     else {
-        if (st->st_cur->ste_type != ModuleBlock) {
-            int lineno = st->st_cur->ste_lineno;
-            if (!symtable_warn(st, IMPORT_STAR_WARNING, lineno)) {
-                Py_DECREF(store_name);
-                return 0;
-            }
+        if (st->st_cur->ste_type != ModuleBlock &&
+            !symtable_warn(st, PyExc_SyntaxWarning, IMPORT_STAR_WARNING, -1))
+        {
+            Py_DECREF(store_name);
+            return 0;
         }
         st->st_cur->ste_unoptimized |= OPT_IMPORT_STAR;
         Py_DECREF(store_name);
@@ -1509,7 +1514,10 @@
         !symtable_enter_block(st, scope_name, FunctionBlock, (void *)e, 0)) {
         return 0;
     }
-    st->st_cur->ste_generator = is_generator;
+    /* In order to check for yield expressions under '-3', we clear
+       the generator flag, and restore it at the end */
+    is_generator |= st->st_cur->ste_generator;
+    st->st_cur->ste_generator = 0;
     /* Outermost iter is received as an argument */
     if (!symtable_implicit_arg(st, 0)) {
         symtable_exit_block(st, (void *)e);
@@ -1527,10 +1535,56 @@
     if (value)
         VISIT_IN_BLOCK(st, expr, value, (void*)e);
     VISIT_IN_BLOCK(st, expr, elt, (void*)e);
+    if (Py_Py3kWarningFlag && st->st_cur->ste_generator) {
+        const char *msg = (
+            (e->kind == SetComp_kind) ? "'yield' inside set comprehension" :
+            (e->kind == DictComp_kind) ? "'yield' inside dict comprehension" :
+            "'yield' inside generator expression");
+        if (!symtable_warn(st, PyExc_DeprecationWarning, msg, -1)) {
+            symtable_exit_block(st, (void *)e);
+            return 0;
+        }
+    }
+    st->st_cur->ste_generator |= is_generator;
     return symtable_exit_block(st, (void *)e);
 }
 
 static int
+symtable_visit_listcomp(struct symtable *st, expr_ty e)
+{
+    asdl_seq *generators = e->v.ListComp.generators;
+    int i, is_generator;
+    /* In order to check for yield expressions under '-3', we clear
+       the generator flag, and restore it at the end */
+    is_generator = st->st_cur->ste_generator;
+    st->st_cur->ste_generator = 0;
+    VISIT(st, expr, e->v.ListComp.elt);
+    for (i = 0; i < asdl_seq_LEN(generators); i++) {
+        comprehension_ty lc = (comprehension_ty)asdl_seq_GET(generators, i);
+        VISIT(st, expr, lc->target);
+        if (i == 0 && !st->st_cur->ste_generator) {
+            /* 'yield' in the outermost iterator doesn't cause a warning */
+            VISIT(st, expr, lc->iter);
+            is_generator |= st->st_cur->ste_generator;
+            st->st_cur->ste_generator = 0;
+        }
+        else {
+            VISIT(st, expr, lc->iter);
+        }
+        VISIT_SEQ(st, expr, lc->ifs);
+    }
+
+    if (Py_Py3kWarningFlag && st->st_cur->ste_generator) {
+        const char *msg = "'yield' inside list comprehension";
+        if (!symtable_warn(st, PyExc_DeprecationWarning, msg, -1)) {
+            return 0;
+        }
+    }
+    st->st_cur->ste_generator |= is_generator;
+    return 1;
+}
+
+static int
 symtable_visit_genexp(struct symtable *st, expr_ty e)
 {
     return symtable_handle_comprehension(st, e, GET_IDENTIFIER(genexpr),
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index aeff38a..b153ef6 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -1426,9 +1426,9 @@
     SET_SYS_FROM_STRING("subversion",
                          Py_BuildValue("(ssz)", "CPython", branch,
                                       svn_revision));
-    SET_SYS_FROM_STRING("_mercurial",
-                        Py_BuildValue("(szz)", "CPython", _Py_hgidentifier(),
-                                      _Py_hgversion()));
+    SET_SYS_FROM_STRING("_git",
+                        Py_BuildValue("(szz)", "CPython", _Py_gitidentifier(),
+                                      _Py_gitversion()));
     SET_SYS_FROM_STRING("dont_write_bytecode",
                          PyBool_FromLong(Py_DontWriteBytecodeFlag));
     SET_SYS_FROM_STRING("api_version",
diff --git a/Python/thread.c b/Python/thread.c
index 3b69f96..8ac40f9 100644
--- a/Python/thread.c
+++ b/Python/thread.c
@@ -62,6 +62,9 @@
 #endif /* _POSIX_THREADS */
 
 
+#ifdef dprintf
+#undef dprintf
+#endif
 #ifdef Py_DEBUG
 static int thread_debug = 0;
 #define dprintf(args)   (void)((thread_debug & 1) && printf args)
diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h
index c9ed796..79c66d4 100644
--- a/Python/thread_pthread.h
+++ b/Python/thread_pthread.h
@@ -410,31 +410,41 @@
 int
 PyThread_acquire_lock(PyThread_type_lock lock, int waitflag)
 {
-    int success;
+    int success = 0;
     pthread_lock *thelock = (pthread_lock *)lock;
     int status, error = 0;
 
     dprintf(("PyThread_acquire_lock(%p, %d) called\n", lock, waitflag));
 
-    status = pthread_mutex_lock( &thelock->mut );
-    CHECK_STATUS("pthread_mutex_lock[1]");
-    success = thelock->locked == 0;
-
-    if ( !success && waitflag ) {
-        /* continue trying until we get the lock */
-
-        /* mut must be locked by me -- part of the condition
-         * protocol */
-        while ( thelock->locked ) {
-            status = pthread_cond_wait(&thelock->lock_released,
-                                       &thelock->mut);
-            CHECK_STATUS("pthread_cond_wait");
-        }
-        success = 1;
+    if (waitflag) {
+        status = pthread_mutex_lock( &thelock->mut );
+        CHECK_STATUS("pthread_mutex_lock[1]");
     }
-    if (success) thelock->locked = 1;
-    status = pthread_mutex_unlock( &thelock->mut );
-    CHECK_STATUS("pthread_mutex_unlock[1]");
+    else {
+        status = pthread_mutex_trylock( &thelock->mut );
+        if (status != EBUSY)
+            CHECK_STATUS("pthread_mutex_trylock[1]");
+    }
+    if (status == 0) {
+        success = thelock->locked == 0;
+
+        if ( !success && waitflag ) {
+            /* continue trying until we get the lock */
+
+            /* mut must be locked by me -- part of the condition
+             * protocol */
+            while ( thelock->locked ) {
+                status = pthread_cond_wait(&thelock->lock_released,
+                                           &thelock->mut);
+                CHECK_STATUS("pthread_cond_wait");
+            }
+            success = 1;
+        }
+
+        if (success) thelock->locked = 1;
+        status = pthread_mutex_unlock( &thelock->mut );
+        CHECK_STATUS("pthread_mutex_unlock[1]");
+    }
 
     if (error) success = 0;
     dprintf(("PyThread_acquire_lock(%p, %d) -> %d\n", lock, waitflag, success));
diff --git a/README b/README
index 08d48c2..8a88836 100644
--- a/README
+++ b/README
@@ -1,8 +1,9 @@
-This is Python version 2.7.13
+This is Python version 2.7.15
 =============================
 
 Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
-2012, 2013, 2014, 2015, 2016 Python Software Foundation.  All rights reserved.
+2012, 2013, 2014, 2015, 2016, 2017, 2018 Python Software Foundation.  All rights
+reserved.
 
 Copyright (c) 2000 BeOpen.com.
 All rights reserved.
diff --git a/Tools/README b/Tools/README
index 1fb0103..a2252f2 100644
--- a/Tools/README
+++ b/Tools/README
@@ -47,3 +47,5 @@
 		out where in the world those addresses originate from,
 		based on the top-level domain country code found in
 		the address. 
+
+A generic benchmark suite is maintained separately at https://github.com/python/performance
diff --git a/Tools/buildbot/build-amd64.bat b/Tools/buildbot/build-amd64.bat
index f77407b..ab4231e 100644
--- a/Tools/buildbot/build-amd64.bat
+++ b/Tools/buildbot/build-amd64.bat
@@ -1,5 +1,5 @@
-@rem Formerly used by the buildbot "compile" step.

-@echo This script is no longer used and may be removed in the future.

-@echo To get the same effect as this script, use

-@echo     PCbuild\build.bat -d -e -k -p x64

-call "%~dp0build.bat" -p x64 %*

+@rem Formerly used by the buildbot "compile" step.
+@echo This script is no longer used and may be removed in the future.
+@echo To get the same effect as this script, use
+@echo     PCbuild\build.bat -d -e -k -p x64
+call "%~dp0build.bat" -p x64 %*
diff --git a/Tools/buildbot/build.bat b/Tools/buildbot/build.bat
index 3d825fe..a077942 100644
--- a/Tools/buildbot/build.bat
+++ b/Tools/buildbot/build.bat
@@ -1,18 +1,18 @@
-@rem Used by the buildbot "compile" step.

-@setlocal

-

-@rem Clean up

-call "%~dp0clean.bat" %*

-

-@rem If you need the buildbots to start fresh (such as when upgrading to

-@rem a new version of an external library, especially Tcl/Tk):

-@rem 1) uncomment the following line:

-

-@rem    call "%~dp0..\..\PCbuild\get_externals.bat" --clean-only

-

-@rem 2) commit and push

-@rem 3) wait for all Windows bots to start a build with that changeset

-@rem 4) re-comment, commit and push again

-

-@rem Do the build

-call "%~dp0..\..\PCbuild\build.bat" -v -e -d -k %*

+@rem Used by the buildbot "compile" step.
+@setlocal
+
+@rem Clean up
+call "%~dp0clean.bat" %*
+
+@rem If you need the buildbots to start fresh (such as when upgrading to
+@rem a new version of an external library, especially Tcl/Tk):
+@rem 1) uncomment the following line:
+
+@rem    call "%~dp0..\..\PCbuild\get_externals.bat" --clean-only
+
+@rem 2) commit and push
+@rem 3) wait for all Windows bots to start a build with that changeset
+@rem 4) re-comment, commit and push again
+
+@rem Do the build
+call "%~dp0..\..\PCbuild\build.bat" -v -e -d -k %*
diff --git a/Tools/buildbot/buildmsi.bat b/Tools/buildbot/buildmsi.bat
index b4f63dc..a0f43a6 100644
--- a/Tools/buildbot/buildmsi.bat
+++ b/Tools/buildbot/buildmsi.bat
@@ -1,20 +1,20 @@
-@rem Used by the buildbot "buildmsi" step.

-

-cmd /c Tools\buildbot\external.bat

-@rem build release versions of things

-call "%VS90COMNTOOLS%vsvars32.bat"

-

-@rem build Python

-vcbuild /useenv PCbuild\pcbuild.sln "Release|Win32"

-

-@rem build the documentation

-bash.exe -c 'cd Doc;make PYTHON=python2.5 update htmlhelp'

-"%ProgramFiles%\HTML Help Workshop\hhc.exe" Doc\build\htmlhelp\python26a3.hhp

-

-@rem build the MSI file

-cd PC

-nmake /f icons.mak

-cd ..\Tools\msi

-del *.msi

-nmake /f msisupport.mak

-%HOST_PYTHON% msi.py

+@rem Used by the buildbot "buildmsi" step.
+
+cmd /c Tools\buildbot\external.bat
+@rem build release versions of things
+call "%VS90COMNTOOLS%vsvars32.bat"
+
+@rem build Python
+vcbuild /useenv PCbuild\pcbuild.sln "Release|Win32"
+
+@rem build the documentation
+bash.exe -c 'cd Doc;make PYTHON=python2.5 update htmlhelp'
+"%ProgramFiles%\HTML Help Workshop\hhc.exe" Doc\build\htmlhelp\python26a3.hhp
+
+@rem build the MSI file
+cd PC
+nmake /f icons.mak
+cd ..\Tools\msi
+del *.msi
+nmake /f msisupport.mak
+%HOST_PYTHON% msi.py
diff --git a/Tools/buildbot/clean-amd64.bat b/Tools/buildbot/clean-amd64.bat
index b53c7c1..a0d4b07 100644
--- a/Tools/buildbot/clean-amd64.bat
+++ b/Tools/buildbot/clean-amd64.bat
@@ -1,5 +1,5 @@
-@rem Formerly used by the buildbot "clean" step.

-@echo This script is no longer used and may be removed in the future.

-@echo To get the same effect as this script, use `clean.bat` from this

-@echo directory and pass `-p x64` as two arguments.

-call "%~dp0clean.bat" -p x64 %*

+@rem Formerly used by the buildbot "clean" step.
+@echo This script is no longer used and may be removed in the future.
+@echo To get the same effect as this script, use `clean.bat` from this
+@echo directory and pass `-p x64` as two arguments.
+call "%~dp0clean.bat" -p x64 %*
diff --git a/Tools/buildbot/clean.bat b/Tools/buildbot/clean.bat
index 0fc68fd..c2efd5b 100644
--- a/Tools/buildbot/clean.bat
+++ b/Tools/buildbot/clean.bat
@@ -1,16 +1,16 @@
-@echo off

-rem Used by the buildbot "clean" step.

-

-setlocal

-set root=%~dp0..\..

-set pcbuild=%root%\PCbuild

-

-echo Deleting build

-call "%pcbuild%\build.bat" -t Clean -k %*

-call "%pcbuild%\build.bat" -t Clean -k -d %*

-

-echo Deleting .pyc/.pyo files ...

-del /s "%root%\Lib\*.pyc" "%root%\Lib\*.pyo"

-

-echo Deleting test leftovers ...

-rmdir /s /q "%root%\build"

+@echo off
+rem Used by the buildbot "clean" step.
+
+setlocal
+set root=%~dp0..\..
+set pcbuild=%root%\PCbuild
+
+echo Deleting build
+call "%pcbuild%\build.bat" -t Clean -k %*
+call "%pcbuild%\build.bat" -t Clean -k -d %*
+
+echo Deleting .pyc/.pyo files ...
+del /s "%root%\Lib\*.pyc" "%root%\Lib\*.pyo"
+
+echo Deleting test leftovers ...
+rmdir /s /q "%root%\build"
diff --git a/Tools/buildbot/external-amd64.bat b/Tools/buildbot/external-amd64.bat
index bfaef05..1a67b0f 100644
--- a/Tools/buildbot/external-amd64.bat
+++ b/Tools/buildbot/external-amd64.bat
@@ -1,3 +1,3 @@
-@echo This script is no longer used and may be removed in the future.

-@echo Please use PCbuild\get_externals.bat instead.

-@"%~dp0..\..\PCbuild\get_externals.bat" %*

+@echo This script is no longer used and may be removed in the future.
+@echo Please use PCbuild\get_externals.bat instead.
+@"%~dp0..\..\PCbuild\get_externals.bat" %*
diff --git a/Tools/buildbot/external.bat b/Tools/buildbot/external.bat
index bfaef05..1a67b0f 100644
--- a/Tools/buildbot/external.bat
+++ b/Tools/buildbot/external.bat
@@ -1,3 +1,3 @@
-@echo This script is no longer used and may be removed in the future.

-@echo Please use PCbuild\get_externals.bat instead.

-@"%~dp0..\..\PCbuild\get_externals.bat" %*

+@echo This script is no longer used and may be removed in the future.
+@echo Please use PCbuild\get_externals.bat instead.
+@"%~dp0..\..\PCbuild\get_externals.bat" %*
diff --git a/Tools/buildbot/test-amd64.bat b/Tools/buildbot/test-amd64.bat
index e48329c..f994d2d 100644
--- a/Tools/buildbot/test-amd64.bat
+++ b/Tools/buildbot/test-amd64.bat
@@ -1,6 +1,6 @@
-@rem Formerly used by the buildbot "test" step.

-@echo This script is no longer used and may be removed in the future.

-@echo To get the same effect as this script, use

-@echo     PCbuild\rt.bat -q -d -x64 -uall -rwW

-@echo or use `test.bat` in this directory and pass `-x64` as an argument.

-call "%~dp0test.bat" -x64 %*

+@rem Formerly used by the buildbot "test" step.
+@echo This script is no longer used and may be removed in the future.
+@echo To get the same effect as this script, use
+@echo     PCbuild\rt.bat -q -d -x64 -uall -rwW
+@echo or use `test.bat` in this directory and pass `-x64` as an argument.
+call "%~dp0test.bat" -x64 %*
diff --git a/Tools/buildbot/test.bat b/Tools/buildbot/test.bat
index b9dde01..daa53fa 100644
--- a/Tools/buildbot/test.bat
+++ b/Tools/buildbot/test.bat
@@ -1,19 +1,19 @@
-@echo off

-rem Used by the buildbot "test" step.

-setlocal

-

-set here=%~dp0

-set rt_opts=-q -d

-set regrtest_args=

-

-:CheckOpts

-if "%1"=="-x64" (set rt_opts=%rt_opts% %1) & shift & goto CheckOpts

-if "%1"=="-d" (set rt_opts=%rt_opts% %1) & shift & goto CheckOpts

-if "%1"=="-O" (set rt_opts=%rt_opts% %1) & shift & goto CheckOpts

-if "%1"=="-q" (set rt_opts=%rt_opts% %1) & shift & goto CheckOpts

-if "%1"=="+d" (set rt_opts=%rt_opts:-d=%) & shift & goto CheckOpts

-if "%1"=="+q" (set rt_opts=%rt_opts:-q=%) & shift & goto CheckOpts

-if NOT "%1"=="" (set regrtest_args=%regrtest_args% %1) & shift & goto CheckOpts

-

-echo on

-call "%here%..\..\PCbuild\rt.bat" %rt_opts% -uall -rwW %regrtest_args%

+@echo off
+rem Used by the buildbot "test" step.
+setlocal
+
+set here=%~dp0
+set rt_opts=-q -d
+set regrtest_args=
+
+:CheckOpts
+if "%1"=="-x64" (set rt_opts=%rt_opts% %1) & shift & goto CheckOpts
+if "%1"=="-d" (set rt_opts=%rt_opts% %1) & shift & goto CheckOpts
+if "%1"=="-O" (set rt_opts=%rt_opts% %1) & shift & goto CheckOpts
+if "%1"=="-q" (set rt_opts=%rt_opts% %1) & shift & goto CheckOpts
+if "%1"=="+d" (set rt_opts=%rt_opts:-d=%) & shift & goto CheckOpts
+if "%1"=="+q" (set rt_opts=%rt_opts:-q=%) & shift & goto CheckOpts
+if NOT "%1"=="" (set regrtest_args=%regrtest_args% %1) & shift & goto CheckOpts
+
+echo on
+call "%here%..\..\PCbuild\rt.bat" %rt_opts% -uall -rwW --slowest %regrtest_args%
diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py
index e218a31..3ae7097 100755
--- a/Tools/gdb/libpython.py
+++ b/Tools/gdb/libpython.py
@@ -241,12 +241,13 @@
 
     def safe_tp_name(self):
         try:
-            return self.type().field('tp_name').string()
-        except NullPyObjectPtr:
-            # NULL tp_name?
-            return 'unknown'
-        except RuntimeError:
-            # Can't even read the object at all?
+            ob_type = self.type()
+            tp_name = ob_type.field('tp_name')
+            return tp_name.string()
+        # NullPyObjectPtr: NULL tp_name?
+        # RuntimeError: Can't even read the object at all?
+        # UnicodeDecodeError: Failed to decode tp_name bytestring
+        except (NullPyObjectPtr, RuntimeError, UnicodeDecodeError):
             return 'unknown'
 
     def proxyval(self, visited):
@@ -320,7 +321,9 @@
         try:
             tp_name = t.field('tp_name').string()
             tp_flags = int(t.field('tp_flags'))
-        except RuntimeError:
+        # RuntimeError: NULL pointers
+        # UnicodeDecodeError: string() fails to decode the bytestring
+        except (RuntimeError, UnicodeDecodeError):
             # Handle any kind of error e.g. NULL ptrs by simply using the base
             # class
             return cls
@@ -336,6 +339,7 @@
                     'set' : PySetObjectPtr,
                     'frozenset' : PySetObjectPtr,
                     'builtin_function_or_method' : PyCFunctionObjectPtr,
+                    'method-wrapper': wrapperobject,
                     }
         if tp_name in name_map:
             return name_map[tp_name]
@@ -602,7 +606,10 @@
 
     def proxyval(self, visited):
         m_ml = self.field('m_ml') # m_ml is a (PyMethodDef*)
-        ml_name = m_ml['ml_name'].string()
+        try:
+            ml_name = m_ml['ml_name'].string()
+        except UnicodeDecodeError:
+            ml_name = '<ml_name:UnicodeDecodeError>'
 
         pyop_m_self = self.pyop_field('m_self')
         if pyop_m_self.is_null():
@@ -1131,7 +1138,9 @@
         # Convert the int code points to unicode characters, and generate a
         # local unicode instance.
         # This splits surrogate pairs if sizeof(Py_UNICODE) is 2 here (in gdb).
-        result = u''.join([_unichr(ucs) for ucs in Py_UNICODEs])
+        result = u''.join([
+            (_unichr(ucs) if ucs <= 0x10ffff else '\ufffd')
+            for ucs in Py_UNICODEs])
         return result
 
     def write_repr(self, out, visited):
@@ -1144,6 +1153,41 @@
         out.write(val.lstrip('u'))
 
 
+class wrapperobject(PyObjectPtr):
+    _typename = 'wrapperobject'
+
+    def safe_name(self):
+        try:
+            name = self.field('descr')['d_base']['name'].string()
+            return repr(name)
+        except (NullPyObjectPtr, RuntimeError, UnicodeDecodeError):
+            return '<unknown name>'
+
+    def safe_tp_name(self):
+        try:
+            return self.field('self')['ob_type']['tp_name'].string()
+        except (NullPyObjectPtr, RuntimeError, UnicodeDecodeError):
+            return '<unknown tp_name>'
+
+    def safe_self_addresss(self):
+        try:
+            address = long(self.field('self'))
+            return '%#x' % address
+        except (NullPyObjectPtr, RuntimeError):
+            return '<failed to get self address>'
+
+    def proxyval(self, visited):
+        name = self.safe_name()
+        tp_name = self.safe_tp_name()
+        self_address = self.safe_self_addresss()
+        return ("<method-wrapper %s of %s object at %s>"
+                % (name, tp_name, self_address))
+
+    def write_repr(self, out, visited):
+        proxy = self.proxyval(visited)
+        out.write(proxy)
+
+
 def int_from_int(gdbval):
     return int(str(gdbval))
 
@@ -1176,11 +1220,13 @@
 
 def pretty_printer_lookup(gdbval):
     type = gdbval.type.unqualified()
-    if type.code == gdb.TYPE_CODE_PTR:
-        type = type.target().unqualified()
-        t = str(type)
-        if t in ("PyObject", "PyFrameObject"):
-            return PyObjectPtrPrinter(gdbval)
+    if type.code != gdb.TYPE_CODE_PTR:
+        return None
+
+    type = type.target().unqualified()
+    t = str(type)
+    if t in ("PyObject", "PyFrameObject", "PyUnicodeObject", "wrapperobject"):
+        return PyObjectPtrPrinter(gdbval)
 
 """
 During development, I've been manually invoking the code in this way:
@@ -1202,7 +1248,7 @@
   /usr/lib/debug/usr/lib/libpython2.6.so.1.0.debug-gdb.py
 """
 def register (obj):
-    if obj == None:
+    if obj is None:
         obj = gdb
 
     # Wire up the pretty-printer
@@ -1304,23 +1350,43 @@
          '''
         if self.is_waiting_for_gil():
             return 'Waiting for the GIL'
-        elif self.is_gc_collect():
+
+        if self.is_gc_collect():
             return 'Garbage-collecting'
-        else:
-            # Detect invocations of PyCFunction instances:
-            older = self.older()
-            if older and older._gdbframe.name() == 'PyCFunction_Call':
-                # Within that frame:
-                #   "func" is the local containing the PyObject* of the
-                # PyCFunctionObject instance
-                #   "f" is the same value, but cast to (PyCFunctionObject*)
-                #   "self" is the (PyObject*) of the 'self'
-                try:
-                    # Use the prettyprinter for the func:
-                    func = older._gdbframe.read_var('func')
-                    return str(func)
-                except RuntimeError:
-                    return 'PyCFunction invocation (unable to read "func")'
+
+        # Detect invocations of PyCFunction instances:
+        frame = self._gdbframe
+        caller = frame.name()
+        if not caller:
+            return False
+
+        if caller == 'PyCFunction_Call':
+            arg_name = 'func'
+            # Within that frame:
+            #   "func" is the local containing the PyObject* of the
+            # PyCFunctionObject instance
+            #   "f" is the same value, but cast to (PyCFunctionObject*)
+            #   "self" is the (PyObject*) of the 'self'
+            try:
+                # Use the prettyprinter for the func:
+                func = frame.read_var(arg_name)
+                return str(func)
+            except ValueError:
+                return ('PyCFunction invocation (unable to read %s: '
+                        'missing debuginfos?)' % arg_name)
+            except RuntimeError:
+                return 'PyCFunction invocation (unable to read %s)' % arg_name
+
+        if caller == 'wrapper_call':
+            arg_name = 'wp'
+            try:
+                func = frame.read_var(arg_name)
+                return str(func)
+            except ValueError:
+                return ('<wrapper_call invocation (unable to read %s: '
+                        'missing debuginfos?)>' % arg_name)
+            except RuntimeError:
+                return '<wrapper_call invocation (unable to read %s)>' % arg_name
 
         # This frame isn't worth reporting:
         return False
@@ -1368,7 +1434,11 @@
     def get_selected_python_frame(cls):
         '''Try to obtain the Frame for the python-related code in the selected
         frame, or None'''
-        frame = cls.get_selected_frame()
+        try:
+            frame = cls.get_selected_frame()
+        except gdb.error:
+            # No frame: Python didn't start yet
+            return None
 
         while frame:
             if frame.is_python_frame():
@@ -1509,6 +1579,10 @@
 def move_in_stack(move_up):
     '''Move up or down the stack (for the py-up/py-down command)'''
     frame = Frame.get_selected_python_frame()
+    if not frame:
+        print('Unable to locate python frame')
+        return
+
     while frame:
         if move_up:
             iter_frame = frame.older()
@@ -1571,6 +1645,10 @@
 
     def invoke(self, args, from_tty):
         frame = Frame.get_selected_python_frame()
+        if not frame:
+            print('Unable to locate python frame')
+            return
+
         while frame:
             if frame.is_python_frame():
                 frame.print_summary()
@@ -1588,8 +1666,12 @@
 
 
     def invoke(self, args, from_tty):
-        sys.stdout.write('Traceback (most recent call first):\n')
         frame = Frame.get_selected_python_frame()
+        if not frame:
+            print('Unable to locate python frame')
+            return
+
+        sys.stdout.write('Traceback (most recent call first):\n')
         while frame:
             if frame.is_python_frame():
                 frame.print_traceback()
diff --git a/Tools/i18n/pygettext.py b/Tools/i18n/pygettext.py
index a62d2fe..ddd750e 100755
--- a/Tools/i18n/pygettext.py
+++ b/Tools/i18n/pygettext.py
@@ -261,25 +261,6 @@
     return 1 in [c in str for c in set]
 
 
-def _visit_pyfiles(list, dirname, names):
-    """Helper for getFilesForName()."""
-    # get extension for python source files
-    if not globals().has_key('_py_ext'):
-        global _py_ext
-        _py_ext = [triple[0] for triple in imp.get_suffixes()
-                   if triple[2] == imp.PY_SOURCE][0]
-
-    # don't recurse into CVS directories
-    if 'CVS' in names:
-        names.remove('CVS')
-
-    # add all *.py files to list
-    list.extend(
-        [os.path.join(dirname, file) for file in names
-         if os.path.splitext(file)[1] == _py_ext]
-        )
-
-
 def _get_modpkg_path(dotted_name, pathlist=None):
     """Get the filesystem path for a module or a package.
 
@@ -340,7 +321,20 @@
     if os.path.isdir(name):
         # find all python files in directory
         list = []
-        os.path.walk(name, _visit_pyfiles, list)
+        # get extension for python source files
+        if '_py_ext' not in globals():
+            global _py_ext
+            _py_ext = [triple[0] for triple in imp.get_suffixes()
+                       if triple[2] == imp.PY_SOURCE][0]
+        for root, dirs, files in os.walk(name):
+            # don't recurse into CVS directories
+            if 'CVS' in dirs:
+                dirs.remove('CVS')
+            # add all *.py files to list
+            list.extend(
+                [os.path.join(root, file) for file in files
+                 if os.path.splitext(file)[1] == _py_ext]
+                )
         return list
     elif os.path.exists(name):
         # a single file
diff --git a/Tools/msi/msi.py b/Tools/msi/msi.py
index 65ce5c1..da4a1c3 100644
--- a/Tools/msi/msi.py
+++ b/Tools/msi/msi.py
@@ -917,7 +917,7 @@
     shutil.copyfileobj(open(os.path.join(srcdir, "LICENSE")), out)
     shutil.copyfileobj(open("crtlicense.txt"), out)
     for name, pat, file in (("bzip2","bzip2-*", "LICENSE"),
-                      ("Berkeley DB", "db-*", "LICENSE"),
+                      ("Berkeley DB", "bsddb-*", "LICENSE"),
                       ("openssl", "openssl-*", "LICENSE"),
                       ("Tcl", "tcl-8*", "license.terms"),
                       ("Tk", "tk-8*", "license.terms"),
diff --git a/Tools/nuget/build.bat b/Tools/nuget/build.bat
index 3c953f7..f4e15c7 100644
--- a/Tools/nuget/build.bat
+++ b/Tools/nuget/build.bat
@@ -1,63 +1,64 @@
-@echo off

-setlocal

-set D=%~dp0

-set PCBUILD=%D%..\..\PCBuild\

-

-set BUILDX86=

-set BUILDX64=

-set REBUILD=

-set OUTPUT=

-set PACKAGES=

-

-:CheckOpts

-if "%~1" EQU "-h" goto Help

-if "%~1" EQU "-x86" (set BUILDX86=1) && shift && goto CheckOpts

-if "%~1" EQU "-x64" (set BUILDX64=1) && shift && goto CheckOpts

-if "%~1" EQU "-r" (set REBUILD=-r) && shift && goto CheckOpts

-if "%~1" EQU "-o" (set OUTPUT="/p:OutputPath=%~2") && shift && shift && goto CheckOpts

-if "%~1" EQU "--out" (set OUTPUT="/p:OutputPath=%~2") && shift && shift && goto CheckOpts

-if "%~1" EQU "-p" (set PACKAGES=%PACKAGES% %~2) && shift && shift && goto CheckOpts

-

-if not defined BUILDX86 if not defined BUILDX64 (set BUILDX86=1) && (set BUILDX64=1)

-

-if not defined NUGET where nuget -q || echo Cannot find nuget.exe on PATH and NUGET is not set. && exit /B 1

-if not defined PYTHON set PYTHON=py -3

-

-@%PYTHON% -c "" >nul 2>nul

-@if errorlevel 1 (

-    %NUGET% install python -OutputDirectory "%D%obj" -ExcludeVersion -NonInteractive

-    set PYTHON="%D%obj\python\tools\python.exe"

-)

-

-call "%PCBUILD%env.bat" x86

-

-if defined PACKAGES set PACKAGES="/p:Packages=%PACKAGES%"

-

-if defined BUILDX86 (

-    if defined REBUILD ( call "%PCBUILD%build.bat" -e -r

-    ) else if not exist "%PCBUILD%python.exe" call "%PCBUILD%build.bat" -e

-    if errorlevel 1 goto :eof

-

-    msbuild "%D%make_pkg.proj" /p:Configuration=Release /p:Platform=x86 %OUTPUT% %PACKAGES%

-    if errorlevel 1 goto :eof

-)

-

-if defined BUILDX64 (

-    if defined REBUILD ( call "%PCBUILD%build.bat" -p x64 -e -r

-    ) else if not exist "%PCBUILD%amd64\python.exe" call "%PCBUILD%build.bat" -p x64 -e

-    if errorlevel 1 goto :eof

-

-    msbuild "%D%make_pkg.proj" /p:Configuration=Release /p:Platform=x64 %OUTPUT% %PACKAGES%

-    if errorlevel 1 goto :eof

-)

-

-exit /B 0

-

-:Help

-echo build.bat [-x86] [-x64] [--out DIR] [-r] [-h]

-echo.

-echo    -x86                Build x86 installers

-echo    -x64                Build x64 installers

-echo    -r                  Rebuild rather than incremental build

-echo    --out [DIR]         Override output directory

-echo    -h                  Show usage

+@echo off
+setlocal
+set D=%~dp0
+set PCBUILD=%D%..\..\PCBuild\
+
+set BUILDX86=
+set BUILDX64=
+set REBUILD=
+set OUTPUT=
+set PACKAGES=
+
+:CheckOpts
+if "%~1" EQU "-h" goto Help
+if "%~1" EQU "-x86" (set BUILDX86=1) && shift && goto CheckOpts
+if "%~1" EQU "-x64" (set BUILDX64=1) && shift && goto CheckOpts
+if "%~1" EQU "-r" (set REBUILD=-r) && shift && goto CheckOpts
+if "%~1" EQU "-o" (set OUTPUT="/p:OutputPath=%~2") && shift && shift && goto CheckOpts
+if "%~1" EQU "--out" (set OUTPUT="/p:OutputPath=%~2") && shift && shift && goto CheckOpts
+if "%~1" EQU "-p" (set PACKAGES=%PACKAGES% %~2) && shift && shift && goto CheckOpts
+
+if not defined BUILDX86 if not defined BUILDX64 (set BUILDX86=1) && (set BUILDX64=1)
+
+if not defined NUGET where nuget -q || echo Cannot find nuget.exe on PATH and NUGET is not set. && exit /B 1
+call "%PCBUILD%find_msbuild.bat" %MSBUILD%
+if ERRORLEVEL 1 (echo Cannot locate MSBuild.exe on PATH or as MSBUILD variable & exit /b 2)
+if not defined PYTHON set PYTHON=py -3
+
+@%PYTHON% -c "" >nul 2>nul
+@if errorlevel 1 (
+    %NUGET% install python -OutputDirectory "%D%obj" -ExcludeVersion -NonInteractive
+    set PYTHON="%D%obj\python\tools\python.exe"
+)
+
+
+if defined PACKAGES set PACKAGES="/p:Packages=%PACKAGES%"
+
+if defined BUILDX86 (
+    if defined REBUILD ( call "%PCBUILD%build.bat" -e -r
+    ) else if not exist "%PCBUILD%python.exe" call "%PCBUILD%build.bat" -e
+    if errorlevel 1 goto :eof
+
+    %MSBUILD% "%D%make_pkg.proj" /p:Configuration=Release /p:Platform=x86 %OUTPUT% %PACKAGES%
+    if errorlevel 1 goto :eof
+)
+
+if defined BUILDX64 (
+    if defined REBUILD ( call "%PCBUILD%build.bat" -p x64 -e -r
+    ) else if not exist "%PCBUILD%amd64\python.exe" call "%PCBUILD%build.bat" -p x64 -e
+    if errorlevel 1 goto :eof
+
+    %MSBUILD% "%D%make_pkg.proj" /p:Configuration=Release /p:Platform=x64 %OUTPUT% %PACKAGES%
+    if errorlevel 1 goto :eof
+)
+
+exit /B 0
+
+:Help
+echo build.bat [-x86] [-x64] [--out DIR] [-r] [-h]
+echo.
+echo    -x86                Build x86 installers
+echo    -x64                Build x64 installers
+echo    -r                  Rebuild rather than incremental build
+echo    --out [DIR]         Override output directory
+echo    -h                  Show usage
diff --git a/Tools/nuget/distutils.command.bdist_wininst.py b/Tools/nuget/distutils.command.bdist_wininst.py
new file mode 100644
index 0000000..d586e34
--- /dev/null
+++ b/Tools/nuget/distutils.command.bdist_wininst.py
@@ -0,0 +1,20 @@
+"""distutils.command.bdist_wininst
+
+Suppresses the 'bdist_wininst' command, while still allowing
+setuptools to import it without breaking."""
+
+from distutils.core import Command
+from distutils.errors import DistutilsPlatformError
+
+class bdist_wininst(Command):
+    description = "create an executable installer for MS Windows"
+
+    def initialize_options(self):
+        pass
+
+    def finalize_options(self):
+        pass
+
+    def run(self):
+        raise DistutilsPlatformError("bdist_wininst is not supported "
+            "in this Python distribution")
diff --git a/Tools/nuget/make_pkg.proj b/Tools/nuget/make_pkg.proj
index cb124ab..0f3f8bd 100644
--- a/Tools/nuget/make_pkg.proj
+++ b/Tools/nuget/make_pkg.proj
@@ -14,6 +14,7 @@
 
     <PropertyGroup>
         <NuspecVersion>$(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber)</NuspecVersion>
+        <NuspecVersion Condition="$(ReleaseLevelName) != ''">$(NuspecVersion)-$(ReleaseLevelName)</NuspecVersion>
         <SignOutput>false</SignOutput>
         <TargetName>$(OutputName).$(NuspecVersion)</TargetName>
         <TargetExt>.nupkg</TargetExt>
diff --git a/Tools/nuget/make_zip.py b/Tools/nuget/make_zip.py
index af64323..20fadf2 100644
--- a/Tools/nuget/make_zip.py
+++ b/Tools/nuget/make_zip.py
@@ -9,6 +9,7 @@
 import os
 import tempfile
 
+from itertools import chain
 from pathlib import Path
 from zipfile import ZipFile, ZIP_DEFLATED
 import subprocess
@@ -203,8 +204,15 @@
 
     try:
         for t, s, p, c in layout:
-            s = source / s.replace("$arch", arch)
-            copied = copy_to_layout(temp / t.rstrip('/'), rglob(s, p, c))
+            fs = source / s.replace("$arch", arch)
+            files = rglob(fs, p, c)
+            extra_files = []
+            if s == 'Lib' and p == '**/*':
+                extra_files.append((
+                    source / 'tools' / 'nuget' / 'distutils.command.bdist_wininst.py',
+                    Path('distutils') / 'command' / 'bdist_wininst.py'
+                ))
+            copied = copy_to_layout(temp / t.rstrip('/'), chain(files, extra_files))
             print('Copied {} files'.format(copied))
 
         if out:
diff --git a/Tools/scripts/diff.py b/Tools/scripts/diff.py
index 513e2a7..c4c2e10 100755
--- a/Tools/scripts/diff.py
+++ b/Tools/scripts/diff.py
@@ -32,8 +32,10 @@
 
     fromdate = time.ctime(os.stat(fromfile).st_mtime)
     todate = time.ctime(os.stat(tofile).st_mtime)
-    fromlines = open(fromfile, 'U').readlines()
-    tolines = open(tofile, 'U').readlines()
+    with open(fromfile, 'U') as f:
+        fromlines = f.readlines()
+    with open(tofile, 'U') as f:
+        tolines = f.readlines()
 
     if options.u:
         diff = difflib.unified_diff(fromlines, tolines, fromfile, tofile, fromdate, todate, n=n)
diff --git a/Tools/scripts/patchcheck.py b/Tools/scripts/patchcheck.py
index eda21b9..58aa168 100755
--- a/Tools/scripts/patchcheck.py
+++ b/Tools/scripts/patchcheck.py
@@ -10,6 +10,13 @@
 import untabify
 
 
+# Excluded directories which are copies of external libraries:
+# don't check their coding style
+EXCLUDE_DIRS = [os.path.join('Modules', '_ctypes', 'libffi'),
+                os.path.join('Modules', '_ctypes', 'libffi_osx'),
+                os.path.join('Modules', '_ctypes', 'libffi_msvc'),
+                os.path.join('Modules', 'expat'),
+                os.path.join('Modules', 'zlib')]
 SRCDIR = sysconfig.get_config_var('srcdir')
 
 
@@ -36,46 +43,88 @@
     return decorated_fxn
 
 
-def mq_patches_applied():
-    """Check if there are any applied MQ patches."""
-    cmd = 'hg qapplied'
-    st = subprocess.Popen(cmd.split(),
-                          stdout=subprocess.PIPE,
-                          stderr=subprocess.PIPE)
+def get_git_branch():
+    """Get the symbolic name for the current git branch"""
+    cmd = "git rev-parse --abbrev-ref HEAD".split()
     try:
-        bstdout, _ = st.communicate()
-        return st.returncode == 0 and bstdout
-    finally:
-        st.stdout.close()
-        st.stderr.close()
+        return subprocess.check_output(cmd, stderr=subprocess.PIPE)
+    except subprocess.CalledProcessError:
+        return None
+
+
+def get_git_upstream_remote():
+    """Get the remote name to use for upstream branches
+
+    Uses "upstream" if it exists, "origin" otherwise
+    """
+    cmd = "git remote get-url upstream".split()
+    try:
+        subprocess.check_output(cmd, stderr=subprocess.PIPE)
+    except subprocess.CalledProcessError:
+        return "origin"
+    return "upstream"
+
+
+@status("Getting base branch for PR",
+        info=lambda x: x if x is not None else "not a PR branch")
+def get_base_branch():
+    if not os.path.exists(os.path.join(SRCDIR, '.git')):
+        # Not a git checkout, so there's no base branch
+        return None
+    version = sys.version_info
+    if version.releaselevel == 'alpha':
+        base_branch = "master"
+    else:
+        base_branch = "{0.major}.{0.minor}".format(version)
+    this_branch = get_git_branch()
+    if this_branch is None or this_branch == base_branch:
+        # Not on a git PR branch, so there's no base branch
+        return None
+    upstream_remote = get_git_upstream_remote()
+    return upstream_remote + "/" + base_branch
 
 
 @status("Getting the list of files that have been added/changed",
         info=lambda x: n_files_str(len(x)))
-def changed_files():
-    """Get the list of changed or added files from the VCS."""
-    if os.path.isdir(os.path.join(SRCDIR, '.hg')):
-        vcs = 'hg'
-        cmd = 'hg status --added --modified --no-status'
-        if mq_patches_applied():
-            cmd += ' --rev qparent'
-    elif os.path.isdir('.svn'):
-        vcs = 'svn'
-        cmd = 'svn status --quiet --non-interactive --ignore-externals'
-    else:
-        sys.exit('need a checkout to get modified files')
-
-    st = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
-    try:
-        st.wait()
-        if vcs == 'hg':
-            return [x.decode().rstrip() for x in st.stdout]
+def changed_files(base_branch=None):
+    """Get the list of changed or added files from git."""
+    if os.path.exists(os.path.join(SRCDIR, '.git')):
+        # We just use an existence check here as:
+        #  directory = normal git checkout/clone
+        #  file = git worktree directory
+        if base_branch:
+            cmd = 'git diff --name-status ' + base_branch
         else:
-            output = (x.decode().rstrip().rsplit(None, 1)[-1]
-                      for x in st.stdout if x[0] in 'AM')
-        return set(path for path in output if os.path.isfile(path))
-    finally:
-        st.stdout.close()
+            cmd = 'git status --porcelain'
+        filenames = []
+        st = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
+        try:
+            for line in st.stdout:
+                line = line.decode().rstrip()
+                status_text, filename = line.split(None, 1)
+                status = set(status_text)
+                # modified, added or unmerged files
+                if not status.intersection('MAU'):
+                    continue
+                if ' -> ' in filename:
+                    # file is renamed
+                    filename = filename.split(' -> ', 2)[1].strip()
+                filenames.append(filename)
+        finally:
+            st.stdout.close()
+    else:
+        sys.exit('need a git checkout to get modified files')
+
+    filenames2 = []
+    for filename in filenames:
+        # Normalize the path to be able to match using .startswith()
+        filename = os.path.normpath(filename)
+        if any(filename.startswith(path) for path in EXCLUDE_DIRS):
+            # Exclude the file
+            continue
+        filenames2.append(filename)
+
+    return filenames2
 
 
 def report_modified_files(file_paths):
@@ -147,20 +196,21 @@
     return os.path.join('Misc', 'ACKS') in file_paths
 
 
-@status("Misc/NEWS updated", modal=True)
+@status("Misc/NEWS.d updated with `blurb`", modal=True)
 def reported_news(file_paths):
-    """Check if Misc/NEWS has been changed."""
-    return os.path.join('Misc', 'NEWS') in file_paths
+    """Check if Misc/NEWS.d has been changed."""
+    return any(p.startswith(os.path.join('Misc', 'NEWS.d', 'next'))
+               for p in file_paths)
 
 
 def main():
-    file_paths = changed_files()
+    base_branch = get_base_branch()
+    file_paths = changed_files(base_branch)
     python_files = [fn for fn in file_paths if fn.endswith('.py')]
     c_files = [fn for fn in file_paths if fn.endswith(('.c', '.h'))]
     doc_files = [fn for fn in file_paths if fn.startswith('Doc') and
                  fn.endswith(('.rst', '.inc'))]
-    misc_files = {os.path.join('Misc', 'ACKS'), os.path.join('Misc', 'NEWS')}\
-            & set(file_paths)
+    misc_files = {p for p in file_paths if p.startswith('Misc')}
     # PEP 8 whitespace rules enforcement.
     normalize_whitespace(python_files)
     # C rules enforcement.
diff --git a/Tools/scripts/reindent.py b/Tools/scripts/reindent.py
index df15edb..540901b 100755
--- a/Tools/scripts/reindent.py
+++ b/Tools/scripts/reindent.py
@@ -109,7 +109,7 @@
     if verbose:
         print "checking", file, "...",
     try:
-        f = io.open(file)
+        f = open(file, "rb")
     except IOError, msg:
         errprint("%s: I/O Error: %s" % (file, str(msg)))
         return
@@ -133,7 +133,7 @@
                 shutil.copyfile(file, bak)
                 if verbose:
                     print "backed up", file, "to", bak
-            f = io.open(file, "w", newline=newline)
+            f = open(file, "wb")
             r.write(f)
             f.close()
             if verbose:
@@ -144,7 +144,21 @@
             print "unchanged."
         return False
 
-def _rstrip(line, JUNK='\n \t'):
+def _detect_newlines(lines):
+    newlines = {'\r\n' if line[-2:] == '\r\n' else
+                '\n' if line[-1:] == '\n' else
+                '\r' if line[-1:] == '\r' else
+                ''
+                for line in lines}
+    newlines.discard('')
+    newlines = tuple(sorted(newlines))
+    if not newlines:
+        return '\n'
+    if len(newlines) == 1:
+        return newlines[0]
+    return newlines
+
+def _rstrip(line, JUNK='\r\n \t'):
     """Return line stripped of trailing spaces, tabs, newlines.
 
     Note that line.rstrip() instead also strips sundry control characters,
@@ -166,10 +180,18 @@
         # Raw file lines.
         self.raw = f.readlines()
 
+        # Save the newlines found in the file so they can be used to
+        #  create output without mutating the newlines.
+        self.newlines = _detect_newlines(self.raw)
+        if isinstance(self.newlines, tuple):
+            self.newline = self.newlines[0]
+        else:
+            self.newline = self.newlines
+
         # File lines, rstripped & tab-expanded.  Dummy at start is so
         # that we can use tokenize's 1-based line numbering easily.
-        # Note that a line is all-blank iff it's "\n".
-        self.lines = [_rstrip(line).expandtabs() + "\n"
+        # Note that a line is all-blank iff it's newline.
+        self.lines = [_rstrip(line).expandtabs() + self.newline
                       for line in self.raw]
         self.lines.insert(0, None)
         self.index = 1  # index into self.lines of next line
@@ -180,15 +202,11 @@
         # indeed, they're our headache!
         self.stats = []
 
-        # Save the newlines found in the file so they can be used to
-        #  create output without mutating the newlines.
-        self.newlines = f.newlines
-
     def run(self):
         tokenize.tokenize(self.getline, self.tokeneater)
         # Remove trailing empty lines.
         lines = self.lines
-        while lines and lines[-1] == "\n":
+        while lines and lines[-1] == self.newline:
             lines.pop()
         # Sentinel.
         stats = self.stats
@@ -244,7 +262,7 @@
             else:
                 for line in lines[thisstmt:nextstmt]:
                     if diff > 0:
-                        if line == "\n":
+                        if line == self.newline:
                             after.append(line)
                         else:
                             after.append(" " * diff + line)
diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py
new file mode 100755
index 0000000..ffc57f0
--- /dev/null
+++ b/Tools/ssl/multissltests.py
@@ -0,0 +1,431 @@
+#!./python
+"""Run Python tests against multiple installations of OpenSSL and LibreSSL
+
+The script
+
+  (1) downloads OpenSSL / LibreSSL tar bundle
+  (2) extracts it to ./src
+  (3) compiles OpenSSL / LibreSSL
+  (4) installs OpenSSL / LibreSSL into ../multissl/$LIB/$VERSION/
+  (5) forces a recompilation of Python modules using the
+      header and library files from ../multissl/$LIB/$VERSION/
+  (6) runs Python's test suite
+
+The script must be run with Python's build directory as current working
+directory.
+
+The script uses LD_RUN_PATH, LD_LIBRARY_PATH, CPPFLAGS and LDFLAGS to bend
+search paths for header files and shared libraries. It's known to work on
+Linux with GCC and clang.
+
+Please keep this script compatible with Python 2.7, and 3.4 to 3.7.
+
+(c) 2013-2017 Christian Heimes <christian@python.org>
+"""
+from __future__ import print_function
+
+import argparse
+from datetime import datetime
+import logging
+import os
+try:
+    from urllib.request import urlopen
+except ImportError:
+    from urllib2 import urlopen
+import subprocess
+import shutil
+import sys
+import tarfile
+
+
+log = logging.getLogger("multissl")
+
+OPENSSL_OLD_VERSIONS = [
+     "0.9.8zc",
+     "0.9.8zh",
+     "1.0.1u",
+]
+
+OPENSSL_RECENT_VERSIONS = [
+     "1.0.2",
+     "1.0.2l",
+     "1.1.0f",
+]
+
+LIBRESSL_OLD_VERSIONS = [
+    "2.3.10",
+    "2.4.5",
+]
+
+LIBRESSL_RECENT_VERSIONS = [
+    "2.5.5",
+    "2.6.4",
+    "2.7.1",
+]
+
+# store files in ../multissl
+HERE = os.path.abspath(os.getcwd())
+MULTISSL_DIR = os.path.abspath(os.path.join(HERE, '..', 'multissl'))
+
+parser = argparse.ArgumentParser(
+    prog='multissl',
+    description=(
+        "Run CPython tests with multiple OpenSSL and LibreSSL "
+        "versions."
+    )
+)
+parser.add_argument(
+    '--debug',
+    action='store_true',
+    help="Enable debug mode",
+)
+parser.add_argument(
+    '--disable-ancient',
+    action='store_true',
+    help="Don't test OpenSSL < 1.0.2 and LibreSSL < 2.5.3.",
+)
+parser.add_argument(
+    '--openssl',
+    nargs='+',
+    default=(),
+    help=(
+        "OpenSSL versions, defaults to '{}' (ancient: '{}') if no "
+        "OpenSSL and LibreSSL versions are given."
+    ).format(OPENSSL_RECENT_VERSIONS, OPENSSL_OLD_VERSIONS)
+)
+parser.add_argument(
+    '--libressl',
+    nargs='+',
+    default=(),
+    help=(
+        "LibreSSL versions, defaults to '{}' (ancient: '{}') if no "
+        "OpenSSL and LibreSSL versions are given."
+    ).format(LIBRESSL_RECENT_VERSIONS, LIBRESSL_OLD_VERSIONS)
+)
+parser.add_argument(
+    '--tests',
+    nargs='*',
+    default=(),
+    help="Python tests to run, defaults to all SSL related tests.",
+)
+parser.add_argument(
+    '--base-directory',
+    default=MULTISSL_DIR,
+    help="Base directory for OpenSSL / LibreSSL sources and builds."
+)
+parser.add_argument(
+    '--no-network',
+    action='store_false',
+    dest='network',
+    help="Disable network tests."
+)
+parser.add_argument(
+    '--compile-only',
+    action='store_true',
+    help="Don't run tests, only compile _ssl.c and _hashopenssl.c."
+)
+
+
+class AbstractBuilder(object):
+    library = None
+    url_template = None
+    src_template = None
+    build_template = None
+
+    module_files = ("Modules/_ssl.c",
+                    "Modules/_hashopenssl.c")
+    module_libs = ("_ssl", "_hashlib")
+
+    def __init__(self, version, compile_args=(),
+                 basedir=MULTISSL_DIR):
+        self.version = version
+        self.compile_args = compile_args
+        # installation directory
+        self.install_dir = os.path.join(
+            os.path.join(basedir, self.library.lower()), version
+        )
+        # source file
+        self.src_dir = os.path.join(basedir, 'src')
+        self.src_file = os.path.join(
+            self.src_dir, self.src_template.format(version))
+        # build directory (removed after install)
+        self.build_dir = os.path.join(
+            self.src_dir, self.build_template.format(version))
+
+    def __str__(self):
+        return "<{0.__class__.__name__} for {0.version}>".format(self)
+
+    def __eq__(self, other):
+        if not isinstance(other, AbstractBuilder):
+            return NotImplemented
+        return (
+            self.library == other.library
+            and self.version == other.version
+        )
+
+    def __hash__(self):
+        return hash((self.library, self.version))
+
+    @property
+    def openssl_cli(self):
+        """openssl CLI binary"""
+        return os.path.join(self.install_dir, "bin", "openssl")
+
+    @property
+    def openssl_version(self):
+        """output of 'bin/openssl version'"""
+        cmd = [self.openssl_cli, "version"]
+        return self._subprocess_output(cmd)
+
+    @property
+    def pyssl_version(self):
+        """Value of ssl.OPENSSL_VERSION"""
+        cmd = [
+            sys.executable,
+            '-c', 'import ssl; print(ssl.OPENSSL_VERSION)'
+        ]
+        return self._subprocess_output(cmd)
+
+    @property
+    def include_dir(self):
+        return os.path.join(self.install_dir, "include")
+
+    @property
+    def lib_dir(self):
+        return os.path.join(self.install_dir, "lib")
+
+    @property
+    def has_openssl(self):
+        return os.path.isfile(self.openssl_cli)
+
+    @property
+    def has_src(self):
+        return os.path.isfile(self.src_file)
+
+    def _subprocess_call(self, cmd, env=None, **kwargs):
+        log.debug("Call '{}'".format(" ".join(cmd)))
+        return subprocess.check_call(cmd, env=env, **kwargs)
+
+    def _subprocess_output(self, cmd, env=None, **kwargs):
+        log.debug("Call '{}'".format(" ".join(cmd)))
+        if env is None:
+            env = os.environ.copy()
+            env["LD_LIBRARY_PATH"] = self.lib_dir
+        out = subprocess.check_output(cmd, env=env, **kwargs)
+        return out.strip().decode("utf-8")
+
+    def _download_src(self):
+        """Download sources"""
+        src_dir = os.path.dirname(self.src_file)
+        if not os.path.isdir(src_dir):
+            os.makedirs(src_dir)
+        url = self.url_template.format(self.version)
+        log.info("Downloading from {}".format(url))
+        req = urlopen(url)
+        # KISS, read all, write all
+        data = req.read()
+        log.info("Storing {}".format(self.src_file))
+        with open(self.src_file, "wb") as f:
+            f.write(data)
+
+    def _unpack_src(self):
+        """Unpack tar.gz bundle"""
+        # cleanup
+        if os.path.isdir(self.build_dir):
+            shutil.rmtree(self.build_dir)
+        os.makedirs(self.build_dir)
+
+        tf = tarfile.open(self.src_file)
+        name = self.build_template.format(self.version)
+        base = name + '/'
+        # force extraction into build dir
+        members = tf.getmembers()
+        for member in list(members):
+            if member.name == name:
+                members.remove(member)
+            elif not member.name.startswith(base):
+                raise ValueError(member.name, base)
+            member.name = member.name[len(base):].lstrip('/')
+        log.info("Unpacking files to {}".format(self.build_dir))
+        tf.extractall(self.build_dir, members)
+
+    def _build_src(self):
+        """Now build openssl"""
+        log.info("Running build in {}".format(self.build_dir))
+        cwd = self.build_dir
+        cmd = ["./config", "shared", "--prefix={}".format(self.install_dir)]
+        cmd.extend(self.compile_args)
+        self._subprocess_call(cmd, cwd=cwd)
+        # Old OpenSSL versions do not support parallel builds.
+        self._subprocess_call(["make", "-j1"], cwd=cwd)
+
+    def _make_install(self, remove=True):
+        self._subprocess_call(["make", "-j1", "install"], cwd=self.build_dir)
+        if remove:
+            shutil.rmtree(self.build_dir)
+
+    def install(self):
+        log.info(self.openssl_cli)
+        if not self.has_openssl:
+            if not self.has_src:
+                self._download_src()
+            else:
+                log.debug("Already has src {}".format(self.src_file))
+            self._unpack_src()
+            self._build_src()
+            self._make_install()
+        else:
+            log.info("Already has installation {}".format(self.install_dir))
+        # validate installation
+        version = self.openssl_version
+        if self.version not in version:
+            raise ValueError(version)
+
+    def recompile_pymods(self):
+        log.warning("Using build from {}".format(self.build_dir))
+        # force a rebuild of all modules that use OpenSSL APIs
+        for fname in self.module_files:
+            os.utime(fname, None)
+        # remove all build artefacts
+        for root, dirs, files in os.walk('build'):
+            for filename in files:
+                if filename.startswith(self.module_libs):
+                    os.unlink(os.path.join(root, filename))
+
+        # overwrite header and library search paths
+        env = os.environ.copy()
+        env["CPPFLAGS"] = "-I{}".format(self.include_dir)
+        env["LDFLAGS"] = "-L{}".format(self.lib_dir)
+        # set rpath
+        env["LD_RUN_PATH"] = self.lib_dir
+
+        log.info("Rebuilding Python modules")
+        cmd = [sys.executable, "setup.py", "build"]
+        self._subprocess_call(cmd, env=env)
+        self.check_imports()
+
+    def check_imports(self):
+        cmd = [sys.executable, "-c", "import _ssl; import _hashlib"]
+        self._subprocess_call(cmd)
+
+    def check_pyssl(self):
+        version = self.pyssl_version
+        if self.version not in version:
+            raise ValueError(version)
+
+    def run_python_tests(self, tests, network=True):
+        if not tests:
+            cmd = [sys.executable, 'Lib/test/ssltests.py', '-j0']
+        elif sys.version_info < (3, 3):
+            cmd = [sys.executable, '-m', 'test.regrtest']
+        else:
+            cmd = [sys.executable, '-m', 'test', '-j0']
+        if network:
+            cmd.extend(['-u', 'network', '-u', 'urlfetch'])
+        cmd.extend(['-w', '-r'])
+        cmd.extend(tests)
+        self._subprocess_call(cmd, stdout=None)
+
+
+class BuildOpenSSL(AbstractBuilder):
+    library = "OpenSSL"
+    url_template = "https://www.openssl.org/source/openssl-{}.tar.gz"
+    src_template = "openssl-{}.tar.gz"
+    build_template = "openssl-{}"
+
+
+class BuildLibreSSL(AbstractBuilder):
+    library = "LibreSSL"
+    url_template = (
+        "https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-{}.tar.gz")
+    src_template = "libressl-{}.tar.gz"
+    build_template = "libressl-{}"
+
+
+def configure_make():
+    if not os.path.isfile('Makefile'):
+        log.info('Running ./configure')
+        subprocess.check_call([
+            './configure', '--config-cache', '--quiet',
+            '--with-pydebug'
+        ])
+
+    log.info('Running make')
+    subprocess.check_call(['make', '--quiet'])
+
+
+def main():
+    args = parser.parse_args()
+    if not args.openssl and not args.libressl:
+        args.openssl = list(OPENSSL_RECENT_VERSIONS)
+        args.libressl = list(LIBRESSL_RECENT_VERSIONS)
+        if not args.disable_ancient:
+            args.openssl.extend(OPENSSL_OLD_VERSIONS)
+            args.libressl.extend(LIBRESSL_OLD_VERSIONS)
+
+    logging.basicConfig(
+        level=logging.DEBUG if args.debug else logging.INFO,
+        format="*** %(levelname)s %(message)s"
+    )
+
+    start = datetime.now()
+
+    for name in ['python', 'setup.py', 'Modules/_ssl.c']:
+        if not os.path.isfile(name):
+            parser.error(
+                "Must be executed from CPython build dir"
+            )
+    if not os.path.samefile('python', sys.executable):
+        parser.error(
+            "Must be executed with ./python from CPython build dir"
+        )
+
+    # check for configure and run make
+    configure_make()
+
+    # download and register builder
+    builds = []
+
+    for version in args.openssl:
+        build = BuildOpenSSL(version)
+        build.install()
+        builds.append(build)
+
+    for version in args.libressl:
+        build = BuildLibreSSL(version)
+        build.install()
+        builds.append(build)
+
+    for build in builds:
+        try:
+            build.recompile_pymods()
+            build.check_pyssl()
+            if not args.compile_only:
+                build.run_python_tests(
+                    tests=args.tests,
+                    network=args.network,
+                )
+        except Exception as e:
+            log.exception("%s failed", build)
+            print("{} failed: {}".format(build, e), file=sys.stderr)
+            sys.exit(2)
+
+    print("\n{} finished in {}".format(
+        "Tests" if not args.compile_only else "Builds",
+        datetime.now() - start
+    ))
+    print('Python: ', sys.version)
+    if args.compile_only:
+        print('Build only')
+    elif args.tests:
+        print('Executed Tests:', ' '.join(args.tests))
+    else:
+        print('Executed all SSL tests.')
+
+    print('OpenSSL / LibreSSL versions:')
+    for build in builds:
+        print("    * {0.library} {0.version}".format(build))
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Tools/ssl/test_multiple_versions.py b/Tools/ssl/test_multiple_versions.py
deleted file mode 100644
index fc7a967..0000000
--- a/Tools/ssl/test_multiple_versions.py
+++ /dev/null
@@ -1,241 +0,0 @@
-#./python
-"""Run Python tests with multiple installations of OpenSSL
-
-The script
-
-  (1) downloads OpenSSL tar bundle
-  (2) extracts it to ../openssl/src/openssl-VERSION/
-  (3) compiles OpenSSL
-  (4) installs OpenSSL into ../openssl/VERSION/
-  (5) forces a recompilation of Python modules using the
-      header and library files from ../openssl/VERSION/
-  (6) runs Python's test suite
-
-The script must be run with Python's build directory as current working
-directory:
-
-    ./python Tools/ssl/test_multiple_versions.py
-
-The script uses LD_RUN_PATH, LD_LIBRARY_PATH, CPPFLAGS and LDFLAGS to bend
-search paths for header files and shared libraries. It's known to work on
-Linux with GCC 4.x.
-
-(c) 2013 Christian Heimes <christian@python.org>
-"""
-import logging
-import os
-import tarfile
-import shutil
-import subprocess
-import sys
-from urllib import urlopen
-
-log = logging.getLogger("multissl")
-
-OPENSSL_VERSIONS = [
-    "0.9.7m", "0.9.8i", "0.9.8l", "0.9.8m", "0.9.8y", "1.0.0k", "1.0.1e"
-]
-FULL_TESTS = [
-    "test_asyncio", "test_ftplib", "test_hashlib", "test_httplib",
-    "test_imaplib", "test_nntplib", "test_poplib", "test_smtplib",
-    "test_smtpnet", "test_urllib2_localnet", "test_venv"
-]
-MINIMAL_TESTS = ["test_ssl", "test_hashlib"]
-CADEFAULT = True
-HERE = os.path.abspath(os.getcwd())
-DEST_DIR = os.path.abspath(os.path.join(HERE, os.pardir, "openssl"))
-
-
-class BuildSSL(object):
-    url_template = "https://www.openssl.org/source/openssl-{}.tar.gz"
-
-    module_files = ["Modules/_ssl.c",
-                    "Modules/socketmodule.c",
-                    "Modules/_hashopenssl.c"]
-
-    def __init__(self, version, openssl_compile_args=(), destdir=DEST_DIR):
-        self._check_python_builddir()
-        self.version = version
-        self.openssl_compile_args = openssl_compile_args
-        # installation directory
-        self.install_dir = os.path.join(destdir, version)
-        # source file
-        self.src_file = os.path.join(destdir, "src",
-                                     "openssl-{}.tar.gz".format(version))
-        # build directory (removed after install)
-        self.build_dir = os.path.join(destdir, "src",
-                                      "openssl-{}".format(version))
-
-    @property
-    def openssl_cli(self):
-        """openssl CLI binary"""
-        return os.path.join(self.install_dir, "bin", "openssl")
-
-    @property
-    def openssl_version(self):
-        """output of 'bin/openssl version'"""
-        env = os.environ.copy()
-        env["LD_LIBRARY_PATH"] = self.lib_dir
-        cmd = [self.openssl_cli, "version"]
-        return self._subprocess_output(cmd, env=env)
-
-    @property
-    def pyssl_version(self):
-        """Value of ssl.OPENSSL_VERSION"""
-        env = os.environ.copy()
-        env["LD_LIBRARY_PATH"] = self.lib_dir
-        cmd = ["./python", "-c", "import ssl; print(ssl.OPENSSL_VERSION)"]
-        return self._subprocess_output(cmd, env=env)
-
-    @property
-    def include_dir(self):
-        return os.path.join(self.install_dir, "include")
-
-    @property
-    def lib_dir(self):
-        return os.path.join(self.install_dir, "lib")
-
-    @property
-    def has_openssl(self):
-        return os.path.isfile(self.openssl_cli)
-
-    @property
-    def has_src(self):
-        return os.path.isfile(self.src_file)
-
-    def _subprocess_call(self, cmd, stdout=subprocess.DEVNULL, env=None,
-                         **kwargs):
-        log.debug("Call '{}'".format(" ".join(cmd)))
-        return subprocess.check_call(cmd, stdout=stdout, env=env, **kwargs)
-
-    def _subprocess_output(self, cmd, env=None, **kwargs):
-        log.debug("Call '{}'".format(" ".join(cmd)))
-        out = subprocess.check_output(cmd, env=env)
-        return out.strip().decode("utf-8")
-
-    def _check_python_builddir(self):
-        if not os.path.isfile("python") or not os.path.isfile("setup.py"):
-            raise ValueError("Script must be run in Python build directory")
-
-    def _download_openssl(self):
-        """Download OpenSSL source dist"""
-        src_dir = os.path.dirname(self.src_file)
-        if not os.path.isdir(src_dir):
-            os.makedirs(src_dir)
-        url = self.url_template.format(self.version)
-        log.info("Downloading OpenSSL from {}".format(url))
-        req = urlopen(url, cadefault=CADEFAULT)
-        # KISS, read all, write all
-        data = req.read()
-        log.info("Storing {}".format(self.src_file))
-        with open(self.src_file, "wb") as f:
-            f.write(data)
-
-    def _unpack_openssl(self):
-        """Unpack tar.gz bundle"""
-        # cleanup
-        if os.path.isdir(self.build_dir):
-            shutil.rmtree(self.build_dir)
-        os.makedirs(self.build_dir)
-
-        tf = tarfile.open(self.src_file)
-        base = "openssl-{}/".format(self.version)
-        # force extraction into build dir
-        members = tf.getmembers()
-        for member in members:
-            if not member.name.startswith(base):
-                raise ValueError(member.name)
-            member.name = member.name[len(base):]
-        log.info("Unpacking files to {}".format(self.build_dir))
-        tf.extractall(self.build_dir, members)
-
-    def _build_openssl(self):
-        """Now build openssl"""
-        log.info("Running build in {}".format(self.install_dir))
-        cwd = self.build_dir
-        cmd = ["./config", "shared", "--prefix={}".format(self.install_dir)]
-        cmd.extend(self.openssl_compile_args)
-        self._subprocess_call(cmd, cwd=cwd)
-        self._subprocess_call(["make"], cwd=cwd)
-
-    def _install_openssl(self, remove=True):
-        self._subprocess_call(["make", "install"], cwd=self.build_dir)
-        if remove:
-            shutil.rmtree(self.build_dir)
-
-    def install_openssl(self):
-        if not self.has_openssl:
-            if not self.has_src:
-                self._download_openssl()
-            else:
-                log.debug("Already has src {}".format(self.src_file))
-            self._unpack_openssl()
-            self._build_openssl()
-            self._install_openssl()
-        else:
-            log.info("Already has installation {}".format(self.install_dir))
-        # validate installation
-        version = self.openssl_version
-        if self.version not in version:
-            raise ValueError(version)
-
-    def touch_pymods(self):
-        # force a rebuild of all modules that use OpenSSL APIs
-        for fname in self.module_files:
-            os.utime(fname)
-
-    def recompile_pymods(self):
-        log.info("Using OpenSSL build from {}".format(self.build_dir))
-        # overwrite header and library search paths
-        env = os.environ.copy()
-        env["CPPFLAGS"] = "-I{}".format(self.include_dir)
-        env["LDFLAGS"] = "-L{}".format(self.lib_dir)
-        # set rpath
-        env["LD_RUN_PATH"] = self.lib_dir
-
-        log.info("Rebuilding Python modules")
-        self.touch_pymods()
-        cmd = ["./python", "setup.py", "build"]
-        self._subprocess_call(cmd, env=env)
-
-    def check_pyssl(self):
-        version = self.pyssl_version
-        if self.version not in version:
-            raise ValueError(version)
-
-    def run_pytests(self, *args):
-        cmd = ["./python", "-m", "test"]
-        cmd.extend(args)
-        self._subprocess_call(cmd, stdout=None)
-
-    def run_python_tests(self, *args):
-        self.recompile_pymods()
-        self.check_pyssl()
-        self.run_pytests(*args)
-
-
-def main(*args):
-    builders = []
-    for version in OPENSSL_VERSIONS:
-        if version in ("0.9.8i", "0.9.8l"):
-            openssl_compile_args = ("no-asm",)
-        else:
-            openssl_compile_args = ()
-        builder = BuildSSL(version, openssl_compile_args)
-        builder.install_openssl()
-        builders.append(builder)
-
-    for builder in builders:
-        builder.run_python_tests(*args)
-    # final touch
-    builder.touch_pymods()
-
-
-if __name__ == "__main__":
-    logging.basicConfig(level=logging.INFO,
-                        format="*** %(levelname)s %(message)s")
-    args = sys.argv[1:]
-    if not args:
-        args = ["-unetwork", "-v"]
-        args.extend(FULL_TESTS)
-    main(*args)
diff --git a/Tools/unicode/genwincodecs.bat b/Tools/unicode/genwincodecs.bat
index 6a6a671..2228d89 100644
--- a/Tools/unicode/genwincodecs.bat
+++ b/Tools/unicode/genwincodecs.bat
@@ -1,7 +1,7 @@
-@rem Recreate some python charmap codecs from the Windows function

-@rem MultiByteToWideChar.

-

-@cd /d %~dp0

-@mkdir build

-@rem Arabic DOS code page

-c:\python26\python genwincodec.py 720 > build/cp720.py

+@rem Recreate some python charmap codecs from the Windows function
+@rem MultiByteToWideChar.
+
+@cd /d %~dp0
+@mkdir build
+@rem Arabic DOS code page
+c:\python26\python genwincodec.py 720 > build/cp720.py
diff --git a/aclocal.m4 b/aclocal.m4
index 2a745e5..5e29449 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.15 -*- Autoconf -*-
+# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
 
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/android_arm/pyconfig/pyconfig.h b/android_arm/pyconfig/pyconfig.h
index 68b2e42..4a3654f 100644
--- a/android_arm/pyconfig/pyconfig.h
+++ b/android_arm/pyconfig/pyconfig.h
@@ -92,6 +92,12 @@
 /* Define if poll() sets errno on invalid file descriptors. */
 /* #undef HAVE_BROKEN_POLL */
 
+/* Define to 1 if you have the <sys/random.h> header file. */
+#define HAVE_SYS_RANDOM_H 1
+
+/* Define to 1 if you have the <sys/sysmacros.h> header file. */
+#define HAVE_SYS_SYSMACROS_H 1
+
 /* Define if the Posix semaphores do not work on your system */
 /* #undef HAVE_BROKEN_POSIX_SEMAPHORES */
 
@@ -468,7 +474,7 @@
 #define HAVE_MEMORY_H 1
 
 /* Define to 1 if you have the `mkfifo' function. */
-/* #undef HAVE_MKFIFO */
+#define HAVE_MKFIFO  1
 
 /* Define to 1 if you have the `mknod' function. */
 #define HAVE_MKNOD 1
diff --git a/android_arm64/pyconfig/pyconfig.h b/android_arm64/pyconfig/pyconfig.h
index b7659cc..49a4500 100644
--- a/android_arm64/pyconfig/pyconfig.h
+++ b/android_arm64/pyconfig/pyconfig.h
@@ -92,6 +92,12 @@
 /* Define if poll() sets errno on invalid file descriptors. */
 /* #undef HAVE_BROKEN_POLL */
 
+/* Define to 1 if you have the <sys/random.h> header file. */
+#define HAVE_SYS_RANDOM_H 1
+
+/* Define to 1 if you have the <sys/sysmacros.h> header file. */
+#define HAVE_SYS_SYSMACROS_H 1
+
 /* Define if the Posix semaphores do not work on your system */
 /* #undef HAVE_BROKEN_POSIX_SEMAPHORES */
 
@@ -468,7 +474,7 @@
 #define HAVE_MEMORY_H 1
 
 /* Define to 1 if you have the `mkfifo' function. */
-/* #undef HAVE_MKFIFO */
+#define HAVE_MKFIFO 1
 
 /* Define to 1 if you have the `mknod' function. */
 #define HAVE_MKNOD 1
diff --git a/android_x86/pyconfig/pyconfig.h b/android_x86/pyconfig/pyconfig.h
index ac22474..1efa854 100644
--- a/android_x86/pyconfig/pyconfig.h
+++ b/android_x86/pyconfig/pyconfig.h
@@ -35,7 +35,7 @@
 /* #undef DOUBLE_IS_LITTLE_ENDIAN_IEEE754 */
 
 /* Define if --enable-ipv6 is specified */
-/* #undef ENABLE_IPV6 */
+#define ENABLE_IPV6
 
 /* Define if flock needs to be linked with bsd library. */
 /* #undef FLOCK_NEEDS_LIBBSD */
@@ -92,6 +92,12 @@
 /* Define if poll() sets errno on invalid file descriptors. */
 /* #undef HAVE_BROKEN_POLL */
 
+/* Define to 1 if you have the <sys/random.h> header file. */
+#define HAVE_SYS_RANDOM_H 1
+
+/* Define to 1 if you have the <sys/sysmacros.h> header file. */
+#define HAVE_SYS_SYSMACROS_H 1
+
 /* Define if the Posix semaphores do not work on your system */
 /* #undef HAVE_BROKEN_POSIX_SEMAPHORES */
 
@@ -273,7 +279,7 @@
 /* #define HAVE_GCC_ASM_FOR_X87 1 */
 
 /* Define if you have the getaddrinfo function. */
-/* #undef HAVE_GETADDRINFO */
+#define HAVE_GETADDRINFO 1
 
 /* Define to 1 if you have the `getcwd' function. */
 #define HAVE_GETCWD 1
@@ -468,7 +474,7 @@
 #define HAVE_MEMORY_H 1
 
 /* Define to 1 if you have the `mkfifo' function. */
-/* #undef HAVE_MKFIFO */
+#define HAVE_MKFIFO 1
 
 /* Define to 1 if you have the `mknod' function. */
 #define HAVE_MKNOD 1
diff --git a/android_x86_64/pyconfig/pyconfig.h b/android_x86_64/pyconfig/pyconfig.h
index 9d59200..49a4500 100644
--- a/android_x86_64/pyconfig/pyconfig.h
+++ b/android_x86_64/pyconfig/pyconfig.h
@@ -35,7 +35,7 @@
 /* #undef DOUBLE_IS_LITTLE_ENDIAN_IEEE754 */
 
 /* Define if --enable-ipv6 is specified */
-/* #undef ENABLE_IPV6 */
+#define ENABLE_IPV6
 
 /* Define if flock needs to be linked with bsd library. */
 /* #undef FLOCK_NEEDS_LIBBSD */
@@ -92,6 +92,12 @@
 /* Define if poll() sets errno on invalid file descriptors. */
 /* #undef HAVE_BROKEN_POLL */
 
+/* Define to 1 if you have the <sys/random.h> header file. */
+#define HAVE_SYS_RANDOM_H 1
+
+/* Define to 1 if you have the <sys/sysmacros.h> header file. */
+#define HAVE_SYS_SYSMACROS_H 1
+
 /* Define if the Posix semaphores do not work on your system */
 /* #undef HAVE_BROKEN_POSIX_SEMAPHORES */
 
@@ -273,7 +279,7 @@
 /* #define HAVE_GCC_ASM_FOR_X87 1 */
 
 /* Define if you have the getaddrinfo function. */
-/* #undef HAVE_GETADDRINFO */
+#define HAVE_GETADDRINFO 1
 
 /* Define to 1 if you have the `getcwd' function. */
 #define HAVE_GETCWD 1
@@ -468,7 +474,7 @@
 #define HAVE_MEMORY_H 1
 
 /* Define to 1 if you have the `mkfifo' function. */
-/* #undef HAVE_MKFIFO */
+#define HAVE_MKFIFO 1
 
 /* Define to 1 if you have the `mknod' function. */
 #define HAVE_MKNOD 1
diff --git a/config.guess b/config.guess
index 2e9ad7f..2193702 100755
--- a/config.guess
+++ b/config.guess
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2016 Free Software Foundation, Inc.
+#   Copyright 1992-2017 Free Software Foundation, Inc.
 
-timestamp='2016-10-02'
+timestamp='2017-05-27'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -50,7 +50,7 @@
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2016 Free Software Foundation, Inc.
+Copyright 1992-2017 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -837,10 +837,11 @@
 	UNAME_PROCESSOR=`/usr/bin/uname -p`
 	case ${UNAME_PROCESSOR} in
 	    amd64)
-		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-	    *)
-		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+		UNAME_PROCESSOR=x86_64 ;;
+	    i386)
+		UNAME_PROCESSOR=i586 ;;
 	esac
+	echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit ;;
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
@@ -1303,14 +1304,21 @@
 	if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
 	    if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
 		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		    (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		    grep IS_64BIT_ARCH >/dev/null
+		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		       grep IS_64BIT_ARCH >/dev/null
 		then
 		    case $UNAME_PROCESSOR in
 			i386) UNAME_PROCESSOR=x86_64 ;;
 			powerpc) UNAME_PROCESSOR=powerpc64 ;;
 		    esac
 		fi
+		# On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+		if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		       grep IS_PPC >/dev/null
+		then
+		    UNAME_PROCESSOR=powerpc
+		fi
 	    fi
 	elif test "$UNAME_PROCESSOR" = i386 ; then
 	    # Avoid executing cc on OS X 10.9, as it ships with a stub
@@ -1334,15 +1342,18 @@
     *:QNX:*:4*)
 	echo i386-pc-qnx
 	exit ;;
-    NEO-?:NONSTOP_KERNEL:*:*)
+    NEO-*:NONSTOP_KERNEL:*:*)
 	echo neo-tandem-nsk${UNAME_RELEASE}
 	exit ;;
     NSE-*:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
 	exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
+    NSR-*:NONSTOP_KERNEL:*:*)
 	echo nsr-tandem-nsk${UNAME_RELEASE}
 	exit ;;
+    NSX-*:NONSTOP_KERNEL:*:*)
+	echo nsx-tandem-nsk${UNAME_RELEASE}
+	exit ;;
     *:NonStop-UX:*:*)
 	echo mips-compaq-nonstopux
 	exit ;;
diff --git a/config.sub b/config.sub
index 3478c1f..40ea5df 100755
--- a/config.sub
+++ b/config.sub
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2016 Free Software Foundation, Inc.
+#   Copyright 1992-2017 Free Software Foundation, Inc.
 
-timestamp='2016-11-19'
+timestamp='2017-04-02'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -67,7 +67,7 @@
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2016 Free Software Foundation, Inc.
+Copyright 1992-2017 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -263,7 +263,7 @@
 	| fido | fr30 | frv | ft32 \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 	| hexagon \
-	| i370 | i860 | i960 | ia64 \
+	| i370 | i860 | i960 | ia16 | ia64 \
 	| ip2k | iq2000 \
 	| k1om \
 	| le32 | le64 \
@@ -315,6 +315,7 @@
 	| ubicom32 \
 	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
 	| visium \
+	| wasm32 \
 	| we32k \
 	| x86 | xc16x | xstormy16 | xtensa \
 	| z8k | z80)
@@ -388,7 +389,7 @@
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
 	| hexagon-* \
-	| i*86-* | i860-* | i960-* | ia64-* \
+	| i*86-* | i860-* | i960-* | ia16-* | ia64-* \
 	| ip2k-* | iq2000-* \
 	| k1om-* \
 	| le32-* | le64-* \
@@ -446,6 +447,7 @@
 	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
 	| vax-* \
 	| visium-* \
+	| wasm32-* \
 	| we32k-* \
 	| x86-* | x86_64-* | xc16x-* | xps100-* \
 	| xstormy16-* | xtensa*-* \
@@ -948,6 +950,9 @@
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		;;
+	nsx-tandem)
+		basic_machine=nsx-tandem
+		;;
 	op50n-* | op60c-*)
 		basic_machine=hppa1.1-oki
 		os=-proelf
@@ -1243,6 +1248,9 @@
 		basic_machine=a29k-wrs
 		os=-vxworks
 		;;
+	wasm32)
+		basic_machine=wasm32-unknown
+		;;
 	w65*)
 		basic_machine=w65-wdc
 		os=-none
@@ -1409,7 +1417,7 @@
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
 	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
-	      | -onefs* | -tirtos* | -phoenix* | -fuchsia*)
+	      | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1638,6 +1646,9 @@
 	sparc-* | *-sun)
 		os=-sunos4.1.1
 		;;
+	pru-*)
+		os=-elf
+		;;
 	*-be)
 		os=-beos
 		;;
diff --git a/configure b/configure
index c01dfe0..505f8bb 100755
--- a/configure
+++ b/configure
@@ -683,11 +683,10 @@
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
-HAS_HG
-HGBRANCH
-HGTAG
-HGVERSION
-SVNVERSION
+HAS_GIT
+GITBRANCH
+GITTAG
+GITVERSION
 ARFLAGS
 ac_ct_AR
 AR
@@ -741,8 +740,8 @@
 CONFIG_ARGS
 SOVERSION
 VERSION
-GENERATED_COMMENT
 PYTHON_FOR_BUILD
+PYTHON_FOR_REGEN
 host_os
 host_vendor
 host_cpu
@@ -1470,7 +1469,7 @@
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --enable-universalsdk[=SDKDIR]
-                          Build against Mac OS X 10.4u SDK (ppc/i386)
+                          Build fat binary against Mac OS X SDK
   --enable-framework[=INSTALLDIR]
                           Build (MacOSX|Darwin) framework
   --enable-shared         disable/enable building shared python library
@@ -1490,7 +1489,8 @@
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --with-universal-archs=ARCH
                           select architectures for universal build ("32-bit",
-                          "64-bit", "3-way", "intel" or "all")
+                          "64-bit", "3-way", "intel", "intel-32", "intel-64",
+                          or "all")
   --with-framework-name=FRAMEWORK
                           specify an alternate name of the framework built
                           with --enable-framework
@@ -2915,6 +2915,51 @@
 # 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_REGEN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$PYTHON_FOR_REGEN"; then
+  ac_cv_prog_PYTHON_FOR_REGEN="$PYTHON_FOR_REGEN" # 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_REGEN="$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_REGEN=$ac_cv_prog_PYTHON_FOR_REGEN
+if test -n "$PYTHON_FOR_REGEN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_FOR_REGEN" >&5
+$as_echo "$PYTHON_FOR_REGEN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$PYTHON_FOR_REGEN" && break
+done
+test -n "$PYTHON_FOR_REGEN" || PYTHON_FOR_REGEN="python3"
+
+
+
 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; }
@@ -2933,18 +2978,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
-    # Used to comment out stuff for rebuilding generated files
-    GENERATED_COMMENT='#'
 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'
-    GENERATED_COMMENT=''
 fi
 
 
 
-
 if test "$prefix" != "/"; then
     prefix=`echo "$prefix" | sed -e 's/\/$//g'`
 fi
@@ -3011,10 +3052,16 @@
   enableval=$enable_universalsdk;
 	case $enableval in
 	yes)
-		enableval=/Developer/SDKs/MacOSX10.4u.sdk
-		if test ! -d "${enableval}"
+		# Locate the best usable SDK, see Mac/README.txt for more
+		# information
+		enableval="`/usr/bin/xcodebuild -version -sdk macosx Path 2>/dev/null`"
+		if ! ( echo $enableval | grep -E '\.sdk' 1>/dev/null )
 		then
-			enableval=/
+			enableval=/Developer/SDKs/MacOSX10.4u.sdk
+			if test ! -d "${enableval}"
+			then
+				enableval=/
+			fi
 		fi
 		;;
 	esac
@@ -3053,7 +3100,20 @@
 
 ARCH_RUN_32BIT=""
 
+# For backward compatibility reasons we prefer to select '32-bit' if available,
+# otherwise use 'intel'
 UNIVERSAL_ARCHS="32-bit"
+if test "`uname -s`" = "Darwin"
+then
+	if test -n "${UNIVERSALSDK}"
+	then
+		if test -z "`/usr/bin/file -L "${UNIVERSALSDK}/usr/lib/libSystem.dylib" | grep ppc`"
+		then
+			UNIVERSAL_ARCHS="intel"
+		fi
+	fi
+fi
+
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-universal-archs" >&5
 $as_echo_n "checking for --with-universal-archs... " >&6; }
@@ -3061,24 +3121,18 @@
 # Check whether --with-universal-archs was given.
 if test "${with_universal_archs+set}" = set; then :
   withval=$with_universal_archs;
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5
-$as_echo "$withval" >&6; }
 	UNIVERSAL_ARCHS="$withval"
-        if test "${enable_universalsdk}" ; then
-		:
-	else
-		as_fn_error $? "--with-universal-archs without --enable-universalsdk. See Mac/README" "$LINENO" 5
-	fi
-
-else
-
- 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 32-bit" >&5
-$as_echo "32-bit" >&6; }
 
 fi
 
-
-
+if test -n "${UNIVERSALSDK}"
+then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${UNIVERSAL_ARCHS}" >&5
+$as_echo "${UNIVERSAL_ARCHS}" >&6; }
+else
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
 
 # Check whether --with-framework-name was given.
@@ -5701,15 +5755,20 @@
 fi
 
 
-# Extract the first word of "svnversion", so it can be a program name with args.
-set dummy svnversion; ac_word=$2
+
+
+
+if test -e $srcdir/.git
+then
+# Extract the first word of "git", so it can be a program name with args.
+set dummy git; 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_SVNVERSION+:} false; then :
+if ${ac_cv_prog_HAS_GIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$SVNVERSION"; then
-  ac_cv_prog_SVNVERSION="$SVNVERSION" # Let the user override the test.
+  if test -n "$HAS_GIT"; then
+  ac_cv_prog_HAS_GIT="$HAS_GIT" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -5718,7 +5777,7 @@
   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_SVNVERSION="found"
+    ac_cv_prog_HAS_GIT="found"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5726,76 +5785,31 @@
   done
 IFS=$as_save_IFS
 
-  test -z "$ac_cv_prog_SVNVERSION" && ac_cv_prog_SVNVERSION="not-found"
+  test -z "$ac_cv_prog_HAS_GIT" && ac_cv_prog_HAS_GIT="not-found"
 fi
 fi
-SVNVERSION=$ac_cv_prog_SVNVERSION
-if test -n "$SVNVERSION"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SVNVERSION" >&5
-$as_echo "$SVNVERSION" >&6; }
+HAS_GIT=$ac_cv_prog_HAS_GIT
+if test -n "$HAS_GIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAS_GIT" >&5
+$as_echo "$HAS_GIT" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-if test $SVNVERSION = found
+else
+HAS_GIT=no-repository
+fi
+if test $HAS_GIT = found
 then
-	SVNVERSION="svnversion \$(srcdir)"
+    GITVERSION="git --git-dir \$(srcdir)/.git rev-parse --short HEAD"
+    GITTAG="git --git-dir \$(srcdir)/.git describe --all --always --dirty"
+    GITBRANCH="git --git-dir \$(srcdir)/.git name-rev --name-only HEAD"
 else
-	SVNVERSION="echo Unversioned directory"
-fi
-
-
-
-
-# Extract the first word of "hg", so it can be a program name with args.
-set dummy hg; 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_HAS_HG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$HAS_HG"; then
-  ac_cv_prog_HAS_HG="$HAS_HG" # 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_HAS_HG="found"
-    $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
-
-  test -z "$ac_cv_prog_HAS_HG" && ac_cv_prog_HAS_HG="not-found"
-fi
-fi
-HAS_HG=$ac_cv_prog_HAS_HG
-if test -n "$HAS_HG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAS_HG" >&5
-$as_echo "$HAS_HG" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-if test $HAS_HG = found
-then
-    HGVERSION="hg id -i \$(srcdir)"
-    HGTAG="hg id -t \$(srcdir)"
-    HGBRANCH="hg id -b \$(srcdir)"
-else
-    HGVERSION=""
-    HGTAG=""
-    HGBRANCH=""
+    GITVERSION=""
+    GITTAG=""
+    GITBRANCH=""
 fi
 
 case $MACHDEP in
@@ -6096,119 +6110,137 @@
 	SCO_SV*)
 	    BASECFLAGS="$BASECFLAGS -m486 -DSCO5"
 	    ;;
-	# is there any other compiler on Darwin besides gcc?
-	Darwin*)
-	    # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd
-	    # used to be here, but non-Apple gcc doesn't accept them.
-	    if test "${CC}" = gcc
-	    then
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which compiler should be used" >&5
+    # is there any other compiler on Darwin besides gcc?
+    Darwin*)
+        # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd
+        # used to be here, but non-Apple gcc doesn't accept them.
+        if test "${CC}" = gcc
+        then
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking which compiler should be used" >&5
 $as_echo_n "checking which compiler should be used... " >&6; }
-		case "${UNIVERSALSDK}" in
-		*/MacOSX10.4u.sdk)
-			# Build using 10.4 SDK, force usage of gcc when the
-			# compiler is gcc, otherwise the user will get very
-			# confusing error messages when building on OSX 10.6
-			CC=gcc-4.0
-			CPP=cpp-4.0
-			;;
-		esac
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+            case "${UNIVERSALSDK}" in
+            */MacOSX10.4u.sdk)
+                # Build using 10.4 SDK, force usage of gcc when the
+                # compiler is gcc, otherwise the user will get very
+                # confusing error messages when building on OSX 10.6
+                CC=gcc-4.0
+                CPP=cpp-4.0
+                ;;
+            esac
+            { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
 $as_echo "$CC" >&6; }
-	    fi
+        fi
 
-	    # Calculate the right deployment target for this build.
-	    #
-		cur_target_major=`sw_vers -productVersion | \
-				sed 's/\([0-9]*\)\.\([0-9]*\).*/\1/'`
-		cur_target_minor=`sw_vers -productVersion | \
-				sed 's/\([0-9]*\)\.\([0-9]*\).*/\2/'`
-		cur_target="${cur_target_major}.${cur_target_minor}"
-		if test ${cur_target_major} -eq 10 && \
-		   test ${cur_target_minor} -ge 3
-		then
-		    cur_target=10.3
-		    if test ${enable_universalsdk}; then
-			    if test "${UNIVERSAL_ARCHS}" = "all"; then
-				    # Ensure that the default platform for a
-				    # 4-way universal build is OSX 10.5,
-				    # that's the first OS release where
-				    # 4-way builds make sense.
-				    cur_target='10.5'
+        if test "${enable_universalsdk}"
+        then
+            case "$UNIVERSAL_ARCHS" in
+            32-bit)
+               UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT=""
+               ;;
+            64-bit)
+               UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT=""
+               ;;
+            all)
+               UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64"
+               LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
+               ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
+               ;;
+            intel)
+               UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
+               LIPO_32BIT_FLAGS="-extract i386"
+               ARCH_RUN_32BIT="/usr/bin/arch -i386"
+               ;;
+            intel-32)
+               UNIVERSAL_ARCH_FLAGS="-arch i386"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT=""
+               ;;
+            intel-64)
+               UNIVERSAL_ARCH_FLAGS="-arch x86_64"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT=""
+               ;;
+            3-way)
+               UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64"
+               LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
+               ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
+               ;;
+            *)
+               as_fn_error $? "proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way" "$LINENO" 5
+               ;;
+            esac
 
-			    elif test "${UNIVERSAL_ARCHS}" = "3-way"; then
-				    cur_target='10.5'
+            if test "${UNIVERSALSDK}" != "/"
+            then
+                CFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${CFLAGS}"
+                LDFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${LDFLAGS}"
+                CPPFLAGS="-isysroot ${UNIVERSALSDK} ${CPPFLAGS}"
+            else
+                CFLAGS="${UNIVERSAL_ARCH_FLAGS} ${CFLAGS}"
+                LDFLAGS="${UNIVERSAL_ARCH_FLAGS} ${LDFLAGS}"
+            fi
+        fi
 
-			    elif test "${UNIVERSAL_ARCHS}" = "intel"; then
-				    cur_target='10.5'
+        # Calculate an appropriate deployment target for this build:
+        # The deployment target value is used explicitly to enable certain
+        # features are enabled (such as builtin libedit support for readline)
+        # through the use of Apple's Availability Macros and is used as a
+        # component of the string returned by distutils.get_platform().
+        #
+        # Use the value from:
+        # 1. the MACOSX_DEPLOYMENT_TARGET environment variable if specified
+        # 2. the operating system version of the build machine if >= 10.6
+        # 3. If running on OS X 10.3 through 10.5, use the legacy tests
+        #       below to pick either 10.3, 10.4, or 10.5 as the target.
+        # 4. If we are running on OS X 10.2 or earlier, good luck!
 
-			    elif test "${UNIVERSAL_ARCHS}" = "64-bit"; then
-				    cur_target='10.5'
-			    fi
-		    else
-			    if test `/usr/bin/arch` = "i386"; then
-				    # On Intel macs default to a deployment
-				    # target of 10.4, that's the first OSX
-				    # release with Intel support.
-				    cur_target="10.4"
-			    fi
-		    fi
-	    fi
-	    CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}}
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking which MACOSX_DEPLOYMENT_TARGET to use" >&5
+$as_echo_n "checking which MACOSX_DEPLOYMENT_TARGET to use... " >&6; }
+        cur_target_major=`sw_vers -productVersion | \
+                sed 's/\([0-9]*\)\.\([0-9]*\).*/\1/'`
+        cur_target_minor=`sw_vers -productVersion | \
+                sed 's/\([0-9]*\)\.\([0-9]*\).*/\2/'`
+        cur_target="${cur_target_major}.${cur_target_minor}"
+        if test ${cur_target_major} -eq 10 && \
+           test ${cur_target_minor} -ge 3 && \
+           test ${cur_target_minor} -le 5
+        then
+            # OS X 10.3 through 10.5
+            cur_target=10.3
+            if test ${enable_universalsdk}
+            then
+                case "$UNIVERSAL_ARCHS" in
+                all|3-way|intel|64-bit)
+                    # These configurations were first supported in 10.5
+                    cur_target='10.5'
+                    ;;
+                esac
+            else
+                if test `/usr/bin/arch` = "i386"
+                then
+                    # 10.4 was the first release to support Intel archs
+                    cur_target="10.4"
+                fi
+            fi
+        fi
+        CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}}
 
-	    # Make sure that MACOSX_DEPLOYMENT_TARGET is set in the
-	    # environment with a value that is the same as what we'll use
-	    # in the Makefile to ensure that we'll get the same compiler
-	    # environment during configure and build time.
-	    MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET"
-	    export MACOSX_DEPLOYMENT_TARGET
-	    EXPORT_MACOSX_DEPLOYMENT_TARGET=''
+        # Make sure that MACOSX_DEPLOYMENT_TARGET is set in the
+        # environment with a value that is the same as what we'll use
+        # in the Makefile to ensure that we'll get the same compiler
+        # environment during configure and build time.
+        MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET"
+        export MACOSX_DEPLOYMENT_TARGET
+        EXPORT_MACOSX_DEPLOYMENT_TARGET=''
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MACOSX_DEPLOYMENT_TARGET" >&5
+$as_echo "$MACOSX_DEPLOYMENT_TARGET" >&6; }
 
-	    if test "${enable_universalsdk}"; then
-		UNIVERSAL_ARCH_FLAGS=""
-	        if test "$UNIVERSAL_ARCHS" = "32-bit" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386"
-		   ARCH_RUN_32BIT=""
-		   LIPO_32BIT_FLAGS=""
-
-	         elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64"
-		   LIPO_32BIT_FLAGS=""
-		   ARCH_RUN_32BIT="true"
-
-	         elif test "$UNIVERSAL_ARCHS" = "all" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64"
-		   LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
-		   ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
-
-	         elif test "$UNIVERSAL_ARCHS" = "intel" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
-		   LIPO_32BIT_FLAGS="-extract i386"
-		   ARCH_RUN_32BIT="/usr/bin/arch -i386"
-
-	         elif test "$UNIVERSAL_ARCHS" = "3-way" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64"
-		   LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
-		   ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
-
-		 else
-	           as_fn_error $? "proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way" "$LINENO" 5
-
-		 fi
-
-
-		CFLAGS="${UNIVERSAL_ARCH_FLAGS} ${CFLAGS}"
-		if test "${UNIVERSALSDK}" != "/"
-		then
-			CPPFLAGS="-isysroot ${UNIVERSALSDK} ${CPPFLAGS}"
-			LDFLAGS="-isysroot ${UNIVERSALSDK} ${LDFLAGS}"
-			CFLAGS="-isysroot ${UNIVERSALSDK} ${CFLAGS}"
-		fi
-
-	    fi
-
-
-	    ;;
+        # end of Darwin* tests
+        ;;
 	OSF*)
 	    BASECFLAGS="$BASECFLAGS -mieee"
 	    ;;
@@ -6391,7 +6423,7 @@
 # Check whether --enable-optimizations was given.
 if test "${enable_optimizations+set}" = set; then :
   enableval=$enable_optimizations;
-if test "$withval" != no
+if test "$enableval" != no
 then
   Py_OPT='true'
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -6411,7 +6443,6 @@
   # compile working code using it and both test_distutils and test_gdb are
   # broken when you do managed to get a toolchain that works with it.  People
   # who want LTO need to use --with-lto themselves.
-  Py_LTO='true'
   DEF_MAKE_ALL_RULE="profile-opt"
   REQUIRE_PGO="yes"
   DEF_MAKE_RULE="build_all"
@@ -6462,6 +6493,13 @@
       esac
       ;;
   esac
+
+  if test "$ac_cv_prog_cc_g" = "yes"
+  then
+      # bpo-30345: Add -g to LDFLAGS when compiling with LTO
+      # to get debug symbols.
+      LTOFLAGS="$LTOFLAGS -g"
+  fi
 fi
 
 
@@ -7047,18 +7085,18 @@
 
 fi
 
-for ac_header in asm/types.h conio.h direct.h dlfcn.h errno.h \
+for ac_header in asm/types.h crypt.h conio.h direct.h dlfcn.h errno.h \
 fcntl.h grp.h \
 ieeefp.h io.h langinfo.h libintl.h poll.h process.h pthread.h \
 shadow.h signal.h stdint.h stropts.h termios.h thread.h \
 unistd.h utime.h \
 sys/audioio.h sys/bsdtty.h sys/epoll.h sys/event.h sys/file.h sys/loadavg.h \
 sys/lock.h sys/mkdev.h sys/modem.h \
-sys/param.h sys/poll.h sys/select.h sys/socket.h sys/statvfs.h sys/stat.h \
+sys/param.h sys/poll.h sys/random.h sys/select.h sys/socket.h sys/statvfs.h sys/stat.h \
 sys/termio.h sys/time.h \
 sys/times.h sys/types.h sys/un.h sys/utsname.h sys/wait.h pty.h libutil.h \
 sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \
-bluetooth/bluetooth.h linux/tipc.h spawn.h util.h alloca.h
+bluetooth/bluetooth.h linux/tipc.h spawn.h util.h alloca.h sys/sysmacros.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -8453,7 +8491,6 @@
     		;;
     	esac
 
-	#ARCH_RUN_32BIT="true"
     fi
 
     LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only ${MACOSX_DEFAULT_ARCH}"
@@ -8630,9 +8667,6 @@
 			fi
 		else
 			# building for OS X 10.3 and later
-			if test "${enable_universalsdk}"; then
-				LDFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${LDFLAGS}"
-			fi
 			LDSHARED='$(CC) -bundle -undefined dynamic_lookup'
 			LDCXXSHARED='$(CXX) -bundle -undefined dynamic_lookup'
 			BLDSHARED="$LDSHARED"
@@ -10571,7 +10605,7 @@
  gai_strerror getgroups getlogin getloadavg getpeername getpgid getpid \
  getentropy \
  getpriority getresuid getresgid getpwent getspnam getspent getsid getwd \
- initgroups kill killpg lchmod lchown lstat mkfifo mknod mktime mmap \
+ initgroups kill killpg lchown lstat mkfifo mknod mktime mmap \
  mremap nice pathconf pause plock poll pthread_init \
  putenv readlink realpath \
  select sem_open sem_timedwait sem_getvalue sem_unlink setegid seteuid \
@@ -10594,6 +10628,17 @@
 done
 
 
+# Force lchmod off for Linux. Linux disallows changing the mode of symbolic
+# links. Some libc implementations have a stub lchmod implementation that always
+# returns an error.
+if test "$MACHDEP" != linux; then
+  ac_fn_c_check_func "$LINENO" "lchmod" "ac_cv_func_lchmod"
+if test "x$ac_cv_func_lchmod" = xyes; then :
+
+fi
+
+fi
+
 # For some functions, having a definition is not sufficient, since
 # we want to take their address.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for chroot" >&5
@@ -14651,6 +14696,10 @@
 
 fi
 
+# Issue #25720: ncurses has introduced the NCURSES_OPAQUE symbol making opaque
+# structs since version 5.7.  If the macro is defined as zero before including
+# [n]curses.h, ncurses will expose fields of the structs regardless of the
+# configuration.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether WINDOW has _flags" >&5
 $as_echo_n "checking whether WINDOW has _flags... " >&6; }
 if ${ac_cv_window_has_flags+:} false; then :
@@ -14658,7 +14707,10 @@
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <curses.h>
+
+  #define NCURSES_OPAQUE 0
+  #include <curses.h>
+
 int
 main ()
 {
@@ -14689,6 +14741,36 @@
 
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_pad" >&5
+$as_echo_n "checking for is_pad... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <curses.h>
+int
+main ()
+{
+
+#ifndef is_pad
+void *x=is_pad
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_CURSES_IS_PAD 1" >>confdefs.h
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_term_resized" >&5
 $as_echo_n "checking for is_term_resized... " >&6; }
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14766,6 +14848,216 @@
 
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for immedok" >&5
+$as_echo_n "checking for immedok... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <curses.h>
+int
+main ()
+{
+
+#ifndef immedok
+void *x=immedok
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_CURSES_IMMEDOK 1" >>confdefs.h
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for syncok" >&5
+$as_echo_n "checking for syncok... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <curses.h>
+int
+main ()
+{
+
+#ifndef syncok
+void *x=syncok
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_CURSES_SYNCOK 1" >>confdefs.h
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchgat" >&5
+$as_echo_n "checking for wchgat... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <curses.h>
+int
+main ()
+{
+
+#ifndef wchgat
+void *x=wchgat
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_CURSES_WCHGAT 1" >>confdefs.h
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for filter" >&5
+$as_echo_n "checking for filter... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <curses.h>
+int
+main ()
+{
+
+#ifndef filter
+void *x=filter
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_CURSES_FILTER 1" >>confdefs.h
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for has_key" >&5
+$as_echo_n "checking for has_key... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <curses.h>
+int
+main ()
+{
+
+#ifndef has_key
+void *x=has_key
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_CURSES_HAS_KEY 1" >>confdefs.h
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for typeahead" >&5
+$as_echo_n "checking for typeahead... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <curses.h>
+int
+main ()
+{
+
+#ifndef typeahead
+void *x=typeahead
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_CURSES_TYPEAHEAD 1" >>confdefs.h
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for use_env" >&5
+$as_echo_n "checking for use_env... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <curses.h>
+int
+main ()
+{
+
+#ifndef use_env
+void *x=use_env
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_CURSES_USE_ENV 1" >>confdefs.h
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 # last curses configure check
 CPPFLAGS=$ac_save_cppflags
 
@@ -15040,7 +15332,7 @@
 done
 
 
-SRCDIRS="Parser Grammar Objects Python Modules Mac"
+SRCDIRS="Parser Objects Python Modules"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for build directories" >&5
 $as_echo_n "checking for build directories... " >&6; }
 for dir in $SRCDIRS; do
diff --git a/configure.ac b/configure.ac
index 1273465..3387096 100644
--- a/configure.ac
+++ b/configure.ac
@@ -19,6 +19,9 @@
 # pybuilddir.txt will be created by --generate-posix-vars in the Makefile
 rm -f pybuilddir.txt
 
+AC_CHECK_PROGS(PYTHON_FOR_REGEN, python$PACKAGE_VERSION python3 python, python3)
+AC_SUBST(PYTHON_FOR_REGEN)
+
 if test "$cross_compiling" = yes; then
     AC_MSG_CHECKING([for python interpreter for cross build])
     if test -z "$PYTHON_FOR_BUILD"; then
@@ -35,16 +38,12 @@
         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
-    # Used to comment out stuff for rebuilding generated files
-    GENERATED_COMMENT='#'
 elif test "$cross_compiling" = maybe; then
     AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH])
 else
     PYTHON_FOR_BUILD='./$(BUILDPYTHON) -E'
-    GENERATED_COMMENT=''
 fi
 AC_SUBST(PYTHON_FOR_BUILD)
-AC_SUBST(GENERATED_COMMENT)
 
 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
@@ -114,14 +113,20 @@
 
 AC_MSG_CHECKING([for --enable-universalsdk])
 AC_ARG_ENABLE(universalsdk,
-	AS_HELP_STRING([--enable-universalsdk@<:@=SDKDIR@:>@], [Build against Mac OS X 10.4u SDK (ppc/i386)]),
+	AS_HELP_STRING([--enable-universalsdk@<:@=SDKDIR@:>@], [Build fat binary against Mac OS X SDK]),
 [
 	case $enableval in
 	yes)
-		enableval=/Developer/SDKs/MacOSX10.4u.sdk
-		if test ! -d "${enableval}"
+		# Locate the best usable SDK, see Mac/README.txt for more
+		# information
+		enableval="`/usr/bin/xcodebuild -version -sdk macosx Path 2>/dev/null`"
+		if ! ( echo $enableval | grep -E '\.sdk' 1>/dev/null )
 		then
-			enableval=/
+			enableval=/Developer/SDKs/MacOSX10.4u.sdk
+			if test ! -d "${enableval}"
+			then
+				enableval=/
+			fi
 		fi
 		;;
 	esac
@@ -138,7 +143,7 @@
 		fi
 		;;
 	esac
-	
+
 ],[
    	UNIVERSALSDK=
 	enable_universalsdk=
@@ -154,25 +159,34 @@
 AC_SUBST(ARCH_RUN_32BIT)
 ARCH_RUN_32BIT=""
 
+# For backward compatibility reasons we prefer to select '32-bit' if available,
+# otherwise use 'intel'
 UNIVERSAL_ARCHS="32-bit"
+if test "`uname -s`" = "Darwin"
+then
+	if test -n "${UNIVERSALSDK}"
+	then
+		if test -z "`/usr/bin/file -L "${UNIVERSALSDK}/usr/lib/libSystem.dylib" | grep ppc`"
+		then
+			UNIVERSAL_ARCHS="intel"
+		fi
+	fi
+fi
+
 AC_SUBST(LIPO_32BIT_FLAGS)
 AC_MSG_CHECKING(for --with-universal-archs)
 AC_ARG_WITH(universal-archs,
-    AS_HELP_STRING([--with-universal-archs=ARCH], [select architectures for universal build ("32-bit", "64-bit", "3-way", "intel" or "all")]),
+    AS_HELP_STRING([--with-universal-archs=ARCH], [select architectures for universal build ("32-bit", "64-bit", "3-way", "intel", "intel-32", "intel-64", or "all")]),
 [
-	AC_MSG_RESULT($withval)
 	UNIVERSAL_ARCHS="$withval"
-        if test "${enable_universalsdk}" ; then
-		:
-	else
-		AC_MSG_ERROR([--with-universal-archs without --enable-universalsdk. See Mac/README])
-	fi
 ],
-[
- 	AC_MSG_RESULT(32-bit)
-])
-
-
+[])
+if test -n "${UNIVERSALSDK}"
+then
+	AC_MSG_RESULT(${UNIVERSAL_ARCHS})
+else
+	AC_MSG_RESULT(no)
+fi
 
 AC_ARG_WITH(framework-name,
               AS_HELP_STRING([--with-framework-name=FRAMEWORK],
@@ -979,28 +993,25 @@
         ARFLAGS="rc"
 fi
 
-AC_SUBST(SVNVERSION)
-AC_CHECK_PROG(SVNVERSION, svnversion, found, not-found)
-if test $SVNVERSION = found
-then
-	SVNVERSION="svnversion \$(srcdir)"
-else
-	SVNVERSION="echo Unversioned directory"
-fi
+AC_SUBST(GITVERSION)
+AC_SUBST(GITTAG)
+AC_SUBST(GITBRANCH)
 
-AC_SUBST(HGVERSION)
-AC_SUBST(HGTAG)
-AC_SUBST(HGBRANCH)
-AC_CHECK_PROG(HAS_HG, hg, found, not-found)
-if test $HAS_HG = found
+if test -e $srcdir/.git
 then
-    HGVERSION="hg id -i \$(srcdir)"
-    HGTAG="hg id -t \$(srcdir)"
-    HGBRANCH="hg id -b \$(srcdir)"
+AC_CHECK_PROG(HAS_GIT, git, found, not-found)
 else
-    HGVERSION=""
-    HGTAG=""
-    HGBRANCH=""
+HAS_GIT=no-repository
+fi
+if test $HAS_GIT = found
+then
+    GITVERSION="git --git-dir \$(srcdir)/.git rev-parse --short HEAD"
+    GITTAG="git --git-dir \$(srcdir)/.git describe --all --always --dirty"
+    GITBRANCH="git --git-dir \$(srcdir)/.git name-rev --name-only HEAD"
+else
+    GITVERSION=""
+    GITTAG=""
+    GITBRANCH=""
 fi
 
 case $MACHDEP in
@@ -1140,117 +1151,133 @@
 	SCO_SV*)
 	    BASECFLAGS="$BASECFLAGS -m486 -DSCO5"
 	    ;;
-	# is there any other compiler on Darwin besides gcc?
-	Darwin*)
-	    # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd
-	    # used to be here, but non-Apple gcc doesn't accept them.
-	    if test "${CC}" = gcc
-	    then
-		AC_MSG_CHECKING(which compiler should be used)
-		case "${UNIVERSALSDK}" in
-		*/MacOSX10.4u.sdk)
-			# Build using 10.4 SDK, force usage of gcc when the 
-			# compiler is gcc, otherwise the user will get very
-			# confusing error messages when building on OSX 10.6
-			CC=gcc-4.0
-			CPP=cpp-4.0
-			;;
-		esac
-		AC_MSG_RESULT($CC)
-	    fi
+    # is there any other compiler on Darwin besides gcc?
+    Darwin*)
+        # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd
+        # used to be here, but non-Apple gcc doesn't accept them.
+        if test "${CC}" = gcc
+        then
+            AC_MSG_CHECKING(which compiler should be used)
+            case "${UNIVERSALSDK}" in
+            */MacOSX10.4u.sdk)
+                # Build using 10.4 SDK, force usage of gcc when the
+                # compiler is gcc, otherwise the user will get very
+                # confusing error messages when building on OSX 10.6
+                CC=gcc-4.0
+                CPP=cpp-4.0
+                ;;
+            esac
+            AC_MSG_RESULT($CC)
+        fi
 
-	    # Calculate the right deployment target for this build.
-	    #
-		cur_target_major=`sw_vers -productVersion | \
-				sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-		cur_target_minor=`sw_vers -productVersion | \
-				sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-		cur_target="${cur_target_major}.${cur_target_minor}"
-		if test ${cur_target_major} -eq 10 && \
-		   test ${cur_target_minor} -ge 3
-		then
-		    cur_target=10.3
-		    if test ${enable_universalsdk}; then
-			    if test "${UNIVERSAL_ARCHS}" = "all"; then
-				    # Ensure that the default platform for a 
-				    # 4-way universal build is OSX 10.5, 
-				    # that's the first OS release where 
-				    # 4-way builds make sense.
-				    cur_target='10.5'
+        if test "${enable_universalsdk}"
+        then
+            case "$UNIVERSAL_ARCHS" in
+            32-bit)
+               UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT=""
+               ;;
+            64-bit)
+               UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT=""
+               ;;
+            all)
+               UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64"
+               LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
+               ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
+               ;;
+            intel)
+               UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
+               LIPO_32BIT_FLAGS="-extract i386"
+               ARCH_RUN_32BIT="/usr/bin/arch -i386"
+               ;;
+            intel-32)
+               UNIVERSAL_ARCH_FLAGS="-arch i386"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT=""
+               ;;
+            intel-64)
+               UNIVERSAL_ARCH_FLAGS="-arch x86_64"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT=""
+               ;;
+            3-way)
+               UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64"
+               LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
+               ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
+               ;;
+            *)
+               AC_MSG_ERROR([proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way])
+               ;;
+            esac
 
-			    elif test "${UNIVERSAL_ARCHS}" = "3-way"; then
-				    cur_target='10.5'
+            if test "${UNIVERSALSDK}" != "/"
+            then
+                CFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${CFLAGS}"
+                LDFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${LDFLAGS}"
+                CPPFLAGS="-isysroot ${UNIVERSALSDK} ${CPPFLAGS}"
+            else
+                CFLAGS="${UNIVERSAL_ARCH_FLAGS} ${CFLAGS}"
+                LDFLAGS="${UNIVERSAL_ARCH_FLAGS} ${LDFLAGS}"
+            fi
+        fi
 
-			    elif test "${UNIVERSAL_ARCHS}" = "intel"; then
-				    cur_target='10.5'
+        # Calculate an appropriate deployment target for this build:
+        # The deployment target value is used explicitly to enable certain
+        # features are enabled (such as builtin libedit support for readline)
+        # through the use of Apple's Availability Macros and is used as a
+        # component of the string returned by distutils.get_platform().
+        #
+        # Use the value from:
+        # 1. the MACOSX_DEPLOYMENT_TARGET environment variable if specified
+        # 2. the operating system version of the build machine if >= 10.6
+        # 3. If running on OS X 10.3 through 10.5, use the legacy tests
+        #       below to pick either 10.3, 10.4, or 10.5 as the target.
+        # 4. If we are running on OS X 10.2 or earlier, good luck!
 
-			    elif test "${UNIVERSAL_ARCHS}" = "64-bit"; then
-				    cur_target='10.5'
-			    fi
-		    else
-			    if test `/usr/bin/arch` = "i386"; then
-				    # On Intel macs default to a deployment
-				    # target of 10.4, that's the first OSX
-				    # release with Intel support.
-				    cur_target="10.4"
-			    fi
-		    fi
-	    fi
-	    CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}}
-	    
-	    # Make sure that MACOSX_DEPLOYMENT_TARGET is set in the 
-	    # environment with a value that is the same as what we'll use
-	    # in the Makefile to ensure that we'll get the same compiler
-	    # environment during configure and build time.
-	    MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET"
-	    export MACOSX_DEPLOYMENT_TARGET
-	    EXPORT_MACOSX_DEPLOYMENT_TARGET=''
+        AC_MSG_CHECKING(which MACOSX_DEPLOYMENT_TARGET to use)
+        cur_target_major=`sw_vers -productVersion | \
+                sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
+        cur_target_minor=`sw_vers -productVersion | \
+                sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
+        cur_target="${cur_target_major}.${cur_target_minor}"
+        if test ${cur_target_major} -eq 10 && \
+           test ${cur_target_minor} -ge 3 && \
+           test ${cur_target_minor} -le 5
+        then
+            # OS X 10.3 through 10.5
+            cur_target=10.3
+            if test ${enable_universalsdk}
+            then
+                case "$UNIVERSAL_ARCHS" in
+                all|3-way|intel|64-bit)
+                    # These configurations were first supported in 10.5
+                    cur_target='10.5'
+                    ;;
+                esac
+            else
+                if test `/usr/bin/arch` = "i386"
+                then
+                    # 10.4 was the first release to support Intel archs
+                    cur_target="10.4"
+                fi
+            fi
+        fi
+        CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}}
 
-	    if test "${enable_universalsdk}"; then
-		UNIVERSAL_ARCH_FLAGS=""
-	        if test "$UNIVERSAL_ARCHS" = "32-bit" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386"
-		   ARCH_RUN_32BIT=""
-		   LIPO_32BIT_FLAGS=""
+        # Make sure that MACOSX_DEPLOYMENT_TARGET is set in the
+        # environment with a value that is the same as what we'll use
+        # in the Makefile to ensure that we'll get the same compiler
+        # environment during configure and build time.
+        MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET"
+        export MACOSX_DEPLOYMENT_TARGET
+        EXPORT_MACOSX_DEPLOYMENT_TARGET=''
+        AC_MSG_RESULT($MACOSX_DEPLOYMENT_TARGET)
 
-	         elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64"
-		   LIPO_32BIT_FLAGS=""
-		   ARCH_RUN_32BIT="true"
-
-	         elif test "$UNIVERSAL_ARCHS" = "all" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64"
-		   LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
-		   ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
-
-	         elif test "$UNIVERSAL_ARCHS" = "intel" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
-		   LIPO_32BIT_FLAGS="-extract i386"
-		   ARCH_RUN_32BIT="/usr/bin/arch -i386"
-
-	         elif test "$UNIVERSAL_ARCHS" = "3-way" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64"
-		   LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
-		   ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
-
-		 else
-	           AC_MSG_ERROR([proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way])
-
-		 fi
-
-
-		CFLAGS="${UNIVERSAL_ARCH_FLAGS} ${CFLAGS}"
-		if test "${UNIVERSALSDK}" != "/" 
-		then
-			CPPFLAGS="-isysroot ${UNIVERSALSDK} ${CPPFLAGS}"
-			LDFLAGS="-isysroot ${UNIVERSALSDK} ${LDFLAGS}"
-			CFLAGS="-isysroot ${UNIVERSALSDK} ${CFLAGS}"
-		fi
-
-	    fi
-
-
-	    ;;
+        # end of Darwin* tests
+        ;;
 	OSF*)
 	    BASECFLAGS="$BASECFLAGS -mieee"
 	    ;;
@@ -1373,7 +1400,7 @@
 AC_MSG_CHECKING(for --enable-optimizations)
 AC_ARG_ENABLE(optimizations, AS_HELP_STRING([--enable-optimizations], [Enable expensive optimizations (PGO, maybe LTO, etc).  Disabled by default.]),
 [
-if test "$withval" != no
+if test "$enableval" != no
 then
   Py_OPT='true'
   AC_MSG_RESULT(yes);
@@ -1387,7 +1414,6 @@
   # compile working code using it and both test_distutils and test_gdb are
   # broken when you do managed to get a toolchain that works with it.  People
   # who want LTO need to use --with-lto themselves.
-  Py_LTO='true'
   DEF_MAKE_ALL_RULE="profile-opt"
   REQUIRE_PGO="yes"
   DEF_MAKE_RULE="build_all"
@@ -1429,6 +1455,13 @@
       esac
       ;;
   esac
+
+  if test "$ac_cv_prog_cc_g" = "yes"
+  then
+      # bpo-30345: Add -g to LDFLAGS when compiling with LTO
+      # to get debug symbols.
+      LTOFLAGS="$LTOFLAGS -g"
+  fi
 fi
 
 
@@ -1695,18 +1728,18 @@
 
 # checks for header files
 AC_HEADER_STDC
-AC_CHECK_HEADERS(asm/types.h conio.h direct.h dlfcn.h errno.h \
+AC_CHECK_HEADERS(asm/types.h crypt.h conio.h direct.h dlfcn.h errno.h \
 fcntl.h grp.h \
 ieeefp.h io.h langinfo.h libintl.h poll.h process.h pthread.h \
 shadow.h signal.h stdint.h stropts.h termios.h thread.h \
 unistd.h utime.h \
 sys/audioio.h sys/bsdtty.h sys/epoll.h sys/event.h sys/file.h sys/loadavg.h \
 sys/lock.h sys/mkdev.h sys/modem.h \
-sys/param.h sys/poll.h sys/select.h sys/socket.h sys/statvfs.h sys/stat.h \
+sys/param.h sys/poll.h sys/random.h sys/select.h sys/socket.h sys/statvfs.h sys/stat.h \
 sys/termio.h sys/time.h \
 sys/times.h sys/types.h sys/un.h sys/utsname.h sys/wait.h pty.h libutil.h \
 sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \
-bluetooth/bluetooth.h linux/tipc.h spawn.h util.h alloca.h)
+bluetooth/bluetooth.h linux/tipc.h spawn.h util.h alloca.h sys/sysmacros.h)
 AC_HEADER_DIRENT
 AC_HEADER_MAJOR
 
@@ -2038,7 +2071,6 @@
     		;;
     	esac
 
-	#ARCH_RUN_32BIT="true"
     fi
 
     LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only ${MACOSX_DEFAULT_ARCH}"
@@ -2203,9 +2235,6 @@
 			fi
 		else
 			# building for OS X 10.3 and later
-			if test "${enable_universalsdk}"; then
-				LDFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${LDFLAGS}"
-			fi
 			LDSHARED='$(CC) -bundle -undefined dynamic_lookup'
 			LDCXXSHARED='$(CXX) -bundle -undefined dynamic_lookup'
 			BLDSHARED="$LDSHARED"
@@ -3093,7 +3122,7 @@
  gai_strerror getgroups getlogin getloadavg getpeername getpgid getpid \
  getentropy \
  getpriority getresuid getresgid getpwent getspnam getspent getsid getwd \
- initgroups kill killpg lchmod lchown lstat mkfifo mknod mktime mmap \
+ initgroups kill killpg lchown lstat mkfifo mknod mktime mmap \
  mremap nice pathconf pause plock poll pthread_init \
  putenv readlink realpath \
  select sem_open sem_timedwait sem_getvalue sem_unlink setegid seteuid \
@@ -3105,6 +3134,13 @@
  sysconf tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \
  truncate uname unsetenv utimes waitpid wait3 wait4 wcscoll _getpty)
 
+# Force lchmod off for Linux. Linux disallows changing the mode of symbolic
+# links. Some libc implementations have a stub lchmod implementation that always
+# returns an error.
+if test "$MACHDEP" != linux; then
+  AC_CHECK_FUNC(lchmod)
+fi
+
 # For some functions, having a definition is not sufficient, since
 # we want to take their address.
 AC_MSG_CHECKING(for chroot)
@@ -4521,9 +4557,16 @@
   [Define if mvwdelch in curses.h is an expression.])
 fi
 
+# Issue #25720: ncurses has introduced the NCURSES_OPAQUE symbol making opaque
+# structs since version 5.7.  If the macro is defined as zero before including
+# [n]curses.h, ncurses will expose fields of the structs regardless of the
+# configuration.
 AC_MSG_CHECKING(whether WINDOW has _flags)
 AC_CACHE_VAL(ac_cv_window_has_flags,
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <curses.h>]], [[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+  #define NCURSES_OPAQUE 0
+  #include <curses.h>
+]], [[
   WINDOW *w;
   w->_flags = 0;
 ]])],
@@ -4538,6 +4581,17 @@
   [Define if WINDOW in curses.h offers a field _flags.])
 fi
 
+AC_MSG_CHECKING(for is_pad)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <curses.h>]], [[
+#ifndef is_pad
+void *x=is_pad
+#endif
+]])],
+  [AC_DEFINE(HAVE_CURSES_IS_PAD, 1, Define if you have the 'is_pad' function or macro.)
+   AC_MSG_RESULT(yes)],
+  [AC_MSG_RESULT(no)]
+)
+
 AC_MSG_CHECKING(for is_term_resized)
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <curses.h>]], [[void *x=is_term_resized]])],
   [AC_DEFINE(HAVE_CURSES_IS_TERM_RESIZED, 1, Define if you have the 'is_term_resized' function.)
@@ -4558,6 +4612,83 @@
    AC_MSG_RESULT(yes)],
   [AC_MSG_RESULT(no)]
 )
+
+AC_MSG_CHECKING(for immedok)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <curses.h>]], [[
+#ifndef immedok
+void *x=immedok
+#endif
+]])],
+  [AC_DEFINE(HAVE_CURSES_IMMEDOK, 1, Define if you have the 'immedok' function.)
+   AC_MSG_RESULT(yes)],
+  [AC_MSG_RESULT(no)]
+)
+
+AC_MSG_CHECKING(for syncok)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <curses.h>]], [[
+#ifndef syncok
+void *x=syncok
+#endif
+]])],
+  [AC_DEFINE(HAVE_CURSES_SYNCOK, 1, Define if you have the 'syncok' function.)
+   AC_MSG_RESULT(yes)],
+  [AC_MSG_RESULT(no)]
+)
+
+AC_MSG_CHECKING(for wchgat)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <curses.h>]], [[
+#ifndef wchgat
+void *x=wchgat
+#endif
+]])],
+  [AC_DEFINE(HAVE_CURSES_WCHGAT, 1, Define if you have the 'wchgat' function.)
+   AC_MSG_RESULT(yes)],
+  [AC_MSG_RESULT(no)]
+)
+
+AC_MSG_CHECKING(for filter)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <curses.h>]], [[
+#ifndef filter
+void *x=filter
+#endif
+]])],
+  [AC_DEFINE(HAVE_CURSES_FILTER, 1, Define if you have the 'filter' function.)
+   AC_MSG_RESULT(yes)],
+  [AC_MSG_RESULT(no)]
+)
+
+AC_MSG_CHECKING(for has_key)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <curses.h>]], [[
+#ifndef has_key
+void *x=has_key
+#endif
+]])],
+  [AC_DEFINE(HAVE_CURSES_HAS_KEY, 1, Define if you have the 'has_key' function.)
+   AC_MSG_RESULT(yes)],
+  [AC_MSG_RESULT(no)]
+)
+
+AC_MSG_CHECKING(for typeahead)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <curses.h>]], [[
+#ifndef typeahead
+void *x=typeahead
+#endif
+]])],
+  [AC_DEFINE(HAVE_CURSES_TYPEAHEAD, 1, Define if you have the 'typeahead' function.)
+   AC_MSG_RESULT(yes)],
+  [AC_MSG_RESULT(no)]
+)
+
+AC_MSG_CHECKING(for use_env)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <curses.h>]], [[
+#ifndef use_env
+void *x=use_env
+#endif
+]])],
+  [AC_DEFINE(HAVE_CURSES_USE_ENV, 1, Define if you have the 'use_env' function.)
+   AC_MSG_RESULT(yes)],
+  [AC_MSG_RESULT(no)]
+)
 # last curses configure check
 CPPFLAGS=$ac_save_cppflags
 
@@ -4729,7 +4860,7 @@
 done
 
 AC_SUBST(SRCDIRS)
-SRCDIRS="Parser Grammar Objects Python Modules Mac"
+SRCDIRS="Parser Objects Python Modules"
 AC_MSG_CHECKING(for build directories)
 for dir in $SRCDIRS; do
     if test ! -d $dir; then
diff --git a/darwin_x86_64/pyconfig/pyconfig.h b/darwin_x86_64/pyconfig/pyconfig.h
index b8faef8..7f834ce 100644
--- a/darwin_x86_64/pyconfig/pyconfig.h
+++ b/darwin_x86_64/pyconfig/pyconfig.h
@@ -92,6 +92,9 @@
 /* Define if poll() sets errno on invalid file descriptors. */
 /* #undef HAVE_BROKEN_POLL */
 
+/* Define to 1 if you have the <sys/random.h> header file. */
+#define HAVE_SYS_RANDOM_H 1
+
 /* Define if the Posix semaphores do not work on your system */
 /* #undef HAVE_BROKEN_POSIX_SEMAPHORES */
 
diff --git a/linux_x86_64/pyconfig/pyconfig.h b/linux_x86_64/pyconfig/pyconfig.h
index 0b72946..210484d 100644
--- a/linux_x86_64/pyconfig/pyconfig.h
+++ b/linux_x86_64/pyconfig/pyconfig.h
@@ -92,6 +92,9 @@
 /* Define if poll() sets errno on invalid file descriptors. */
 /* #undef HAVE_BROKEN_POLL */
 
+/* Define to 1 if you have the <sys/sysmacros.h> header file. */
+#define HAVE_SYS_SYSMACROS_H 1
+
 /* Define if the Posix semaphores do not work on your system */
 /* #undef HAVE_BROKEN_POSIX_SEMAPHORES */
 
diff --git a/pyconfig.h.in b/pyconfig.h.in
index 062d490..f828677 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -130,15 +130,30 @@
 /* Define to 1 if you have the `copysign' function. */
 #undef HAVE_COPYSIGN
 
+/* Define to 1 if you have the <crypt.h> header file. */
+#undef HAVE_CRYPT_H
+
 /* Define to 1 if you have the `ctermid' function. */
 #undef HAVE_CTERMID
 
 /* Define if you have the 'ctermid_r' function. */
 #undef HAVE_CTERMID_R
 
+/* Define if you have the 'filter' function. */
+#undef HAVE_CURSES_FILTER
+
 /* Define to 1 if you have the <curses.h> header file. */
 #undef HAVE_CURSES_H
 
+/* Define if you have the 'has_key' function. */
+#undef HAVE_CURSES_HAS_KEY
+
+/* Define if you have the 'immedok' function. */
+#undef HAVE_CURSES_IMMEDOK
+
+/* Define if you have the 'is_pad' function or macro. */
+#undef HAVE_CURSES_IS_PAD
+
 /* Define if you have the 'is_term_resized' function. */
 #undef HAVE_CURSES_IS_TERM_RESIZED
 
@@ -148,6 +163,18 @@
 /* Define if you have the 'resize_term' function. */
 #undef HAVE_CURSES_RESIZE_TERM
 
+/* Define if you have the 'syncok' function. */
+#undef HAVE_CURSES_SYNCOK
+
+/* Define if you have the 'typeahead' function. */
+#undef HAVE_CURSES_TYPEAHEAD
+
+/* Define if you have the 'use_env' function. */
+#undef HAVE_CURSES_USE_ENV
+
+/* Define if you have the 'wchgat' function. */
+#undef HAVE_CURSES_WCHGAT
+
 /* Define to 1 if you have the declaration of `isfinite', and to 0 if you
    don't. */
 #undef HAVE_DECL_ISFINITE
@@ -412,9 +439,6 @@
 /* Define to 1 if you have the 'lchflags' function. */
 #undef HAVE_LCHFLAGS
 
-/* Define to 1 if you have the `lchmod' function. */
-#undef HAVE_LCHMOD
-
 /* Define to 1 if you have the `lchown' function. */
 #undef HAVE_LCHOWN
 
@@ -781,6 +805,9 @@
 /* Define to 1 if you have the <sys/poll.h> header file. */
 #undef HAVE_SYS_POLL_H
 
+/* Define to 1 if you have the <sys/random.h> header file. */
+#undef HAVE_SYS_RANDOM_H
+
 /* Define to 1 if you have the <sys/resource.h> header file. */
 #undef HAVE_SYS_RESOURCE_H
 
@@ -796,6 +823,9 @@
 /* Define to 1 if you have the <sys/stat.h> header file. */
 #undef HAVE_SYS_STAT_H
 
+/* Define to 1 if you have the <sys/sysmacros.h> header file. */
+#undef HAVE_SYS_SYSMACROS_H
+
 /* Define to 1 if you have the <sys/termio.h> header file. */
 #undef HAVE_SYS_TERMIO_H
 
diff --git a/setup.py b/setup.py
index 54054c2..33cecc6 100644
--- a/setup.py
+++ b/setup.py
@@ -1346,19 +1346,11 @@
             else:
                 missing.append('resource')
 
-            # Sun yellow pages. Some systems have the functions in libc.
-            if (host_platform not in ['cygwin', 'atheos', 'qnx6'] and
-                find_file('rpcsvc/yp_prot.h', inc_dirs, []) is not None):
-                if (self.compiler.find_library_file(lib_dirs, 'nsl')):
-                    libs = ['nsl']
-                else:
-                    libs = []
-                exts.append( Extension('nis', ['nismodule.c'],
-                                       libraries = libs) )
+            nis = self._detect_nis(inc_dirs, lib_dirs)
+            if nis is not None:
+                exts.append(nis)
             else:
                 missing.append('nis')
-        else:
-            missing.extend(['nis', 'resource', 'termios'])
 
         # Curses support, requiring the System V version of curses, often
         # provided by the ncurses library.
@@ -1492,6 +1484,9 @@
             expat_inc = [os.path.join(os.getcwd(), srcdir, 'Modules', 'expat')]
             define_macros = [
                 ('HAVE_EXPAT_CONFIG_H', '1'),
+                # bpo-30947: Python uses best available entropy sources to
+                # call XML_SetHashSalt(), expat entropy sources are not needed
+                ('XML_POOR_ENTROPY', '1'),
             ]
             expat_lib = []
             expat_sources = ['expat/xmlparse.c',
@@ -2154,6 +2149,55 @@
             ext.libraries.append(ffi_lib)
             self.use_system_libffi = True
 
+        if sysconfig.get_config_var('HAVE_LIBDL'):
+            # for dlopen, see bpo-32647
+            ext.libraries.append('dl')
+
+    def _detect_nis(self, inc_dirs, lib_dirs):
+        if host_platform in {'win32', 'cygwin', 'qnx6'}:
+            return None
+
+        libs = []
+        library_dirs = []
+        includes_dirs = []
+
+        # bpo-32521: glibc has deprecated Sun RPC for some time. Fedora 28
+        # moved headers and libraries to libtirpc and libnsl. The headers
+        # are in tircp and nsl sub directories.
+        rpcsvc_inc = find_file(
+            'rpcsvc/yp_prot.h', inc_dirs,
+            [os.path.join(inc_dir, 'nsl') for inc_dir in inc_dirs]
+        )
+        rpc_inc = find_file(
+            'rpc/rpc.h', inc_dirs,
+            [os.path.join(inc_dir, 'tirpc') for inc_dir in inc_dirs]
+        )
+        if rpcsvc_inc is None or rpc_inc is None:
+            # not found
+            return None
+        includes_dirs.extend(rpcsvc_inc)
+        includes_dirs.extend(rpc_inc)
+
+        if self.compiler.find_library_file(lib_dirs, 'nsl'):
+            libs.append('nsl')
+        else:
+            # libnsl-devel: check for libnsl in nsl/ subdirectory
+            nsl_dirs = [os.path.join(lib_dir, 'nsl') for lib_dir in lib_dirs]
+            libnsl = self.compiler.find_library_file(nsl_dirs, 'nsl')
+            if libnsl is not None:
+                library_dirs.append(os.path.dirname(libnsl))
+                libs.append('nsl')
+
+        if self.compiler.find_library_file(lib_dirs, 'tirpc'):
+            libs.append('tirpc')
+
+        return Extension(
+            'nis', ['nismodule.c'],
+            libraries=libs,
+            library_dirs=library_dirs,
+            include_dirs=includes_dirs
+        )
+
 
 class PyBuildInstall(install):
     # Suppress the warning about installation into the lib_dynload